3章 Rの簡単な使い方

 

ここでは「R」と呼ばれるソフトの使い方を説明します。
詳しい使い方は、本書を読み進める中で少しずつ明らかになっていきますので、まずは気楽に、大雑把な使い方だけを理解してください。

※ まれに文字化けするため、このページのコードをそのままコピペしても動かない時があります。

コードはこちらから確認してください。
3章_Rの簡単な使い方.txt

★重要なお知らせ★
第1部3章「Rの簡単な使い方」において載っていましたCRAN筑波大学ミラーサイトが6月で閉鎖されてしまいました。
Rは統計数理研究所のミラーサイトhttp://cran.ism.ac.jp/からダウンロードしてください。
お手数をおかけして申し訳ありません。

 

3-1 Rとは

Rとは、タダで使える統計解析ソフトです。本書のメインテーマである一般化線形モデルくらいなら、一行のプログラムで計算できます。多くの人が使っているので、ウェブ上にたくさんの情報が落ちています。大変に高機能なので、研究者でも愛用している人は多いです。

Rは残念ながらボタンを押すだけでは動作しなくて、プログラムを自分で書く必要があります。ここはやや面倒くさいうえに、Rを始める際の障壁になると思うので、なるべく楽に計算をすませるコツをお伝えします。

 

3-2 Rのインストール

筑波大学のRのミラーサイトに行きます。
アドレスは「http://cran.md.tsukuba.ac.jp/」です(追記:2015年7月以降は統計数理研究所のミラーサイトhttp://cran.ism.ac.jp/からダウンロードしてください)。
そしてパソコンのOSに合わせて「Download R for ○○」と書かれたリンクを選べばOKです。Windowsの人はいくつか種類がありますが「base」のリンクをクリックしてから「Download R ○○ for Windows」をクリックして最新版のRをダウンロードしてください。
基本的には「次へ」ボタンを押し続けていればインストールが終わります。
なお、人によっては、文字が英語になったり、画面の表示され方が少し本書の例と異なったりすることもありますが、計算結果は変わらないので、あまり気にやまないでください。
デスクトップにRのアイコンがたくさん出てくるときもありますが、どちらを使っても、当面は問題ありません。
ソフトの設定等、詳しい話は置いといて、まずはRを起動してください。

 

3-3 計算の実行方法とF5ボタン

Rを起動すると、下の図のような画面が表示されるはずです。
横文字が続いた後に『R は、自由なソフトウェアであり、「完全に無保証」です。』という無責任な言葉が表示されます。無料のソフトなのでそこは許してあげてください。
この説明書きが表示されている画面のことを「コンソール」と呼びます。
コンソールは、主に結果を出力させるのに使います。

自分で何かを書き込んだりするのは「エディタ」と呼ばれる画面です。
メニューの「ファイル」→「新しいスクリプト」で画面を出すことができます。
それでは、エディタに文字を打ち込んでいきましょう。
……と言いたいところですが、その前に一回キーボードの「F5」キーを押してみてください。
コンソール画面に

>

というカギ括弧が一行増えたことと思います。

F5は、エディタに書かれているRのコマンドを実行するためのボタンです。
エディタに何も書かれていないので、何も実行されません。
「何も実行しない」が実行されたというわけです。

なお、F5を押してもカギ括弧が増えない方はエディタをクリックしてからもう一度「F5」を押してください。そうすればうまくいきます。
ここはとても重要です。
実行されなかったり、メニューが本書に書かれている内容と違ったりしている時は、たいてい「コンソール」と「エディタ」が逆になっています。
エディタを操作して実行(F5)を押したつもりなのに実行されない、といった場合は、エディタをクリックしてから操作しなおしてください。逆にコンソールを操作したい時は、コンソールを一回クリックしてから操作を行います。
大事なことなので、ぜひ覚えてください。

なお、くどいようですが、青字と赤字が表示されているのがコンソールで、(最初は何も書かれていない)白黒の文字を打ち込んでいくのがエディタです。エディタにコードを書いていき、実行結果をコンソールに表示させます。

 

3-4 Rによる簡単な計算

ここからは、エディタに打ち込んでいただくプログラムを一重線の四角で囲み、コンソールに出力される結果を二重線の四角で囲むことにします。
まずは実行のイメージをつかんでいくために、4行ほどコードを書いていただきます。四則計算の例です。
なお、ここは全て半角で入力してください。序盤でエラーが出る原因は、大抵、全角・半角のミスか1(イチ)とl(エル)の打ち間違いです。

