まず、簡単なコメントを次に示します。
- 推定パラメーターを使用したKolmovorov-Smirnov-Test(KS-Test)の値は非常に間違っています。残念ながら、分布を近似してから、Kolmogorov-Smirnov-Testの推定パラメーターを使用してサンプルをテストすることはできません。p
- サンプルが特定の分布に正確に従うことはありません。したがって、KSテストの値が有効でを場合でも、データがこの特定の分布に従うことを除外できないことを意味します。別の定式化は、サンプルが特定の分布と互換性があることです。しかし、「私のデータは分布xyに正確に従っていますか?」という質問に対する答えは?常にノーです。p>0.05
- ここでの目標は、サンプルがどの分布に従うかを確実に決定することではありません。目標は、@ whuber(コメント内)がデータの控えめな近似説明と呼ぶものです。特定のパラメトリック分布を持つことは、データのモデルとして役立ちます。
しかし、いくつかの調査をしましょう。fitdistrplus
分布フィッティングにいくつかの素晴らしい機能を提供する優れたパッケージを使用します。この関数descdist
を使用して、可能な候補の分布に関するいくつかのアイデアを獲得します。
library(fitdistrplus)
library(logspline)
x <- c(37.50,46.79,48.30,46.04,43.40,39.25,38.49,49.51,40.38,36.98,40.00,
38.49,37.74,47.92,44.53,44.91,44.91,40.00,41.51,47.92,36.98,43.40,
42.26,41.89,38.87,43.02,39.25,40.38,42.64,36.98,44.15,44.91,43.40,
49.81,38.87,40.00,52.45,53.13,47.92,52.45,44.91,29.54,27.13,35.60,
45.34,43.37,54.15,42.77,42.88,44.26,27.14,39.31,24.80,16.62,30.30,
36.39,28.60,28.53,35.84,31.10,34.55,52.65,48.81,43.42,52.49,38.00,
38.65,34.54,37.70,38.11,43.05,29.95,32.48,24.63,35.33,41.34)
今すぐ使用できますdescdist
:
descdist(x, discrete = FALSE)
サンプルの尖度と二乗の歪度は、「観測」という名前の青い点としてプロットされます。可能な分布には、ワイブル分布、対数正規分布、およびおそらくガンマ分布が含まれているようです。
ワイブル分布と正規分布を適合させましょう:
fit.weibull <- fitdist(x, "weibull")
fit.norm <- fitdist(x, "norm")
次に、法線の適合を検査します。
plot(fit.norm)
そして、ワイブル近似の場合:
plot(fit.weibull)
どちらも見た目は良いが、QQプロットで判断すると、ワイブルは、特に尾部で少し良く見えるかもしれません。同様に、ワイブル近似のAICは通常の近似と比較して低くなります。
fit.weibull$aic
[1] 519.8537
fit.norm$aic
[1] 523.3079
コルモゴロフ-スミルノフテストシミュレーション
ここで説明する @Aksakalの手順を使用して、ヌルの下でKS統計をシミュレートします。
n.sims <- 5e4
stats <- replicate(n.sims, {
r <- rweibull(n = length(x)
, shape= fit.weibull$estimate["shape"]
, scale = fit.weibull$estimate["scale"]
)
estfit.weibull <- fitdist(r, "weibull") # added to account for the estimated parameters
as.numeric(ks.test(r
, "pweibull"
, shape= estfit.weibull$estimate["shape"]
, scale = estfit.weibull$estimate["scale"])$statistic
)
})
シミュレートされたKS統計のECDFは次のようになります。
plot(ecdf(stats), las = 1, main = "KS-test statistic simulation (CDF)", col = "darkorange", lwd = 1.7)
grid()
最後に、KS統計のシミュレートされたヌル分布を使用した値は次のとおりです。p
fit <- logspline(stats)
1 - plogspline(ks.test(x
, "pweibull"
, shape= fit.weibull$estimate["shape"]
, scale = fit.weibull$estimate["scale"])$statistic
, fit
)
[1] 0.4889511
これは、サンプルがワイブル分布と互換性があるというグラフィカルな結論を確認します。
ここで説明したように、ブートストラップを使用して、推定ワイブルPDFまたはCDFに点ごとの信頼区間を追加できます。
xs <- seq(10, 65, len=500)
true.weibull <- rweibull(1e6, shape= fit.weibull$estimate["shape"]
, scale = fit.weibull$estimate["scale"])
boot.pdf <- sapply(1:1000, function(i) {
xi <- sample(x, size=length(x), replace=TRUE)
MLE.est <- suppressWarnings(fitdist(xi, distr="weibull"))
dweibull(xs, shape=MLE.est$estimate["shape"], scale = MLE.est$estimate["scale"])
}
)
boot.cdf <- sapply(1:1000, function(i) {
xi <- sample(x, size=length(x), replace=TRUE)
MLE.est <- suppressWarnings(fitdist(xi, distr="weibull"))
pweibull(xs, shape= MLE.est$estimate["shape"], scale = MLE.est$estimate["scale"])
}
)
#-----------------------------------------------------------------------------
# Plot PDF
#-----------------------------------------------------------------------------
par(bg="white", las=1, cex=1.2)
plot(xs, boot.pdf[, 1], type="l", col=rgb(.6, .6, .6, .1), ylim=range(boot.pdf),
xlab="x", ylab="Probability density")
for(i in 2:ncol(boot.pdf)) lines(xs, boot.pdf[, i], col=rgb(.6, .6, .6, .1))
# Add pointwise confidence bands
quants <- apply(boot.pdf, 1, quantile, c(0.025, 0.5, 0.975))
min.point <- apply(boot.pdf, 1, min, na.rm=TRUE)
max.point <- apply(boot.pdf, 1, max, na.rm=TRUE)
lines(xs, quants[1, ], col="red", lwd=1.5, lty=2)
lines(xs, quants[3, ], col="red", lwd=1.5, lty=2)
lines(xs, quants[2, ], col="darkred", lwd=2)
#-----------------------------------------------------------------------------
# Plot CDF
#-----------------------------------------------------------------------------
par(bg="white", las=1, cex=1.2)
plot(xs, boot.cdf[, 1], type="l", col=rgb(.6, .6, .6, .1), ylim=range(boot.cdf),
xlab="x", ylab="F(x)")
for(i in 2:ncol(boot.cdf)) lines(xs, boot.cdf[, i], col=rgb(.6, .6, .6, .1))
# Add pointwise confidence bands
quants <- apply(boot.cdf, 1, quantile, c(0.025, 0.5, 0.975))
min.point <- apply(boot.cdf, 1, min, na.rm=TRUE)
max.point <- apply(boot.cdf, 1, max, na.rm=TRUE)
lines(xs, quants[1, ], col="red", lwd=1.5, lty=2)
lines(xs, quants[3, ], col="red", lwd=1.5, lty=2)
lines(xs, quants[2, ], col="darkred", lwd=2)
#lines(xs, min.point, col="purple")
#lines(xs, max.point, col="purple")
GAMLSSを使用した自動分布フィッティング
gamlss
以下のためのパッケージはR
、多くの異なるディストリビューションを試してみて、GAIC(一般赤池情報量基準)によると、「最高」を選択する機能を提供しています。主な機能はfitDist
です。この関数の重要なオプションは、試行される分布のタイプです。たとえば、設定type = "realline"
すると、実ライン全体で定義されたすべての実装された分布が試行type = "realsplus"
されますが、実際の正ラインで定義された分布のみが試行されます。もう1つの重要なオプションは、GAICのペナルティであるパラメーターです。以下の例では、パラメータを設定します。これは、古典的なAICに従って「最適な」分布が選択されることを意味します。次のように、を任意の値に設定できます。kk=2klog(n)BICの。
library(gamlss)
library(gamlss.dist)
library(gamlss.add)
x <- c(37.50,46.79,48.30,46.04,43.40,39.25,38.49,49.51,40.38,36.98,40.00,
38.49,37.74,47.92,44.53,44.91,44.91,40.00,41.51,47.92,36.98,43.40,
42.26,41.89,38.87,43.02,39.25,40.38,42.64,36.98,44.15,44.91,43.40,
49.81,38.87,40.00,52.45,53.13,47.92,52.45,44.91,29.54,27.13,35.60,
45.34,43.37,54.15,42.77,42.88,44.26,27.14,39.31,24.80,16.62,30.30,
36.39,28.60,28.53,35.84,31.10,34.55,52.65,48.81,43.42,52.49,38.00,
38.65,34.54,37.70,38.11,43.05,29.95,32.48,24.63,35.33,41.34)
fit <- fitDist(x, k = 2, type = "realplus", trace = FALSE, try.gamlss = TRUE)
summary(fit)
*******************************************************************
Family: c("WEI2", "Weibull type 2")
Call: gamlssML(formula = y, family = DIST[i], data = sys.parent())
Fitting method: "nlminb"
Coefficient(s):
Estimate Std. Error t value Pr(>|t|)
eta.mu -24.3468041 2.2141197 -10.9962 < 2.22e-16 ***
eta.sigma 1.8661380 0.0892799 20.9021 < 2.22e-16 ***
AICによれば、ワイブル分布(より具体的にはWEI2
、その特別なパラメーター化)はデータに最もよく適合します。分布の正確なパラメータ化については、279ページのこのドキュメントでWEI2
詳しく説明します。ワームプロット(基本的にはトレンド除去されたQQプロット)の残差を見て、適合性を調べましょう。
残差は中央の水平線に近く、95%が点線の上下曲線の間にあり、95%の点ごとの信頼区間として機能すると予想されます。この場合、ワームプロットは見た目が良く、ワイブル分布が適切に適合していることを示しています。