九州大学 海事統計学 様 によれば、
を検定する分布の検定です。
これは分布の推定とつながっているので、後半では分布の推定にも踏み込んで説明します。
これは統計的モデリングといわれるもので、事象の確率的予測に役立ちます。
第1段階として、
第2段階として、
適合度検定は、各グループに属するデータ数の比率が理論通りかどうか検定するもので、
適合度検定量は \(T=\displaystyle
\sum_{i=1}^{k}\dfrac{(X_i-Np_i)^2}{Np_i}\). しかし、
がカイ二乗分布に直接従うわけではない。そもそもカイ二乗統計量は独立な標準正規分布の平方和である。適合度検定量とカイ二乗統計量をつなぐのがピアソンの定理である。
ピアソンの定理.
\(N\rightarrow \infty\)のとき、
\(T=\displaystyle
\sum_{i=1}^{k}\dfrac{(X_i-Np_i)^2}{Np_i}\rightarrow \chi^2(k-1)\)
(分布収束).
このように自由度は級の数 k から1を減じた k - 1 であるが、
日新火災海上保険株式会社様「R と Excel を用いた分布推定の実践例」によれば、
草彅の研究ログ様に、
“fitdistrplus”パッケージの fitdist関数
が紹介されているので使ってみようと思う 。
草薙先生の例から引用する。
#数値例の作成
dat<-rgamma(300,2,3)
#分布の確認
par(mfrow = c(1,2))
hist(dat)
plot(ecdf(dat))#データから経験分布関数を計算する関数
#ガンマ分布に当てはめてみる
fit<-fitdist(dat,"gamma")
plot(fit)
注意
\(0<q<1\)
は媒介変数としての役割を果たすので、曲線の媒介変数表示をしていることになります。
ガンマ乱数で出力したデータをガンマ分布に当てはめているので、当てはまりは良いはずです。
summary(fit)
## Fitting of the distribution ' gamma ' by maximum likelihood
## Parameters :
## estimate Std. Error
## shape 1.841529 0.1388898
## rate 2.890087 0.2502621
## Loglikelihood: -136.904 AIC: 277.8079 BIC: 285.2155
## Correlation matrix:
## shape rate
## shape 1.0000000 0.8709783
## rate 0.8709783 1.0000000
参考サイト.
fitdistr関数.
fitdistrという関数も同じパッケージに存在する。
推定値は、若干異なっているようである。
fit<-fitdistr(dat,"gamma")
fit
## shape rate
## 1.8416360 2.8904014
## (0.1388982) (0.2502880)
データを,ワイブル,対数正規分布にも当てはめてみて,適合度を比較する。
#フィットさせる
gam<-fitdist(dat,"gamma")
weib<-fitdist(dat,"weibull")
logn<-fitdist(dat,"lnorm")
#比較(リストで入れる)
gofstat(list(gam, weib, logn), fitnames=c("gamma", "Weibull", "lognormal"))
## Goodness-of-fit statistics
## gamma Weibull lognormal
## Kolmogorov-Smirnov statistic 0.04044823 0.03691238 0.06784878
## Cramer-von Mises statistic 0.07561878 0.08254480 0.35529053
## Anderson-Darling statistic 0.44482776 0.63982059 2.14256855
##
## Goodness-of-fit criteria
## gamma Weibull lognormal
## Akaike's Information Criterion 277.8079 281.2816 304.6501
## Bayesian Information Criterion 285.2155 288.6892 312.0577
Goodness-of-fit statistics.
適合しているという帰無仮説のもとで、乖離度を表す統計量.
値が小さい方が乖離度は小さい.
Goodness-of-fit criteria.
モデルのあてはまり度を表す統計量. 値が小さいほどあてはまりが良い.
(相対的な評価として用いられる).
確率が小さいとき、二項分布はポアソン分布に近いと言われます。
theta=1/6;n=30
x <- rbinom(500, n, theta)
fit <- fitdist(x,"pois")
#summary(fit)
#gofstat(fit)
plot(fit)
theta=1/6;n=30
x <- rbinom(500, n, theta)
fit <- fitdist(x,"nbinom")
#summary(fit)
#gofstat(fit)
plot(fit)
theta=1/2;n=10
dat <- rbinom(1000, n, theta)
#フィットさせる
binom<-fitdist(dat,"nbinom")
## Warning in sqrt(diag(varcovar)): NaNs produced
## Warning in cov2cor(varcovar): diag(V) had non-positive or NA entries; the
## non-finite result may be dubious
pois<-fitdist(dat,"pois")
norm<-fitdist(dat,"norm")
#比較(リストで入れる)
gofstat(list(binom, pois, norm), fitnames=c("binom", "pois", "norm"))
## Chi-squared statistic: 147.0406 147.0318 101.9314
## Degree of freedom of the Chi-squared distribution: 5 6 5
## Chi-squared p-value: 5.692964e-30 3.280902e-29 2.06955e-20
## Chi-squared table:
## obscounts theo binom theo pois theo norm
## <= 2 54 121.03525 120.99473 28.65155
## <= 3 109 137.93656 137.90900 72.24013
## <= 4 211 173.92097 173.90325 156.31449
## <= 5 249 175.43430 175.43360 231.83300
## <= 6 191 147.46735 147.48118 235.71592
## <= 7 125 106.25039 106.27072 164.30235
## <= 8 44 66.98434 67.00369 78.49902
## > 8 17 70.97085 71.00382 32.44354
##
## Goodness-of-fit criteria
## binom pois norm
## Akaike's Information Criterion 3969.529 3967.529 3783.471
## Bayesian Information Criterion 3979.345 3972.437 3793.286
par(mfrow = c(3,2))
plot(binom)
plot(pois)
plot(norm)
theta と n を変えてみる。
次のことを確かめてみよう。
赤池情報量基準(Akaike’s Information Criterion)が小さいほど当てはまりが良いと言われています。
nが大きければ、正規分布への当てはまりがいいはずです。
theta=1/2;n=500
dat <- rbinom(100, n, theta)
#フィットさせる
binom<-fitdist(dat,"nbinom")
## Warning in sqrt(diag(varcovar)): NaNs produced
## Warning in cov2cor(varcovar): diag(V) had non-positive or NA entries; the
## non-finite result may be dubious
pois<-fitdist(dat,"pois")
norm<-fitdist(dat,"norm")
#比較(リストで入れる)
gofstat(list(binom, pois, norm), fitnames=c("binom", "pois", "norm"))
## Chi-squared statistic: 9.486517 9.487526 3.384158
## Degree of freedom of the Chi-squared distribution: 7 8 7
## Chi-squared p-value: 0.2195862 0.3028505 0.8473388
## Chi-squared table:
## obscounts theo binom theo pois theo norm
## <= 232 9 13.022965 13.015154 6.767254
## <= 239 10 11.988025 11.984064 11.088580
## <= 242 9 6.474620 6.473214 7.111279
## <= 246 13 9.522372 9.521092 11.410093
## <= 250 9 10.032346 10.031938 12.774567
## <= 253 11 7.481468 7.481778 9.713652
## <= 257 11 9.429729 9.430892 12.060271
## <= 260 9 6.386497 6.387811 7.789072
## <= 266 10 10.430745 10.433963 11.385040
## > 266 9 15.231234 15.240093 9.900192
##
## Goodness-of-fit criteria
## binom pois norm
## Akaike's Information Criterion 799.7688 797.7687 788.5256
## Bayesian Information Criterion 804.9792 800.3739 793.7360
par(mfrow = c(3,2))
plot(binom)
plot(pois)
plot(norm)
nが大きく、theta が小さければ、正規分布への当てはまりがいいはずです。
theta=0.01;n=500
dat <- rbinom(100, n, theta)
#フィットさせる
binom<-fitdist(dat,"nbinom")
pois<-fitdist(dat,"pois")
norm<-fitdist(dat,"norm")
#比較(リストで入れる)
gofstat(list(binom, pois, norm), fitnames=c("binom", "pois", "norm"))
## Chi-squared statistic: 4.262816 4.262909 11.00213
## Degree of freedom of the Chi-squared distribution: 4 5 4
## Chi-squared p-value: 0.3716044 0.5122172 0.02654011
## Chi-squared table:
## obscounts theo binom theo pois theo norm
## <= 2 14 11.72560 11.72736 7.751289
## <= 3 11 13.53329 13.53453 9.056041
## <= 4 17 17.22186 17.22269 13.989686
## <= 5 19 17.53261 17.53270 17.551136
## <= 6 10 14.87415 14.87357 17.882898
## <= 7 15 10.81611 10.81521 14.798123
## > 7 14 14.29637 14.29394 18.970827
##
## Goodness-of-fit criteria
## binom pois norm
## Akaike's Information Criterion 440.3093 438.3093 443.0088
## Bayesian Information Criterion 445.5197 440.9145 448.2192
par(mfrow = c(3,2))
plot(binom)
plot(pois)
plot(norm)
theta=0.8;n=20
dat <- rbinom(100, n, theta)
#フィットさせる
binom<-fitdist(dat,"nbinom")
## Warning in sqrt(diag(varcovar)): NaNs produced
## Warning in cov2cor(varcovar): diag(V) had non-positive or NA entries; the
## non-finite result may be dubious
pois<-fitdist(dat,"pois")
norm<-fitdist(dat,"norm")
#比較(リストで入れる)
gofstat(list(binom, pois, norm), fitnames=c("binom", "pois", "norm"))
## Chi-squared statistic: 47.42219 47.42326 7.105462
## Degree of freedom of the Chi-squared distribution: 3 4 3
## Chi-squared p-value: 2.82629e-10 1.244719e-09 0.06861123
## Chi-squared table:
## obscounts theo binom theo pois theo norm
## <= 14 22 36.836953 36.845810 15.01088
## <= 15 18 9.927339 9.927927 15.30348
## <= 16 18 9.921725 9.921722 19.89332
## <= 17 20 9.332813 9.332255 19.84068
## <= 18 14 8.291143 8.290153 15.18231
## > 18 8 25.690028 25.682132 14.76932
##
## Goodness-of-fit criteria
## binom pois norm
## Akaike's Information Criterion 488.9377 486.9377 418.3476
## Bayesian Information Criterion 494.1481 489.5428 423.5580
par(mfrow = c(3,2))
plot(binom)
plot(pois)
plot(norm)
https://mi-chan-nel.com/moment-estimation/#google_vignette
モーメント法は,「母集団分布のモーメントと標本分布のモーメントが合うようにパラメータの推定量を決める」という方法である.
library(fitdistrplus)
theta=1/6;n=30
x <- rbinom(500, n, theta)
# 分布のテスト
#x <- df.testDATA$Time2Onset
#y <- max(df.testDATA$Time2Onset)
#min(df.testDATA$Time2Onset)
################ distribution test ################
normmlefit <- fitdist(x, "norm", "mle"); fit <- normmlefit; gofstat(fit); plot(fit)
## Goodness-of-fit statistics
## 1-mle-norm
## Kolmogorov-Smirnov statistic 0.1152992
## Cramer-von Mises statistic 0.9630858
## Anderson-Darling statistic 5.1449933
##
## Goodness-of-fit criteria
## 1-mle-norm
## Akaike's Information Criterion 2157.98
## Bayesian Information Criterion 2166.41
lnormmlefit <- fitdist(x + 0.1, "lnorm", "mle"); fit <- lnormmlefit; gofstat(fit); plot(fit)
## Goodness-of-fit statistics
## 1-mle-lnorm
## Kolmogorov-Smirnov statistic 0.1831816
## Cramer-von Mises statistic 2.6276614
## Anderson-Darling statistic 15.4199373
##
## Goodness-of-fit criteria
## 1-mle-lnorm
## Akaike's Information Criterion 2351.469
## Bayesian Information Criterion 2359.898
poismlefit <- fitdist(x, "pois", "mle"); fit <- poismlefit; gofstat(fit); plot(fit)
## Chi-squared statistic: 4.55044
## Degree of freedom of the Chi-squared distribution: 6
## Chi-squared p-value: 0.6026205
## Chi-squared table:
## obscounts theocounts
## <= 2 52.00000 59.03689
## <= 3 61.00000 67.95070
## <= 4 91.00000 86.29739
## <= 5 96.00000 87.67814
## <= 6 81.00000 74.23416
## <= 7 53.00000 53.87279
## <= 8 36.00000 34.20922
## > 8 30.00000 36.72070
##
## Goodness-of-fit criteria
## 1-mle-pois
## Akaike's Information Criterion 2154.482
## Bayesian Information Criterion 2158.696
expmlefit <- fitdist(x, "exp", "mle"); fit <- expmlefit; gofstat(fit); plot(fit)
## Goodness-of-fit statistics
## 1-mle-exp
## Kolmogorov-Smirnov statistic 0.3419782
## Cramer-von Mises statistic 15.7775384
## Anderson-Darling statistic Inf
##
## Goodness-of-fit criteria
## 1-mle-exp
## Akaike's Information Criterion 2627.311
## Bayesian Information Criterion 2631.526
gammamlefit <- fitdist(x, "gamma", "mme"); fit <- gammamlefit; gofstat(fit); plot(fit)
## Goodness-of-fit statistics
## 1-mme-gamma
## Kolmogorov-Smirnov statistic 0.1314201
## Cramer-von Mises statistic 1.1845137
## Anderson-Darling statistic Inf
##
## Goodness-of-fit criteria
## 1-mme-gamma
## Akaike's Information Criterion Inf
## Bayesian Information Criterion Inf
nbinommlefit <- fitdist(x, "nbinom", "mle"); fit <- nbinommlefit; gofstat(fit); plot(fit)
## Chi-squared statistic: 4.552438
## Degree of freedom of the Chi-squared distribution: 5
## Chi-squared p-value: 0.4728982
## Chi-squared table:
## obscounts theocounts
## <= 2 52.00000 59.05338
## <= 3 61.00000 67.96209
## <= 4 91.00000 86.30487
## <= 5 96.00000 87.67866
## <= 6 81.00000 74.22862
## <= 7 53.00000 53.86444
## <= 8 36.00000 34.20118
## > 8 30.00000 36.70677
##
## Goodness-of-fit criteria
## 1-mle-nbinom
## Akaike's Information Criterion 2156.482
## Bayesian Information Criterion 2164.911
geommlefit <- fitdist(x, "geom", "mle"); fit <- geommlefit; gofstat(fit); plot(fit)
## Chi-squared statistic: 502.4741
## Degree of freedom of the Chi-squared distribution: 6
## Chi-squared p-value: 2.464555e-105
## Chi-squared table:
## obscounts theocounts
## <= 2 52.00000 208.35778
## <= 3 61.00000 47.96747
## <= 4 91.00000 40.07808
## <= 5 96.00000 33.48629
## <= 6 81.00000 27.97868
## <= 7 53.00000 23.37692
## <= 8 36.00000 19.53203
## > 8 30.00000 99.22274
##
## Goodness-of-fit criteria
## 1-mle-geom
## Akaike's Information Criterion 2719.847
## Bayesian Information Criterion 2724.062
#betammefit <- fitdist(x/y, "beta", "mme"); fit <- betamlefit; gofstat(fit); plot(fit)
unifmlefit <- fitdist(x, "unif", "mle"); fit <- unifmlefit; gofstat(fit); plot(fit)
## Goodness-of-fit statistics
## 1-mle-unif
## Kolmogorov-Smirnov statistic 0.3685714
## Cramer-von Mises statistic 20.5726667
## Anderson-Darling statistic Inf
##
## Goodness-of-fit criteria
## 1-mle-unif
## Akaike's Information Criterion 2643.057
## Bayesian Information Criterion 2651.487
logismlefit <- fitdist(x, "logis", "mle"); fit <- logismlefit; gofstat(fit); plot(fit)
## Goodness-of-fit statistics
## 1-mle-logis
## Kolmogorov-Smirnov statistic 0.1109227
## Cramer-von Mises statistic 0.9964505
## Anderson-Darling statistic 5.5300869
##
## Goodness-of-fit criteria
## 1-mle-logis
## Akaike's Information Criterion 2167.771
## Bayesian Information Criterion 2176.200
独立性の検定とは、
2変量 x,y の値が互いに影響するかしないかを判断する検定である。
テキストp98の9分表の例は、x,y
が3水準のカテゴリー変数である場合である。
太郎 | 次郎 | 三郎 | 計 | |
---|---|---|---|---|
午前 | 48 | 59 | 33 | 140 |
午後 | 49 | 64 | 47 | 160 |
夜間 | 50 | 45 | 25 | 120 |
合計 | 147 | 168 | 105 | 420 |
独立な状態とは、
作業時間帯がどれであろうと3人の作業結果に影響を与えないということである。具体的には、
即ち、
太郎 | 次郎 | 三郎 | 計 | |
---|---|---|---|---|
午前 | a | b | c | a+b+c |
午後 | d | e | f | d+e+f |
夜間 | g | h | i | g+h+i |
合計 | a+d+g | b+e+h | c+f+i | 420 |
に対し、
観測値から推定する未知母数として、合計と計の比率
\(p_1=\dfrac{a+d+g}{N}~,~~~p_2=\dfrac{b+e+h}{N}~\), \(q_1=\dfrac{a+b+c}{N}~,~~~q_2=\dfrac{d+e+f}{N}~\). を用いると、
独立という仮説のもとで確率分布は次のようになる。.
太郎 | 次郎 | 三郎 | 計 | |
---|---|---|---|---|
午前 | \(p_1q_1\) | \(p_2q_1\) | \(p_3q_1\) | \(q_1\) |
午後 | \(p_1q_2\) | \(p_2q_2\) | \(p_3q_2\) | \(q_2\) |
夜間 | \(p_1(1-q_1-q_2)\) | \(p_2(1-q_1-q_2)\) | \(p_3(1-q_1-q_2)\) | \(1-q_1-q_2\) |
合計 | \(p_1\) | \(p_2\) | \(1-p_1-p_2\) | 1 |
従って、独立という仮定のもとでの期待度数は、
N=420
p1=147/420;p2=168/420;p3=1-p1-p2
q1=140/420;q2=160/420;q3=1-q1-q2
prob = c(p1*q1,p2*q1,p3*q1,p1*q2,p2*q2,p3*q2,p1*q3,p2*q3,p3*q3)
N*prob
## [1] 49 56 35 56 64 40 42 48 30
p98の上の表のデータの、期待度数からの乖離度は.
x <- c(48,59,33,49,64,47,50,45,25)
y <- N*prob
x
## [1] 48 59 33 49 64 47 50 45 25
y
## [1] 49 56 35 56 64 40 42 48 30
sum((abs(x-y))^2/y)
## [1] 4.940051
出力値は、p99で計算された値と一致している。
問題は、
この周辺分布を仮定し、独立の仮定のもとで無限回実験を繰り返したとき、
ということである。
多項乱数を用いてシミュレーションする。
X = c()
N=420
p1=147/420;p2=168/420;p3=1-p1-p2
q1=140/420;q2=160/420;q3=1-q1-q2
for (i in 1:1000) {
x <- rmultinom(n=1, size = 420, prob = c(p1*q1,p2*q1,p3*q1,p1*q2,p2*q2,p3*q2,p1*q3,p2*q3,p3*q3) ) # 乱数を発生
a=x[1];b=x[2];c=x[3]
d=x[4];e=x[5];f=x[6]
g=x[7];h=x[8];i=x[9]
P1=(a+d+g)/420;P2=(b+e+h)/420;P3=1-P1-P2#推定確率
Q1=(a+b+c)/420;Q2=(d+e+f)/420;Q3=1-Q1-Q2 #推定確率
y <- 420*c(P1*Q1,P2*Q1,P3*Q1,P1*Q2,P2*Q2,P3*Q2,P1*Q3,P2*Q3,P3*Q3)
s <- sum((abs(x-y))^2/y)
X <-c(X,s)
}
mean(X)
## [1] 3.983814
hist(X,prob=T)
curve(dchisq(x,4),add=T)
乖離度の計算において、
乱数が出力するごとに、周辺分布を P1,P2,Q1,Q2
で推定して用いているので、
自由度は 4 減り、9-1-4=4 であることに注意しておこう。
一般に、\(m\times n\)
分割表の独立検定では自由度は.
\(mn-1-(m-1)-(n-1)=(m-1)(n-1)\).
として、p99に述べられている。
注意しておきたいのは、
これは独立性の検定であるので、確率そのものは問題にしていない。
確率を、
p1=123/420;p2=105/420;q1=127/420;q2=200/420.
のように適当に変えても、全く同じ分布になる。
まさに、びっくり・ピアソンである。
X = c()
N=420
p1=123/420;p2=105/420;p3=1-p1-p2
q1=127/420;q2=200/420;q3=1-q1-q2
for (i in 1:1000) {
x <- rmultinom(n=1, size = 420, prob = c(p1*q1,p2*q1,p3*q1,p1*q2,p2*q2,p3*q2,p1*q3,p2*q3,p3*q3) ) # 乱数を発生
a=x[1];b=x[2];c=x[3]
d=x[4];e=x[5];f=x[6]
g=x[7];h=x[8];i=x[9]
P1=(a+d+g)/420;P2=(b+e+h)/420;P3=1-P1-P2#推定確率
Q1=(a+b+c)/420;Q2=(d+e+f)/420;Q3=1-Q1-Q2 #推定確率
y <- 420*c(P1*Q1,P2*Q1,P3*Q1,P1*Q2,P2*Q2,P3*Q2,P1*Q3,P2*Q3,P3*Q3)
s <- sum((abs(x-y))^2/y)
X <-c(X,s)
}
mean(X)
## [1] 3.978382
hist(X,prob=T)
curve(dchisq(x,4),add=T)
調査と検定を行う際には、乱数シミュレーションで分布を確かめておくことが重要である。
vx=matrix(c(48,59,33,49,64,47,50,45,25),nrow=3,byrow=T)
chisq.test(vx)
##
## Pearson's Chi-squared test
##
## data: vx
## X-squared = 4.9401, df = 4, p-value = 0.2935
Rでの独立検定は、あっという間に済んでしまう。
\(2\times 2\) 分割表の独立検定は、p99プラスαに記載されている簡易公式が存在するが、\(3\times 3\) 分割表には簡易公式はない。
そのままカイ二乗適合度検定を適用すると、
vx=c(1,6,18,4,3)
chisq.test(x=vx,p=c(2,8,12,8,2)/32)
## Warning in chisq.test(x = vx, p = c(2, 8, 12, 8, 2)/32): Chi-squared
## approximation may be incorrect
##
## Chi-squared test for given probabilities
##
## data: vx
## X-squared = 6.5, df = 4, p-value = 0.1648
コクランの規則に従ってセルを結合すると、
vx=c(7,18,7)
chisq.test(x=vx,p=c(10,12,10)/32)
##
## Chi-squared test for given probabilities
##
## data: vx
## X-squared = 4.8, df = 2, p-value = 0.09072
どちらも有意とはならない。
vx=c(7,18,7)
chisq.test(x=vx,p=c(10,12,10)/32)
##
## Chi-squared test for given probabilities
##
## data: vx
## X-squared = 4.8, df = 2, p-value = 0.09072
vx=matrix(c(17,29,14,20,62,38,11,29,20),nrow=3,byrow=T)
chisq.test(vx)
##
## Pearson's Chi-squared test
##
## data: vx
## X-squared = 4.1889, df = 4, p-value = 0.381
コードはデータ科学便覧様 を参照させていただきました。