R(統計学)

2025年11月22日 (土)

[R]複数の文字列による重複順列を得る

重複順列とは、複数のものから同じものを繰り返しとることを許してとって並べた順列のこと。高校で学ぶ数学で重複順列は「n個からr個とった重複順列」という。

以下では、与えれたn個の文字列からn個とった重複順列を求めている。例として"A"と"B"の2つの文字列であれば、"AA", "AB", "BA", "BB"の4個の文字列を作成するということ。"A", "B", "C"の3つであれば、"AAA", "AAB", "AAC", "ABA", …, "CCB", "CCC"の27個となる。

gtoolsパッケージのpermutations関数を使う。repeats.allowオプション(デフォルト:FALSE)がFALSEの場合は、繰り返し取ることが認められなくなり、順番を考慮した組合せになってしまうため、TRUEとすること。戻り値は配列のため、これをapply関数を利用してpaste0関数で連結すれば、ベクトルでまとめて得られる。

> library(gtools)
> ss <- c("A", "B")
> permutations(2, 2, ss)
[,1] [,2]
[1,] "A" "B"
[2,] "B" "A"
> ar <- permutations(2, 2, ss)
> apply(ar, 1, function(s) {return(paste0(s, collapse = ""))})
[1] "AB" "BA"
> ss <- c("A", "B", "C")
> permutations(3, 3, ss)
[,1] [,2] [,3]
[1,] "A" "B" "C"
[2,] "A" "C" "B"
[3,] "B" "A" "C"
[4,] "B" "C" "A"
[5,] "C" "A" "B"
[6,] "C" "B" "A"
> permutations(3, 3, ss, repeats.allow = TRUE)
[,1] [,2] [,3]
[1,] "A" "A" "A"
[2,] "A" "A" "B"
[3,] "A" "A" "C"
[4,] "A" "B" "A"
[5,] "A" "B" "B"
[6,] "A" "B" "C"
[7,] "A" "C" "A"
[8,] "A" "C" "B"
[9,] "A" "C" "C"
[10,] "B" "A" "A"
[11,] "B" "A" "B"
[12,] "B" "A" "C"
[13,] "B" "B" "A"
[14,] "B" "B" "B"
[15,] "B" "B" "C"
[16,] "B" "C" "A"
[17,] "B" "C" "B"
[18,] "B" "C" "C"
[19,] "C" "A" "A"
[20,] "C" "A" "B"
[21,] "C" "A" "C"
[22,] "C" "B" "A"
[23,] "C" "B" "B"
[24,] "C" "B" "C"
[25,] "C" "C" "A"
[26,] "C" "C" "B"
[27,] "C" "C" "C"
> ar <- permutations(3, 3, ss, repeats.allow = TRUE)
> apply(ar, 1, function(s) {return(paste0(s, collapse = ""))})
[1] "AAA" "AAB" "AAC" "ABA" "ABB" "ABC" "ACA" "ACB" "ACC" "BAA"
[11] "BAB" "BAC" "BBA" "BBB" "BBC" "BCA" "BCB" "BCC" "CAA" "CAB"
[21] "CAC" "CBA" "CBB" "CBC" "CCA" "CCB" "CCC"

2023年10月14日 (土)

[R]範囲を求める

統計学における「範囲」とは、データのとる値の最大値から最小値を引いた差のこと。Rにはこれを直接求める関数は標準で搭載されていないが、それに近い動作をする関数はある。

range関数は、引数に与えたベクトルの最小値と最大値をベクトルで返す。これを利用して範囲を求めることができる。ただしmax関数とmin関数を組み合わせた計算と手順に大差はない。

> d <- c(161, 165, 160, 164, 165, 163, 164, 162, 164, 170)
> range(d)
[1] 160 170
> print(range(d)[2] - range(d)[1]) # 範囲
[1] 10
> print(max(d) - min(d)) # 範囲
[1] 10

2023年3月 3日 (金)

[R]正規分布におけるp値を求める

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

2023年3月 2日 (木)

[R]正規分布におけるパーセント点を求める

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

2023年3月 1日 (水)

[R]t分布におけるp値

> # 自由度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倍する。

2023年2月28日 (火)

[R]t分布におけるパーセント点を求める

> # 自由度5のt分布における上側5パーセント点
> qt(1 - 0.05, 5)
[1] 2.015048
> # 自由度5のt分布における両側5パーセント点
> qt(1 - 0.05 / 2, 5)
[1] 2.570582

2023年2月27日 (月)

[R]F分布におけるp値

> # 自由度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

 

2023年2月26日 (日)

[R]F分布におけるパーセント点を求める

> # 自由度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

2023年2月24日 (金)

[R]χ^2分布におけるp値を求める

> # 自由度5のχ^2分布における、確率変数が12のときの下側p値
> pchisq(12, 5)
[1] 0.9652122
> # 自由度5のχ^2分布における、確率変数が12のときの上側p値
> pchisq(12, 5, lower.tail = FALSE)
[1] 0.03478778

2023年2月15日 (水)

[R]χ^2分布におけるパーセント点を求める

> # 自由度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
無料ブログはココログ

■■

■■■