सबसे पहले, यहाँ कुछ त्वरित टिप्पणियां हैं:
- के साथ एक Kolmovorov-स्मिर्नोव-टेस्ट (एस-टेस्ट) की -values अनुमान मापदंडों काफी गलत हो जाएगा। इसलिए दुर्भाग्य से, आप सिर्फ एक वितरण फिट नहीं कर सकते हैं और फिर अपने नमूने का परीक्षण करने के लिए कोलमोगोरोव-स्मिर्नोव-टेस्ट में अनुमानित मापदंडों का उपयोग कर सकते हैं।p
- आपका नमूना कभी भी एक विशिष्ट वितरण का बिल्कुल पालन नहीं करेगा । तो यहां तक कि अगर केएस-टेस्ट से आपके वैल्यू मान्य होंगे और , तो इसका मतलब सिर्फ यह होगा कि आप इस बात से इंकार नहीं कर सकते कि आपका डेटा इस विशिष्ट वितरण का अनुसरण करता है। एक और सूत्रीकरण यह होगा कि आपका नमूना एक निश्चित वितरण के साथ संगत है। लेकिन सवाल का जवाब "क्या मेरा डेटा वितरण 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)
दोनों अच्छे दिखते हैं, लेकिन क्यूक्यू-प्लॉट को देखते हुए, वेइबुल शायद थोड़ा बेहतर दिखता है, खासकर पूंछ पर। सामान्य फिट की तुलना में, वाइबुल फिट का AIC कम है:
fit.weibull$aic
[1] 519.8537
fit.norm$aic
[1] 523.3079
कोलमोगोरोव-स्मिरनोव परीक्षण सिमुलेशन
मैं n के तहत 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
)
})
नकली केएस-सांख्यिकी का ईसीडीएफ निम्न प्रकार है:
plot(ecdf(stats), las = 1, main = "KS-test statistic simulation (CDF)", col = "darkorange", lwd = 1.7)
grid()
अंत में, हमारी एस-आँकड़ों के नकली अशक्त वितरण का उपयोग कर -value है: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
यह हमारे चित्रमय निष्कर्ष की पुष्टि करता है कि नमूना एक वीबुल वितरण के साथ संगत है।
जैसा कि यहाँ बताया गया है , हम अनुमानित वाइबुल पीडीएफ या सीडीएफ में पॉइंटवाइज़ विश्वास अंतराल जोड़ने के लिए बूटस्ट्रैपिंग का उपयोग कर सकते हैं:
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 (सामान्यीकृत Akaike जानकारी कसौटी) के अनुसार चयन करने की क्षमता। मुख्य कार्य है fitDist
। इस फ़ंक्शन में एक महत्वपूर्ण विकल्प वितरण के प्रकार हैं जिन्हें आज़माया जाता है। उदाहरण के लिए, सेटिंग type = "realline"
पूरे वास्तविक रेखा पर परिभाषित सभी कार्यान्वित वितरणों को आज़माएगी जबकि type = "realsplus"
केवल वास्तविक सकारात्मक रेखा पर परिभाषित वितरणों को आज़माएगी। एक अन्य महत्वपूर्ण विकल्प पैरामीटर , जो GAIC के लिए दंड है। नीचे दिए गए उदाहरण में, मैंने पैरामीटर सेट किया है जिसका अर्थ है कि क्लासिक एआईसी के अनुसार "सर्वश्रेष्ठ" वितरण का चयन किया गया है। आप अपनी पसंद के किसी भी चीज़ को सेट कर सकते हैं, जैसे किkk=2klog(n)बीआईसी के लिए ।
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 ***
एआईसी के अनुसार, वेइबुल वितरण (अधिक विशेष रूप से WEI2
, इसका एक विशेष पैरामीरीज़ेशन) डेटा को सबसे अच्छा फिट बैठता है। वितरण WEI2
का सटीक पैरामीरिजेशन इस दस्तावेज में पृष्ठ 279 पर अलग किया गया है। आइए एक कृमि साजिश (मूल रूप से एक डी-ट्रेंड क्यूक्यू-प्लॉट) में अवशेषों को देखकर फिट का निरीक्षण करें :
हम अवशिष्ट के मध्य क्षैतिज रेखा के करीब होने की उम्मीद करते हैं और उनमें से 95% ऊपरी और निचले बिंदीदार वक्रों के बीच झूठ बोलते हैं, जो 95% बिंदुवार विश्वास अंतराल के रूप में कार्य करते हैं। इस मामले में, कृमि प्लॉट मुझे ठीक लगता है, यह दर्शाता है कि वीबुल वितरण पर्याप्त रूप से फिट है।