1 はじめに.

このコーナーでは「はじめての統計15講(小寺平治 著)」をRを用いて解説します。
[目次]によると、

  • §1〜§4:数学I.
  • §5〜§8:数学B.
  • §9〜§15:高校を超える内容.

高校1年から専攻科までの学習内容を簡潔にまとめたものになっています。小寺先生は「数学はいりません」と序文で書かれていますが、しっかりとした数理的理解を基に書かれています。

このコーナの解説は、Rのシミュレーションを利用し体験的に理解できるよう工夫しています。

2 記述統計と確率分布.

研究の手順は.

  • データを入手する.
  • データを分析する.

データの傾向を見るには.

  • 度数分布表を作る.
  • ヒストグラムで視覚化する.

これはどのような研究でも変わりはありません.
本節では、テキストにあるデータや乱数によるデータを用いて、データの整理の仕方を学びます。その際心がけてほしいことは次のことです.

  • 手作業で集計する(仕組みを理解する).
  • パソコンで集計する(多くのデータを処理).

乱数で作ったデータを用いることで、集計操作を何度も体験できます。

3 例題1.

3.1 データ.

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)

3.2 ヒストグラム.

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")

4 演習1.

参考サイト
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")

4.1 累積度数.

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

4.2 累積度数折線.

parはグラフィックス環境を指定する関数です. family=“HiraKakuProN-W3”は使用するフォントを表します.

par(family="HiraKakuProN-W3")
plot(f,type="l",xaxt="n",#デフォルトのX軸メモリを消す
    xlab="身長",ylab="頻度")
axis(1,1:7,labels=h$mids)

4.2.1 参考

度数分布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

5 ツール.

データの分布を知る便利なツールは、hist()関数です. 乱数でデータを作り、histでヒストグラムを表示しましょう.

5.1 N(5,1).

平均 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)

乱数のヒストグラムと理論曲線がほぼ一致していることがわかります。

5.2 サッカーの得点.

サッカーの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試合の得点は大きな値になり、正規分布に従うと言われています。
このようにデータは特徴的な分布を持ち、どのような分布に従うかを見極めることが重要です。