1 + 1 

3-4

5 * 2

6 / 3

ここで、最初の行(1+1)にカーソルを合わせてF5を押します。するとコンソールに足し算の結果が表示されたうえで、エディタのカーソルが一つ下に移動します。
よって、マウスなどを使ってカーソル移動をしなくても、F5を4回押すだけで、4行のコードが実行されます。

> 1 + 1 

[1] 2

> 3-4

[1] -1

> 5 * 2

[1] 10

> 6 / 3

[1] 2

コンソールには、赤字が実行されたコード、青字がその結果、と色分けされて表示されます。
足し算、引き算、掛け算、割り算のやり方を覚えてください。掛け算がアスタリスク(⋆)、割り算がスラッシュ(/)を使うということだけ覚えれば問題ないでしょう。

さて、t値を計算するには、四則演算だけでなく、平方根をとることと2乗するという作業も必要になってきます。やってみましょう。以下はコンソールに出力された結果だけを載せます。「 > 」の右側に書かれているコードをエディタに書き込んでF5を押して実行すれば同じ結果が得られます。

> 4 ^ 2 

[1] 16

> sqrt(16)

[1] 4

○乗するには「^」を使います。今回の例は「4の2乗」です。数値を変えて試してみてください。
そして、とても重要なのが二つ目。『sqrt』です。
『sqrt』はsquare rootの略でルート2をとるという意味なのですが、これの使い方に注目してください。
『sqrt』のような使い方をするものを、Rでは「関数」や「ファンクション(function)」と呼びます。
この関数は、
1.関数名の後に括弧を付け
2.その括弧の中に対象となる値(引数)を入れる
という形式で使用します。16の平方根をとるので、括弧の中に16を入れました。簡単ですが、とても重要なルールです。

なお、関数はこういう使い方もできます。

> sqrt(4 ^ 2) 

[1] 4

4の2乗の平方根なので、元に戻って4ですね。
関数という言葉、引数という言葉をぜひ覚えておいてください。
関数の括弧の中に引数を入れると、計算結果が出てきます。

 

3-5 「変数に格納する」という言葉の意味と使い時

t値が計算できそうな雰囲気が醸し出されてきましたが、そのまえに、Rにかぎらずプログラミングにおいてとても重要な「変数」という考えを学んでいただきます。

変数とは、値を格納する入れ物です。
例えば、

x <- 1

とエディタに入力したとしましょう。
すると、1という数値がxと呼ばれる入れ物に格納されます。「<‐」という記号が「格納する」という動作を表します。
なお、xという名前はなんでもよくて、Dataとかsuutiとか、なんでも好きな名前を付けてください。
そして、いったん値を格納してしまえば、自由にそれを使うことができます。

> x <- 1 

> x + 1

[1] 2

1行目でxに1を格納しました。すると、『x + 1』と入力して実行することで1+1の結果であるところの2が返ってきます。

なお、中に入っている値を見たい場合は、変数の名前だけを打ち込んで実行します。

> x 

[1] 1

地味ですが重要なテクニックなので覚えてください。
赤字だけがコンソールに出てきて、計算結果であるところの青字が出てこない、ことはよくあります。そういう時にはぜひ結果を格納した変数名だけを打ち込んで実行してください。結果を目で見ることができるようになります。

この変数に、例えばデータであったり、標準偏差やサンプルサイズであったりを格納してやれば、スマートにt値を計算することができます。

なお、変数に値を格納することを「定義する」と呼ぶこともあります。先ほどの例では「xに1を定義した」ことになります。

定義されていない変数を使うとエラーが出ます。

> a 

エラー:  オブジェクト ‘a’ がありません

aはまだ定義していませんので、定義してやりましょう。

> a <- 2 * 3 

> a + 1

[1] 7

aに2×3の結果(6)を格納すれば、それに1を足した7を計算させることができます。

 

3-6 コメントの使い方

ここからRを少し本格的に使っていくわけですが、そのまえに、補足をしておきます。それはコメントの使い方です。

> # コメントです 

> # 1 + 1

> 1 + 1

[1] 2

