[R]t分布における分布関数の値を求める
pt関数を使う。以下は自由度5のt分布において、確率変数Xが2における上側(=0.05096974…)、両側(=0.1019395…)の分布関数の値を求めた例。
> pt(2, 5, lower.tail = FALSE)
[1] 0.05096974
> 2 * pt(2, 5, lower.tail = FALSE)
[1] 0.1019395
« 2022年3月 | トップページ | 2022年5月 »
pt関数を使う。以下は自由度5のt分布において、確率変数Xが2における上側(=0.05096974…)、両側(=0.1019395…)の分布関数の値を求めた例。
> pt(2, 5, lower.tail = FALSE)
[1] 0.05096974
> 2 * pt(2, 5, lower.tail = FALSE)
[1] 0.1019395
qt関数を使う。以下は自由度5のt分布において、上側5%点(=2.015048…)、両側5%点(=2.570582…)を求めた例。
> qt(1 - 0.05, 5)
[1] 2.015048
> qt(1 - 0.05 / 2, 5)
[1] 2.570582
> dtf <- read.csv("table1-1-1.csv", header = TRUE)
> w <- 3
> sumn <- 0
> for (i in seq(142, 169, w)) {
+ n <- length(which(dtf$height > i & dtf$height <= i + w))
+ cat(sprintf("%d~%d %2d\n", i, i + w, n))
+ sumn <- sumn + n
+ }
142~145 1
145~148 5
148~151 15
151~154 29
154~157 51
157~160 41
160~163 31
163~166 17
166~169 9
169~172 1
> cat(sprintf("計 %d\n", sumn))
計 200
> dtf <- read.csv("table1-1-1.csv", header = TRUE)
> for (i in 143:170) {
+ cat(sprintf("%d %2d\n", i, length(which(dtf$height == i))))
+ }
143 1
144 0
145 0
146 2
147 2
148 1
149 2
150 4
151 9
152 4
153 17
154 8
155 16
156 22
157 13
158 12
159 15
160 14
161 8
162 15
163 8
164 7
165 7
166 3
167 2
168 4
169 3
170 1
> for (i in 1:20) {
+ cat(sprintf("%2d %5.3f %6.3f %6.3f\n", i, qt(0.95, i), qt(0.975, i), qt(0.995, i)))
+ }
1 6.314 12.706 63.657
2 2.920 4.303 9.925
3 2.353 3.182 5.841
4 2.132 2.776 4.604
5 2.015 2.571 4.032
6 1.943 2.447 3.707
7 1.895 2.365 3.499
8 1.860 2.306 3.355
9 1.833 2.262 3.250
10 1.812 2.228 3.169
11 1.796 2.201 3.106
12 1.782 2.179 3.055
13 1.771 2.160 3.012
14 1.761 2.145 2.977
15 1.753 2.131 2.947
16 1.746 2.120 2.921
17 1.740 2.110 2.898
18 1.734 2.101 2.878
19 1.729 2.093 2.861
20 1.725 2.086 2.845
pnorm関数を使う。平均が0、標準偏差が1の正規分布における-1における分布関数は以下のとおり。
> pnorm(-1, mean = 0, sd = 1)
[1] 0.1586553
この0.1586553…という値は、以下の確率密度関数のグラフにおける、緑色で塗った箇所の面積である。
> x <- seq(-5, 5, 0.1)
> y <- dnorm(x, mean = 0, sd = 1)
> xp <- seq(-5, -1, 0.1)
> yp <- dnorm(xp, mean = 0, sd = 1)
> plot(x, y, type = "l")
> polygon(c(xp, -1), c(yp, 0), col = "green")
この関数を使うと、いわゆる1σ(いちしぐま)の範囲(平均値±標準偏差)の値が出る確率を簡単に求めることができる。分布関数とは、確率変数が指定の値より小さい値をとるときの確率であるため、σ(上記の例では1)における分布関数の値から、-σ(上記の例では-1)における分布関数の値を引けばよい。
> pnorm(1, mean = 0, sd = 1) - pnorm(-1, mean = 0, sd = 1)
[1] 0.6826895
標準正規分布(平均0、標準偏差1)において、平均値±標準偏差の範囲になる確率は0.6826895…(約68%)である。
> x <- seq(-4.0, 4.0, 0.5)
> y <- dnorm(x, mean = 0.0, sd = sqrt(1))
> for (i in 1:length(x)) cat(sprintf("%4.1f %8.6f\n", x[i], y[i]))
-4.0 0.000134
-3.5 0.000873
-3.0 0.004432
-2.5 0.017528
-2.0 0.053991
-1.5 0.129518
-1.0 0.241971
-0.5 0.352065
0.0 0.398942
0.5 0.352065
1.0 0.241971
1.5 0.129518
2.0 0.053991
2.5 0.017528
3.0 0.004432
3.5 0.000873
4.0 0.000134
> plot(x, y, type = "l")
> points(x, y, pch = 20, col = "black")
dnorm関数を使う。よく見かける平均0、標準偏差が1の正規分布に従う、確率密度関数のグラフは以下のとおり。
> x <- seq(-5, 5, 0.1)
> y <- dnorm(x, mean = 0, sd = 1)
> plot(x, y, type = "l")
この正規分布で確率変数(横軸)が0のときの確率密度関数の値(縦軸の値)は、図より0.4程度と推察されるが、それをより正確に求めるにはdnorm関数で次のようにする。
> dnorm(0.0, mean = 0, sd = 1)
[1] 0.3989423
dnorm関数は、meanオプションを省略すると0、sdオプションを省略すると1が指定されたものとして計算をする。よって、この例では次のようにしても同じ。
> dnorm(0.0)
[1] 0.3989423
which関数を使う。以下、取得例。
> s <- c("h", "e", "l", "l", "o")
> n <- c(3, 1, 4, 1, 5)
> dtf <- data.frame(s, n)
> dtf
s n
1 h 3
2 e 1
3 l 4
4 l 1
5 o 5
> idx <- which(dtf$s == "e")
> idx
[1] 2
> idx <- which(dtf$s == "l")
> idx
[1] 3 4
> idx <- which(dtf$s == "l" & dtf$n == 1)
> idx
[1] 4
> idx <- which(dtf$s == "l" & dtf$n == 5)
> idx
integer(0)
検索対象の列を列名を指定したくない場合は、連番で指定する。
> idx <- which(dtf[, 1] == "l" & dtf[, 2] == 1)
> idx
[1] 4