Rのはじめ方 1:インストールから立ち上げ
はじめに
Rは無償でつかえて、多様な統計解析ができる上に、グラフも描けちゃうフリーソフトです。慣れればエクセルより簡単に、綺麗に、高度なことができます。ただし、インターフェイスがとっつきにくい。とくに、プログラミング初心者にとっては「難しそう」でしかないのが難点。。。でも大丈夫です! すでにネット上にはたくさんのテキスト、ドキュメントがあり、独習するには資料に事欠きません。
yaginogogo.hatenablog.jp
こんなに良くまとまったサイトがたくさんあるなら、もう新しくエントリを書く必要もないよね? と思いながら、ここではプログラミング経験ゼロ、統計知識ゼロ、パソコンスキル低、でもどうにか始められる、をモットーに進めていきたいと思います。
読み終わったころには、エクセルのほうが簡単だし、だなんて言わせない、そんな意気込みでいきたいです。
インストール
まずはRを自分のパソコンにインストールしましょう。このブログではWindows版のベーシックなRを使って説明していきます*1。が、他にも、Rにはもともとのソフトを使いやすく改良したバージョンが存在します。これらは入力インターフェイス(見た目)が違うだけで、どのソフトを使っても、得られる統計解析、グラフには差がありません。
それぞれの解説ページを見て、使いやすそうなものを選びましょう。
- R コマンダー
- Rをインストールした後にインターフェイスを変更する。参考サイトR on Windows、
R言語で統計解析入門: Rコマンダー「Rcmdr パッケージ」の追加インストール 梶山 喜一郎
ベーシックなRをWindowsにインストールする
- Linaxの解説 R のインストール - RjpWiki
Rの公式ページからダウンロードできるサイト一覧にとべます(左欄 CRAN)。
日本のダウンロードサイト | |
https://cran.ism.ac.jp/ | The Institute of Statistical Mathematics, Tokyo |
http://cran.ism.ac.jp/ | The Institute of Statistical Mathematics, Tokyo |
http://ftp.yz.yamagata-u.ac.jp/pub/cran/ | Yamagata University |
ミラーサイトなので、どこでも同じです。
↑Downroad for Windowsを選択して、↓一覧から「base」を選択します。
↓Downroad R 3.xxx for Windows をクリックします。
ダウンロードしたファイルを実行すると、インストールが始まります。
使用言語で「日本語」を選択します。
インストール先のフォルダ、コンポーネント、カスタムしない、とデフォルトの設定のまま「次へ」で進めていきます。
完了、を押したらおわりです。
デスクトップには「R x64」と「R i386」のふたつのアイコンができてると思います。
自分のパソコンが64ビット版であれば「R x64」を選択してRを起動します。パソコンが32ビット版であれば「R i386」を起動します。
これで準備は万端です。
*1:もっとも情報量が多く、バージョンアップによる更新ストップの心配が少ないため、これを使ってます。
Rの独習に役立つリンク集
Rの使い方について
- R による統計処理
- Rの使い方の基礎から統計手法まで。下記書籍のサポートページ。
- 作者: 青木繁伸
- 出版社/メーカー: オーム社
- 発売日: 2009/04
- メディア: 単行本
- 購入: 10人 クリック: 123回
- この商品を含むブログ (33件) を見る
- とある弁当屋の統計技師(データサイエンティスト)
- インストールから使い方まで。物語風書籍のサポートサイト。
とある弁当屋の統計技師(データサイエンティスト) ―データ分析のはじめかた―
- 作者: 石田基広,りんと
- 出版社/メーカー: 共立出版
- 発売日: 2013/09/25
- メディア: 単行本
- この商品を含むブログ (15件) を見る
- プログラマーのためのR言語入門 - Qiita
- プログラミング言語としてのRの特徴まとめ。つぼがわかる。プログラミングの初歩が分かってる人向け。
- biostatistics | バイオスタティスティクス | 生物統計学
- サンプルコードいろいろ。使いたい手法が分かってる人むけ。
関数の使い方を調べる
- help(関数名)で関数のマニュアルがブラウザで呼び出される。(英語。ネット経由)
- R: The R Project for Statistical Computing
- Rの開発チームHP。マニュアルとF&Qとリリース状況をチェック。
- RjpWiki - RjpWiki
- サイト内を検索すればたいていの疑問は解決されている。
- R-tips
- 細かい指定の方法まで具体的なTipsが沢山。書籍化されており、逆引きレファレンスが充実している。
The R Tips―データ解析環境Rの基本技・グラフィックス活用集
- 作者: 舟尾暢男
- 出版社/メーカー: オーム社
- 発売日: 2009/11
- メディア: 単行本
- 購入: 16人 クリック: 259回
- この商品を含むブログ (14件) を見る
統計について調べる
- ハンバーガー統計学にようこそ!
- 初歩から分散分析までを具体例で学ぶ。統計の入門用。
- 私のための統計処理
- 自分が持っているデータをどう統計解析するか。二群の検定~分散分析。
- 統計学自習ノート
- 統計手法が網羅的に解説されている。全文検索から質問の過去ログにあたれる。
- 租界〈R〉の門前にて
- 統計学の講義資料などが公開されている。
より深く理解して使うときに
- 生態学データ解析 - FrontPage
- GLM、ベイズ統計について。
- JIN'S PAGE
- Rの基礎から統計手法それぞれの解説。自然言語処理、テキストマイニングについて。
Rで描く、二要因の棒グラフ
barplot(x, beside=T)
- 行列データxを縦列ごとにグループに分けて棒グラフを描く。
#データ入力 group<-c(10,20,30) #例 投与量 m.Con<-c(0.079,0.102,0.146) #対照群 平均値 sd.Con<-c(0.022,0.051,0.026) #対照群 標準偏差 m.Test<-c(0.12,0.25,0.34) #テスト群 平均値 sd.Test<-c(0.055,0.031,0.026) #テスト群 標準偏差 #y軸の最大値を指定 yRoof=round(max(m.Con+sd.Con, m.Test+sd.Test)*1.2, 1) #棒グラフ graph1<-barplot(cbind(m.Con, m.Test),beside=T, names=c("Con","Test"), ylim=c(0,yRoof), col=c(0,8,1)) #上向きのエラーバー arrows(graph1,cbind(m.Con,m.Test), graph1, cbind(m.Con+sd.Con,m.Test+sd.Test), angle=90, length=0.1,lwd=2, col=1) #下向きのエラーバー arrows(graph1,cbind(m.Con,m.Test), graph1,cbind(m.Con-sd.Con, m.Test-sd.Test), angle=90,length=0.1,lwd=2,col=c(1,1,"white")) # x軸を描く axis(side=1, c(mean(graph1[,1]),mean(graph1[,2])), labels=F) legend("topleft", paste(group, "mg"), fill=c(0,8,1)) #凡例 title("Bar graph with two factors")
データ
- cbind(m.Con,m.Test)#ベクトルを列方向に連結。
m.Con | m.Test | ||
[1,] | 0.079 | 0.079 | #10mg |
[2,] | 0.102 | 0.102 | #20mg |
[3,] | 0.146 | 0.146 | #30mg |
- Conの平均値(m.Con)1、2、3行目がグラフ1グループ目に隣接して表示される。
barplot(beside=T)
- 入力されたベクトルを列ごとに隣接して描画。
- besides=Fにすると列ごとの積み上げグラフになるので注意。
- barplot()を代入したgraph1は、各棒のx軸上の位置を値として返す。入力した表と同じ形式が出力される。
エラーバー
- arrows()も同様に列ごとに1、2、3行目とデータが読み込まれるので、同じ形式でx0,y0.x1,y1のそれぞれにデータ表を指定する。(値の混同がないように注意すること)
そのほかの修飾
- 各郡の真ん中に目盛りをつけるため、axis()には、graph1の列ごとに平均値をとった。(各棒それぞれに目盛りをつける場合、graph1をそのまま入力する)
- legend(位置、ラベル名、凡例の書式)を指定する。すべてに同じ単位をつける場合、paste()が便利。
行列を入れ替えた表
データ表の行列を入れ替えて入力する
rbind(m.Con, m.Test) #ベクトルを行方向に連結
[,1] | [,2] | [,3] | |
m.Con | 0.079 | 0.102 | 0.146 |
m.Test | 0.120 | 0.250 | 0.340 |
group | 10 | 20 | 30 |
#棒グラフ graph1<-barplot(rbind(m.Con, m.Test),beside=T, names=group, ylim=c(0,yRoof), col=c(0,8)) #上向きのエラーバー arrows(graph1,rbind(m.Con,m.Test), graph1, rbind(m.Con+sd.Con,m.Test+sd.Test), angle=90, length=0.1,lwd=2) #下向きのエラーバー arrows(graph1,rbind(m.Con,m.Test), graph1,rbind(m.Con-sd.Con, m.Test-sd.Test), angle=90,length=0.1,lwd=2) # x軸を描く axis(side=1, c(mean(graph1[,1]),mean(graph1[,2]),mean(graph1[,3])), labels=F) #凡例とタイトル legend("topleft", c("Con","Test"), fill=c(0,8)) title("Bar graph with two factors")
- barplot()に入力するデータ表にあわせてarrows(),axis()の入力データの形式をそろえる。
Rむけのデータ表を作る
Rが理解しやすい表
- スタック形式でつくると利用しやすい
- 人間向けの表とはちがうんだなー、と覚えておく。
ヒト向けの表
クラス1 | ||||
生徒 | 数学 | 化学 | 国語 | 英語 |
A | 85 | 70 | 55 | 61 |
B | 46 | 83 | 60 | 77 |
C | 58 | 94 | 84 | 61 |
D | 90 | 79 | 51 | 63 |
E | 76 | 56 | 66 | 61 |
F | 59 | 32 | 49 | 52 |
G | 73 | 79 | 78 | 83 |
H | 65 | 86 | 71 | 95 |
I | 88 | 90 | 63 | 42 |
J | 61 | 67 | 59 | 71 |
- クラス1のAさんが受けた教科のうち数学の点数は85点
- 点数85の情報ラベルは分散して表現されている
- 人間にわかりやすいけどRは不得意
- Rではwideと表現される
Rむけの表:スタック形式
クラス | 生徒 | 教科 | 得点 |
1 | A | 数学 | 85 |
1 | A | 化学 | 70 |
1 | A | 国語 | 55 |
1 | A | 英語 | 61 |
1 | B | 数学 | 46 |
1 | B | 化学 | 83 |
1 | B | 国語 | 60 |
1 | B | 英語 | 77 |
1 | C | 数学 | 58 |
... | ... | ... | ... |
- 縦方向は常に同じカテゴリ、同じ単位の値
- 横方向は常に同じデータポイント(ここでは生徒)
- クラス1のAさんが受けた教科のうち数学の点数は85点、が一列に並んでいる
- 人間には見にくいけど、Rには分かりやすい
- Rではlongと表現される
ヒト向きの表からR向きの表への変換
- うっかり人間用の表で集計してしまったとき。
- stack()をつかう。
student<-LETTERS[1:10] math.test<-c(85,46,58,90,76,59,73,65,88,61)#数学 chem.test<-c(70,83,94,79,56,32,79,86,90,67)#化学 dat<-data.frame(student,math=math.test,chem=chem.test) dat dat.stack<-stack(dat,select=c(math,chem)) dat.stack dat2<-data.frame(student=rep(dat$student,2), subject=dat.stack$ind, score=dat.stack$values) dat2
Rむきの表をヒト向きの表に変換する
- reshape()を使う
- directionにwideを、idvarに縦方向に並べたいベクトル名、timevarに横方向に並べたいベクトル名を指定する。残りのベクトルがtimevarに応じて分割される。
- データ表に3変数以上がある場合、指定がわかりづらい。いろいろ試行錯誤するしかない。
student<-LETTERS[1:10] math.test<-c(85,46,58,90,76,59,73,65,88,61)#数学 chem.test<-c(70,83,94,79,56,32,79,86,90,67)#化学 dat<-data.frame(student,math=math.test,chem=chem.test) dat.stack<-stack(dat,select=c(math,chem)) dat2<-data.frame(student=rep(dat$student,2), subject=dat.stack$ind, score=dat.stack$values) dat2 dat3<-reshape(dat2, idvar="student", timevar="subject", direction="wide") dat3
Rの色指定いろいろ
例:棒グラフ barplot(col=色指定)
#データ入力 group<-c(10,20,30) #群 m.data<-c(0.079,0.102,0.146) #平均値 sd.data<-c(0.022,0.031,0.026) #標準偏差 #y軸の最大値を指定 yRoof=round(max(m.data+sd.data)*1.3, 1) #棒グラフを描く graph1<-barplot(m.data, names=group, ylim=c(0,yRoof), col=c("royalblue3","brown3",8)) #色の指定 #上向きのエラーバー arrows(graph1,m.data,graph1,m.data+sd.data,angle=90,length=0.1,lwd=2) #下向きのエラーバー arrows(graph1,m.data,graph1,m.data-sd.data,angle=90, length=0.1,lwd=2) #x軸を描く axis(1, graph1, labels=F) #タイトルをつける title("Color samples")
色の指定法: 単色 col=X、 複数色 col=c(X,X,X)
- 複数に色分けするときは、ベクトルc(x,x,x)を指定する。
- ベクトルの指定は前から順番に使われる。指定数がデータ数に足りないときは、先頭に戻って繰り返される。
col=数字:基本色のセット。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
白 | 黒 | 赤 | 緑 | 青 | シアン | マゼンダ | 黄 | 灰 |
white | black | red | green | blue | cyan | magenta | yellow | grey |
col="色名"
- 基本的な色名はそのまま指定すれば使える。
- 例)pink, orange, violet, skyblue
- エクセルっぽい青 col="royalblue3"
- エクセルっぽい赤 col="brown3"
使える色名をみる
- colors() # 657色ある
demo(colors) #色名をその色で表示。
- いろいろ見比べたいとき
x=c(1:5) #1から5番目の色 barplot(rep(1,length(x)),names=colors()[x],col=colors()[x]) #colorsを色名とともに表示する。xに任意の数をいれる。
col=HEX(16進数のカラーコード)
- col="#ff0000" #赤
- ウェブカラーとおなじ指定法
- コード変換サイトから好きな色を拾ってくる
透過色をつかう
- col=HEX(16進数色コード)+透過度(00~FF)
- 例 col="#FF00007F" #赤の透過色、約50パーセント
透過度% | 30 | 50 | 60 | 70 |
≒16進数 | 4C | 7F | 99 | B2 |
- 図を重ねたりするときに便利。
- 注意
- 透過色をつかうと、図をファイルへ保存する時、印刷する時にエラーが起きることがある。
グレースケールを使う
- gray()に0-1の間を指定する。小さいほど黒い。
barplot(rep(1,11),names=seq(0,1,0.1),col=grey(seq(0,1,0.1)))
カラーチャートを使う
- 連続した変化を色で表現するときなどに。
- barplot(rep(1,4),names=rainbow(4),col=rainbow(4))
- チャートrainbow()から4つの色が抜き出される。
カラーチャート見本
- rainbow()
- barplot(matrix(rep(1,50),50),horiz=T,col=rainbow(50))
- heat.colors()
- barplot(matrix(rep(1,50),50),horiz=T,col=heat.colors(50))
- terrain.colors()
- barplot(matrix(rep(1,50),50),horiz=T,col=terrain.colors(50))
- topo.colors()
- barplot(matrix(rep(1,50),50),horiz=T,col=topo.colors(50))
- cm.colors()
- barplot(matrix(rep(1,50),50),horiz=T,col=cm.colors(50))
Rで描く、棒グラフ
barplot()で平均値+標準偏差のエラーバーを描く
図の例
コード
#データ入力 group<-c(10,20,30) #群 m.data<-c(0.079,0.102,0.146) #平均値 sd.data<-c(0.022,0.031,0.026) #標準偏差 #y軸の最大値を指定 yRoof=round(max(m.data+sd.data)*1.2, 1) #棒グラフ graph1<-barplot(m.data,names=group, ylim=c(0,yRoof), xlab="Amount of drug (mg/kg)", ylab="Responses (/sec)", col="royalblue3", space=0.5) #上向きのエラーバー arrows(graph1,m.data,graph1,m.data+sd.data,angle=90,length=0.1,lwd=2) #下向きのエラーバー arrows(graph1,m.data,graph1,m.data-sd.data,angle=90, length=0.1,lwd=2) # x軸を描く axis(side=1, graph1, labels=F) #タイトルをつける title("Bar graph with error bars", cex =2) #有意差のマークをつける segments(graph1[1], yRoof*0.8, graph1[2], yRoof*0.8,lwd=2) points((graph1[1]+graph1[2])/2,yRoof*0.83, pch="*", cex=2) segments(graph1[1], yRoof*0.9, graph1[3], yRoof*0.9,lwd=2) points((graph1[1]+graph1[3])/2,yRoof*0.93, pch="*", cex=2)
コードの説明
データ入力
- 群は数でも文字でもかまわない。
- 表として表示するには、
group<-c(10,20,30) #群 m.data<-c(0.079,0.102,0.146) #平均値 sd.data<-c(0.022,0.031,0.026) #標準偏差 d.table<-data.frame(Group=group, Mean=m.data, SD=sd.data) d.table
Group Mean SD
1 10 0.079 0.022
2 20 0.102 0.031
3 30 0.146 0.026
棒グラフの準備
- エラーバーを描くために、先にy軸の最大値を設定すると便利。
- yRoof=round(max(m.data+sd.data)*1.2, 1)
- 各群ごとに平均値に標準偏差を足し、その中から最大値をmax()で探して、1.2倍してround()で少数一桁を四捨五入。
- 小数点一桁で四捨五入する round(x, 1)
- 最小値が固定(=0)でない場合、同様に最初に指定すると便利。
- 例)yFloor=round(min(m.data-sd.data)*1.3,1)
- エラーバーをあえてy軸枠外に突き抜けて描きたい場合、par(xpd=T) をarrows()の前に入力し、枠外への書き込みを許可する。
棒グラフ bargraph()
- graph1<-barplot(height=m.data, names=group, ylim=c(0,yRoof))
- graph1に代入することで、x軸上の各棒の真ん中の値が得られる。これをエラーバーの作図に利用する。
- barplot()で設定できるプロパティ
height | 第一引数。各棒の高さを指定する。一番目に指定したベクトルが自動的に使われる。 |
names | 各棒のラベルを指定する。数字でも文字でも可。 |
ylim | 縦軸を c(最小値, 最大値)で指定する。指定しないとheightから適宜計算される。 |
xlab, ylab | 軸名を指定。サイズはcexで指定。*1 |
col | 棒の色を指定。エクセルっぽい青 col="royalblue3"、エクセルっぽい赤 col="brown3" |
weight | 第二引数。各棒の幅を指定する。指定しない場合、等分幅になる |
space | 棒の間隔を指定。space=c(0.5, 0.8)とすると間隔の1番目から順番に幅を指定。*2 |
- 注意
- graph1<-barplot(m.data, group, ylim=c(0,yRoof))とnamesを指定しないで二番目にベクトルを指定すると、weightとして認識され、幅の異なるグラフになる。
エラーバーを描く
- arrows(x0, y0, x1, y1)は指定された点A(x0,y0)から点B(x1,y1)へ矢印を描く。
- arrowsの例
#描画領域を作る plot(3,3, xlim=c(0,5),ylim=c(0,5)) #点(0,0)から点(3,3)に矢印を引く arrows(0,0,3,3)
- arrows()のプロパティ
angle | 矢印先端の角度。90でフラットになる。初期値は30 |
length | 矢印先端の長さ。単位はインチ、初期値は0.25 |
lwd | 矢印の線の太さ。初期値は1 |
lty | 線の種類。初期値は1(実線)、2~6が点線、0は線なし |
- これを使って、棒の端・中央を点Aとし、そこから上に標準偏差だけ離れた点Bに矢印を描き、矢印の先端を90度に指定するとエラーバーになる。
#上向きのエラーバー arrows(graph1, m.data, graph1, m.data + sd.data, angle=90,length=0.1,lwd=2)
- barplot()を代入したgraph1は、各棒の中央にあたるx座標を返してくれる。(Rがグラフを描くために設定した値)
- この値を矢印のx座標とし、y座標には棒の高さであるm.dataと、m.dataにエラーバーの長さであるsd.dataを加えた値を指定する。
- 指定しているデータの表
群 | 点A x0 = 点B x1 | 点A y0 | 点B y1 |
group | graph1 | m.data | m.data+sd.data |
10 | 1.0 | 0.079 | 0.101 |
20 | 2.5 | 0.102 | 0.133 |
30 | 4.0 | 0.146 | 0.172 |
- 下向きの矢印は同様に平均値m.dataから標準偏差sd.dataを引いた点Bにむかって矢印を引く。
#下向きのエラーバー arrows(graph1, m.data, graph1, m.data - sd.data, angle=90,length=0.1,lwd=2)
目盛り付きx軸を描く
- axis(side=1, graph1, labels=F)
- side=1がグラフ底辺をさす。
- 目盛りの値にbargraph()を代入したgraph1を指定することで、棒の中央に目盛りがつく
- 注意
- labels=Tにするとgraph1の数値が表示される。
タイトルを書く
- title(main="title")
- 文字サイズは cex = 1 がデフォルト。2にすると2倍に拡大される。subで下にサブタイトル。
有意差のマークをつける
#有意差のマークをつける segments(graph1[1], yRoof*0.8, graph1[2], yRoof*0.8,lwd=2) points((graph1[1]+graph1[2])/2,yRoof*0.83, pch="*", cex=2)
- segment()は点A(x0,y0)から点B(x1,y1)に線を引く。
- point()は点(x,y)に記号(pch)を描く。
- xの値はgraph1に代入された各棒の中央の値をつかう。
- yの値はグラフ天井からの相対値 yRoof*0.8 で出すか、エラーバーの最大値との相対値でだす。
- 例)max(m.data+sd.data)*1.2