*&color(red){このページは編集中です}; [#x36ba6eb] *Rをつかった統計解析入門 [#ydb07aa3] #contents *操作説明に入る前にやって置いて欲しいこと(男子学生のみ!) [#dda0f7ee] [[【ここをクリック】>http://bean.bio.chiba-u.jp/joho/index.php?joho19%2FPR%2FR%E3%81%AB%E3%82%88%E3%82%8B%E7%B5%B1%E8%A8%88%E8%A7%A3%E6%9E%90]]←左のリンクのページに入り、画面の説明に従って、データを入力してください。今回の復習課題に使います(間違った形式で入力すると、処理が複雑になりますよ)。入力が同じ時間に集中すると「更新の衝突」がおきます。「コメントの挿入」ボタンをクリックする直前に、一度、ページをリロード(再読込)しておいてください。 *&color(green){【トピックス】};:オープンソースというもの [#cf453ce1] これまでは主にExcel, Word, Power Pointなど、お金を出して買わなければならないソフトウェアの使い方を勉強してきました。でも、これらを個人で購入しようとすると、アカデミックパッケージを買っても数万円します。自分でパソコンを買った人にとって、こういうソフトを揃えるだけでもけっこう大変なことでしょう。 一方、講義で使ったK2EditorやWinShotはフリーソフトです。こういうソフトウェアは、作者が趣味で作ったり、自分のために作ったものを、無料で公開してくれている場合が多いです。作者の努力と親切さに感謝の心を持って、有りがたく使わせていただきましょう。 そして、近年のインターネットが発達に伴って爆発的に広まってきた物が、''オープンソース''というものです。ここでいう「ソース」というのは、もともとはプログラムの核となる「ソースコード」(文字で書かれた大元のプログラムリストと考えていい)のことを言っています。「オープンソース」では、大元の「ソース」が無料で公開されているので、それを見て、改良点を思いついた人が、自由に改良することができます。あるいは、そういうプロジェクトを立ち上げれば、不特定多数の人が意見を交換し、協同作業で改良を加えることで、どんどん素晴らしいものができあがります。 「無料だったら、大したものは無いんじゃない?」などという声が聞こえてきそうですが、そんなことは無いです。コンピュータを動かす核であるOSの一つ、Linux (この教育用計算機システムでも利用可能だし、授業のウェブサーバーでもOSとして使っている)は、オープンソースで大成功を収めた例です。 今後の講義では、オープンソースで配布されているいくつかのソフトウェアを用いて、統計、プログラミング、データベース等を学んでゆきます。それぞれのテーマについてはもちろん商用のソフトウェアもありますが、次のような理由でオープンソースのソフトウェアを選びました +''無料である'' (学生にとっては重要な条件) +''常に改良が加えられている'' (いつも最新の機能が得られる。バージョンアップの度にお金を支払う必要も無い) +''研究でよく利用するソフトウェアにはオープンソースのものが多い'' +''1年生のうちに様々なオープンソースソフトウェアに触れておけば、後の学習が楽になるはず''(特に、統計!) デメリットとしては、 +ユーザーインターフェースが洗練されていない場合がある --多くの場合、コマンドラインから命令を手入力する +動作可能な状態にするまでの設定が、複雑な場合がある +説明が英語で書かれている場合が多い でも、デメリットよりもメリットの方がずーっと大きいので、皆さんもオープンソースソフトウェアに慣れ親しんでください。 **代表的なオープンソースソフトウェア [#i888cac4] &size(10){日本語で描かれた情報が載っているページへのリンクのみ示した。本家はほとんど英語。}; ***有名なもの [#d0577a32] -[[Linux>http://www.linux.or.jp/]] オペレーションシステム -[[Apache>http://www.apache.jp/]] ウェブサーバ ***授業で使うもの [#pbda4dff] -[[FireFox>http://www.mozilla-japan.org/products/firefox/]] ウェブブラウザ -[[R>http://www.okada.jp.org/RWiki/index.php?%a5%ea%a5%f3%a5%af%bd%b8]] 数値計算パッケージ -[[PHP>http://www.php.gr.jp/]] プログラミング言語 -[[PostgreSQL>http://www.postgresql.jp/]] リレーショナルデータベース(教育計算機システムでは残念ながら使うのは難しそう。。。) ***貧乏学生の味方 [#o06791e2] -[[OpenOffice>http://ja.openoffice.org/]] Microsoft Officeとほぼ同じことができるソフトウェアパッケージ(ワープロ、表計算、プレゼンテーション) -[[Gimp>http://wingimp.hp.infoseek.co.jp/]] 画像処理ソフト。 Adobe Photoshopと同じような機能を持つ(「フォトショップキラー」と呼ばれることも)。 *Rを使った統計解析 [#s6627e72] 前回のアンケートの結果分かったのは、多くの人が統計解析というものが何をするのか、今ひとつイメージがつかめていない(あるいは、イメージは出来ていても、言葉にできない)ようでした。基礎からやって欲しいという意見もあったけれど、それには、時間が無さ過ぎます。そこで、この授業は、Rを使ってできる実践的な統計解析をやって見ましょう。生物学を学ぶ限り、統計解析は必ず使うことになりますから(もう、土谷先生や仲岡先生の授業では使ったでしょ?)。難しい理論は十分には理解できていなくても、「・・・・という解析をして得られた__という結果から、####と判断しました」と、自分の判断の客観性を、Rを使った解析で主張する方法を習得します。こうやって、まず、データとその扱いに慣れることで、統計解析に親しんでゆきましょう。 **統計解析の2つの主要目的 [#if472956] この授業では統計解析を、次の2つの目的のために使います。 ~&size(14){1. ある対象(集団)から得られた部分的な数値データから、その対象の持っている性質や特徴を知ること}; ~&size(14){2. ある対象や実験で得られた数値データを用いて、その対象についてどういう判断を下せば良いかを論じること}; **Rの起動と初めての統計解析処理(平均値の計算) [#m711909a] まず、デスクトップに保存したRのフォルダで、Rのアイコンをダブルクリックする。~ そうすると、画面が切り替わり、小さいウィンドウの中にいくつかのメッセージと、一番最後に、 > が表示される。この">"をプロンプトと言う。プロンプトの右側には通常、カーソルがあり、「このマークの後に何かコマンド(命令)を打ち込んでくださいよ」とあなたに促している。 では、プロンプトのご要望に添って、何かコマンドを入力してみよう。とりあえず、"data1=c(1,2,3,4,5,6,7)"と入力する。 >data1=c(1,2,3,4,5,6,7) > 何もおこらない?いえいえ。エラーメッセージが何も表示されず、新しいプロンプトが表示されたら大成功。上のようにならなかった人は、半角・全角の文字の違いとコンマやカッコに注意してもう一度やってみよう。 上で行った操作は、"data1"という変数名に"(1 2 3 4 5 6 7)"というベクトルを代入せよという命令。では、プロンプトの後に"data1"と入力して、結果を見てみよう。 >data1 [1] 1 2 3 4 5 6 7 data1の内容が正しく表示されただろうか? じゃあ、次に、今入力したベクトルの要素の平均をとってみよう。コマンドは今後、囲みの中のプロンプトの後に書かれている通りに入力してくださいね。 >mean(data1) [1] 4 平均値"4"が表示されれば大成功。これで、あなたがRを使って行う、初めての統計解析は、無事に成功しました。~ では、数値をもう少し変えて、自分の好きな値で計算してみよう。。。といっても、「"data1=c(1,2,3,4,5,6,7)"なんてもう一度タイピングするのは面倒だなー」と思うでしょ?~ 安心してください。キーボードの"↑"記号を何回か押してみると、 > data1=c(1,2,3,4,5,6,7) ほら、さっき入力したコマンドが表示された。そしたら"←"と"Back space"などを使って、数値を好きに変更して、最後に"Enter"キーを押そう。 > data1=c(1232,223.33,3 ,4 , 5666) 半角文字であるかぎり、別にスペースがいくつ入っていても大丈夫。入力したら、上と同じことをしてみると、 > data1 [1] 1232.00 223.33 3.00 4.00 5666.00 > mean(data1) [1] 1425.666 はい。これで、自分の好きな値を入力して、平均を計算することができました。 **Rを使った2回目の統計解析 [#h8ced015] では、統計解析におけるRの使い方をもう少し詳しく見てゆきましょう。 統計とは、''一部をもって全体を知る''作業です。[[【ここをクリック】>http://bean.bio.chiba-u.jp/joho18/index.php?%A5%D7%A5%ED%A5%B8%A5%A7%A5%AF%A5%C8R%A4%CB%A4%E8%A4%EB%C5%FD%B7%D7%B2%F2%C0%CF]]←ここに、産業技術総合研究所 デジタルヒューマン研究センターから提供して頂いた、1997年の男子大学生110人の身長、体重のデータがあります。このデータを使って、1997年当時の大学生の身長と体重の一般的傾向について議論してみましょう。 +まず、Rにデータを取り込みます。先ほどは c() という関数を使いましたが、今度はデータ数が多いし空白で区切られているので、scan()という関数を使って、h というオブジェクトにデータを入れます。 > h=scan() 1: 画面に表示された 1: の後に、上のページから身長データをコピー・ペーストして、最後にenter キーを押します。次のように表示されるはずです。 1: 1775 1710 .. ..<省略>.. 111: 同様にして、体重データも w というオブジェクトにを入れてください。次のように表示されるはずです。 1: 79.8 58.0 .. ..<省略>.. 111: 確認のために > h > w と入力してみましょう。データが一覧表示できます。 +これだけデータがあると、平均とか最大値とか、最小値とか、データの集まりがもっている基本的な性質が気になりますよね。そこで、次のように入力してください。 > summary(h) Min. 1st Qu. Median Mean 3rd Qu. Max. 1578 1671 1700 1706 1734 1839 これで、1997年当時の調査した大学生110人の身長は、平均170.0cm(最大:183.9cm, 最小: 157.8cm)ということが分かりました。1st Qu.と3rd Qu.というのは、全体の4分の1の人数がどの高さまでの間に含まれているかということを表しています。つまり、167.1cm以下の人が25%、173.4cm以上の人が25%、その間の人が全体の50%ということです。体重も同様に解析してみましょう。 > summary(w) Min. 1st Qu. Median Mean 3rd Qu. Max. 44.20 55.10 59.40 59.53 64.40 82.20 #ref(./hist.gif,around,right,60%) +次に、身長、体重の分布をヒストグラムに表示させてみましょう > hist(h) キーボードからたった7文字打ち込むだけで、 身長の度数分布がグラフで表示されました。同じことを体重についてもやってみましょう。 #ref(./plot.gif,around,right,60%) +身長も体重も釣り鐘型の分布になっているようです。では、この2つの数値の間にどういう関係があるかを、グラフで表示させてみましょう。縦軸に体重、横軸に身長をとって、散布図を作ってみます。 > plot(h,w) 身長と体重の関係は右上がりの直線関係にありそうですよね。110人分のデータを使って、1997年当時の大学生男子の身長と体重について、いろんなことが推定できそうです。Rを使った統計解析の基本(データの図示、代表値の計算、データ間の相関)などについてはここでは説明しきれないので、興味のある人は、下のリンクにある[[中澤さんによる解説>http://phi.med.gunma-u.ac.jp/statlib/stat.pdf]]などを読んで、勉強してみて下さい。 **統計的検定のやりかた(生物学科の皆さんが、たぶん、一番やってみたいのがこれ?) [#l89c8f9a] 皆さんはこれから、自然界の''集団''を対象にして、いろんなデータを集めるだろうと思います。例えば、千葉大キャンパス内に生息するゴキブリの体長かもしれないし、雄と雌の比率かもしれません。そういうデータに共通して言えることは、''全ての個体を観察・計測することは無理''だということです。そこで、私たちは千葉大の全ての集団(これを''母集団''と呼びます)から、偏り無く一部を取り出して(これを''任意抽出''とか''ランダムサンプリング''と呼びます)、母集団の性質を推測します。「一部を使って全体を知る」というのが統計の基本であると言って良いでしょう。 #ref(./kasupin.gif,around,right) ところで、生態学などのマクロ系の生物学では、データ解析に統計学が必要になることが、非常に沢山あります。この授業では、統計学全般について語っている時間は無いので、ほんのさわりしか扱いません。下に示す参考書などを読んで、勉強しておいてください。受験で培った数学力が落ちておらず、学問に対する情熱が非常に高い、1年生の今が統計学修得のチャンスですぞ! -お勧め参考書: 「生物学を学ぶ人のための統計のはなし 〜きみにも出せる有意差〜」(粕谷英一著・文一総合出版・1998. 2400円) --巷では「'''粕谷のピンク本'''」として有名な本。最初の方はほとんど予備知識無しに読んでも大丈夫。 さて、前回の課題アンケートでは、A君とB君のジャンケンの勝ち負けの数20回分のデータから、2人のジャンケンの強さに違いがあるかどうかという質問をしました。ほとんどの人が、「20回では何も分からない。1000回ぐらいやれば、たぶん、半々になる」とA君寄りの回答でした(→[[アンケート結果>http://bean.bio.chiba-u.jp/lab/index.php?cmd=read&page=%BC%F8%B6%C8%2FH18%2F%BE%F0%CA%F3%BD%E8%CD%FD%2F%B2%DD%C2%EA%B7%EB%B2%CC%C8%AF%C9%BD#content_1_7]])。 「たかがジャンケンだから...」という声が聞こえてきそうですが、こういう状況だったら答えはどうでしょうか? あなたは生物学科の4年生です。卒業研究テーマは「ヨコヅナサシガメの性表現について」というものです。 ヨコヅナサシガメは外来種として問題視されています。通常、集団内の雌雄の比率は1:1ですが、千葉県のある 地域の集団では、どうも、雄の方が多そうだということに気づきました。この雌雄の差が生じた原因をつきとめ れば、ヨコヅナサシガメの防除にも使えるかもしれません。予備実験でその地域の調査に行き、あちこちで採集 したところ、20個体採集することができました。性比を調べたところ、15匹が雄、5匹が雌でした。 今後、もっと大規模な調査を計画するためにも、今回の調査結果が、単なる偶然か、それとも、その地域の集団の 性比に偏りがあるせいなのかを知りたいと思います。どうすれば良いでしょうか? 卒業がかかっているのですから、「1000個体ぐらい見ないとわからない」とか、「雄・雌は偶然に決まるに違いない」などとは言ってられなさそうです。 そこで、統計的検定の出番です。今、「採集したうち20匹中15匹が雄という状況は、性比が1:1の生物で、単なる偶然で起こるようなことか、あるいは、偶然では滅多に起こらないことか」ということです。このように、得られたデータが単なる偶然で生じることからどれだけかけ離れているかを知るには、''統計的検定''という作業が必要になります。 統計的検定では、次のような論証を行います。 +''帰無仮説と対立仮説を作る'' &br; 問題にしているのは、調査地域における全てのヨコヅナサシガメからなる集団(''母集団''と呼びます)の性比です。今回の例だと、普通の状態だと母集団の性比は1:1ですが、それが千葉県のある地域では、1:1からずれているかどうかを推定したいわけです。そこで、母集団の性質について次のような仮説を作ります 母集団の性比は1:1である この仮説のことを ''帰無仮説''と言います。&size(11){(統計の教科書を見ると、帰無仮説には「違いがない」とか「差がない」という仮説を使うと書かれています。「違いがある」とか「差がある」という仮説はつかえません。今回の場合「『母集団の性比は1:1である』というだけで「差が無い」とか「違いが無い」とかは言って無いじゃないか?」と思う人がいるかもしれません。でも、「性比が1:1である」ということは「雄と雌の出現確率には''違いが無い''」ということを意味しています。字面だけで判断するとこんがらがる場合があるので、注意してください。)}; &br; 帰無仮説に対応して、あなたが持っている仮説は、得られたデータの偏りが偶然では無く、母集団の性比そのものが偏っているということです。この仮説の事を''対立仮説''と呼びます。今回の場合、対立仮説は、 母集団の性比は1:1では無い ということです。対立仮説は帰無仮説を否定したものになっています。 +''p値の計算'' &br; 次に、帰無仮説が正しいと仮定した場合に、得られたデータが実現する確率を計算します。「母集団の性比は1:1である」(帰無仮説)が正しいと仮定しているのですから、性比は本来、1:1になるはずです。でも、実際に得られたデータでは、雄が15匹だったので、 20匹中15匹が雄だったというのは、サンプリングの際の偶然のバラツキによる 可能性が考えられます。つまり、「母集団の性比は1:1」であったとしても、偶然のバラツキによって、20匹中雄が15匹得られる確率を計算して、その確率をもとに、それがどれだけ起こりにくいことかを判断しようとしています。この確率の事を''p値''(Rでは''p-value''と表示される)と呼びます。 &br; &size(11){ このp値の計算で、一つ注意しなければならないことがあります。それは、}; p値の計算をするときに、20匹中雄が15匹の場合だけを計算してはいけない 20匹中雄が15匹以上(15, 16, 17, 18, 19, 20)の場合の確率を計算しなくてはならない &size(11){ということです。この後の議論に出てくるように、起きた事象がどれだけ珍しいことかを判断して、それが滅多におこらないようなことなら、帰無仮説を棄却します。16匹以上が雄というそれぞれの事象は15匹が雄という事象よりも起こりにくいことですから、そう言う場合にも、帰無仮説は棄却されることになります。そのため、p値の計算は「15匹以上」の場合の確率が必要になるのです。この確率のことを''累積確率''と呼びます。}; +''有意水準との比較'' &br; 次ぎに、得られたデータが実現する確率(p値)と%%%ある基準%%%とを比較することで、こういう状況が起きることが、どれほど珍しいことなのかを判断します。多くの場合、基準には0.05(つまり5%)あるいは0.001(つまり0.1%)とか0.0001(つまり0.01%))という値が使われます。この基準のことを''有意水準''とか''危険率''と呼びます。5%の有意水準だと、そのデータが「希に」偶然によって生じる程度は20回に1回ぐらいです。上で得られたp値と有意水準を比較すると、次の2つの場合が考えられます: ++''p値が有意水準よりも低い'': 「母集団の性比は1:1だけど、サンプリングの際に、たまたまデータに偏りが生じた」(帰無仮説)という状況が生じる確率(p値)が、「希さ」の基準(有意水準)よりも小さいので、そういう状況は''滅多に起こらない''と考えて良いでしょう。つまり、「母集団の性比は1:1だけど、サンプリングの際に、たまたまデータに偏りが生じた」という最初に考えた仮説は''否定される''ということになります。 &br; くどいようですが、大事なことなので繰り返して説明すると、 「母集団の性比は1:1である」(帰無仮説)(つまり、データの偏りは単なる偶然) が棄却されたのですから、 「母集団の性比は1:1では無い。」(対立仮説)(つまり、データの偏りは、単なる偶然では無い) &br; という仮説が採択されます。つまり、「%%%20匹中15匹が雄である状況は、偶然で生じることはほとんど無いので、母集団の性比に偏りがある可能性は高い%%%」と考えられます(こういう論理の進め方を''背理法''と呼びます)。この場合、得られたデータ(この場合、は20匹中の15匹が雄)には、...%&size(10){(...にはp値と比較した値が入る)};の有意水準で、''有意差がある''と言います。 ++''p値が有意水準よりも高い'':上と同様に考えると、 「母集団の性比は1:1である」(帰無仮説) が正しいという仮定の下で、「20匹中15匹が雄」という状況が生じる確率(p値)が、「希さ」の基準(有意水準)よりも大きいわけです。言い換えると、「母集団の性比が1:1であるときに、20匹中15匹が雄になるという状況は、別に不思議ではない」ということになります。つまり 「母集団の性比は1:1である」(帰無仮説)という仮説は 棄却 されない ということです。得られたデータからは帰無仮説を否定できなかったので、この場合、得られたデータ(この場合、は20匹中の雄・雌の数)には、...%&size(10){(...にはp値と比較した値が入る)};の有意水準で、''有意差が無い''と言います。ここで注意しなければならないのは、''「有意差が無い」''からといって、''「母集団の性比は1:1である」と結論づけてはいけない''ことです。「有意産が無い」のは、「母集団の性比は1:1であってもおかしくは無い」ということを意味しているだけで、単なる偶然の結果かもしれないし、データ数が少ないせいかもしれないし、いろんな場合があり得ます。 ***Rを用いた実際の解析: [#n9cc17b3] では、実際に先ほどの例を解析してみましょう。この検定は二項検定と呼ばれています。まず、帰無仮説は 母集団の性比は1:1である ということです。この帰無仮説が正しいと仮定すると、 得られたデータの偏りは、サンプリングの際の偶然の偏りであると考えられます。確率50%で生じる事象が、20回中15回得られたわけですよね。検定の際には、これより希な条件も全て含めて確率を計算します。つまり、20回虫、15回以上その事象が生じる確率を計算します。 手で計算してもいいのですが、今回はすぐにRを使ってみましょう。上の検定を行うにはprop.test()関数を使います。 prop.test(x,n) と入力するだけで、実際のx個のサンプルの中で、データ値がn回実現したという状況で、そのデータ値は(もう一つの対になるデータ値に対して)母集団中で1:1で出現するという帰無仮説をテストできます。 このテストの説明はそんなに難しくないです。20回中、雄が15回以上生じる確率を計算してみてください。詳しい解説は、上記、粕谷さんのピンク本に載っています。 上の例だと、20サンプル中15サンプルが雄で、帰無仮説は「母集団の性比は1:1」だということでしたから、 > prop.test(15,20) 1-sample proportions test with continuity correction data: 15 out of 20, null probability 0.5 X-squared = 4.05, df = 1, p-value = 0.04417 alternative hypothesis: true p is not equal to 0.5 95 percent confidence interval: 0.5058845 0.9040674 sample estimates: p 0.75 ※二項検定はRのコマンドに入っていました。 > binom.test(15,20) でテストできます。 p値の値は0.044なので、有意水準が5%の場合は、有意水準よりも小さい値だということです。なので、帰無仮説「母集団の性比は1:1である」は棄却されます。(もちろん、有意水準を0.001にすると棄却されません) つまり、調査した地域のヨコヅナサシガメの母集団には、有意水準5%では、雄と雌の性比に偏りがあったということができます。 (有意水準0.1%の場合は、「性比に偏りがあるかどうか分からなかった」) どうやらその地域のヨコヅナサシガメの母集団には性比に偏りがありそうなので、卒業研究の調査をすすめても良さそうですね。 ***Rを使った実際の解析2:2集団の差の検定 [#vc8cafd5] 先ほど1997年の男子大学生110の身長データをhというオブジェクトに入れました。[[【このページ】>http://bean.bio.chiba-u.jp/joho18/index.php?%A5%D7%A5%ED%A5%B8%A5%A7%A5%AF%A5%C8R%A4%CB%A4%E8%A4%EB%C5%FD%B7%D7%B2%F2%C0%CF]]のもう少し下の方には、1998年当時60歳以上の男性51人の身長のデータものっています。大学生(平均20.52歳)と60以上(平均68.61歳)では、48歳ほどの差があります。同じ成人男性といったって、40年も違う時代に成長期を迎えたわけですから、身長には違いがあってもおかしく無いような気がします。この2つのデータをみて、2つのサンプルの母集団(ランダムサンプリングが行われたとして、1997年当時の男子大学生全てと1998年当時の60歳以上の男性全て)の間で身長には差があると言っても良いでしょうか? 60歳以上の男性の身長データをオブジェクトに格納します。scan()関数を使って > h2=scan() 1: 1547 1689 .. ..<省略>.. 52: hとh2のそれぞれの平均値やヒストグラムを比べてみてください。 > summary(h) > summary(h2) > hist(h) > hist(h2) 平均値やヒストグラムを見た限りでは、けっこう違いがありそうです。 #ref(./boxplot.gif,around,right,60%) もう一つグラフを作ってみましょう。2集団のデータを簡単に比較するときに便利な関数が、boxplot()です。 > boxplot(h,h2) さて、いよいいよ検定です。検定の考え方は上で示したのと全く同じです。ただし、データの持っている性質が違うので、p値の計算方法は異なってきます。このような2集団の違いの検定には、Wilcoxonの順位和検定という方法を使います。検定の説明はブラックボックスになりがちですが、上で紹介した粕谷さんのピンク本や、[[中澤さんのRの使い方pdf>http://phi.med.gunma-u.ac.jp/statlib/stat.pdf]]には、詳しい考え方の説明がかかれていますから、読んでおいて下さい。今回は''Rを使った統計的検定がいかに楽か''ということを示すのが目的なので、詳しくは触れません。 まず、ヨコヅナサシガメの例で見たように、帰無仮説と対立仮説を決めます。 帰無仮説: 2つのサンプルの母集団に差が無い 対立仮説: 2つのサンプルの母集団に差がある 2つの母集団に違いがなければ、hとh2という集団のデータは、母集団から抽出したときに、たまたま偶然で偏ってしまったものだろう。そういう偶然の偏りでこれだけの違いが生じるのは、どのくらいの確率(p値)で生じるのかを計算します。Rではwilcox.test()という関数を使います。 > wilcox.test(h,h2) Wilcoxon rank sum test with continuity correction data: h and h2 W = 4957, p-value = 5.329e-15 alternative hypothesis: true mu is not equal to 0 p値の値は 5.329e-15 で、これは 5.329x10^(-15) を示しています。つまり、0.0000000000000005329です。これは有意水準の0.01%よりもずーっと小さい値なので、2つの身長データの違いが同一母集団から偶然のサンプリングのバラツキでで生まれたということはほとんど無い、ということを示しています。統計学っぽく表現すると、「2集団の差をWilcoxonテストで検定した結果、0.01%の有意水準で有意な差があった」と書きます。 どうやら、40年も年齢の異なる2つの母集団の身長には差があると言って良さそうです。やっぱり、成長期に摂取できた栄養の影響などが、きっと大きいのでしょう。 **リンク: [#sf8c4196] -[[CRAN>http://cran.r-project.org/]]欲しい情報、欲しい機能はきっとここで見つかる(でも英語サイト) -[[RjpWiki>http://www.okada.jp.org/RWiki/index.php?%a5%ea%a5%f3%a5%af%bd%b8]] Rに関する様々な情報 -http://phi.ypu.jp/swtips/R.html 統計処理ソフトウェアRについてのTips(群馬大・中澤さんによるページ) --[[同筆者による解説PDF>http://phi.med.gunma-u.ac.jp/statlib/stat.pdf]](これを全部読んで、Rを使って練習すれば、統計が得意になるかも) **その後のB君... [#g7a70f7a] さて、いつもじゃんけんに負けてしまうB君。お父さんや母さんに聞いても、「そのうちきっと続けて勝つよ」と、取り合ってくれません。どーしても、納得行かないので、隣町に住む、いとこのあなた(理学部生物学科の学生)に相談に来ました。「僕にとってはしかつ問題なんだかね」と言うB君。"むつかしい"言葉を使うのが好きなおませさんです。 ~ そこで、あなたは、なんとかB君にも分かるように説明してみました。 ~「B君は、A君がなにかずるをしていると思ってるんだよね?だって20回じゃんけんをして、15回もA君が勝っちゃうんだからおかしいよね。でもA君は、じゃんけんは偶然で決まるんだから、1000回もやればそのうち勝率は半々になるって言うんでしょ?じゃんけん1000回かー。そのくらいやれば、2人とも大人になっちゃうね。~ ~まあ、ともかく、仮にA君が言うように、じゃんけんはでどちらが勝つかはホントに半々で決まるとしてみようよ。~ 20回のうち10回勝つことは、ありそうだよね。~ 20回のうち11回勝つことも、ありそうだよね。~ 12回勝つことは、まあ、ありそうかな。~ 13回や14回だと、ちょっと微妙?~ それで15回だと、。。。ありそうにないって感じるわけでしょ? ~いいかい?今、「じゃんけんでどちらが勝つかはホントに半々で決まる」と仮に考えているよね?そのとき、~ A君は、「半々で決まるのだから、20回中15回勝つことはそんなに珍しいことじゃない」~ B君は、「半々で決まるんだったら、20回中15回勝つなんて珍しいことが起こるのはおかしい」 ~2人の主張が食い違ってるわけだ。だったらさ、「勝敗が50%の確率で決まるとき、20回中15回勝つこと」が、どれだけ珍しいことか、測ってみればいいんじゃない?こういうのって、確率で測れそうだよね。 ~じゃあ、「勝敗が50%の確率で決まるときに、20回中15回勝つ」確率を計算してみよう。~ その確率がそんなに小さく無いのなら、「勝敗が50%の確率で決まるときに、20回中15回勝つ」ことは、別にあっても不思議じゃ無いっていうことでしょ?~ 逆に、その確率がとーっても小さいなら、「勝敗が50%の確率で決まるときに、20回中15回勝つ」ことは滅多に起きないということなので、きっと「勝敗が50%の確率で決まる」っていう前提が間違ってるよね?~ (なんと、B君は、この難しい説明を理解したようです。) ~どうやってその確率を計算するかって言うと....うーん、一つ一つ説明するのは大変だから、ここはパソコンにやらせよう。ほら、このRというソフトを使うと、 binom.test(15,20) Exact binomial test data: 15 and 20 number of successes = 15, number of trials = 20, p-value = 0.04139 alternative hypothesis: true probability of success is not equal to 0.5 こうなって、p-valueっていうのが、「勝敗が50%の確率で決まるときに、20回中15回(以上)勝つ」確率なんだよ(注:&size(11){話しが難しくなりそうなので、累積確率の説明は端折ったようです};)。そうすると、0.041っていうことは、4%ぐらいの確率だよね。どう?「勝敗が50%の確率で決まるときに、20回中15回(以上)勝つ」のは、100回中4回しか起きないっていうことなんだよ。やっぱり低いって思う? ~今やったような計算を統計的検定って言うんだけど、問題にしていることがどれだけ起こりにくいかを議論するときには、5%とか、0.1%とか、0.01%っていう基準を使うんだ。まあ、よく使われる、「珍しさ・起こらなさ」を示す基準のうち一番大きいのが5%だね。B君のジャンケンの例だと、「勝敗が50%の確率で決まるときに、20回中15回(以上)勝つ」確率が4.1%だったでしょ?5%っていう基準よりも小さいので、「滅多に起きない」って言っていいわけ。つまり、「勝敗が50%の確率で決まる」っていう前提が間違いだと考えられるので、きっとA君が、何かずるをしている可能性が高いだろうと考えられるんだよ。でも、珍しさの程度はあくまでも、4%、つまり、100回中4回ぐらいは起きても構わないってことだからね。A君が言うように「勝敗が50%の確率で決まる」ってことは絶対無いなんて言える訳じゃないからね。 ~さすがのB君も、確率とか統計とかが出てくるとこんがらがってきたようです。 ~ともかく、A君がずるをしているのかも知れないという可能性を、何だか難しい話しで説明してもらったB君、少しは納得できたようです。ついでに、どうすればずるをされなくなるか、聞いてみました。何回か一緒にジャンケンをしてみたところ、手や体の動きに癖は無さそうです。そうすると、きっと、出し方のパターンを覚えられてるのだろうという事になり、乱数表をおみやげに貰いました。ジャンケンをする前に、この表をこっそり見て、何を出すかを決めるそうです。。。。 *PHP(とXitami)の動作確認 [#v0e4a9fc] -予習課題でダウンロードした次の2つのフォルダがデスクトップにできていることを確認する php-4.4.2-Win32 xitami-25 -それぞれのフォルダを「マイドキュメント」にコピー -「マイドキュメント」に移動してそれぞれのフォルダの名称を、次の2つに変更 php xitami *第9回授業の課題 [#g11a92cd] -提出期限:6月21日水曜正午(下記課題全て) --提出期限を過ぎたものでも、点数を半分にするなどで評価しています。 **課題1.アンケート調査 [#rb7e174c] +&size(16){http://bean.bio.chiba-u.jp/joho18/ に、「自分のID/09」という新しいページを作成し、下の囲みの中にあるアンケートをコピー・ペーストして、「回答:」の後に答えを書き込むこと。}; *第9回授業アンケート **氏名: **課題への回答 -今日(6月15日)の授業の進み方は?(はやい、丁度いい、おそい) --回答: -今日の授業の難しさはどう感じましたか(簡単すぎ 簡単 丁度いい 難しい 難しすぎ): --回答: -難しいと答えた人は、特にどの点が難しかったですか?: --回答: -今日の授業は(よく分かった 分かった 分からなかった): --回答: -分からないと答えた人は、特にどの点が分からなかったですか?: --回答: -今日の講義で理解できなかった用語があったら挙げてください: --回答: -この授業では大量のデータをいかに効率良く処理するかということに注目しています。 そこで、次の質問に答えてください。 -これまでの人生で、自分が扱った最も大きなデータの規模を答えてください。例えば、 名簿の場合人数と項目、実験データの場合、何件のデータとか。 --回答: -今後の大学生活で、自分がどのくらいの大きなデータを扱うことになるか、データの種類と規模を 想像で答えてください。 --回答: **課題2.復習:Rを使った統計的検定 [#w1aadd4f] -次の説明文を読んで、Rを使った統計的検定を行いなさい。下の囲みを上で作ったページにコピー・ペーストし、「:」の後に答えを書き込みなさい。 -[[生物学科1年男子学生の身長・体重>http://bean.bio.chiba-u.jp/joho18/index.php?%A5%D7%A5%ED%A5%B8%A5%A7%A5%AF%A5%C8R%A4%CB%A4%E8%A4%EB%C5%FD%B7%D7%B2%F2%C0%CF]] データを用います。データはスペース区切りになっているので、K2Editorとエクセルを使って、これまでやってきたように整形し、身長のみ、体重のみのデータに変更して使ってください。Rのscan()関数を使ってオブジェクトに格納すると楽です。この問題は、上でやった「統計的検定2」の内容とほぼ同じです。 問1:身長のsummary()の結果をペーストしなさい: 問2:体重のsummary()の結果をペーストしなさい: 1997年男子大学生110人と、生物学科男子学生身長のデータは、それぞれが、当時の大学生の集団から、 任意にサンプリングされたものだと仮定します。このとき、両者の母集団の身長に差があるかどうかを 検定します。 (2006年6月22日に問題文を書き替えました) 問3:帰無仮説は何ですか?: 問4:対立仮説は何ですか?: 問5:検定に用いたRの計算式と結果をコピー・ペーストしてください (以上、全て、回答を書くときは、1行ずつ、行頭に半角スペースを入れること) 問6:検定の結果からどのようなことが議論できますか?: -評価 --統計的検定の考え方を理解しているかどうか --Rを用いて正しく検定を行っているかどうか **課題3.予習 :PHPによるプログラミング演習 [#d3f8bcbe] -次回のプログラミング演習では、「繰り返し」と「条件分岐」というプログラミングに欠かせない考え方を学びます。 //-下のサイトを読んで、「繰り返し」と「条件分岐」がどういうことを行うか、理解しておいてください。 -次に示すのは、プログラムの一部です。 「//」の後はコメント文という、プログラムの実行には無関係の説明文です。 for($i=0; $i<10; $i++) { //繰り返しの開始:この行の { から、対応する一番最後の行の } までの間を10回繰り返す。 //10回という数値は、$iという変数の初期値は0で、1回の繰り返しごとに1ずつ増やされ // 9 (つまり<10)になるまで10回分繰り返されるということ $amari = fmod($i, 2); // $iを2で割ったときの余りを$amariという変数に入れる。1周目だと$iは0なので$amariは0 if($amari==0){ //条件文の開始:もし$amariが0ならば echo "偶数 "; //「偶数 」と表示する(改行は無い) } else { //もし$amariが0で無いならば echo "奇数 "; //「奇数 」と表示する(改行は無い) } //条件文の終了 } //繰り返しの終了 -上のプログラムを見て、次の問に答えなさい。下の囲みを上で作ったページにコピー・ペーストし、「:」の後に答えを書き込みなさい。 問1: 上のプログラムの実行結果を、下の3つから選んで、数字で答えなさい。 1. 偶数 奇数 偶数 奇数 偶数 奇数 偶数 奇数 偶数 奇数 2. 奇数 偶数 奇数 偶数 奇数 偶数 奇数 偶数 奇数 偶数 3. 偶数 偶数 偶数 偶数 偶数 奇数 奇数 奇数 奇数 奇数 答え: 問2: 繰り返しの数を20回にするには、上のどこをどのように変更すれば良いか? 答え: -評価 --プログラミングにおける繰り返しと条件分岐を上の説明に沿って考え、正しく答えられたかどうか 第9回授業の課題 [#ic6d1e37] -提出期限:6月20日水曜正午(下記課題全て) --提出期限を過ぎたものでも、点数を半分にするなどで評価しています。 **課題1.アンケート調査 [#q1781891] +&size(16){http://bean.bio.chiba-u.jp/joho19/ に、「自分のID」/09 という新しいページを作成し、下の囲みの中にあるアンケートをコピー・ペーストして、「回答:」の後に答えを書き込むこと。}; -手順 ++個人ページのトップページ(上の方のページタイトルに、「joho19/自分のID」のみが書かれているページ)、画面の上の方にある〔 新規 〕をクリック ++ページ名を尋ねる入力スペースが表示されるので、半角英数字で、ドット・スラッシュ・0・9を下のように入力 ./09 ---注:課題提出ページが正しく作れていない場合、課題の点数から1点減点です 良くある間違い: joho19/07s9999/06 というページを作るべきなのに joho19/07s9999/05/06 としてしまったとか ++下の囲みの中をコピー・ペーストし、回答を書き込む *第9回授業アンケート **氏名: -この授業では大量のデータをいかに効率良く処理するかということに注目しています。 そこで、次の質問に答えてください。 -これまでの人生で、自分が扱った最も大きなデータの規模を答えてください。例えば、 名簿の場合人数と項目、実験データの場合、何件のデータとか。 --回答: -今後の大学生活で、自分がどのくらいの大きなデータを扱うことになるか、データの種類と規模を 想像で答えてください。 --回答: // //**課題2.Rを使った統計的検定 [#ld68aeb6] //-次の説明文を読んで、Rを使った統計的検定を行いなさい。下の囲みを上で作ったページにコピー・ペーストし、「:」の後に答えを書き込みなさい。 //-[[日本人男子学生、1997年の計測データと1998年当時60際以上の男性51人の身長データ>http://bean.bio.chiba-u.jp/joho/index.php?joho19%2FPR%2FR%E3%81%AB%E3%82%88%E3%82%8B%E7%B5%B1%E8%A8%88%E8%A7%A3%E6%9E%90]] //を用います。データはスペース区切りになっているので、K2Editorとエクセルを使って、これまでやってきたように整形し、身長のみ、体重のみのデータに変更して使ってください。Rのscan()関数を使ってオブジェクトに格納すると楽です。[[授業/H18/情報処理/09]]を参考にすれば答えられると思います。 // 問1:2つの集団の身長のsummary()の結果をペーストしなさい: // 1997年男子大学生110人と、生物学科男子学生身長のデータは、それぞれが、当時の大学生の集団から、 // 任意にサンプリングされたものだと仮定します。このとき、両者の母集団の身長に差があるかどうかを // 検定します。 // 問2:帰無仮説は何ですか?: // 問3:対立仮説は何ですか?: // 問4:検定に用いたRの計算式と結果をコピー・ペーストしてください // (以上、全て、回答を書くときは、1行ずつ、行頭に半角スペースを入れること) // 問5:検定の結果からどのようなことが議論できますか?: //-評価 //--統計的検定の考え方を理解しているかどうか //--Rを用いて正しく検定を行っているかどうか