Rの初歩 †
第6回授業の獲得目標: †
- 1. Rの基本操作を習得する
- 2.Rで「沢山のデータを一まとめにして扱う方法」を理解しよう
- 3.Rでグラフを描いてみよう
- 4. Rで簡単な統計処理をやってみよう
Rの基本操作を理解しよう: †
さて、先週は時間が足りなくてあまり詳しく説明できなかったR。
今週は、自分で操作して、好きなグラフを描けるところまでやってみよう。今後の研究やレポートでもかならず役に立つので、全員ができるようになることを目指したい。。
Rのインストール(大学では不要) †
数年前から大学の教育用端末に、Rがインスト−ルされているので、授業ではインストール作業は不要になった。
おうちの自分のパソコンでRを使いたい場合、
のいずれかにアクセスして、ダウンロードしてインストールする。Windows , Mac, Linuxのどの環境でも使える。
Rを起動する †
では、スタートメニューから、Rを起動しよう。
R起動すると~、画面が切り替わり、小さいウィンドウの中にいくつかのメッセージと、一番最後に、
>
が表示される。この">"をプロンプトと言う。プロンプトの右側には通常、カーソルがあり、「このマークの後に何かコマンド(命令)を打ち込んでくださいよ」とあなたに促している。式を入力して、最後にenter(or returnキー)を押せば計算される。
Rによる簡単な数値計算演習: Rは関数電卓代わりに使える! †
以下、Rを使った簡単な計算。プロンプト(>)から右の部分をコピーペーストすれば、計算できる。
- 1035を27で割ったときの余りを求めなさい
> 1035 %% 27
- 足し算・引き算のまとめ
演算子 | 意味 | 使用例 |
+ | 足し算 | > 4+3 [1] 7 |
- | 引き算 | > 4-3 [1] 1 |
* | 掛け算 | > 4*3 [1] 12 |
/ | 割り算 | > 4/3 [1] 1.333333 |
^ | 累乗 | > 4^3 [1] 64 |
%/% | 整数商 | > 7%/%3 [1] 2 |
%% | 剰余 | > 7%%3 [1] 1 |
授業で解説するRのコマンドを別ページにまとめておきます。 → Rコマンド一覧
オブジェクトへの数値の代入 †
Rでは、好きな名前をつけたオブジェクト("もの")に、数値や文字列などのデータを代入できます。オブジェクトには大文字小文字の区別があります。
> x = 3 #xに3という数字を代入した
> X = 4 #Xに4という数字を代入した
> x + X #xとXの足し算 (なお、#の後はコメント文と呼ばれ、処理には関係の無い説明を書いておける)
なお、上では"="を使って数値を代入しましたが、 "<-"を使っても同じことができます。
> x <- 3
> X <- 4
> x+X
(Rの代入はもともと "<- " だけだったが、比較的最近、 " = " も使えるようになった)
Rで「沢山のデータを一まとめにして扱う方法」を理解しよう †
みなさんは、沢山のデータを1まとめにして扱う方法をすでに知っている。
例えばエクセルを使った計算では、
という表を使ってデータを一まとめにし、sum()関数をつかったり、1つのセルに5を足すという計算結果を全部のセルにコピペして、全ての値に5ずつ0足した結果を得たりした。
でも、Rのように、命令文を1行ずつ入力して計算するソフトウェアの場合、データをまとめて扱うにはどうすればいいだろうか?
もちろん、下のように1行ずつ計算式を打ち込んでも答えはでるが、データの数が多くなると、面倒すぎる。
(こんなやり方だと面倒くさい)
> 10.4+5.6+3.1+6.4+21.7
> 10.4+5
> 5.6+5
Rでは、データを横1行に並べて扱う(これをベクトルという) †
そこで、Rでは、たくさんのデータを一まとめにして扱うときには、カンマで区切って横1行に並べて使う。このようなデータの構造をベクトルと呼ぶ。ベクトルとうと、高校の数学でやった「大きさと方向をもった量」を思い出すと思うが、
Rで使うベクトルは、同じ種類のデータに順番をつけて並べたもの
と定義しておこう。これは、Rが沢山のデータをまとめて処理するために用いる、データの構造だ。例えば、
(10.4, 5.6, 3.1, 6.4, 21.7)
というデータの集まりは、同じタイプのデータに順番をつけてひとまとめにしたものであり、Rでいうところのベクトルだ。
そして、Rでデータを一まとめにして使うときに必要なのが、c()という関数。
Rを使う上で、これだけは絶対に覚えておこう |
Rでデータを一まとめにして扱うときには、 c( ) という関数を使う |
例えば、上のデータを、x というオブジェクトに代入したいときには、
x=c(10.4, 5.6, 3.1, 6.4, 21.7)
という命令を使う。上の命令を入力した後、「 x 」とだけ入力すると、xの内容が表示される。
> x
[1] 10.4 5.6 3.1 6.4 21.7
上の結果に表示された[1]は何だろうか?これは、表示された行の最初の数字が、ベクトルの1番目の要素だということを意味している。では、次のようなベクトルをyに代入して、内容を表示させてみよう。
> y=c(1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,
1994,1995,1996,1997,1998,1999,2000,2001)
ウィンドウの大きさによって表示のされ方は異なるが、もし1行に収まらなければ、
> y
[1] 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997
[15] 1998 1999 2000 2001
というように、2行目の始まりに[15]というような数字が表示される。これは、2行目が15番目の要素から始まっていることを示している。
「ベクトル」とは、同じタイプのデータに順番をつけて一まとめにしたものだった。では、一まとめの中から、例えば、「5番目の要素」だけを取り出すにはどうすればいいだろうか?勘のいい人はもう気づいているかもしれないが、
> y[5]
[1] 1988
と、オブジェクトの名前に順番を[]に入れたものをくっつける事で、目的の要素を取り出すことができる。
オブジェクトへのベクトルの代入 †
では、Rで、沢山のデータを一まとめにして、いろいろ計算してみよう。
まずはおさらい。上で出てきた、 c() という関数を使って、オブジェクトにデータを代入でする。
> x=c(1,2,3,4,5,6,7)
>
entterキーを押しても何もおこらない?いえいえ。エラーメッセージが何も表示されず、新しいプロンプトが表示されたら大成功。
(もし、上のようにならなかった人は、半角・全角の文字の違いとコンマやカッコに注意してもう一度やってみよう。)
では、プロンプトの後に"x"と入力して、結果を見てみよう。
>x
[1] 1 2 3 4 5 6 7
上の様に表示されれば「xというオブジェクトに(1,2,3,4,5,6,7)が代入されたことになる。では、このデータを対象に、統計解析の基本である平均値の計算を計算してみよう。
mean()という関数(meanは英語で平均値の意味)で一まとめにしたデータ(ベクトル)の平均値が計算できる。
命令の入力に自信の無い人は、下の囲みの中をコピー・ペースト。
>mean(x)
[1] 4
平均値"4"が表示されれば大成功(これで、あなたがRを使って行う、初めての統計解析は、無事に成功した)
では、数値をもう少し変えて、自分の好きな値で計算してみよう。。。
上で説明したように、キーボードの"↑"記号を何回か押してみると、
> x=c(1,2,3,4,5,6,7)
と表示された。そしたら"←"と"Back space"などを使って、数値を好きに変更して、最後に"Enter"キーを押そう。
> x=c(1232,223.33,3 ,4 , 5666)
半角文字であるかぎり、別にスペースがいくつ入っていても大丈夫。入力したら、上と同じことをしてみると、
> x
[1] 1232.00 223.33 3.00 4.00 5666.00
> mean(x)
[1] 1425.666
これで、自分の好きな値を入力して、平均を計算することができた。
Rでグラフを描いてみよう †
では、いよいよ、Rで簡単なグラフを描いてみよう。まずやらなければならないのは、
オブジェクトにデータを代入
演習に用いるデータ †
データとしては、Excelの演習で使ったのと同じく、厚生労働省統計表データベースシステムで公開されている、「1C 上巻 死亡 第5.12表_ 死因年次推移分類別にみた性別死亡数・率(人口10万対)」の表から1986年以降の男女別死亡数のみ抜粋した表をだ。
使いやすいように、男女別・年代別に並べ替えた表を以下に、テキストデータとして添付してある。
性別 | 年 | 結核 | 悪性新生物 | 糖尿病 | 高血圧性疾患 | 心疾患 | 脳血管疾患 | 肺炎 | 慢性気管支炎及び肺気腫 | 喘息 | 胃潰瘍及び十二指腸潰瘍 | 肝疾患 | 腎不全 | 老衰 | 不慮の事故 | 交通事故 | 自殺 | 死亡者数総計 |
女 | 1986 | 1058 | 78065 | 4809 | 7134 | 70509 | 67457 | 20517 | 1908 | 2700 | 1930 | 6250 | 5958 | 17681 | 8130 | 3392 | 9168 | 343702 |
女 | 1987 | 1063 | 80402 | 4873 | 6644 | 71343 | 64882 | 21083 | 1873 | 2552 | 1807 | 6233 | 6388 | 16616 | 8131 | 3537 | 8550 | 343078 |
女 | 1988 | 918 | 83455 | 5078 | 6366 | 79280 | 67863 | 24570 | 1987 | 2561 | 1696 | 6461 | 7241 | 17490 | 8854 | 3831 | 8505 | 364920 |
女 | 1989 | 851 | 85414 | 4812 | 5785 | 78930 | 63714 | 25493 | 1954 | 2506 | 1670 | 6581 | 7529 | 15904 | 9201 | 4165 | 8186 | 361480 |
女 | 1990 | 919 | 87018 | 4979 | 5847 | 83704 | 64317 | 29598 | 2170 | 2535 | 1682 | 6444 | 7943 | 16133 | 9923 | 4347 | 7772 | 376587 |
女 | 1991 | 876 | 89252 | 5001 | 5673 | 85232 | 62708 | 30214 | 2227 | 2559 | 1717 | 6704 | 7919 | 15524 | 10276 | 4345 | 7398 | 379453 |
女 | 1992 | 833 | 92243 | 5065 | 5514 | 89162 | 62627 | 31946 | 2220 | 2621 | 1664 | 6768 | 8822 | 15748 | 11071 | 4393 | 7377 | 391099 |
女 | 1993 | 825 | 93485 | 5267 | 5243 | 91988 | 63515 | 35341 | 2299 | 2747 | 1715 | 6644 | 8732 | 15791 | 11320 | 4273 | 6976 | 402070 |
女 | 1994 | 804 | 96774 | 5596 | 5114 | 80711 | 64729 | 36415 | 2435 | 2545 | 1722 | 6410 | 9002 | 16131 | 12033 | 4276 | 6865 | 399853 |
女 | 1995 | 911 | 103399 | 7118 | 5195 | 69488 | 76965 | 37210 | 2959 | 3201 | 2040 | 5442 | 8387 | 14809 | 17094 | 4375 | 7189 | 420863 |
女 | 1996 | 794 | 106359 | 6444 | 4632 | 69252 | 73887 | 32499 | 2728 | 2687 | 1831 | 5319 | 8708 | 14506 | 13699 | 4173 | 7285 | 407606 |
女 | 1997 | 787 | 108337 | 6075 | 4347 | 70398 | 72907 | 36590 | 2700 | 2634 | 1749 | 5222 | 8901 | 15050 | 13729 | 4157 | 7593 | 415606 |
女 | 1998 | 818 | 111615 | 6113 | 4356 | 71986 | 72290 | 37289 | 2684 | 2400 | 1740 | 4966 | 8907 | 15081 | 13941 | 3912 | 9406 | 424356 |
女 | 1999 | 821 | 114739 | 6287 | 4274 | 77100 | 72537 | 44091 | 2746 | 2559 | 1803 | 5131 | 9395 | 16229 | 14528 | 3922 | 9011 | 447253 |
女 | 2000 | 780 | 116344 | 5814 | 3900 | 74585 | 69402 | 40216 | 2640 | 2173 | 1708 | 5011 | 9231 | 15196 | 14322 | 3785 | 8595 | 435750 |
女 | 2001 | 776 | 119265 | 5779 | 3755 | 75565 | 68710 | 39549 | 2700 | 1928 | 1765 | 4937 | 9488 | 16051 | 14503 | 3680 | 8290 | 441563 |
女 | 2002 | 733 | 120535 | 6004 | 3513 | 77532 | 68028 | 40388 | 2544 | 1899 | 1651 | 4958 | 9757 | 16473 | 14360 | 3572 | 8272 | 447074 |
女 | 2003 | 722 | 122631 | 6170 | 3581 | 81556 | 68793 | 44328 | 2576 | 1855 | 1615 | 5034 | 10135 | 17161 | 14745 | 3348 | 8713 | 463205 |
女 | 2004 | 775 | 127262 | 5943 | 3640 | 82160 | 67508 | 44228 | 2449 | 1707 | 1489 | 5180 | 10311 | 17954 | 14526 | 3196 | 8292 | 471505 |
女 | 2005 | 717 | 129338 | 6490 | 3690 | 89146 | 69190 | 49931 | 2460 | 1633 | 1593 | 5423 | 11065 | 19677 | 15272 | 3013 | 8317 | 498826 |
女 | 2006 | 752 | 131262 | 6382 | 3715 | 90213 | 66920 | 50670 | 2455 | 1488 | 1479 | 5358 | 11444 | 20892 | 14941 | 2790 | 8502 | 503080 |
男 | 1986 | 3112 | 113589 | 4335 | 4555 | 72072 | 61832 | 26739 | 4825 | 3658 | 2297 | 13282 | 6099 | 9129 | 20480 | 10196 | 16499 | 406918 |
男 | 1987 | 2959 | 119161 | 4261 | 4090 | 72566 | 58744 | 27930 | 4741 | 3485 | 2067 | 13053 | 6239 | 8658 | 20124 | 10225 | 15281 | 408094 |
男 | 1988 | 2954 | 122015 | 4569 | 3892 | 78640 | 60832 | 32485 | 5230 | 3596 | 1992 | 13320 | 6983 | 8910 | 21358 | 10927 | 14290 | 428094 |
男 | 1989 | 2676 | 127211 | 4399 | 3486 | 77901 | 56938 | 33470 | 5277 | 3302 | 1995 | 13138 | 7324 | 7877 | 21848 | 11464 | 12939 | 427114 |
男 | 1990 | 2745 | 130395 | 4491 | 3399 | 81774 | 57627 | 38596 | 5664 | 3412 | 1933 | 13256 | 7632 | 8054 | 22199 | 11481 | 12316 | 443718 |
男 | 1991 | 2449 | 134475 | 4633 | 3410 | 83646 | 55740 | 39843 | 5955 | 3382 | 1970 | 13113 | 7641 | 7676 | 22879 | 11409 | 12477 | 450344 |
男 | 1992 | 2514 | 139674 | 4758 | 3174 | 86384 | 55431 | 42328 | 5952 | 3308 | 1917 | 13394 | 8123 | 7613 | 23606 | 11435 | 13516 | 465544 |
男 | 1993 | 2424 | 142222 | 4972 | 3117 | 88309 | 55279 | 45797 | 6241 | 3463 | 1965 | 13279 | 8425 | 7324 | 23397 | 10920 | 13540 | 476462 |
男 | 1994 | 2290 | 146896 | 5276 | 2824 | 78868 | 55510 | 46939 | 6777 | 3310 | 1956 | 12962 | 8374 | 7333 | 24082 | 10593 | 14058 | 476080 |
男 | 1995 | 2267 | 159623 | 7107 | 3027 | 69718 | 69587 | 42419 | 8018 | 4052 | 2274 | 11576 | 7800 | 6684 | 28229 | 10772 | 14231 | 501276 |
男 | 1996 | 2064 | 164824 | 6394 | 2613 | 68977 | 66479 | 38472 | 7195 | 3308 | 2087 | 11198 | 7488 | 6372 | 25485 | 10170 | 14853 | 488605 |
男 | 1997 | 1955 | 167076 | 6295 | 2537 | 69776 | 65790 | 42314 | 7497 | 3027 | 2127 | 11377 | 7714 | 6384 | 25157 | 9824 | 15901 | 497796 |
男 | 1998 | 1977 | 172306 | 6424 | 2360 | 71134 | 65529 | 42663 | 7471 | 2748 | 2131 | 11167 | 7731 | 6293 | 24984 | 9552 | 22349 | 512128 |
男 | 1999 | 2114 | 175817 | 6527 | 2376 | 73979 | 66452 | 49903 | 8451 | 2842 | 2250 | 11454 | 8309 | 6600 | 25551 | 9189 | 22402 | 534778 |
男 | 2000 | 1876 | 179140 | 6489 | 2163 | 72156 | 63127 | 46722 | 8237 | 2300 | 2161 | 11068 | 8029 | 6017 | 25162 | 9072 | 21656 | 525903 |
男 | 2001 | 1715 | 181393 | 6368 | 2102 | 72727 | 63146 | 45756 | 8244 | 2086 | 2121 | 10911 | 8202 | 6094 | 24993 | 8698 | 21085 | 528768 |
男 | 2002 | 1584 | 184033 | 6631 | 2108 | 74986 | 62229 | 47033 | 8289 | 1872 | 2089 | 10532 | 8428 | 6209 | 24283 | 8171 | 21677 | 535305 |
男 | 2003 | 1615 | 186912 | 6709 | 2016 | 77989 | 63274 | 50614 | 8657 | 1846 | 2104 | 10703 | 8686 | 6288 | 23969 | 7565 | 23396 | 551746 |
男 | 2004 | 1555 | 193096 | 6694 | 2066 | 77465 | 61547 | 51306 | 8164 | 1576 | 1920 | 10705 | 8806 | 6172 | 23667 | 7355 | 21955 | 557097 |
男 | 2005 | 1579 | 196603 | 7131 | 2145 | 83979 | 63657 | 57310 | 8525 | 1565 | 1897 | 11007 | 9463 | 6683 | 24591 | 7015 | 22236 | 584970 |
男 | 2006 | 1517 | 198052 | 7268 | 2095 | 82811 | 61348 | 56572 | 8093 | 1290 | 1924 | 10909 | 9714 | 6872 | 23329 | 6258 | 21419 | 581370 |
オブジェクトへのデータの入力 †
まず、年、結核、心疾患のそれぞれの男女別のデータを、それぞれ
年 を year に
結核・男 を m_k
結核・女 を f_k
心疾患・男 を m_h
心疾患・女 を f_h
に代入しよう。
scan()によるデータの入力 †
このとき、上でつかったc()という関数を使うのではなく、scan()という関数を使うと、エクセルからのコピーペーストで値をオブジェクトに代入できる。
まず、1986-2006の年のデータをyearに入れるには、
> year = scan() #ここでEnterを押す
1:
すると、「1:」という表示になるので、、エクセルのシートから1986から2006までのデータをペーストすると
1: 1986
2: 1987
3: 1988
4: 1989
5: 1990
6: 1991
7: 1992
8: 1993
9: 1994
10: 1995
11: 1996
12: 1997
13: 1998
14: 1999
15: 2000
16: 2001
17: 2002
18: 2003
19: 2004
20: 2005
21: 2006
22: #最後にEnterを押す
これで21年分の年のデータが、yearに入った。試しに
>year
と入力してみよう。下のようになるはずだ。
[1] 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
[16] 2001 2002 2003 2004 2005 2006
- 演習: 同様にして、m_k, f_k, m_h, f_hについても値を入力しておこう。
男性の結核のデータをm_kというオブジェクトに入力する場合、
> m_k = scan()
1: #ここで、男性の結核のデータをペースト
.
.
22: #最後にEnterを押す
- 注意: 今回はscan()という関数で、コピー・ペーストで簡単にデータを入力しているが、この場合、それぞれのデータの対応順は一致している必要があるので、注意しよう''
昇順で並び替えた結核のデータと、降順で並び替えた心疾患のデータの対応関係をグラフにしても、正しい関係は得られない。
- 演習の確認: うまくできていれば、それぞれのオブジェクトの名称を入力すると、下のようなデータが表示されるはずだ。
> year
[1] 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
[16] 2001 2002 2003 2004 2005 2006
> m_k
[1] 3112 2959 2954 2676 2745 2449 2514 2424 2290 2267 2064 1955 1977 2114 1876
[16] 1715 1584 1615 1555 1579 1517
> f_k
[1] 1058 1063 918 851 919 876 833 825 804 911 794 787 818 821 780
[16] 776 733 722 775 717 752
> m_h
[1] 72072 72566 78640 77901 81774 83646 86384 88309 78868 69718 68977 69776 71134
[14] 73979 72156 72727 74986 77989 77465 83979 82811
> f_h
[1] 70509 71343 79280 78930 83704 85232 89162 91988 80711 69488 69252 70398 71986
[14] 77100 74585 75565 77532 81556 82160 89146 90213
グラフの作成 : plot †
それでは最も基本的なグラフ作成関数であるplot()を使ってみよう。操作は、以下のように入力するだけ。
>plot(year,m_k)
下のようなグラフが表示されただろうか?
折れ線グラフにしたければ、こうやってみるといい。
> plot(year,m_k, type="l")
- 演習: 心疾患の死亡者数の推移についても、折れ線グラフを描いてみよう
グラフの重ね合わせ: par(new=T) †
それでは、男女の結核による死亡者数の推移を、1つのグラフ上に表示させたい。
Rでは、2つのグラフを重ねる という操作をして、2つの異なるデータを1つのグラフ上に表示させる。
- 操作1: m_kとf_kのグラフを単純に重ねる: 失敗例
- すでに上でやったように、m_kとf_kのそれぞれの折れ線グラフは、
> plot(year,m_k, type="l")
> plot(year,f_k, type="l")
で描くことができる。
- この2つを単純に重ねるには、1つめのグラフを描いたあとに、par(new=T)という、グラフの重ね描きを指定するコマンドを入れて、2つめのグラフを描く。例えば、
> plot(year,m_k, type="l")
> par(new=T)
> plot(year,f_k, type="l")
しかし、いくつかおかしいところがある。
- 1. Y軸の数値の範囲がそろっていないし、読めない
2つのグラフの示している値が異なる
- 2. Y軸のラベルが重なってしまって読めない
- 3. グラフの線が同じだから、男女が区別できない。
'par(new=T) でグラフを重ね描きする場合の注意点 †
- 1. 'グラフの座標の範囲を揃える:
重ね描きするグラフが全て同じ座標範囲となるように、 ''xlim = c(a, b),ylim = c(c, c) を指定すること.このとき、a, b, c, dはそれぞれ、値(数値)。
- 操作: 上の結核の死亡者数の場合、男性の最大値は3112、女性の最大値は1063。そこで、0から4000ぐらいの範囲を指定して、グラフにしてみよう。x軸の方は同じ値を使っているので指定する必要は無いが、練習のため、明示的に1986年から2006年の範囲を指定してみよう。
また、lty=2というオプションを指定すると、グラフの線が点線になる。
> plot(year,m_k, xlim=c(1986, 2006), ylim=c(0,4000), type="l", lty=2)
- 演習: 表示させる範囲を変えたり、ltyの値を変えたりして、グラフがどう変化するかみてみよう。
- 2. グラフの軸ラベルをキレイに表示させる:
Rではグラフを重ね描きするため、軸のラベルも重なってしまう。例え同じ文字であっても重ねが気されるので、時には、どんどん文字が太くなってしまったりする。そこで、軸ラベルの重ね書きを避けるために、
- 1回目のプロットには、軸ラベルをわざと書かさない
ann=F, axes=F
##それぞれ、annは軸ラベル(xlabやylabで後ほど指定)、axesは軸目盛り
- par(new=T)で重ね書きを指定
- 2回目のプロットで、軸ラベルを指定する
- 操作: 先ほどの結核の死亡者数で男女のデータを1つのグラフに表示させてみよう
> plot(year,m_k, xlim=c(1986, 2006), ylim=c(0,4000), type="l", lty=1, ann=F, axes=F)
> par(new=T)
> plot(year,f_k, xlim=c(1986, 2006), ylim=c(0,4000), type="l", lty=2, xlab="Year", ylab="No. of death")
- こんなグラフが表示されるはず
- 演習: 結核による死亡者数、心疾患による死亡者数の、男女それぞれの推移を、グラフで表してみよう。
- ヒント
- 上で作成した4つのデータのそれぞれについて描いたグラフを全て重ねる。
値の範囲は全て同じものを使う: 結核は0-4000、心疾患は0-100000。大きい方の心疾患に合わせる。
軸と軸ラベルは、一番最後に追加すれば良い
- 見やすいように、男女のグラフで色を変えてみよう(男性のデータは黒で、女性のデータは赤で)
線を赤くしたいときは、
col="red"
というオプションを追加
- 答え例1: x軸が0-100000の例
> plot(year,m_k, xlim=c(1986, 2006), ylim=c(0,100000), type="l", lty=1, ann=F, axes=F)
> par(new=T)
> plot(year,f_k, xlim=c(1986, 2006), ylim=c(0,100000), type="l", lty=1, ann=F, axes=F, col="red")
> par(new=T)
> plot(year,m_h, xlim=c(1986, 2006), ylim=c(0,100000), type="l", lty=2, ann=F, axes=F)
> par(new=T)
> plot(year,f_h, xlim=c(1986, 2006), ylim=c(0,100000), type="l", lty=2, xlab="Year",
ylab="No. of Death", col="red")
- 答え例1: 左側x軸が0-4000、右側x軸が0-100000の例
plot(year,m_k, xlim=c(1986, 2006), ylim=c(0,4000), type="l", lty=1, ann=F, axes=F)
par(new=T)
plot(year,f_k, xlim=c(1986, 2006), ylim=c(0,4000), type="l", lty=1, col="red", xlab="Year", ylab="No. of Death")
par(new=T)
plot(year,m_h, xlim=c(1986, 2006), ylim=c(0,100000), type="l", lty=2, ann=F, axes=F)
par(new=T)
plot(year,f_h, xlim=c(1986, 2006), ylim=c(0,100000), type="l", lty=2, ann=F, axes=F, col="red")
axis(4)
- 発展演習:三代疾病による男女の死亡者数の合計の推移を1986年から2006年までRでグラフにしなさい。x軸は左側の1つの軸だけにすること。
- Tips: 上の演習のように、いくつものグラフを重ねて描くときは、Rエディタ(あるいは、K2エディタのようなテキストエディタでもいい)でコマンドを編集してから、コピーペーストして、一度にグラフを描かせる方が良い場合がある。
- 注意:上の表のような複数項目にわたるデータを扱うときには、実際には、データフレームとして値を取り込んで計算することが多い。
Rでグラフを描くことをもっと勉強したいときに見るサイト †
- 今回は簡単なグラフを点で作成しただけだが、線で結んだり、色をかえたり、いろんなことができる。下の参考資料を見て、いろいろと試してみよう。
Rを一人で使う場合: 参考になる情報 †
まず最初に参考書の紹介だが、Rには様々な参考書が出版されているので、どれか一冊を選んで買ってきて、随時参照しながら操作をするといいだろう。フリーのオンライン情報だけを使って使いたい人は、次のようにするといい。
1. Rの命令一覧が載っている説明書のPDF(上記)を画面に表示させる
2. Adobe Readerの検索機能を使って、行いたい処理を検索
3. 説明を読んで入力すべき命令文をコピー
4. Rにペーストして、値を編集して実行
こうやって、常に説明書を参照しながら操作すれば、命令を覚える必要は無い。
Rを使った簡単な統計解析 †
生物学を学ぶ限り、自分が実験や観察で得たデータを使うときに、統計解析は必ず使うことになる。生物学のための統計解析の本も、数多く出版されている。一年生の皆さんも、機会をみつけて、できるだけ統計学に慣れ親しんでおいて欲しい。そんなとき、Rは非常に役に立つ。Rは非常に強力な統計解析ソフトであるため、与えられたデータの持つ統計的特徴を瞬時に計算したり、データの持つ意味を推測するための図版を一瞬に作図してくれる。この授業ではRを使って実際にデータを解析することで、統計解析に慣れ親しむ方法を解説する。実際の理論的裏付けは、統計の本を読んだり、授業に出たりして、各自学習してほしい。
- お勧め参考書: 「生物学を学ぶ人のための統計のはなし 〜きみにも出せる有意差〜」(粕谷英一著・文一総合出版・1998. 2400円)~。
最初の方はほとんど予備知識無しに読んでも大丈夫。
統計解析の2つの主要目的 †
この授業では統計解析を、次の2つの目的のために使う。
1. ある対象(母集団)から得られた部分的な数値データから、その対象の持っている性質や特徴を知ること
2. ある対象や実験で得られた数値データを用いて、その対象についてどういう判断を下せば良いかを論じること
母集団の性質の推測 †
"ある対象(集団)から得られた部分的な数値データから、その対象の持っている性質や特徴を知ること"
っていうけれど、「母集団」って何?
「母集団」というのは、興味の対象になっている集団全体のことだ。
例えば、
生物学の大きな目的の一つに、自然界に存在する様々な生物の特徴を知ることがある。しかし、自然界の全ての生物個体を計測して、特徴を知ることは不可能。そこで、対象とする生物から、一部だけ(標本)を偏り無く取り出して(これを任意抽出とかランダムサンプリングと呼ぶ)、特徴を計測し、対象生物全体(母集団)の特徴を推定する。こういう作業を「統計的推測」と言う。
この、「一部を使って全体を知る」という点が、統計の基本!
生態学などのマクロ系の生物学では、上のような方法で標本を採集し、母集団の性質の解析に統計学的手法を用いることが、非常に多くある。この授業では、統計学全般について語っている時間は無いので、ほんのさわりしか扱わないが、下に示す参考書などを読んで、勉強しておいて欲しい。受験で培った数学力が落ちておらず、学問に対する情熱が非常に高い、1年生の今が統計学習得のチャンスですぞ!
- 参考書: 小野寺孝義・菱村豊 著. 「文科系学生のための新統計学」. 2005年. ナカニシヤ出版。 2500円
文系学生のために書かれた統計の教科書。説明がシンプルで簡単。
それでは、実際に統計的推測やってみよう。。
【ここをクリック】←ここに、産業技術総合研究所 デジタルヒューマン研究センターから提供して頂いた、1997年の男子大学生110人の身長、体重のデータがある(表示されない人は、moodleページを見てみよう)。このデータを使って、1997年当時の大学生の身長と体重の一般的傾向について議論してみよう。
このとき、
母集団は1997年当時の大学生全て
標本は1997年の男子大学生110人
標本母集団からランダムに(無作為に)抽出されたとする
今回の統計的推測では、
110人分のデータから、1997年当時の大学生全体の身長と体重の傾向を推測する
ことを目的としている。
- まず、Rにデータを取り込む。データは数が多いし空白で区切られているので、c()を使ってデータを取り込むよりは、scan()という関数を使って、h というオブジェクトにデータを入れる方がいい(データの取り込みには他にもいろんな方法があるが、ここではコピー・ペーストで行えるscan()を使って解説する)。
> h=scan()
1:
画面に表示された 1: の後に、上のページから身長データをコピー・ペーストして、最後にenter キーを押す。次のように表示される。
1: 1775 1710 ..
..<省略>..
111:
同様にして、体重データも w というオブジェクトにを入れる。次のように表示される。
1: 79.8 58.0 ..
..<省略>..
111:
確認のために
> h
> w
と入力。データが一覧表示される。
- 標本データの視覚化
計測データが得られたら、まずは、グラフにしてみるよう。グラフとして視覚化することで、データの持つ性質が直観的に理解できる。こういうとき、Rは、いろんなグラフを一瞬にして描画してくれるので、非常に便利。
まずはヒストグラム(柱状グラフ)を使っみる。Rを使ってヒストグラムを書く場合は
> hist(h)
キーボードからたった7文字打ち込むだけで、身長の度数分布がグラフで表示される。
このグラフを見ただけで、標本データでは身長170cmぐらいの学生が最も多く、
データは釣り鐘型の分布をしているということが分かる。
同様のことを体重についてもやってみよう。
> hist(w)
- 要約統計量の表示
次に、この標本データの平均とか最大値とか、最小値とか、データの集まりがもっている基本的な性質を表示させて見よう。次のように入力。
> summary(h)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1578 1671 1700 1706 1734 1839
これで、1997年当時の調査した大学生110人の身長は、平均170.6cm(最大:183.9cm, 最小: 157.8cm)ということが分かった。1st Qu.と3rd Qu.というのは、全体の4分の1の人数(つまり25%)がどの高さまでの間に含まれているかということを表している。つまり、167.1cm以下の人が25%、173.4cm以上の人が25%、その間の人が全体の50%ということ。
体重も同様に解析してみよう。
> summary(w)
- 身長と体重の関係を視覚化
身長も体重も釣り鐘型の分布になっていた。では、この2つの数値の間に何か、関係があるだろうか?これもまた、グラフで表示させてみる。こういう場合、縦軸に体重、横軸に身長をとって、一人一人の持つ身長と体重の散布図を作る。Rの場合、次のように入力するだけ。
> plot(h,w)
身長と体重の関係は右上がりの直線関係にありそうだ。
2変数間の関係は、相関係数で表され、Rで簡単に計算できる(→R-Tipsの説明もみておこう)
>cor(h,w)
[1] 0.5872979 #値が正なら正の相関
- 統計的推定で分かったこと
今回、110人分のデータを使って、1997年当時の大学生男子の身長と体重について、
グラフによる視覚化
要約統計量の表示
散布図の作成
という3つのことを行った。この標本が母集団の性質を表しているとするならば、1997年当時の大学生について、次のような推定ができる。
1997年当時の男子大学生は、身長の平均が170.6cmで、データは釣り鐘型に分布している
体重は平均が59.53kgで、身長と同様にデータは釣り鐘型に分布している
身長と体重の間には、正の相関がある
これで、1997年当時の男子大学生という母集団の身長・体重について、統計的推定を行うことができた!
なお、今回は分散や標準偏差の話しは省略した。Rを使った統計解析の基本(データの図示、代表値の計算、データ間の相関)などについてはここでは説明しきれないので、下のリンクにある中澤さんによる解説などを読んで、勉強してみて欲しい。。
課題はmoodleページから提出: 締切は6月11日正午 †