हवा की गति के डेटा के लिए वीबुल वितरण मापदंडों


19

नमस्ते को संशोधित अधिकतम संभावना विधि के लिए आकार और स्केल पैरामीटर प्राप्त करने के लिए दिखाया जा सकता है


2
हाय @zaynah और साइट पर आपका स्वागत है। मुझे यकीन है कि अगर आपके सवाल यह है कि नहीं कर रहा हूँ अगर अपने डेटा एक वेइबुल बंटन या क्या एक वेइबुल बंटन का वर्णन अपने डेटा होगा के मापदंडों के अनुरूप रहें। आप मानते हैं कि यदि आपके डेटा में वेइबुल बंटन का पालन करें और मापदंडों को खोजने के लिए चाहते हैं, आप उपयोग कर सकते हैं fitdistr(mydata, densfun="weibull")में RMLE के माध्यम से मानकों को खोजने के लिए। एक ग्राफ़ बनाने के लिए, पैकेज qqPlotसे फ़ंक्शन का उपयोग करें car: qqPlot(mydata, distribution="weibull", shape=, scale=)आपके द्वारा पाया गया आकार और पैमाने के मापदंडों के साथ fitdistr
COOLSerdash

हाय एक त्वरित उत्तर के लिए धन्यवाद, मेरा डेटा 5 साल के लिए मासिक हवा की गति है, यह वीबुल के साथ संगत है। समस्या मैं कैसे कश्मीर को खोजने के लिए और पता नहीं है ग यानी वेइबुल के मापदंडों .. और मैं वेइबुल के साथ प्रयोगात्मक डेटा की तुलना करने के लिए कैसे पता नहीं है है ... भी क्या MLE है ... :(
जाय

MLE = अधिकतम संभावना अनुमान। मैं क्या सॉफ्टवेयर आप का उपयोग नहीं पता है, लेकिन में Rहै, जो स्वतंत्र रूप से उपलब्ध है, तो आप को स्थापित करने और पैकेज लोड कर सकते हैं MASSऔर उपयोग fitdistrअपने डेटा के साथ कश्मीर और सी के अनुमानों की गणना करने। और फिर, आप पैकेज qqPlotसे उपयोग करके अनुमानित मापदंडों के साथ वेइबुल के साथ अपने डेटा की तुलना कर सकते हैं car
COOLSerdash

बहुत बहुत धन्यवाद, मैं सॉफ्टवेयर डाउनलोड कर रहा हूँ।
ज़ाय

1
ठीक है, यहाँ एक स्टेप बाय स्टेप ट्यूटोरियल है: 1. डाउनलोड और स्थापित करें। आर। 2. पैकेज स्थापित करें MASSऔर carटाइप करके install.packages(c("MASS", "car")):। टाइप करके पैकेज लोड करें: library(MASS)और library(car)। 3. अपना डेटा आयात करेंR , अधिमानतः एक .txt-file के साथ। 4. यदि आपके डेटा को निम्नलिखित तरीके से my.dataउपयोग fitdistrकिया जाता है fitdistr(my.data, distribution="weibull"):। 5. जैसा कि मैंने पहली टिप्पणी में वर्णित किया था, उसके अनुसार एक ग्राफ बनाओ qqPlot
COOLSerdash

जवाबों:


28

क्योंकि @zaynah ने टिप्पणियों में पोस्ट किया कि डेटा को वीबुल वितरण का पालन करने के लिए सोचा जाता है, मैं MLE (अधिकतम संभावना अनुमान) का उपयोग करके इस तरह के वितरण के मापदंडों का अनुमान लगाने के बारे में एक संक्षिप्त ट्यूटोरियल प्रदान करने वाला हूं। साइट पर हवा की गति और वीबुल वितरण के बारे में एक समान पोस्ट है

  1. डाउनलोड करें और इंस्टॉल करेंR , यह मुफ़्त है
  2. वैकल्पिक: RStudio को डाउनलोड और इंस्टॉल करें , जो कि सिंटैक्स हाइलाइटिंग और अधिक जैसे उपयोगी कार्यों का एक टन प्रदान करने वाले आर के लिए एक महान आईडीई है।
  3. पैकेज स्थापित करें MASSऔरcar टाइप करके install.packages(c("MASS", "car")):। उन्हें टाइप करके लोड करें: library(MASS)और library(car)
  4. में अपना डेटा आयात करें R । आप सीमांकित पाठ फ़ाइल (.txt) के रूप में एक्सेल में अपने डेटा, उदाहरण के लिए, उन्हें सहेजना और उन में आयात करते हैं तो Rसाथ read.table
  5. फ़ंक्शन का उपयोग करें fitdistrअपने वीबुल वितरण के अधिकतम संभावना अनुमानों की गणना करने के काfitdistr(my.data, densfun="weibull", lower = 0) :। पूरी तरह से काम करने वाले उदाहरण को देखने के लिए, उत्तर के निचले भाग में लिंक देखें।
  6. अपने डेटा की तुलना करने के लिए एक 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)

