このコーナーでは「はじめての統計15講(小寺平治
著)」をRを用いて解説します。
[目次]によると、
高校1年から専攻科までの学習内容を簡潔にまとめたものになっています。小寺先生は「数学はいりません」と序文で書かれていますが、しっかりとした数理的理解を基に書かれています。
このコーナの解説は、Rのシミュレーションを利用し体験的に理解できるよう工夫しています。
研究の手順は.
データの傾向を見るには.
これはどのような研究でも変わりはありません.
本節では、テキストにあるデータや乱数によるデータを用いて、データの整理の仕方を学びます。その際心がけてほしいことは次のことです.
乱数で作ったデータを用いることで、集計操作を何度も体験できます。
a<- c(51,31,75,81,40,92,52,65,64,43,35,
62,75,53,65,80,85,63,92,39,72,66,
45,52,59,73,39,55,53,40,85,49,56,
55,75,95,35,53,62,45,44,65,75,43,
50,45,55,75,60,45,58,33,44,60,50)
breaksは区切りを表します.
seqは数列、29.5から99.5までを10の幅で区切ります.
h <- hist(a,breaks=seq(29.5, 99.5, by = 10))
strは変数の内部構造を表示します.
str(h)
## List of 6
## $ breaks : num [1:8] 29.5 39.5 49.5 59.5 69.5 79.5 89.5 99.5
## $ counts : int [1:7] 6 11 14 10 7 4 3
## $ density : num [1:7] 0.0109 0.02 0.0255 0.0182 0.0127 ...
## $ mids : num [1:7] 34.5 44.5 54.5 64.5 74.5 84.5 94.5
## $ xname : chr "a"
## $ equidist: logi TRUE
## - attr(*, "class")= chr "histogram"
countsは度数を表し、midsは階級値を表します.
h$mids#階級値
## [1] 34.5 44.5 54.5 64.5 74.5 84.5 94.5
ecdf() は累積分布関数を求める関数です.
plot(ecdf(a), col="blue")
参考サイト
http://tips-r.blogspot.com/2014/11/r.html
histの利用
https://evrythingonmac.blogspot.com/2017/04/r.html
累積折線
a<- c(160,159,164,158,156,169,153,154,159,161,
157,157,151,159,166,145,155,161,161,150,
158,164,165,157,158,160,162,165,159,155,
162,155,154,157,165,157,154,163,162,158,
169,155,160,164,158,159,149,154,156,155)
h <- hist(a,breaks=seq(144.5, 172.5, by = 4))
str(h)
## List of 6
## $ breaks : num [1:8] 144 148 152 156 160 ...
## $ counts : int [1:7] 1 3 12 18 10 4 2
## $ density : num [1:7] 0.005 0.015 0.06 0.09 0.05 0.02 0.01
## $ mids : num [1:7] 146 150 154 158 162 ...
## $ xname : chr "a"
## $ equidist: logi TRUE
## - attr(*, "class")= chr "histogram"
h$mids#階級値
## [1] 146.5 150.5 154.5 158.5 162.5 166.5 170.5
plot(ecdf(a), col="blue")
h$countsは度数を出力します. 累積度数を計算するには、cumsum()関数を用います.
h$counts
## [1] 1 3 12 18 10 4 2
f <- cumsum(h$counts);f#累積
## [1] 1 4 16 34 44 48 50
parはグラフィックス環境を指定する関数です. family=“HiraKakuProN-W3”は使用するフォントを表します.
par(family="HiraKakuProN-W3")
plot(f,type="l",xaxt="n",#デフォルトのX軸メモリを消す
xlab="身長",ylab="頻度")
axis(1,1:7,labels=h$mids)
度数分布h$countsを表形式で出力する.
n <- length(h$counts) # 階級の数
class_names <- NULL # 階級の名前格納用
for(i in 1:n) {
class_names[i] <- paste(h$breaks[i], "~", h$breaks[i+1])
}
frequency_table <- data.frame(class=class_names, frequency=h$counts)
frequency_table
class | frequency |
---|---|
144.5 ~ 148.5 | 1 |
148.5 ~ 152.5 | 3 |
152.5 ~ 156.5 | 12 |
156.5 ~ 160.5 | 18 |
160.5 ~ 164.5 | 10 |
164.5 ~ 168.5 | 4 |
168.5 ~ 172.5 | 2 |
データの分布を知る便利なツールは、hist()関数です. 乱数でデータを作り、histでヒストグラムを表示しましょう.
平均 mean=5、標準偏差 sd=1 の正規乱数を1000個出力します.
breaks = “sturges”はスタージェスの公式(p4)に基づいた区切りであることを意味します.
dnorm(x,5,1)は、m=5, sd=1 の正規分布関数、 curveはそのグラフを意味します.
x <- rnorm(1000,5,1)
hist(x,prob=T,breaks = "sturges")
curve(dnorm(x,5,1),add=T)
乱数のヒストグラムと理論曲線がほぼ一致していることがわかります。
サッカーの1試合での得点は小さい値で、大きな得点になる確率は小さいので、ポアソン分布に従うと言われています。
<参考サイト>.
小中英嗣 様 「ポアソン分布を利用したサッカーシミュレーション」.
平均得点を3として、1000個のデータを出力しグラフを描きます.
x <- rpois(1000, 3)
h <- hist(x)
h$counts
## [1] 182 222 231 157 119 54 20 8 7
h <- hist(x,prob=T)
x <- c(0:10)
plot(x, dpois(x,3), type="l", main="poisson_graph")
バスケットボールの1試合の得点は大きな値になり、正規分布に従うと言われています。
このようにデータは特徴的な分布を持ち、どのような分布に従うかを見極めることが重要です。