Rüzgar hızı verileri için Weibull dağılım parametreleri ve


19

Merhaba aynı değiştirilmiş maksimum olabilirlik yöntemi için şekil ve ölçek parametresi elde etmek için gösterilebilir


2
Merhaba @zaynah ve siteye hoş geldiniz. Sorunuzun, verilerinizin bir weibull dağılımı ile uyumlu olup olmadığı veya verilerinizi açıklayan bir weibull dağılımının parametrelerinin ne olacağı konusunda emin değilim . Eğer veriler weibull dağılımını takip edip parametrelerini bulmak istiyorum olduğunu varsayarsak, kullanabileceğiniz fitdistr(mydata, densfun="weibull")içinde RMLE aracılığı parametrelerini bulmak için. Grafik yapmak qqPlotiçin carpaketteki işlevi kullanın : qqPlot(mydata, distribution="weibull", shape=, scale=)bulduğunuz şekil ve ölçek parametreleriyle fitdistr.
COOLSerdash

merhaba hızlı bir cevap için teşekkürler, verilerim 5 yıllık ortalama aylık rüzgar hızı, weibull ile uyumludur. Sorun ben k ve c yani weibull parametreleri bulmak için bilmiyorum .. ve ben deneysel verileri weibull ile karşılaştırmak bilmiyorum ... Ayrıca MLE nedir ... :(
Zay

MLE = Maksimum olabilirlik tahmini. Hangi yazılımı kullandığınızı bilmiyorum, ancak içinde Rserbestçe bulunan, paketi yükleyip yükleyebilir ve k ve c tahminlerini hesaplamak için verilerinizle MASSkullanabilirsiniz fitdistr. Ve sonra, kullanılarak tahmin parametreleri ile Weibul ile verilerinizi karşılaştırabilirsiniz qqPlotgelen carpaketin.
COOLSerdash

çok teşekkürler COOlserdash, ben R yazılımını indiriyorum.
Zay

1
Tamam, işte adım adım öğretici: 1. R'yi indirip yükleyin. 2. Paketleri kurun MASSve car: yazın install.packages(c("MASS", "car")). Paketleri: library(MASS)ve yazarak yükleyin library(car). 3. VerileriniziR tercihen .txt dosyasıyla içe aktarın . Veri çağrılırsa 4. my.datakullanımı fitdistrşu şekilde: fitdistr(my.data, distribution="weibull"). 5. ile ilk yorumda açıkladığım gibi bir grafik yapın qqPlot.
COOLSerdash

Yanıtlar:


28

@Zaynah, verilerin bir Weibull dağılımını izlediği düşünülen yorumlarda yer aldığından, MLE (Maksimum olasılık tahmini) kullanarak böyle bir dağılımın parametrelerini nasıl tahmin edeceğime dair kısa bir eğitim vereceğim. Bir yoktur benzer sonrası rüzgar hızları ve sitede Weibull dağılımı hakkında.

  1. Indirin ve yükleyinR , ücretsiz
  2. İsteğe bağlı: Sözdizimi vurgulama ve daha fazlası gibi bir dizi yararlı işlev sağlayan R için harika bir IDE olan RStudio'yu indirin ve yükleyin .
  3. Paketlerin Kurulumu MASSve caryazarak: install.packages(c("MASS", "car")). Bunları yazarak yükleyin: library(MASS)ve library(car).
  4. Verilerinizi içine aktarınR . Eğer sınırlandırılmış metin dosyası (.txt) olarak kendilerine tasarrufu örneğin Excel verilerinizi, sahip ve bunları içe aktarırsanız Rile read.table.
  5. İşlevini kullanın fitdistrsenin weibull dağılımının maksimum olabilirlik tahminlerini hesaplamak için: fitdistr(my.data, densfun="weibull", lower = 0). Tamamen çalışılmış bir örneği görmek için cevabın altındaki bağlantıya bakın.
  6. Verilerinizi Weibull dağılımı ile 5. noktada tahmin edilen ölçek ve şekil parametreleriyle karşılaştırmak için bir QQ-Grafiği oluşturun: qqPlot(my.data, distribution="weibull", shape=, scale=)

Vito Ricci öğretici ile dağılıma uydurmak üzerine Rkonuda iyi bir başlangıç noktasıdır. Ve bu sitede konuyla ilgili çok sayıda gönderi var ( bu gönderiye de bakınız ).

Nasıl kullanılacağına dair tam olarak çalışılmış bir örnek görmek için bu gönderiyefitdistr bir göz atın .

Aşağıdaki örneklere bakalım 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")

Weibull KDE

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

Maksimum olasılık tahminleri rastgele sayıların oluşturulmasında keyfi olarak belirlediğimiz tahminlere yakındır. Varsayımsal Weibull dağılımına sahip bir QQ-Plot kullanarak verilerimizi tahmin ettiğimiz parametrelerle karşılaştıralım fitdistr:

qqPlot(rw, distribution="weibull", scale=1.014, shape=1.568, las=1, pch=19)

QQPlot

Noktalar çizgi üzerinde ve çoğunlukla% 95 güven zarfında hizalanmıştır. Verilerimizin bir Weibull dağılımı ile uyumlu olduğu sonucuna varacağız. Elbette, değerlerimizi Weibull dağılımından örneklediğimiz için bu bekleniyordu.


MLE'siz bir Weibull dağılımının (şekil) ve (ölçek) tahminikc

Bu makale , rüzgar hızları için bir Weibull dağılımının parametrelerini tahmin etmek için beş yöntem listelemektedir. Burada üçünü açıklayacağım.

Ortalamalardan ve standart sapmadan

Şekil parametresi olarak tahmin edilmektedir: ve ölçü parametresi olarak tahmin edilmektedir: ile ortalama bir rüzgar hızı ve bir standart sapma ve olan Gamma fonksiyonu .k

k=(σ^v^)1.086
c
c=v^Γ(1+1/k)
v^σ^Γ

Gözlenen dağılıma uyan en küçük kareler

Gözlemlenen rüzgar hızları hız aralığına , sıklık ve kümülatif frekanslar , o zaman formunun değerlerine doğrusal bir regresyonu sığdırabilirsiniz Weibull parametreleri ve doğrusal katsayıları ile ile ilişkilidirn0V1,V1V2,,Vn1Vnf1,f2,,fnp1=f1,p2=f1+f2,,pn=pn1+fny=a+bx

xi=ln(Vi)
yi=ln[ln(1pi)]
ab
c=exp(ab)
k=b

Ortalama ve çeyrek rüzgar hızları

Gözlemlenen tam rüzgar hızlarına sahip değilseniz, ancak medyan ve çeyrekler ve , o zaman ve ilişkileri hesaplanabilmektedir VmV0.25V0.75 [p(VV0.25)=0.25,p(VV0.75)=0.75]ck

k=ln[ln(0.25)/ln(0.75)]/ln(V0.75/V0.25)1.573/ln(V0.75/V0.25)
c=Vm/ln(2)1/k

Dört yöntemin karşılaştırılması

RDört yöntemi karşılaştırmaya bir örnek :

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

Tüm yöntemler çok benzer sonuçlar verir. Maksimum olabilirlik yaklaşımı, Weibull parametrelerinin standart hatalarının doğrudan verilmesi avantajına sahiptir.


PDF veya CDF'ye noktasal güven aralıkları eklemek için bootstrap kullanma

Tahmini Weibull dağılımının PDF ve CDF'si etrafında noktasal güven aralıkları oluşturmak için parametrik olmayan bir önyükleme kullanabiliriz. İşte bir Rsenaryo:

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

Weibull PDF CI'ları

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

Weibull CDF CI'leri


+1, güzel genel bakış. Not: MLE ile paramaterleredistribution=weibull uyacak ve 1 adımda qq-grafiğini yapacak olan araç paketinden w / qqPlot kullanmak için hafif bir kısayol olabilir .
gung - Monica'yı eski durumuna getirin

@gung Teşekkürler. QqPlot gelen carMLE parametrelerini otomatik olarak hesaplar farkında değilim . Bir weibull dağılımı ( rweibull) ile rastgele bir değişken oluşturmak ve komutunu kullanırsanız qqPlot(rw, distribution="weibull"), parametreleri shapeve scaleiçin olması gerektiğini söyleyen bir hata iletisi alıyorum qqPlot. Bir şey mi kaçırıyorum?
COOLSerdash

benim hatam. Açıkçası, sadece bazı dağıtımlardan parametreleri otomatik olarak tahmin eder ve Weibull bunlardan biri değildir.
gung - Monica'yı eski durumuna getirin

merhaba, ben benim verilerimi R içine aldıktan sonra, komut, fitdistr (mydata, densfun = "weibull") yaptıktan sonra "mydata" bulunamadı hata messgae diyor .. aslında benim veriler hs ithal edildi bulundu. herhangi bir cevap memnuniyetle karşılanacaktır.
Zay

@zaynah Lütfen yanıtınızı düzenleyebilir ve verileri içe aktarmak için kullandığınız kodunuzu gönderebilir misiniz? Lütfen hata mesajını da ekleyin. Verileri hatasız olarak alabilir misiniz? Verilerin doğru bir şekilde içe aktarılıp aktarılmadığını kontrol ettiniz mi?
COOLSerdash
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.