かずのたしなみ(統計環境Rによる) @Wiki
http://w.atwiki.jp/rmemo/
かずのたしなみ(統計環境Rによる) @Wiki
ja
2008-04-25T23:01:50+09:00
1209132110
-
パターン1
https://w.atwiki.jp/rmemo/pages/25.html
*パターン1(1変数、1グループの場合)
#contents
**データ例(ウェイトレスの時給)
800円 1000円 1100円 950円 1200円 900円 1050円 800円
**Rにデータ入力
x <- c(800,1000,1100,950,1200,900,1050,800)
*パターン1で使える統計処理の方法
**グラフ表示
> barplot(x) #棒グラフをかく
#image(myplot.jpg,title=ウェイトレスの時給)
画面にグラフを出すなら上記の命令1行だけで済む。
今回はjpegファイルを貼付けているが、
jpegファイルにグラフを書き出すのは以下の通り。
> jpeg("myplot.jpg") #jpegファイルで出力
> barplot(x) #棒グラフをかく
> dev.off() #出力を標準に戻す
**基礎等計量
> summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max.
800 875 975 975 1062 1200
**度数分布表とヒストグラム
> hist(x)
#image(histwage.jpg)
**母平均の区間推定
**母平均の検定
つまり今手にしたデータは、母集団から無作為抽出したものと考えるのである。
母平均の区間推定と母平均の検定の二つは、1つの命令で一気に解決する。
>t.test(x,mu=975)
One Sample t-test
data: x
t = 0, df = 7, p-value = 1
alternative hypothesis: true mean is not equal to 975
95 percent confidence interval:
856.7688 1093.2312
sample estimates:
mean of x
975
95 percent confidence interval:
とは、母集団の平均値(母平均)がこの区間(856.7688〜1093.2312)のどこかにある確率が95%の確率ということ。逆に言うと、この区間から母平均がはみ出す確率は5%以下だということ。
サンプルの平均値975と、母集団の平均値が等しくないという対立仮説は、p値=1>0.05で棄却できない。
サンプルが少なすぎるのである。
*[[石村貞夫(1994)『すぐわかる統計処理』(東京図書)]]トップページに戻る
2008-04-25T23:01:50+09:00
1209132110
-
石村貞夫(1994)『すぐわかる統計処理』(東京図書)
https://w.atwiki.jp/rmemo/pages/24.html
石村貞夫(1994)『すぐわかる統計処理』(東京図書)は、
卑屈なくらいマニュアルに徹した本。
『どの統計処理を使えばよいのか、すぐわかる本がほしい』という要望にこたえてくれる。「自分の調査対象や研究対象についてのデータを集めたら、それはこの本の目次にもなっている15のパターンのどれかに必ずあてはまる。あとはそのページを開き、データに合った統計処理の中から、自分の目的に合ったものを探すだけでよい」というシロモノ。
データを集める前に,どんな統計処理をするかも含めてあらかじめ決めておくのが全うなやり方だと思うが,そういうタテマエは抜きにして,とにかく抱えた(集まってしまった)データを処理する方法を,「パターン合わせ」で教えてくれる。
|CENTER:[[パターン1]]|CENTER:[[パターン2]]|CENTER:[[パターン3]]|
|変量1種類グループ1 |変量1種類グループ2 |変量1種類グループ3以上|
|CENTER:[[パターン4]]|CENTER:[[パターン5]]|
|変量1種類対応したグループ2 | 変量1種類対応したグループ3以上|
|CENTER:[[パターン6]]|CENTER:[[パターン7]]|
|変量2種類グループ1 | 変量3種類以上グループ1|
|CENTER:[[パターン8]]|CENTER:[[パターン9]]|
|変量2種類グループ2 | 変量2種類グループ3以上|
|CENTER:[[パターン10]]|CENTER:[[パターン11]]|
|カテゴリー2 | カテゴリー2×2|
|CENTER:[[パターン12]]|CENTER:[[パターン13]]|CENTER:[[パターン14]]|
|カテゴリー3以上 | カテゴリー2×3以上 |カテゴリー3以上×3以上 |
|CENTER:[[パターン15]]|
|カテゴリー3以上×3以上、対応したグループ3以上|
この本の例題を統計環境Rでなぞってみる。
「データはどんな形の表にまとまってるか/まとめることができるか」からはじめて,「どの統計処理を選べばいいか」「それだったらRで何をすればいいか」に導いてくれるものになるだろう。
さらに親切なものを作るとすれば,東京図書のSPSSの本みたいに「社会調査・経済分析のためのSPSSによる統計処理」「臨床心理・精神医学のためのSPSSによる統計処理」「建築デザイン・福祉心理のためのSPSSによる統計処理」「健康・スポーツ科学のためのSPSSによる統計解析入門」などなど,業界別/用途別にRの使い方を解説したものがあればいいのかもしれないが(なにしろ「すぐわかるSPSSによるアンケートのコレスポンデンス分析」なんて本まであるのだ。学校でSPSSがただで使えて,とりあえず本一冊買ってくれば卒論が書けて,あとは一生統計なんて触れもしない,というマスなニーズに応えている),とりあえず「ウルトラ・ビギナーのためのSPSSによる統計解析入門」みたいなもののR版ができれば,よしとする。
もっともデータを集めてから,統計処理のことを考える人は,マウスでクリックするだけで統計処理できるソフトを選ぶのかもしれないけれど(と決め付けるのは過度の一般化だろう)。
下記のサイトを大いに参考にした。というより実質的には「切り貼りした」という方が正確な気がする。
-統計処理の羅針盤
http://phi.med.gunma-u.ac.jp/swtips/compass.html
-まとめ関数
http://phi.med.gunma-u.ac.jp/swtips/sumfunc.html
-統計解析用フリーソフト・R-Tips
http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html
-Rによる統計処理
http://aoki2.si.gunma-u.ac.jp/R/
2008-04-23T20:58:24+09:00
1208951904
-
かずのたしなみ
https://w.atwiki.jp/rmemo/pages/5.html
統計を学んだり、数理モデルを勉強したりするのに、統計環境Rは、べんりな「電卓」である。
グラフもかける。プログラムもできる。
本がやっていることを、自分の手でやることができる。
(紙と鉛筆でもよいけれど、それよりはやる気になるだろう)。
逆にRの使い方を身に付けるのに、薄い統計学のテキストや数理科学の本をRを使ってさらってみるのも良いと思う。
要は「鶏と卵」だから、どちらからはじめてもかまわないだろう。
だから、それをやってみようと思う。
ちなみにお手本は
>南風原朝和(2002)心理統計学の基礎 有斐閣をRで実行
>([[奥村泰之さんの「無料統計ソフトRで心理学 -Passepied-」>http://cat.zero.ad.jp/~zak52549/R.html#haebara]])
である。
----
***[[國友直人(1992)『経済学入門シリーズ 現代統計学(上・下)』(日経文庫)]]
***[[石村貞夫(1994)『すぐわかる統計処理』(東京図書)]]
***出村慎一(2004)『例解健康・スポーツ科学のための統計学(改訂版)』(大修館書店)
***盧志和, 石村貞夫(2005)『建築デザイン・福祉心理のためのSPSSによる統計処理』(東京図書)
***ボーンシュテット&ノーキ(1990)『社会統計学』(ハーベスト社)
***盛山和夫ほか(1992)『社会調査法』(放送大学教育振興会)
***梶原譲二(1988)『新修文系・生物系の数学』(現代数学社)
***吉村忠与志(2005)『厳選例題Excelで解く問題解決のための科学計算入門』(技術評論社)
***松原望(1997)『計量社会科学』(東京大学出版会)
2008-04-23T19:49:59+09:00
1208947799
-
メニュー
https://w.atwiki.jp/rmemo/pages/2.html
メニュー
-[[トップページ]]
-[[かずのあしらい]]
-[[かずのたしなみ]]
-[[かずのたくらみ]]
-[[Rというソフト>Rというフリー(無料)のソフト]]
-[[メニュー]]
-[[メニュー2]]
----
**更新履歴
#recent(5)
**サイト内検索
#search()
**カウンタ
&counter()
2006-07-02T07:17:19+09:00
1151792239
-
Rというフリー(無料)のソフト
https://w.atwiki.jp/rmemo/pages/8.html
#contents
Rは、フリー(無料)で利用できる(もとい、“国際共同研究のオープンソースなプロジェクトで開発され,GNU GPLに従って公開・配布されている”)、いろんな種類の統計計算とグラフィックスの手段を提供してくれるコンピュータ言語であり、総合環境です。
「フリー(無料)で利用できる」ことは、市販の統計ソフトが何十万円することと合わせて考えると、いろんな含意があるように思います。
普通の統計ソフトは高い→個人では買えない→組織で導入→組織に属している間は使える。
近年は大学のコンピュータに法人ライセンスで統計ソフトがインストールされており、大学生になってはじめて統計ソフトに触れる人が多いように思います。
しかし、その後に属した組織(たとえば就職した会社)が、統計ソフトを導入しているとは限りません。
つまり大学に属している間だけ、(高価な)統計ソフトを使えるということになります。
しかし統計手法や統計ソフトは、大学のレポートを書くことだけに役立つ訳ではありません。
逆にフリーで利用できる/いろんな機械やOSやネット上でも使うことの出来るRは、一度使えるようになると、一生ものです。
「いつでも,どこでも,いつまでも,貧乏でも一緒に居てくれるR」(by [[奥村泰之さん>http://cat.zero.ad.jp/~zak52549/R.html]])
個人レベルでは「一生もの」、そして社会的には、様々に数を扱わなければならない人、少なくとも統計や数理科学にとって、共通のプラットフォームになる可能性があります。「いつでも、どこでも、いつまでも」に加えて、無料であり導入コストが低いのであれば「誰にでも」を付け加えることができるでしょう。
ただ、無料で強力であるにも関わらず、Rの普及はこれまで思ったほどではなかったようです。多くのドキュメントで使用法や活用法を学べるとはいえ、様々な有志のボランタリーな努力によって日本語訳が登場するまでは英語の壁は厚く、また「クリックひとつ」で答えが出るわけでなく、いくらかの呪文をキーボードから打ち込む必要があったこと(現在ではGUIを備えた「クリックひとつ」の環境も用意することができます)などなど、いろんな理由があったのでしょう。お金的にはフリー(ただ)でも、学習コストはそう低くはない、と。
何らかの職業的理由から数字を扱わなければならない人、そしてそういう進路を選んだ若い人ならば、いくらかの学習コストをRにかけることは、十分に合理的であると思います。ブラインド・タッチ、もといタッチ・タイピングを修得することの次くらいには、優先順位は高いでしょう。
ベル研究所で開発されたその筋ではとても有名なS言語・環境に、Rはとても似ています。なのでRのことを‘GNU S’と読んだりpoor man's S(貧者のS)と呼ぶ人もいます。S言語は歴史があり、参考書も古くから沢山でています。R使いは、それらを参考にすることも出来ます。
----
**必要かつ有益なサイト
***Rプロジェクト
-RプロジェクトのHPはココ↓
http://www.r-project.org/
-R CRANの日本ミラーサイト
(R本体もここから手に入ります)
http://cran.md.tsukuba.ac.jp/
***日本語ドキュメント
-「R の日本語文章 (pdf 版)」Rのドキュメントの日本語訳
http://buran.u-gakugei.ac.jp/~mori/LEARN/R/
-「R−Tips PDF版」とりあえずこれを読めばRは使える
http://cse.naro.affrc.go.jp/takezawa/r-tips.pdf
***参考サイト
-「R−Tips」とりあえず使い方を忘れた時に引く
http://cse.naro.affrc.go.jp/takezawa/r-tips/r2.html
-「R HTMLマニュアル検索」Rのヘルプを見てて英語の壁に隔てられたら。ヘルプを使い方から逆引きしたいと思ったら。ここでヘルプの日本語訳を検索できる。
http://www.okada.jp.org/cgi-bin/Rsearch/namazu.cgi/
-「RjpWiki」日本語での情報交換wiki。Q&A、Tipsなど情報充実。大抵の困りごとはここで解決する。
http://www.okada.jp.org/RWiki/
-「Rによる統計処理」統計学の膨大な情報リソースである青木先生のRページ。Rを使った一通りの流れから、膨大なユーズフルな自作関数集まで。
http://aoki2.si.gunma-u.ac.jp/R/
***教宣用
-「[[Rを薦める100+の理由>http://www.okada.jp.org/RWiki/index.php?R%A4%F2%C1%A6%A4%E1%A4%EB100%2B%A4%CE%CD%FD%CD%B3]]」
-「[[統計学は独習できないといふけれど…>http://cat.zero.ad.jp/~zak52549/howtolearn.html#comp2]]」
-「[[枕草子 (My Favorite Things)【第708回】 Rを薦める理由(2001年11月13日)>http://phi.med.gunma-u.ac.jp/humeco/myfavor/20011113.html]]」
2006-07-02T07:15:04+09:00
1151792104
-
統計データの中心
https://w.atwiki.jp/rmemo/pages/15.html
#contents
普通は平均値から計算するものだが、いろいろ都合があるのである。さきに中央値からやらせてもらう。
**中央値
##成績データを使って計算してみよう。
##中央値とは、データを小さな順に並べて、データの総数の半分のところに来るものである。成績データは31個のデータからなるから、小さい順に並べて16番目に来たものが中央値になる。
##Rには中央値を計算してくれる関数があるので、それを使えば一発である。
median(seiseki)
[1] 73
##実は、中央値とデータそれぞれと差の絶対値の合計が最小になるのが中央値である。
これはつまり、中央値とデータとの距離の合計が最小になる、ということである。
逆に言えば、データのそれぞれから離れた(距離の大きい)値を、我々はそのデータ全体を代表する値として選ばないだろう。
データからの離れ具合の最も小さいもの=データそれぞれとの距離の合計が最も小さいものを、そのデータ全体を代表する値として選ぶだろう。
中央値とはまさしく、そのような値なのである。
##ためしに1~100の数字を候補として、他の値との差の絶対値の合計を計算してみよう。
kouho<-0
for(i in 1:100){kouho<-c(kouho,sum(abs(seiseki-i)))}
kouho
[1] 0 2198 2167 2136 2105 2074 2043 2012 1981 1950 1919 1888 1857 1826 1795
[16] 1764 1733 1702 1671 1640 1609 1578 1547 1516 1485 1454 1423 1392 1361 1332
[31] 1303 1274 1245 1216 1189 1162 1135 1108 1081 1054 1027 1000 973 946 921
[46] 896 871 846 821 796 771 750 729 710 691 674 657 640 623 606
[61] 589 572 557 544 531 518 505 494 483 472 461 456 451 448 449
[76] 450 455 460 465 470 475 482 489 500 511 522 537 554 575 596
[91] 619 642 665 688 713 738 763 788 813 842 871
##最初にダミーの0が混じっているので取り除く
kouho<-kouho[-1]
kouho
[1] 2198 2167 2136 2105 2074 2043 2012 1981 1950 1919 1888 1857 1826 1795 1764
[16] 1733 1702 1671 1640 1609 1578 1547 1516 1485 1454 1423 1392 1361 1332 1303
[31] 1274 1245 1216 1189 1162 1135 1108 1081 1054 1027 1000 973 946 921 896
[46] 871 846 821 796 771 750 729 710 691 674 657 640 623 606 589
[61] 572 557 544 531 518 505 494 483 472 461 456 451 448 449 450
[76] 455 460 465 470 475 482 489 500 511 522 537 554 575 596 619
[91] 642 665 688 713 738 763 788 813 842 871
##グラフを書いてみる。
plot(kouho)
#ref(kouho_graph.jpg)
##この中で最小なのは
min(kouho)
[1] 448
##では最小の値をとるiは
which(kouho==448)
[1] 73
##73であった。これはmedian(seiseki)の値と一致する。
----
**平均値
##成績データを使って計算してみよう。
#Rには平均値を求める関数が用意されているので、それを使えば一発である。
mean(seiseki)
[1] 71.90323
#それぞれの値を合計を求めて、それを値の個数で割ると平均が求められる。
sum(seiseki) #合計を求める
[1] 2229
length(seiseki) #値の個数を求める
[1] 31
sum(seiseki)/length(seiseki) #合計を値の個数で割る
[1] 71.90323
##当然だがmean(seiseki)で求めた値と一致する。
##平均値は、それぞれの値と平均値の差を合計すると、ゼロになる値である。
##これも実際にやってみよう。
heikin_ten<-mean(seiseki) #平均値をheikin_tenの中に入れる。
heikin_karano_sa<-seiseki-heikin_ten #seisekiのそれぞれの値から平均値を引いたものをheikin_karano_saに入れる。
heikin_karano_sa #平均値からの差を表示。
[1] -21.9032258 10.0967742 -1.9032258 -17.9032258 3.0967742 0.0967742
[7] -1.9032258 -38.9032258 8.0967742 -19.9032258 26.0967742 1.0967742
[13] -9.9032258 1.0967742 -28.9032258 14.0967742 21.0967742 13.0967742
[19] -10.9032258 17.0967742 26.0967742 -43.9032258 15.0967742 28.0967742
[25] -21.9032258 15.0967742 -5.9032258 10.0967742 13.0967742 -1.9032258
[31] 3.0967742
sum(heikin_karano_sa) #「平均値からの差」を合計すると
[1] -8.526513e-14 #計算誤差のためゼロにならないが非常に小さな数である。
round(sum(heikin_karano_sa)) #丸めるとゼロになる。
[1] 0
##それぞれの値と平均値の差を合計すると、ゼロになるということは、
##それぞれの値と平均値の差の二乗和を最小にできるということでもある。
##試しにやってみよう(ただし整数値刻みでやるので、上の中央値の例ほど、きれいな結果は出ない)
kouho<-0
for(i in 1:100){kouho<-c(kouho,sum((seiseki-i)^2))}
kouho<-kouho[-1] #最初にダミーの0が混じっているので取り除く
kouho
[1] 166238 161873 157570 153329 149150 145033 140978 136985 133054 129185 125378 121633 117950 114329
[15] 110770 107273 103838 100465 97154 93905 90718 87593 84530 81529 78590 75713 72898 70145
[29] 67454 64825 62258 59753 57310 54929 52610 50353 48158 46025 43954 41945 39998 38113
[43] 36290 34529 32830 31193 29618 28105 26654 25265 23938 22673 21470 20329 19250 18233
[57] 17278 16385 15554 14785 14078 13433 12850 12329 11870 11473 11138 10865 10654 10505
[71] 10418 10393 10430 10529 10690 10913 11198 11545 11954 12425 12958 13553 14210 14929
[85] 15710 16553 17458 18425 19454 20545 21698 22913 24190 25529 26930 28393 29918 31505
[99] 33154 34865
最小値をとる整数値は、
which(kouho==min(kouho))
[1] 72
平均値の
mean(seiseki)
[1] 71.90323
に一番近い整数値が得られた。
さらに強力(強引)かつ精密にやるには、関数の最大・最小化に使える関数optim()を使う方法がある。
まず最小化したい関数を定義する。それぞれの値との差の二乗和を最小にできるのが平均値であるから、
>先の成績データseisekiを関数内にぶちこんで、二乗和の計算にはベクトルの内積を計算することで、これに代える。
関数は以下のようになる。
Fmean<-function(x){
seiseki<-c(50,82,70,54,75,72,70,33,80,52,98,73,62,73,43,86,93,85,61,89,98,28,87,100,50,87,66,82,85,70,75)
return( (seiseki-x)%*%(seiseki-x) )}
これを関数optim()で最小化する。適当な初期値(ここでは、ものぐさにも初期値=1とした)を与えるだけで、計算してくれる。
optim(1,Fmean)
$par
[1] 71.9
(中略)
Warning message:
one-diml optimization by Nelder-Mead is unreliable: use >optimize in: optim(1, Fmean)
警告メッセージが出た。optim()の最小化法はいくつかから選べるが、デフォルトのNelder-Mead法は今回のような場合にはunreliable(信頼できない)と言う。
ならば違う方法("SANN" 法=確率的手法であるいわゆるシミュレーテッド・アニーリング法。)を使うことにしよう。method="SANN"としてやるだけで良い。
optim(1,Fmean,method="SANN")
$par
[1] 71.90324
(以下略)
それぞれの値との差の二乗和を最小する方法で、
平均値のmean(seiseki)
[1] 71.90323
に十分に近い精度の答えが出た。
これまでのような数値例では納得できない人は、数式を変形して証明することも可能である。
まず、それぞれの値と平均値の差の二乗和を数式で表そう。
#ref(f1.gif)
#ref(f3.gif)
は、それぞれの値xiと平均値(になるはずの数)tの差を表す。
#ref(f2.gif)
は、それぞれの値と平均値の差の二乗
#ref(f1.gif)
はそれぞれの値と平均値の差の二乗和である。
このT(それぞれの値と平均値の差の二乗和)を最小化するtを求めてみる(平均値&ref(f8.gif)と同じになるはずである)。
まず&ref(f3.gif)から平均値を足して引いても式の値は変わらないから
#ref(f4.gif)
である。
これを2乗すると
#ref(f5.gif)
したがって
#ref(f6.gif)
である。
さて元々&ref(f7.gif)の平均値&ref(f8.gif)は、&ref(f7.gif)(i=1~n)をすべて足し合わせてnで割ったもの
#ref(f9.gif)
であるから、平均&ref(f8.gif)をn個足し合わせた
#ref(f10.gif)
は、ご覧の通り&ref(f7.gif)(i=1~n)をすべて足し合わせものと等しい。
したがって
&ref(f11.gif)から
&ref(f12.gif)であり、
#ref(f13.gif)
の第2項は
#ref(f12.gif)
で0である。
さて我々が最小化したいTは、結局、
#ref(f14.gif)
というところまで簡単になった。あと一息である。
第1項&ref(f15.gif)について考えると、&ref(f17.gif)はゼロかプラスのいずれかであろうから、それらを足し合わせた&ref(f15.gif)はプラスに違いない。
&ref(f16.gif)についても同様で、&ref(f18.gif)はゼロかプラスに違いないが、Tを最小化するためには、&ref(f18.gif)はゼロであってほしい。ゼロならばn個足し合わせてもゼロでおさまるが、もし&ref(f18.gif)がプラスであればTはそれ以上の値になる(最小値をとらない)からである。
それ故に&ref(f19.gif)である。つまり、
#ref(f20.gif)
したがって、それぞれの値と平均値の差の二乗和Tを最小化できるtとは、xiの平均値と等しくなければならないことが証明された。えっへん。
(じつはこれは、回帰直線を求める最小自乗法の前振り/長すぎる助走なのである。同様の数式の展開に、最小自乗法で回帰直線を求めるときに我々は再会するだろう)。
----
**最頻値
##最頻値は、頻度分布で最も大きい頻度をもつ値。
##ヒストグラムをつくるhist()は、グラフを表示せず(plot=Fと指定してやればいい)計算だけをやってくれるので、結果をresultという変数に一旦格納する。
result<-hist(seiseki,plot=F)
##さて、resultの中身はと言うと、
result
$breaks
[1] 20 30 40 50 60 70 80 90 100
$counts
[1] 1 1 3 2 6 6 8 4
$intensities
[1] 0.003225806 0.003225806 0.009677419 0.006451613 0.019354839 0.019354839 0.025806452 0.012903226
$density
[1] 0.003225806 0.003225806 0.009677419 0.006451613 0.019354839 0.019354839 0.025806452 0.012903226
$mids
[1] 25 35 45 55 65 75 85 95
$xname
[1] "seiseki"
$equidist
[1] TRUE
attr(,"class")
[1] "histogram"
##いろんな種類の値をパッケージしてあるようだ。こういうのをデータフレームと呼ぶ。
##データフレーム内のそれぞれの値を呼び出したり書き換えたりするには、正式には
データフレーム名$列名
などとすればいい。
##とりあえず必要なのは、それぞれの度数であるcountsと区間を表すbreaksである。
##最も多い度数はmax(result$counts)で求めることが出来る。これは 8 である。
##次に8の度数をもつのは何番目かどうかを知るにはwhichをつかう。
which(result$counts==8)
[1]7
7番目である。あとは7番目の区間がどれか求めれば良い。
result$breaks[7]
[1] 80
これを1行で書けばこうなる
result$breaks[which(result$counts==max(result$counts))]
[1] 80
これが最頻値である。
実際にヒストグラムをかいて確かめるとよい。図は省略する。
hist(seiseki)
→[[國友直人(1992)『経済学入門シリーズ 現代統計学(上・下)』(日経文庫)]]へもどる
2006-07-01T02:34:41+09:00
1151688881
-
最小二乗法
https://w.atwiki.jp/rmemo/pages/22.html
**直線を探す
先に見たように、相関係数の絶対値が1に近づくほど、データはある直線の上に近づくように見える。
東証平均と新日鉄のデータの散布図に、そんな直線を引いてみよう。
z <- lsfit(v.tosho,v.shinnittetu)
plot(v.tosho,v.shinnittetu)
abline(z,col="red")
#ref(xyplot.gif)
大雑把にだが、確かにデータはその直線の周りに散らばっているように見える。
ここでは「その直線」を決める方法を考える。
R的には、この問題はすでに解決している。いま直線を引くのにつかったlsfit(v.tosho,v.shinnittetu)というのがそうだ。
lsfit()という関数はいったい何をやっているのだろうか。
lsfit(v.tosho,v.shinnittetu)
とだけ直接入力して、何が出てくるか見てみよう。
$coefficients
Intercept X
-0.850631 1.321059
…(以下略)
$residualsや$qrの後に数字がずらずら並ぶがとりあえずは無視してかまわない(あとでやり直そう)。
「coefficients」という単語は、辞書を引けば分かるように「係数」のことである。
ちなみに「Intercept」は、ここでは「切片」と数学でいうもののことである。
直線の方程式は、むかし学校では
Y=aX+b
などと教わったものだが、回帰直線は別の歴史的事情があって、
Y=a+bX
と書くことが多い。
今の例だと、東証データv.toshoが独立変数X、新日鉄データv.shinnittetuがYである。
あと言うまでも無くaが切片で-0.850631、bがXの係数であり直線の「傾き」表し1.321059 であった。
東証データv.toshoが独立変数X、新日鉄データv.shinnittetuがYとすると、
Y=-0.850631+1.321059 X
というのが我々がさっき求めた回帰直線なのだった。
**最小自乗法とは?
lsfitのヘルプを見るには、Rのコンソール上で
?lsfit
とすればいい。
すると
lsfit package:stats R Documentation
Find the Least Squares Fit
Description:
The least squares estimate of *b* in the model
y = X b + e
is found.
Usage:
…(以下略)
とりあえずUsage以下は、今は無視しておこう。ポイントは表題である「Find the Least Squares Fit」である。Least Squaresは、日本語訳でいうところの「最小自乗(二乗)」というものにあたる。最小自乗法をつかってFitする直線を見つけるのが、この関数「lsfit」の働きである。
本当のYと、Y^=a+bXという直線が導き出すY^との間には、ふつう食い違いが存在する。
今、我々の課題は上の式のaとbの値を求めることだが、課題には目標が必要である。
我々は、できるだけ本当のYと、回帰直線の式が導き出すY^との差を小さいものにしたいと考えている。すなわちY-Y^の差を小さくすることが目標である。
しかしYとY^はどちらかが大きかったり小さかったりするので、Y-Y^の値もプラスになったりマイナスになったりするだろう。Y-Y^の差をトータルに小さくするためには、個々の差をすべて足し合わせたものを最小化すればいいが、Y-Y^のままでは足しあわすとプラスの差とマイナスの差が打ち消しあって不都合である。こういうときは二乗したものを足し合わせ、それを最小化するのを目標とすればいい。。平均値が、それぞれの値との差の二乗和を最小にするものだったことを思い出そう。そう平均値でやったあの経験が役に立つ時が来たのである。
本当のYi(i=1~n)とYi^=a+bXiの差は
Yi-Yi^=Yi-(a+bXi)
=Yi-a-bXi
したがって最小化すべき二乗和は
Q=Σ(Yi-Yi^)^2
=Σ(yi-a-bxi)^2
となる。
2006-06-30T14:49:36+09:00
1151646576
-
Rによる多変量データ解析の手順
https://w.atwiki.jp/rmemo/pages/23.html
-[[重回帰分析]]
-[[ロジスティック回帰分析]]
-[[プロビット分析]]
-[[非線型回帰分析]]
-[[対数線型分析]]
-[[ロジット対数線型分析]]
-[[多次元尺度法]]
-[[コンジョイント分析]]
-[[コレスポンデンス分析]]
-[[因子分析]]
-[[主成分分析]]
-[[判別分析]]
-[[クラスター分析]]
-[[パス解析]]
-[[共分散構造分析]]
2006-06-20T15:39:58+09:00
1150785598
-
かずのたくらみ
https://w.atwiki.jp/rmemo/pages/6.html
値段が高いが「普及している」統計ソフトにSPSSがある。
手法別そして分野別に、とても薄い本がたくさん出ている。
おそらくは大学のコンピュータにSPSSがインストールされていていることを前提に、学生向きにこうした本は企画され出版されているのだろう。
学生は、そうした薄い本をパソコンの横において、本のとおりにメニューを選びマウスを操作して、統計処理しているのだろう。
統計ソフトをマスターするなんて非現実的なことには手を出さない。統計も統計ソフトも道具なのだ。だから必要なこと(必要な操作)だけわかればいい。
ユーザーは、自分の使いたい手法/活用したい分野の本だけを買えばいい。1冊あたりが薄くて安価であれば、それぞれが売れるので出版社もウハウハである(細木数子商法とでも言おうか)。
そうしたわけで、Rを必要なところだけ、つまみ食いできるように、細かく分野別/手法別に分けて、必要十分な情報だけを提供できるようにしたいと考えた。
----
**共通テクニック
-[[Rにデータの入力(ごく少量から大量データまで)>Rにデータを入力する]]
-[[Rでのデータ入力を省力化する]]
**手法別
-Rによるグラフの描き方・使い方
-Rによるカテゴリカルデータ分析の手順
-[[Rによる多変量データ解析の手順]]
-Rによる分散分析の手順
-Rにおける多重比較の手順
-Rによる線型混合モデルとその手順
-Rによるコンジョイント分析の手順
-Rによる時系列分析の手順
-Rによる共分散構造分析の手順
**分野別
-すぐわかるRによるアンケートの調査・集計・解析
-心理分野のためのRによる統計解析
-臨床心理のためのRによる統計処理
-経済分析のためのRによる統計処理
-経営・会計の実証分析入門 :Rによる企業モデル分析
-Rによるマーケティング入門
-Rによる統計解析の初歩
-Rによるデータマイニング
-社会調査のためのRによる統計処理
-Rによる福祉分野のための統計解析
-Rによる教育分野のための統計解析
-Rによる高校数学
-Rによる医療統計の基礎と実際
-Rによる医学・歯学・薬学のための統計解析
-精神医学のためのRによる統計処理
-Rによるリスク解析のための統計処理
-建築デザインのためのRによる統計処理
-QCのためのRによる統計処理
-健康・スポーツ科学のためのRによる統計解析
-言語学研究のためのRによる統計解析
-文学研究研究のためのRによる統計解析
2006-06-20T15:38:24+09:00
1150785504
-
同時度数分布と相関係数
https://w.atwiki.jp/rmemo/pages/21.html
#contents
**同時度数分布
とりあえず東証平均の収益率と同時期の新日鉄の収益率を入力する。
(ここではエクセルに入力してあったデータをコピペした)
tosho<-scan()
1: 1.9 0.0 -2.1 2.9 0.0 1.1 -0.3 1.6 2.7 1.5 -0.6 0.3
13: 3.3 -0.4 5.3 6.0 -0.1 4.7 1.0 -0.4 -6.1 0.4 0.4 2.9
25: 2.2 -4.9 -3.0 2.3 0.1 -1.3 -1.5 -0.1 -0.5 3.6 6.6
tosho<-ts(tosho,frequency=12,start=1980)
tosho
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1980 1.9 0.0 -2.1 2.9 0.0 1.1 -0.3 1.6 2.7 1.5 -0.6 0.3
1981 3.3 -0.4 5.3 6.0 -0.1 4.7 1.0 -0.4 -6.1 0.4 0.4 2.9
1982 2.2 -4.9 -3.0 2.3 0.1 -1.3 -1.5 -0.1 -0.5 3.6 6.6 2.7
1983 -0.9 0.7 5.0 2.4 0.9 3.1 1.5 2.0 2.4 -0.8 0.6 6.5
1984 6.1 -0.2 12.7 -1.0 -9.9 2.6 -4.1 7.0 1.4 4.6 2.0 4.3
shinnittetu<-ts(shinnittetu,frequency=12,start=1980)
shinnittetu
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1980 9.2 2.3 -6.5 9.0 5.3 -4.3 -3.7 7.0 7.6 1.4 -3.4 0.7
1981 2.8 -1.4 17.6 17.8 5.5 -1.9 1.9 9.0 -10.3 -10.3 -7.7 6.5
1982 -0.6 -11.8 3.5 1.9 -5.5 -9.1 -5.7 2.3 -4.9 -0.8 8.0 6.7
1983 -2.8 9.3 11.4 3.0 -7.5 2.5 -0.6 1.8 5.1 -2.3 -6.0 10.6
1984 0.0 -5.7 10.6 -0.6 -11.2 -3.8 -5.2 6.2 -4.2 2.1 0.6 4.7
東証平均と新日鉄のデータについて、データの範囲と大体の分布をみるために、5 数要約 fivenum() : 最小値・下側ヒンジ・中央値・上側ヒンジ・最大値を見る。
fivenum(tosho)
[1] -9.90 -0.35 1.25 2.90 12.70
fivenum(shinnittetu)
[1] -11.80 -4.25 1.05 5.85 17.80
さて、この2つのデータから同時度数分布を作ろう。
まず連続変数をカテゴリー変数に変換するために使用するのは cut 関数である。
区切り(2刻み)を変数breaksにいれて
breaks<-seq(-10,14,by=2)
breaks2<-seq(-12,18,by=2)
cut()を使う。「○○以上□□未満」の場合は right = FALSE にする必要がある。
c_tosho<-cut(tosho,breaks,right=F)
c_shinnittetu<-cut(sinnittetu,breaks2,right=F)
カテゴリー化できたら、それらをつかってクロス表をつくる。
table(c_tosho,c_shinnittetu)
これすなわち同時度数分布となっている。
c_shinnittetu
c_tosho [-12,-10) [-10,-8) [-8,-6) [-6,-4) [-4,-2) [-2,0) [0,2) [2,4)
[-10,-8) 1 0 0 0 0 0 0 0
[-8,-6) 1 0 0 0 0 0 0 0
[-6,-4) 1 0 0 1 0 0 0 0
[-4,-2) 0 0 1 0 0 0 0 1
[-2,0) 0 1 0 3 4 2 0 1
[0,2) 1 0 2 4 0 1 3 1
[2,4) 0 0 0 0 1 2 3 3
[4,6) 0 0 0 0 0 1 0 1
[6,8) 0 0 0 0 0 0 1 0
[8,10) 0 0 0 0 0 0 0 0
[10,12) 0 0 0 0 0 0 0 0
[12,14) 0 0 0 0 0 0 0 0
c_shinnittetu
c_tosho [4,6) [6,8) [8,10) [10,12) [12,14) [14,16) [16,18)
[-10,-8) 0 0 0 0 0 0 0
[-8,-6) 0 0 0 0 0 0 0
[-6,-4) 0 0 0 0 0 0 0
[-4,-2) 0 0 0 0 0 0 0
[-2,0) 1 0 1 0 0 0 0
[0,2) 1 1 2 0 0 0 0
[2,4) 1 3 1 0 0 0 0
[4,6) 1 0 0 1 0 0 1
[6,8) 0 1 1 1 0 0 1
[8,10) 0 0 0 0 0 0 0
[10,12) 0 0 0 0 0 0 0
[12,14) 0 0 0 1 0 0 0
これを3次元のグラフにしよう。
同時度数分布なので、同時度数グラフとか3次元ヒストグラムとか呼ばれる。
まず3次元データとして使いやすいようにデータを加工する。変数matにクロス集計を格納して、
mat<-table(c_tosho,c_shinnittetu)
これを次のようなデータ・フレーム形式にする。
s3d.dat <- data.frame(cols=as.vector(col(mat)),rows=as.vector(row(mat)),value=as.vector(mat))
何をやっているかは、結果を見た方が理解が早い。
s3d.dat
cols rows value
1 1 1 1
2 1 2 1
3 1 3 1
4 1 4 0
5 1 5 0
6 1 6 1
7 1 7 0
……(中略)……
176 15 8 1
177 15 9 1
178 15 10 0
179 15 11 0
180 15 12 0
つまりm行目のn列目の数値はいくつであるか、を並べているのである。
これをscatterplot3d()に渡してやると、まずは三次元にぶつぶつが浮かぶ。
scatterplot3d(s3d.dat)
#ref(scatterplot1.gif)
これを棒グラフっぽくするには、type="h"とし、太さを lwd=5で少し太らせ、 pch=" "で、棒の先端についたキャラクタを外す。
scatterplot3d(s3d.dat,type="h", lwd=5, pch=" ")
#ref(scatterplot2.gif)
**散布図
二つの量の関係を確かめるには、散布図が一番だ。
散布図は普通、
plot(x,y)
の形で描けるが、いま扱っているデータは、toshoもshinnitetuも時系列データで、そのまま
plot(tosho,shinnitetu)
では、時系列の順に結ばれる折れ線グラフとなる。
#ref(sen_plot.gif)
普通の散布図が欲しい場合には、as.vector()関数で、データをベクトル・データに変換してやればいい。
ここでは、少し工夫して、それぞれのヒストグラムをつけた散布図を書いてみる。
xhist <- hist(tosho, plot=FALSE) # 棒グラフ情報を記録
yhist <- hist(shinnittetu, plot=FALSE) # 棒グラフ情報を記録
top <- max(c(xhist$counts, yhist$counts))
xrange <- c(-15,15)
yrange <- c(-15,15)
# layout 関数で画面を横に 3:1、縦に1:3 の4画面に分割
# 副画面の番号を [1,1] -> 2, [1,2] -> 0, [2,1] -> 1, [2,2] -> 3 とする
# 番号 0 の副画面には何も描かない(?)
nf <- layout(matrix(c(2,0,1,3),2,2,byrow=TRUE), c(3,1), c(1,3), TRUE)
par(mar=c(3,3,1,1)) #番号1の副画面の余白指定
plot(as.vector(tosho), as.vector(shinnittetu), xlim=xrange, ylim=yrange, xlab="", ylab="") # 番号1の副画面にプロット
par(mar=c(0,3,1,1)) #番号2の副画面の余白指定
barplot(xhist$counts, axes=FALSE, ylim=c(0, top), space=0) # 番号2の副画面にプロット
par(mar=c(3,0,1,1)) #番号3の副画面の余白指定
barplot(yhist$counts, axes=FALSE, xlim=c(0, top), space=0, horiz=TRUE) # 番号3の副画面にプロット
#ref(plot.gif)
**相関係数
n組のデータ(x1、y1)……(xn、yn)で与えられる、2変数の関係を表す指標を考えよう。
東証平均と新日鉄のデータをベクトル・データに変換しておく。
v.tosho<-as.vector(tosho)
v.shinnittetu<-as.vector(shinnittetu)
データはそれぞれxの平均、yの平均のまわりに散らばっている。
平均まわりの散らばり具合を、平均からの偏差で考える。
xの偏差がプラス(マイナス)で、yの偏差がプラス(マイナス)なら、両者の関係もプラスだろうと考えるのが自然である。
同様に、xの偏差がマイナス(プラス)で、yの偏差がプラス(マイナス)なら、両者の関係もマイナスだろうと考えるのが自然である。
データそれぞれについて、偏差の積を考え、それらの平均を得ると、共分散という指数が得られる。すなわち
1/length(v.tosho)*sum( ( (v.tosho-mean(v.tosho) )*( (v.shinnittetu-mean(v.shinnittetu) ) ) ) )
[1] 15.18402
しかし例のごとく、この量ははかる単位に依存する。依存しないようにするために、xの標準偏差とyの標準偏差で割っておこう。
以前つくった標準偏差を求める関数を思い出そう。関数名を()抜きでタイプしてエンター・キーを押すと、関数の「中身」が見れる。
sampleSD
function(x){sqrt(sampleVar(x))}
これをつかって、東証平均と新日鉄のデータそれぞれの標準偏差を求める。
sampleSD(v.tosho)
[1] 3.390255
sampleSD(v.shinnittetu)
[1] 6.738344
あとは、これらで共分散を割ってやる
15.18402/(3.390255*6.738344)
[1] 0.6646626
この指標を相関係数という。相関係数を2系列のデータから求めるには、Rに用意されているcor()関数を使えばいい。
cor(v.tosho,v.shinnittetu)
[1] 0.6646628
相関係数は−1〜+1の値をとる性質がある。0(ゼロ)ときは相関がないといい、+1のときは最も強いプラスの相関が、−1のときは最も強いマイナスの相関がある。
一見は百聞にしかず。ある相関係数をもったデータの組を散布図で見てみよう。
量質ともに膨大な統計学リソースを提供している青木先生によるRのページhttp://aoki2.si.gunma-u.ac.jp/R/から、「特定の相関係数を持つ二変量データを生成する関数」を借用する。
gendat2 <- function(nc, r)
{
# 仮のデータ行列を作る。この時点では変数間の相関は近似的に0である。
z <- matrix(rnorm(2*nc), ncol=2)
# 主成分分析を行い,主成分得点を求める。この時点で変数間の相関は完全に0である。
res <- eigen(r2 <- cor(z))
coeff <- solve(r2) %*% (sqrt(matrix(res$values, 2, 2, byrow=TRUE))*res$vectors)
z <- t((t(z)-apply(z, 2, mean))/sqrt(apply(z, 2, var)*(nc-1)/nc)) %*% coeff
# コレスキー分解の結果をもとに,指定された相関係数行列 を持つように主成分得点を変換する。
z %*% chol(matrix(c(1, r, r, 1), ncol=2))
}
使い方は、
相関係数0.9のデータを100組つくって、その散布図を描く。
plot(gendat2(100,0.9))
#ref(0.9plot.gif)
相関係数ー0.9のデータを100組つくって、その散布図を描く。
plot(gendat2(100,-0.9))
#ref(-0.9plot.gif)
相関係数0.2のデータを100組つくって、その散布図を描く。
plot(gendat2(100,0.2))
#ref(0.2plot.gif)
相関係数の絶対値が1に近づくほど、データはある直線の上に近づくように見える。
→[[國友直人(1992)『経済学入門シリーズ 現代統計学(上・下)』(日経文庫)]]へもどる
2006-06-11T08:42:04+09:00
1149982924