コマンドをシャープ(#)から始めるとそのあとのコードは実行されません。なので、2行目の『# 1 + 1』は実行されず、3行目の『1 + 1』だけが実行されます。
長いコードを書く場合は、コメントがないと後で読み返すことができません。
ぜひたくさんコメントを書いてください。
最初のうちはコメントを軽視しがちですが、とても重要なテクニックです。

 

3-7 Rによるt検定

では、Rを用いてt検定を行ってみます。

サンプルデータは2章で説明したものを使います。

$$x_i={-1,-1,0,0,1,3,5,6,7,7}$$

このデータの期待値は2.7なのですが、0以下の値も混じっています。
そこで、「このデータの期待値が0と有意に異なっているか」をt検定します。
t値の計算式は

$$t値=\frac{期待値-0}{標準誤差}$$

なので、
1.データを用意する
2.期待値を計算する
3.標準誤差(標準偏差÷サンプルサイズの平方根)を計算する
の3ステップで計算できそうです。
やってみましょう

1.データを用意する

d <- c(-1, -1, 0, 0, 1, 3, 5, 6, 7, 7)

dという変数にデータを格納します。
データはたくさんの数値があります。それらを一つのデータとして格納する場合には「c()」という関数を使います。カンマ区切りでデータを入れていけばOKです。

2.期待値を計算する

> ((-1) + (-1) + 0 + 0 + 1 + 3 + 5 + 6 + 7 + 7) / 10 

[1] 2.7

期待値は2.7です。
上記のやり方でも計算できるのですが、せっかくデータをdという変数に格納したので、それを使ってみましょう。

> mean(d) 

[1] 2.7

『mean()』という関数を使えば一瞬で期待値が計算できます。便利ですね。
せっかくなので、この結果を変数に保存しておきます

> kitaiti <- mean(d) 

> kitaiti

[1] 2.7

今回の例のように、ある変数の値を用いて計算された結果をさらに変数の中に入れる、ということはざらにあります。
手計算や電卓でやる場合はたくさんの数値を相手にしなければならなかったのですが、変数をつかうと、いま使用する数値の数がとても少なくなることに注目してください。
変数を使うことにより、人間が目で見てわかりやすい式を表現することができます。変数名も、理解しやすい名称にしておくとなおよいでしょう。

3.標準誤差(標準偏差÷サンプルサイズの平方根)を計算する

> sd(d)        # 標準偏差 

[1] 3.301515

> length(d)    # サンプルサイズ

[1] 10

> hyoujunGosa <- sd(d) / sqrt(length(d))

> hyoujunGosa

[1] 1.044031

まず、標準偏差はsd()という関数で計算されます。標準偏差(Standard Deviation)の略です。なお、sd()で求められる標準偏差は、不偏分散の平方根を取ったものです。
サンプルサイズはデータの長さを取得する関数length()で求められます。
そして、それらを合わせた標準誤差を求めました。

準備は整いました。t値を計算します。

> tValue <- (kitaiti-0) / hyoujunGosa 

> tValue

[1] 2.586131

次に、t値をp値に変換します。
ですが、ここは少し面倒です。まずは検定の仕組みからもう一度復習します。

t検定におけるp値とは、「本来差があるとは言えないデータ間で比較してt値を計算した時、今回与えられたt値(2.58)よりも大きなt値が、『たまたま』でてくる確率のこと」でした。

なお、もう少し正確に言うと、p値はt値だけでなくサンプルサイズもかかわってきます。サンプルサイズが大きいほうが「たまたま」差があるように見えてしまう危険性が小さくなります。なので、サンプルサイズが大きいほうがp値は小さくなります。

t値は大きければ有意差ありなんでしたね。でも、t値が大きいとみなせるかどうかが不安であると。
そこで、「t値が、今回計算された値を『たまたま』超える確率」を求めます。この確率が小さければ、「たまたまそうなっただけ」という疑いを晴らすことができます。
t値が大きいと胸を張って言い張れます。
だから、t値が大きいかどうかを判定するのにp値を計算するのです。

そのp値を計算するコードをご覧ください。
コードを見ながら少しずつ説明します。

(1-pt(tValue, df=length(d)-1))*2

まず、t値をp値に変換する関数は『pt()』です。
『pt(tValue, df=length(d)-1)』の部分で使用されています。上記の説明の通り、p値を計算するにはt値とサンプルサイズの両方が必要なので、これらを括弧の中に入れて使用します。関数に2つ以上の引数を入れる場合は、カンマで区切って入れることに注意してください。
dfがサンプルサイズのようなものですが、これはサンプルサイズ「length(d)」に1を引いたものを入れています。なぜ1を引くのかというのは難しいところですが、不偏分散で出てきたときのように、サンプルサイズをそのまま使うと偏りが出てしまうので、訂正した、くらいの感覚でまずは大丈夫です。

つぎに、このpt()で出てきた値を1から引いています。
このpt()、ちょっと面倒で、出てくる結果は「t値が、今回計算された値(2.58)をたまたま【下回る】確率」なんですね。
今ほしいものは「t値が、今回計算された値(2.58)をたまたま【上回る】確率」です。
なので、「1から【下回る確率】を引く」ことで、【上回る確率】を計算します。

最後に、計算された値を2倍しています。これはこの検定が「両側検定」なるものをしているからです(なお、両側検定については、本書でこれ以上ほとんど出てこないので、難しくてわからなくても飛ばしてもらって結構です)。
t値が大きくなる時は2パターンあります。「期待値が0と『離れて』いる」というところが問題。
「離れている」という条件を満たすだけなら期待値が0より大きくなくても、0より極端に小さい(マイナス100とか)状況であってもよいわけです。だから「期待値が0よりも大きい時の “指定されたt値より大きくなる確率”」が『1-pt(tValue, df=length(d)-1)』で求まったら、その確率を2倍します。そうすることにより「期待値が0よりも小さい時の“指定されたt値より大きくなる確率”」も同時に計算できます。これでようやく「0から離れている」という条件だけで検定ができるようになります。

結果は以下のようになります。

> (1-pt(tValue, df=length(d)-1))*2 

[1] 0.02939946

p値は0.05を下回りました。
t値が偶然で今回の値(2.58)を上回る確率は2.9%ほどしかありません。これはとても小さいと考えられるので、今回計算されたt値は大きいと胸を張って言い切れます。
よって、「データの期待値は有意に0と異なっている」と自信を持って言い切ることができます。

 

3-8 t検定を一瞬で行う方法

今まで長々とお付き合いいただきましたが、Rで用意されている関数を使えば一瞬で計算が終わります。t.test()という関数を使います。

> t.test(d) 

One Sample t-test

data:  d

t = 2.5861, df = 9, p-value = 0.0294

alternative hypothesis: true mean is not equal to 0

95 percent confidence interval:

0.3382386 5.0617614

sample estimates:

mean of x

2.7

長いので順に説明します。1行目:実行されたコード。2行目:t検定しましたよ。3行目:データにはdという変数を使いました。4行目:t値、サンプルサイズ-1、p値の値。5行目:期待値が0と異なっているかどうかを検定したんですよ。
ここまではよいでしょう。次以降はまだ説明していないので本書後半で説明します。
6行目:95%信頼区間(期待値が95%の確率でこの範囲に収まる区間)は、7行目の範囲ですよ。8行目:推定された結果は、9行目:データの期待値であり、10行目の値ですよ。

それでは、以上でt検定おしまいです。
エディタをクリックして「Ctrl + S」を押してください。上書き保存のショートカットキーです。
エディタに適当な名前を付けて保存した後に、エディタを消してください。
そして、エディタが消えたらRも落としてください。「作業スペースを保存しますか?」という質問はNoで大丈夫です。保存するのは当面の間エディタだけにしてください。

 

※Rのエディタは「.R」が末尾についたファイルとして保存されます。これはRのメニューにある「ファイル」~「スクリプトを開く」、から保存されたファイルを選択することで、開きなおすことができます。

 

書籍情報



平均・分散から始める一般化線形モデル入門


この記事の元となった書籍です。
書籍のサポートページはこちらです。
本文の第1部はこちらから読めます。

注意
定価は2500円(消費税8%で2700円)ですが、Amazonさんなどでは在庫が不足しており、中古価格が高騰することがあります。
重版したので出版社には在庫が残っています。出版社のサイトからですと送料無料・書籍代は後払い・最短翌日出荷で、確実に定価で手に入ります。
以下のネット書店も併せてご利用ください。









新規作成:2015年7月14日
最終更新:2017年8月27日

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください