क्योंकि @zaynah ने टिप्पणियों में पोस्ट किया कि डेटा को वीबुल वितरण का पालन करने के लिए सोचा जाता है, मैं MLE (अधिकतम संभावना अनुमान) का उपयोग करके इस तरह के वितरण के मापदंडों का अनुमान लगाने के बारे में एक संक्षिप्त ट्यूटोरियल प्रदान करने वाला हूं। साइट पर हवा की गति और वीबुल वितरण के बारे में एक समान पोस्ट है ।
- डाउनलोड करें और इंस्टॉल करें
R
, यह मुफ़्त है
- वैकल्पिक: RStudio को डाउनलोड और इंस्टॉल करें , जो कि सिंटैक्स हाइलाइटिंग और अधिक जैसे उपयोगी कार्यों का एक टन प्रदान करने वाले आर के लिए एक महान आईडीई है।
- पैकेज स्थापित करें
MASS
औरcar
टाइप करके install.packages(c("MASS", "car"))
:। उन्हें टाइप करके लोड करें: library(MASS)
और library(car)
।
- में अपना डेटा आयात करें
R
। आप सीमांकित पाठ फ़ाइल (.txt) के रूप में एक्सेल में अपने डेटा, उदाहरण के लिए, उन्हें सहेजना और उन में आयात करते हैं तो R
साथ read.table
।
- फ़ंक्शन का उपयोग करें
fitdistr
अपने वीबुल वितरण के अधिकतम संभावना अनुमानों की गणना करने के काfitdistr(my.data, densfun="weibull", lower = 0)
:। पूरी तरह से काम करने वाले उदाहरण को देखने के लिए, उत्तर के निचले भाग में लिंक देखें।
- अपने डेटा की तुलना करने के लिए एक QQ- प्लॉट करें, जिसमें 5 पैमाने पर अनुमानित पैमाने और आकार के मापदंडों के साथ एक वीबुल वितरण होता है:
qqPlot(my.data, distribution="weibull", shape=, scale=)
फिटिंग वितरण पर वीटो रिक्की का ट्यूटोरियलR
इस मामले पर एक अच्छा प्रारंभिक बिंदु है। और इस साइट पर इस विषय पर कई पोस्ट हैं ( इस पोस्ट को भी देखें )।
कैसे उपयोग करने के लिए एक पूरी तरह से काम किया उदाहरण देखने के लिए fitdistr
देखने के लिए, इस पोस्ट पर एक नज़र डालें ।
आइए एक उदाहरण देखें R
:
# Load packages
library(MASS)
library(car)
# First, we generate 1000 random numbers from a Weibull distribution with
# scale = 1 and shape = 1.5
rw <- rweibull(1000, scale=1, shape=1.5)
# We can calculate a kernel density estimation to inspect the distribution
# Because the Weibull distribution has support [0,+Infinity), we are truncate
# the density at 0
par(bg="white", las=1, cex=1.1)
plot(density(rw, bw=0.5, cut=0), las=1, lwd=2,
xlim=c(0,5),col="steelblue")
# Now, we can use fitdistr to calculate the parameters by MLE
# The option "lower = 0" is added because the parameters of the Weibull distribution need to be >= 0
fitdistr(rw, densfun="weibull", lower = 0)
shape scale
1.56788999 1.01431852
(0.03891863) (0.02153039)
अधिकतम संभावना अनुमान उन लोगों के करीब हैं जिन्हें हम यादृच्छिक संख्याओं की पीढ़ी में मनमाने ढंग से निर्धारित करते हैं। आइए एक क्यूक्यू-प्लॉट का उपयोग करते हुए हमारे डेटा की तुलना एक काल्पनिक वेइबुल वितरण के साथ करें, जिसके मापदंडों का हमने अनुमान लगाया है fitdistr
:
qqPlot(rw, distribution="weibull", scale=1.014, shape=1.568, las=1, pch=19)
अंक को लाइन पर अच्छी तरह से संरेखित किया गया है और ज्यादातर 95%-कॉन्फिडेंस लिफाफे के भीतर हैं। हम यह निष्कर्ष निकालेंगे कि हमारा डेटा एक वीबुल वितरण के साथ संगत है। यह निश्चित रूप से अपेक्षित था, क्योंकि हमने एक वीबुल वितरण से हमारे मूल्यों का नमूना लिया है।
MLE के बिना वीबुल वितरण के (आकार) और c (स्केल) का अनुमान लगानाकसी
यह पेपर हवा की गति के लिए एक वीबुल वितरण के मापदंडों का अनुमान लगाने के लिए पांच तरीकों को सूचीबद्ध करता है। मैं उनमें से तीन की व्याख्या यहाँ करने जा रहा हूँ।
साधन और मानक विचलन से
क
के = ( σ)^v^)- 1.086
सीसी = वी^Γ ( 1 + 1 / कश्मीर )
v^σ^Γ
कम से कम मनाया गया वितरण के लिए फिट बैठता है
यदि मनाया हवा की गति में विभाजित हैn0 - वी1, वी1- वी2, … , वीn- 1- वीnच1, च2, … , चnपी1= च1, पी2= च1+ च2, … , पीn= पीएन - 1+ चny= ए + बी एक्स
एक्समैं= एलएन( वीमैं)
yमैं= एलएन[ - ln( 1 - पीमैं) ]]
एख द्वारा
सी = एक्सप- ( एख)
के = बी
मेडियन और चतुर्थक हवा की गति
यदि आपके पास पूर्ण गतिमान हवा की गति नहीं है, लेकिन मध्य है वीम और चतुर्थांश वी0.25 तथा वी0.75 [ पी ( वी)≤ वी0.25) = 0.25 , पी ( वी≤ वी0.75) = 0.75 ], फिर सी तथा क संबंधों द्वारा गणना की जा सकती है
k = ln[ ln( 0.25 ) / एल.एन.( 0.75 ) ] / एलएन( वी0.75/ वी0.25) ≈ 1.573 / ln( वी0.75/ वी0.25)
सी = वीम/ एल.एन.( २ )1 / के
चार तरीकों की तुलना
यहां R
चार तरीकों की तुलना में एक उदाहरण दिया गया है :
library(MASS) # for "fitdistr"
set.seed(123)
#-----------------------------------------------------------------------------
# Generate 10000 random numbers from a Weibull distribution
# with shape = 1.5 and scale = 1
#-----------------------------------------------------------------------------
rw <- rweibull(10000, shape=1.5, scale=1)
#-----------------------------------------------------------------------------
# 1. Estimate k and c by MLE
#-----------------------------------------------------------------------------
fitdistr(rw, densfun="weibull", lower = 0)
shape scale
1.515380298 1.005562356
#-----------------------------------------------------------------------------
# 2. Estimate k and c using the leas square fit
#-----------------------------------------------------------------------------
n <- 100 # number of bins
breaks <- seq(0, max(rw), length.out=n)
freqs <- as.vector(prop.table(table(cut(rw, breaks = breaks))))
cum.freqs <- c(0, cumsum(freqs))
xi <- log(breaks)
yi <- log(-log(1-cum.freqs))
# Fit the linear regression
least.squares <- lm(yi[is.finite(yi) & is.finite(xi)]~xi[is.finite(yi) & is.finite(xi)])
lin.mod.coef <- coefficients(least.squares)
k <- lin.mod.coef[2]
k
1.515115
c <- exp(-lin.mod.coef[1]/lin.mod.coef[2])
c
1.006004
#-----------------------------------------------------------------------------
# 3. Estimate k and c using the median and quartiles
#-----------------------------------------------------------------------------
med <- median(rw)
quarts <- quantile(rw, c(0.25, 0.75))
k <- log(log(0.25)/log(0.75))/log(quarts[2]/quarts[1])
k
1.537766
c <- med/log(2)^(1/k)
c
1.004434
#-----------------------------------------------------------------------------
# 4. Estimate k and c using mean and standard deviation.
#-----------------------------------------------------------------------------
k <- (sd(rw)/mean(rw))^(-1.086)
c <- mean(rw)/(gamma(1+1/k))
k
1.535481
c
1.006938
सभी तरीकों से बहुत समान परिणाम मिलते हैं। अधिकतम संभावना दृष्टिकोण का लाभ है कि वेइबुल मापदंडों की मानक त्रुटियां सीधे दी जाती हैं।
पीडीएफ या सीडीएफ में पॉइंटवाइज विश्वास अंतराल जोड़ने के लिए बूटस्ट्रैप का उपयोग करना
हम गैर-पैरामीट्रिक बूटस्ट्रैप का उपयोग अनुमानित वीबुल वितरण के पीडीएफ और सीडीएफ के आसपास पॉइंटवाइज विश्वास अंतराल के निर्माण के लिए कर सकते हैं। यहाँ एक R
स्क्रिप्ट है:
#-----------------------------------------------------------------------------
# 5. Bootstrapping the pointwise confidence intervals
#-----------------------------------------------------------------------------
set.seed(123)
rw.small <- rweibull(100,shape=1.5, scale=1)
xs <- seq(0, 5, len=500)
boot.pdf <- sapply(1:1000, function(i) {
xi <- sample(rw.small, size=length(rw.small), replace=TRUE)
MLE.est <- suppressWarnings(fitdistr(xi, densfun="weibull", lower = 0))
dweibull(xs, shape=as.numeric(MLE.est[[1]][13]), scale=as.numeric(MLE.est[[1]][14]))
}
)
boot.cdf <- sapply(1:1000, function(i) {
xi <- sample(rw.small, size=length(rw.small), replace=TRUE)
MLE.est <- suppressWarnings(fitdistr(xi, densfun="weibull", lower = 0))
pweibull(xs, shape=as.numeric(MLE.est[[1]][15]), scale=as.numeric(MLE.est[[1]][16]))
}
)
#-----------------------------------------------------------------------------
# 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)
#lines(xs, min.point, col="purple")
#lines(xs, max.point, col="purple")
#-----------------------------------------------------------------------------
# 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")
fitdistr(mydata, densfun="weibull")
मेंR
MLE के माध्यम से मानकों को खोजने के लिए। एक ग्राफ़ बनाने के लिए, पैकेजqqPlot
से फ़ंक्शन का उपयोग करेंcar
:qqPlot(mydata, distribution="weibull", shape=, scale=)
आपके द्वारा पाया गया आकार और पैमाने के मापदंडों के साथfitdistr
।