QQPlot

अंक को लाइन पर अच्छी तरह से संरेखित किया गया है और ज्यादातर 95%-कॉन्फिडेंस लिफाफे के भीतर हैं। हम यह निष्कर्ष निकालेंगे कि हमारा डेटा एक वीबुल वितरण के साथ संगत है। यह निश्चित रूप से अपेक्षित था, क्योंकि हमने एक वीबुल वितरण से हमारे मूल्यों का नमूना लिया है।


MLE के बिना वीबुल वितरण के (आकार) और c (स्केल) का अनुमान लगानासी

यह पेपर हवा की गति के लिए एक वीबुल वितरण के मापदंडों का अनुमान लगाने के लिए पांच तरीकों को सूचीबद्ध करता है। मैं उनमें से तीन की व्याख्या यहाँ करने जा रहा हूँ।

साधन और मानक विचलन से

=(σ^v^)-1.086
सी
सी=v^Γ(1+1/)
v^σ^Γ

कम से कम मनाया गया वितरण के लिए फिट बैठता है

यदि मनाया हवा की गति में विभाजित हैn0-वी1,वी1-वी2,...,वीn-1-वीn1,2,...,nपी1=1,पी2=1+2,...,पीn=पीn-1+ny=+एक्स

एक्समैं=ln(वीमैं)
yमैं=ln[-ln(1-पीमैं)]
द्वारा
सी=exp(-)
=

मेडियन और चतुर्थक हवा की गति

यदि आपके पास पूर्ण गतिमान हवा की गति नहीं है, लेकिन मध्य है वी और चतुर्थांश वी0.25 तथा वी0.75 [पी(वीवी0.25)=0.25,पी(वीवी0.75)=0.75], फिर सी तथा संबंधों द्वारा गणना की जा सकती है

=ln[ln(0.25)/ln(0.75)]/ln(वी0.75/वी0.25)1.573/ln(वी0.75/वी0.25)
सी=वी/ln(2)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")

वीबुल पीडीएफ CIs

#-----------------------------------------------------------------------------
# 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")

वीबुल सीडीएफ सीआई


+1, अच्छा अवलोकन। NB, एक मामूली शॉर्टकट का उपयोग करना पड़ सकता है ? QqPlot w / distribution=weibullकार पैकेज से, जो MLE के माध्यम से पैरामाटर्स को फिट करेगा और 1 चरण में qq- प्लॉट बना देगा।
गुंग - को पुनः स्थापित मोनिका

@ शुंग धन्यवाद। मुझे पता नहीं है कि qqPlot carMLE मापदंडों की गणना स्वचालित रूप से करता है। अगर मैं एक वेइबुल बंटन (के साथ एक यादृच्छिक चर उत्पन्न rweibull) और आदेश का उपयोग qqPlot(rw, distribution="weibull")मैं कह रही है कि मानकों को प्रदान करनी चाहिए एक त्रुटि संदेश मिलता shapeहै और scaleकरने के लिए qqPlot। क्या मैं कुछ भूल रहा हूँ?
COOLSerdash

मेरी गलती। जाहिर है, यह केवल स्वचालित रूप से कुछ वितरणों से मापदंडों का अनुमान लगाता है, और वीबुल उनमें से एक नहीं है।
गूँग - मोनिका

नमस्ते, मैंने पाया है कि मैं आर में mydata आयात करने के बाद, जब मैं कमांड करता हूं, तो फिटडिसर (mydata, densfun = "weibull") यह कहता है कि एरर मैसेज करता है कि "mydata" नहीं मिला .. वास्तव में इन डेटा h को R में आयात किया गया है। किसी भी जवाब का स्वागत किया जाएगा।
ज़य

@zaynah क्या आप अपना उत्तर संपादित कर सकते हैं और अपना कोड पोस्ट कर सकते हैं जिसका उपयोग आप डेटा आयात करने के लिए करते हैं। कृपया त्रुटि संदेश भी जोड़ें। क्या आप त्रुटियों के बिना डेटा आयात कर सकते हैं? क्या आपने जांचा कि क्या डेटा सही तरीके से आयात किया गया था?
कुलश्रेष्ठ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.