먼저 몇 가지 간단한 의견이 있습니다.
- 추정 된 매개 변수 를 사용한 Kolmovorov-Smirnov-Test (KS-Test) 의 값은 매우 잘못됩니다. 불행히도 분포를 맞추고 Kolmogorov-Smirnov-Test의 추정 된 모수를 사용하여 샘플을 테스트 할 수는 없습니다.p
- 표본은 특정 분포를 정확하게 따르지 않습니다 . 따라서 KS-Test 의 이 유효하고 보다 크더라도 데이터가이 특정 분포를 따른다 는 것을 배제 할 수는 없습니다 . 다른 공식은 표본이 특정 분포와 호환된다는 것입니다. 그러나 "내 데이터가 분포 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)
표본의 첨도 및 제곱 왜도는 "관찰"이라는 파란색 점으로 플롯됩니다. 가능한 분포는 Weibull, Lognormal 및 가능한 Gamma 분포를 포함하는 것으로 보입니다.
Weibull 분포와 정규 분포에 적합합니다 :
fit.weibull <- fitdist(x, "weibull")
fit.norm <- fitdist(x, "norm")
이제 법선에 맞는지 검사하십시오.
plot(fit.norm)
Weibull에 적합합니다.
plot(fit.weibull)
둘 다 좋아 보이지만 QQ-Plot에 의해 판단 된 Weibull은 특히 꼬리에서 조금 더 나아 보일 수 있습니다. 이에 따라 Weibull 피팅의 AIC는 일반 피팅에 비해 낮습니다.
fit.weibull$aic
[1] 519.8537
fit.norm$aic
[1] 523.3079
Kolmogorov-Smirnov 테스트 시뮬레이션
여기 에 설명 된 @Aksakal의 절차 를 사용하여 null에서 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
이는 표본이 Weibull 분포와 호환 가능하다는 그래픽 결론을 확인합니다.
여기 에 설명 된대로 부트 스트랩을 사용하여 예상 Weibull 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"
실제 양수 선에 정의 된 분포 만 시도합니다. 또 다른 중요한 옵션은 매개 변수 . 이는 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에 따르면,와 이블 분포 (Waibull distribution) (보다 구체적으로 WEI2
, 그것의 특별한 매개 변수화)는 데이터에 가장 적합합니다. 분포의 정확한 매개 변수화가 WEI2
에서 자세한 조되는 이 문서 의가에 잔류보고 적합성을 검사하자 251 페이지 웜 플롯 (기본적으로 해제 추세 QQ 플롯) :
잔차는 중간 수평선에 가깝고 95 %는 위쪽 및 아래쪽 점선 곡선 사이에 있으며, 이는 점별 신뢰 구간 95 %로 작동합니다. 이 경우, 웜 플롯은 Weibull 분포가 적절하게 적합하다는 것을 보여줍니다.