R入門
まずはこの一冊から 意味が分かる統計解析(ペレ出版)
最終更新:
r-intro
目次
女子校生5人の体重の偏差(p.41)
以下をファイルtable_p041.csvに保存する。
no, x
1, 51
2, 49
3, 50
4, 57
5, 43
計算する。
> library(tidyverse)
> tbl <- read_csv("table_p041.csv", progress = FALSE, show_col_types = FALSE)
> # 資料
> print(as.data.frame(tbl))
no x
1 1 51
2 2 49
3 3 50
4 4 57
5 5 43
> cat("偏差\n")
偏差
> no <- tbl$no
> x <- tbl$x
> n <- length(x)
> xm <- sum(x) / n
> print(data.frame(番号 = no, 偏差 = x - xm))
番号 偏差
1 1 1
2 2 -1
3 3 0
4 4 7
5 5 -7
女子校生5人の体重の分散と標準偏差(p.44)
上に示したp.41の表に掲載の値をtable_p041.csvに保存しておく。
> library(tidyverse)
> tbl <- read_csv("table_p041.csv", progress = FALSE, show_col_types = FALSE)
> x <- tbl$x
> n <- length(tbl$x)
> xm <- sum(x) / n
> s2 <- sum((x - xm) ^ 2) / n
> s <- sqrt(s2)
> # 分散
> print(s2)
[1] 20
> # 標準偏差
> print(s)
[1] 4.472136
偏差値(p.47)
以下のp.47の表の数値をファイルtable_p047.csvに保存して、カレントディレクトリに置いておく。
i, x
1, 61
2, 59
3, 60
4, 67
5, 53
> dtf <- read.csv("table_p047.csv")
> n <- nrow(dtf)
> x <- dtf$x
> mx <- mean(x)
> s2 <- sum((x - mx) ^ 2) / n
> s <- sqrt(s2)
> z <- 50 + 10 * (x - mx) / s
> cat(sprintf("平均 %f\n", mx))
平均 60.000000
> cat(sprintf("標準偏差 %f\n", s))
標準偏差 4.472136
> cat("番号 点数 偏差値\n")
番号 点数 偏差値
> for (i in 1:n) {
+ cat(sprintf("%d %d %.1f\n", i, x[i], z[i]))
+ }
1 61 52.2
2 59 47.8
3 60 50.0
4 67 65.7
5 53 34.3
女子高生5人の体重の最大値、最小値、範囲(p.48)
範囲の計算には、max関数とmin関数を組み合わせて使っても結果は同じ。
> x <- c(51, 49, 50, 57, 43) # 測定値
> print(max(x)) # 最大値
[1] 57
> print(min(x)) # 最小値
[1] 43
> print(range(x)[2] - range(x)[1]) # 範囲
[1] 14
正規分布におけるパーセント点(pp.94-95)
> # 平均10、分散3^2(標準偏差3)の正規分布における下側5パーセント点
> qnorm(0.05, 10, 3)
[1] 5.065439
> # 平均10、分散3^2(標準偏差3)の正規分布における上側5パーセント点
> qnorm(0.05, 10, 3, lower.tail = FALSE)
[1] 14.93456
> # 平均10、分散3^2(標準偏差3)の正規分布における両側5パーセント点
> qnorm(0.05 / 2, 10, 3, lower.tail = FALSE)
[1] 15.87989
正規分布におけるp値(p.95)
> # 平均10、分散3^2(標準偏差3)の正規分布における確率変数が15のときの下側p値
> pnorm(15, 10, 3)
[1] 0.9522096
> # 平均10、分散3^2(標準偏差3)の正規分布における確率変数が15のときの上側p値
> pnorm(15, 10, 3, lower.tail = FALSE)
[1] 0.04779035
> # 平均10、分散3^2(標準偏差3)の正規分布における確率変数が15のときの両側p値
> pnorm(15, 10, 3, lower.tail = FALSE) * 2
[1] 0.0955807
t分布におけるパーセント点(p.138)
> # 自由度5のt分布における上側5パーセント点
> qt(1 - 0.05, 5)
[1] 2.015048
> # 自由度5のt分布における両側5パーセント点
> qt(1 - 0.05 / 2, 5)
[1] 2.570582
t分布におけるp値(p.139)
> # 自由度5のt分布における、確率変数が2のときの上側p値
> pt(2, 5, lower.tail = FALSE)
[1] 0.05096974
> # 自由度5のt分布における、確率変数が2のときの両側p値
> pt(2, 5, lower.tail = FALSE) * 2
[1] 0.1019395
pt関数はデフォルトでは下側p値を返す。上側p値を得たい場合はlower.tailをFALSEにする。両側p値は上側p値を2倍する。
χ^2分布におけるパーセント点(p.152)
> # 自由度5のχ^2分布における、下側5パーセント点
> qchisq(0.05, 5)
[1] 1.145476
> # 自由度5のχ^2分布における、上側5パーセント点
> qchisq(0.05, 5, lower.tail = FALSE)
[1] 11.0705
> qchisq(1 - 0.05, 5)
[1] 11.0705
χ^2分布におけるp値(p.153)
> # 自由度5のχ^2分布における、確率変数が12のときの下側p値
> pchisq(12, 5)
[1] 0.9652122
> # 自由度5のχ^2分布における、確率変数が12のときの上側p値
> pchisq(12, 5, lower.tail = FALSE)
[1] 0.03478778
F分布におけるパーセント点(pp.205-206)
> # 自由度5,7のF分布における、下側5パーセント点
> qf(0.05, 5, 7)
[1] 0.2050915
> # 自由度5,7のF分布における、上側5パーセント点
> qf(0.05, 5, 7, lower.tail = FALSE)
[1] 3.971523
> qf(1 - 0.05, 5, 7)
[1] 3.971523
F分布におけるp値(p.206)
> # 自由度5,7のF分布における、確率変数が2のときの下側p値
> pf(2, 5, 7)
[1] 0.8043268
> # 自由度5,7のF分布における、確率変数が2のときの上側p値
> pf(2, 5, 7, lower.tail = FALSE)
[1] 0.1956732
共分散(p.214)
以下のp.214の表の数値をファイルtable_p214.csvに保存して、カレントディレクトリに置いておく。
i, h, w
1, 147.9, 41.7
2, 163.5, 60.2
3, 159.8, 47.0
4, 155.1, 53.2
5, 163.3, 48.3
6, 158.7, 55.2
7, 172.0, 58.5
8, 161.2, 49.0
9, 153.9, 46.7
10, 161.6, 52.5
> dtf <- read.csv("table_p214.csv")
> n <- nrow(dtf)
> h <- dtf$h
> w <- dtf$w
> mh <- mean(h)
> mw <- mean(w)
> sxy <- sum((h - mh) * (w - mw)) / n
> spxy <- sum((h - mh) * (w - mw)) / (n - 1)
> cat(sprintf("身長の平均 = %f\n", mh))
身長の平均 = 159.700000
> cat(sprintf("体重の平均 = %f\n", mw))
体重の平均 = 51.230000
> cat(sprintf("sxy = %f\n", sxy))
sxy = 23.730000
> cat(sprintf("cov関数の結果 = %f\n", cov(h, w)))
cov関数の結果 = 26.366667
> cat(sprintf("s'xy = %f\n", spxy))
s'xy = 26.366667