mathjax

2017年12月28日木曜日

「Rによるやさしい統計学」(1章,2章)を行う。

「Rによるやさしい統計学」を行うことでRと統計学を知るという試み。

「はじめに」で「文系の学生の為」とあまりに強調される為に萎える。(当方理系。ただし学生時代に統計学は一切関わらなかったので、初歩から知りたいと学んでいる次第。)

そして、自作関数や自作変数は日本語(2バイトコード、漢字など)をメインで使う宣言に、コメント行であっても日本語を使うプログラマに嫌悪感を覚える身としては、正気の沙汰とは思えないが、執筆者の先生方は皆さん教育学部を経て博士になられた方々で、その辺りの基本的な感じ方が異なるのだろうと思われる。(RStudioのConsoleに日本語を入力するたび、異物を食べさせられて苦しんでいる様子が伝わるようなモタツキ感があり、いや、1バイトコードにしないと、、、と感じる。)

環境:Windows 10にRとRStudioをインストール済。

作業ディレクトリ(Working Directory)の変更

インストール後、デフォルトの作業ディレクトリは、ドキュメントフォルダになっている。
RStudioのメニューSession→Set Working Directory→Choose Directory(Ctrl+Shift+H)で変更が可能。しかし、これでは起動するたびリセットされてしまう。恒久的に変える方法に関しては別途要調査。 と思ったらここに書いてあった。
How do you change the default directory in RStudio (or R)? - Stack Overflow
メニューTools→Global Options...で出てくるウィンドウのGeneralの2項目目。Default Working Directoryを設定することで出来た。

semパッケージはおそらく最初からInstall済だった。(右下のウィンドウのPacakgesタブでsemを検索すると出てきたので。)

第I部 基礎編 第1章~第7章 統計学の基礎をRで学ぶ。
第II部 応用編 中級者向けトピック。

第2章

2.1~2.9までの操作(2.10、2.11は面倒なので省略)

shido_data <- read.csv("shidouhou.csv", fileEncoding="CP932")
shido_method <- shido_data$method
shido_method
table(shido_method)
psych_test <- shido_data$psych_test
psych_test
hist(psych_test)
test_a<-shido_data$stat_test2[1:5]
test_a
sum(test_a)
sum(test_a)/5
sum(test_a)/length(test_a)
mean(test_a)
median(test_a)
table(test_a)
test_a_ave<-mean(test_a)
test_a_ave
test_a_deviation<-test_a-test_a_ave
test_a_deviation
test_a_variance<-sum(test_a_deviation^2)/length(test_a)
sqrt(test_a_variance)
abs(test_a-mean(test_a)
mean(abs(test_a-mean(test_a)))

社会統計演習
こちらのサイトで指導法データのcsvファイルを配布して下さっている。使わせていただく。
shido_data <- read.csv("shidouhou.csv", fileEncoding="CP932")
という形でロードすれば良いらしい。(日本語入りのファイルなのでエンコード方式を指定する必要がある。)



shido_hou <- t(shido_data["method"])
で、列データを行データに転置しつつ、代入が出来る。
はて?転置をしないとエラーになってしまったけれど、hist()関数は行データしか表示してくれない?
R言語プログラミング: データ型・操作 - hamadakoichi blog
こちらの方の情報で分かりました。 転置しないで代入するとclassがlistになってる。
「“Error in hist.default(test1) : 'x' must be numeric”ってどういう意味だ?test1の中身は数字じゃないか。」と思ったのですが、転置をしないで入れると数値以外も格納可能なlistになる為、数字じゃなきゃダメだとエラーが出る訳です。

そもそもcsvを読み込んだもののclassはdata.frame。これはlistの一種。列の名前、行の名前を付けることが可能で、csvを読み込んだとき、1行目は列の名前として扱われる模様。(読み込み時にheader=falseを指定すると1行目もデータとして扱われる。)

> shido_data <- read.csv("shidouhou.csv", fileEncoding="CP932")
> shido_data
   SID   name sex math stat psych_test stat_test1 stat_test2 method
1    1   大村  男 嫌い 好き         13          6         10      C
2    2   本多  男 嫌い 好き         14         10         13      B
3    3   川崎  男 好き 好き          7          6          8      B
(中略)
> class(shido_data)
[1] "data.frame"
> colnames(shido_data)
[1] "SID"        "name"       "sex"        "math"       "stat"      
[6] "psych_test" "stat_test1" "stat_test2" "method"    
> rownames(shido_data)
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11" "12" "13"
[14] "14" "15" "16" "17" "18" "19" "20" 
> test1 <- c(shido_data["stat_test1"])
> test1
$stat_test1
 [1]  6 10  6 10  5  3  5  9  3  3 11  6 11  9  7  5  8  7  7  9
> class(test1)
[1] "list"
> hist(test1)
Error in hist.default(test1) : 'x' must be numeric
> test1 <- t(shido_data["stat_test1"])
> test1
           [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
stat_test1    6   10    6   10    5    3    5    9    3     3    11
           [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
stat_test1     6    11     9     7     5     8     7     7     9
> class(test1)
[1] "matrix"
> hist(test1)
というか、そもそも
shido_hou <- t(shido_data["method"])
この取り出し方が良くなかったように思われる。 列の名前がそのまま残るのも気持ちが悪い。
> shido_hou$method [1] C B B A B C A D D D A A A C B D C C B DLevels: A B C D  
> shido_method <- shido_data$method 
> shido_method [1] C B B A B C A D D D A A A C B D C C B DLevels: A B C D> class(shido_method)[1] "factor"
$で取り出すと値だけが引き継がれる。

0 件のコメント:

コメントを投稿