情報科学テキスト 「はじめての統計15講」.

  • このページは授業ノートの役割をします.
  • Rでのシミュレーションと追加の演習を含みます.
  • 予習・復習に活用してください.

このページはRマークダウンで作成しています.
Rstudioはフリーソフトで、将来の看護研究にも活用できます.

教材.

  • Rマークダウンをもとに作成した手書きプリントを使用.

  • 講義では、手書きプリントを完成させるようにする.

  • 考査は数字を変えて出題.

  • 手書きプリントはまとめて提出、平常点として評価する.

  • 考査は講義内容及び類題(解答は手書き、電卓を使用).

このページは、 テキストを参考にして完成するワークブックのような感じで、
サイトを見て自分で復習できることを目指す。

Rのコードも記載してあるので、将来 Rstudio Cloudなどを利用する際に使うことができます。

1 階級の作り方.

階級は、以上〜未満 で作られます。
データが階級端と一致していると、ヒストグラムの形に影響する場合があります。
あまり気にする必要はありませんが、整理の仕方でデータの見え方が変わることを知っておきましょう。

par(mfrow=c(1,2))
hist(c(1,2,3),breaks=c(1,2,3))
hist(c(1,2,3),breaks=c(0.5,1.5,2.5,3.5))

階級値が 1,2,3 となっている右のグラフが望ましいと言えます。

2 例題1.

2.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)
階級 集計(カウント)
29.5-39.5             
39.5-49.5
49.5-59.5
59.5-69.5
69.5-79.5
79.5-89.5
89.5-99.5

2.2 ヒストグラム.

breaksは区切りを表します.
seqは数列、29.5から99.5までを10の幅で区切ります.
col=0 は白で表示することを意味します。

h <- hist(a,breaks=seq(29.5, 99.5, by = 10),col=0, border=1,xaxp=c(29.5, 99.5,7))

2.3 累積度数.

Rでhistが出力する内容を見てみましょう。

#授業用:echo=FALSEにする
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"

項目を取り出して度数分布表を構成します。

library(stringr)
dat <- data.frame("階級"=str_c(h$breaks[-8],"-",h$breaks[-1]),
                  "度数"=h$counts,"累積度数"=cumsum(h$counts))
dat
階級 度数 累積度数
29.5-39.5 6 6
39.5-49.5 11 17
49.5-59.5 14 31
59.5-69.5 10 41
69.5-79.5 7 48
79.5-89.5 4 52
89.5-99.5 3 55

累積度数折線を表示します。

par(family = "HiraKakuProN-W3") #日本語フォントの指定
plot(h$mids,dat$累積度数,type="l",xlab="代表値",ylab="累積度数",col=1,xlim=c(30,100),ylim=c(0,60),xaxp=c(29.5, 99.5,7))

2.4 縦軸を確率.

histで prob=T とすると、縦軸は確率表示になります.

h <- hist(a,breaks=seq(29.5, 99.5, by = 10),col=0, border=1,prob=T)

par(family = "HiraKakuProN-W3")
plot(h$mids,dat$累積度数/52,type="l",xlab="代表値",ylab="累積度数")

2.5 ヒストグラムと累積度数の関係.

ヒストグラムから累積度数を作図しましょう。

data <- data.frame(x=seq(34.5,94.5,by=10),y=h$counts)
colnames(data) <-c("階級値","度数")
library(ggplot2)
ggplot(data, aes(x=階級値, y=度数),color = 3) + geom_bar(stat="identity")+theme_gray(base_family = "HiraKakuPro-W3") + coord_fixed((ratio=1)) +
  scale_x_continuous(breaks=seq(34.5,94.5,by=10))+ ylim(c(0, 57))+ geom_col(color = "blue",fill="grey92")

累積度数からヒストグラムを作図しましょう。

data <- data.frame(x=seq(34.5,94.5,by=10),y=cumsum(h$counts))
colnames(data) <-c("階級値","累積")
library(ggplot2)
ggplot(data, aes(x=階級値, y=累積),color = 3) + geom_bar(stat="identity")+theme_gray(base_family = "HiraKakuPro-W3") + coord_fixed((ratio=1)) +
  scale_x_continuous(breaks=seq(34.5,94.5,by=10))+ ylim(c(0, 57))+ geom_col(color = "black",fill="grey92")

ヒストグラムから累積度数折線を作図するには
左の方から、すぐ左の高さを積み上げていきます。
(和分ともいうようです).

x=seq(34.5,94.5,by=10)
dtf1 <- data.frame(x = x, y = h$counts)
dtf2 <- data.frame(x = x, y = cumsum(h$counts))
library(ggplot2)
g <- ggplot(NULL)
g <- g +scale_x_continuous(breaks=seq(34.5,94.5,by=10))
g <- g + geom_point(data = dtf1, aes(x, y),col="blue")
g <- g + geom_point(data = dtf2, aes(x, y),col="black")
print(g)

累積度数折線からヒストグラムを作図するには、
右の方から、すぐ左の高さを切り取っていきます。
(差分ともいいます).

barplot(cumsum(h$counts),ylim=c(0,57),names.arg=c(seq(34.5,94.5,by=10)),col="grey90")
par (new =T)
barplot(h$counts,ylim=c(0,57),names.arg=c(seq(34.5,94.5,by=10)),col="grey80")

まとめ.

  • 和分を一般化したものが積分.
    (ヒストグラムを和分すると累積度数折線になる).
  • 差分を一般化したものが微分.
    (累積度数折線を差分するとヒストグラムになる).

このことは将来、

  • 確率密度関数を積分すると分布関数.
  • 分布関数を微分すると確率密度関数.

という定理に一般化されます。

2.6 関数の利用.

ecdf() は累積分布関数を求める関数です.

plot(ecdf(a), col="blue")

参考サイト
http://tips-r.blogspot.com/2014/11/r.html histの利用
https://evrythingonmac.blogspot.com/2017/04/r.html 累積折線

3 演習1.

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)
階級 集計(カウント)
144.5-148.5             
148.5-152.5
152.5-156.5
156.5-160.5
160.5-164.5
164.5-168.5
168.5-172.5

3.1 ヒストグラム.

#授業用:col=0にする
h <- hist(a,breaks=seq(144.5, 172.5, by = 4),col=0, border=1)

3.2 累積度数.

Rでhistが出力する内容を見てみましょう。

#授業用:echo=FALSEにする
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"

項目を取り出して度数分布表を構成します。

library(stringr)
dat <- data.frame("階級"=str_c(h$breaks[-8],"-",h$breaks[-1]),
                  "度数"=h$counts,"累積度数"=cumsum(h$counts))
dat
階級 度数 累積度数
144.5-148.5 1 1
148.5-152.5 3 4
152.5-156.5 12 16
156.5-160.5 18 34
160.5-164.5 10 44
164.5-168.5 4 48
168.5-172.5 2 50

累積度数折線を表示します。

par(family = "HiraKakuProN-W3") #日本語フォントの指定
plot(h$mids,dat$累積度数,type="l",xlab="代表値",ylab="累積度数")

3.3 縦軸を確率.

histで prob=T とすると、縦軸は確率表示になります.

h <- hist(a,breaks=seq(144.5, 172.5, by = 4),col=0, border=1,prob=T)

par(family = "HiraKakuProN-W3")
plot(h$mids,dat$累積度数/52,type="l",xlab="代表値",ylab="累積度数")

3.4 関数の利用.

ecdf() は累積分布関数を求める関数です.

plot(ecdf(a), col="blue")

4 参考サイト.

R Markdown 入門.

私たちのR.