情報科学テキスト 「はじめての統計15講」.
このページはRマークダウンで作成しています.
Rstudioはフリーソフトで、将来の看護研究にも活用できます.
教材.
Rマークダウンをもとに作成した手書きプリントを使用.
講義では、手書きプリントを完成させるようにする.
考査は数字を変えて出題.
手書きプリントはまとめて提出、平常点として評価する.
考査は講義内容及び類題(解答は手書き、電卓を使用).
このページは、
テキストを参考にして完成するワークブックのような感じで、
サイトを見て自分で復習できることを目指す。
Rのコードも記載してあるので、将来 Rstudio Cloudなどを利用する際に使うことができます。
階級は、以上〜未満 で作られます。
データが階級端と一致していると、ヒストグラムの形に影響する場合があります。
あまり気にする必要はありませんが、整理の仕方でデータの見え方が変わることを知っておきましょう。
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 となっている右のグラフが望ましいと言えます。
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 | |
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))
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))
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="累積度数")
ヒストグラムから累積度数を作図しましょう。
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")
まとめ.
このことは将来、
という定理に一般化されます。
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)
階級 | 集計(カウント) |
---|---|
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 | |
#授業用:col=0にする
h <- hist(a,breaks=seq(144.5, 172.5, by = 4),col=0, border=1)
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="累積度数")
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="累積度数")
ecdf() は累積分布関数を求める関数です.
plot(ecdf(a), col="blue")