풍속 데이터에 대한와 이블 분포 모수 및


19

Hi는 수정 된 최대 우도 방법에 대한 모양 및 스케일 모수를 얻기 위해 동일하게 표시 될 수 있습니다.


2
@zaynah 님 안녕하세요. 사이트에 오신 것을 환영합니다. 귀하의 질문이 있는지 확실하지 않습니다 경우 데이터가와 이블 분포 또는 어떤 데이터가 될 것이라고 설명 이블 분포의 매개 변수와 호환됩니다. 당신은 당신의 데이터가와 이블 분포를 따라 매개 변수를 찾으려한다고 가정하면 사용할 수 fitdistr(mydata, densfun="weibull")있는 RMLE를 통해 매개 변수를 찾을 수 있습니다. 그래프를 만들려면 qqPlot에서 찾은 모양 및 배율 매개 변수와 함께 car패키지 의 함수를 사용하십시오 . qqPlot(mydata, distribution="weibull", shape=, scale=)fitdistr
COOLSerdash

안녕 빠른 답변 주셔서 감사합니다, 내 데이터는 평균 월간 풍속 5 년, 그것은 weibull과 호환됩니다. 문제는 k와 c를 찾는 방법을 모른다는 것입니다. 즉 weibull의 매개 변수 .. 그리고 weibull과 실험 데이터를 비교하는 방법을 모르겠습니다 ... 또한 MLE은 무엇입니까 ... :(
Zay

MLE = 최대 우도 추정. 어떤 소프트웨어를 사용하는지 모르지만에서 R무료로 사용할 수있는에서 패키지를 설치 및로드하고 데이터와 함께 MASS사용 fitdistr하여 k 및 c의 추정치를 계산할 수 있습니다. 그리고, 당신은 사용하여 추정 된 매개 변수와 이블로 데이터를 비교할 수 있습니다 qqPlot으로부터 car패키지로 제공된다.
COOLSerdash

많은 COOlserdash 덕분에, 나는 R 소프트웨어를 다운로드하고 있습니다.
Zay

1
다음은 단계별 자습서입니다. 1. R을 다운로드하여 설치합니다. 2. 패키지를 설치 MASS하고 다음 car을 입력 install.packages(c("MASS", "car"))합니다.. library(MASS)및 을 입력하여 패키지를로드하십시오 library(car). 3. .txt 파일을 사용 하여 데이터를로 가져옵니다R . 4. 귀하의 데이터가 다음과 같은 방식으로 my.data사용 fitdistr되는 경우 : fitdistr(my.data, distribution="weibull"). 5.로 첫 번째 주석에 설명 된대로 그래프를 만듭니다 qqPlot.
COOLSerdash

답변:


28

@zaynah는 데이터가 Weibull 분포를 따르는 것으로 생각된다는 의견을 게시 했으므로 MLE (Maximum Likelihood Estimation)를 사용하여 이러한 분포의 모수를 추정하는 방법에 대한 간단한 자습서를 제공합니다. 이 사이트의 풍속과 Weibull 분포에 대한 비슷한 게시물 이 있습니다.

  1. 다운로드 및 설치R , 무료
  2. 선택 사항 : RStudio를 다운로드하여 설치하십시오. RStudio 는 구문 강조 표시 등과 같은 유용한 기능을 제공하는 R의 훌륭한 IDE입니다.
  3. 패키지를 설치 MASS하고 다음 car을 입력하십시오 install.packages(c("MASS", "car")).. library(MASS)및 을 입력하여로드하십시오 library(car).
  4. 로 데이터를 가져옵니다R . 당신은 구분 된 텍스트 파일 (.txt)로로 저장 예를 들어 Excel에서 데이터를, 가지고 그들을 가져 오는 경우 Rread.table.
  5. fitdistr이블 분포의 최대 우도 추정값을 계산 하려면이 함수 를 사용하십시오 fitdistr(my.data, densfun="weibull", lower = 0). 전체 예제를 보려면 답변 하단의 링크를 참조하십시오.
  6. QQ-Plot을 만들어 데이터를 Weibull 분포와 비교하여 포인트 5에서 추정 된 스케일 및 모양 매개 변수를 비교하십시오. qqPlot(my.data, distribution="weibull", shape=, scale=)

피팅 분포에 대한 Vito Ricci튜토리얼은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")

웨이 불 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)

최대 우도 추정치는 난수 생성에서 임의로 설정 한 것과 비슷합니다. 가상 Weibull 분포와 함께 QQ-Plot을 사용하여 추정 한 모수와 데이터를 비교해 보겠습니다 fitdistr.

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

QQPlot

점은 선과 95 % 신뢰 범위 내에서 잘 정렬됩니다. 우리는 데이터가 Weibull 분포와 호환된다는 결론을 내릴 것입니다. 물론 Weibull 분포에서 값을 샘플링 했으므로 예상 한 것입니다.


MLE이없는 Weibull 분포 의 (모양) 및 (규모) 추정케이

이 논문 은 풍속에 대한와 이블 분포의 모수를 추정하는 5 가지 방법을 나열합니다. 여기서 3 가지를 설명하겠습니다.

평균과 표준 편차에서

모양 모수 는 다음과 같이 추정됩니다 : 그리고 척도 모수 는 다음과 같이 추정됩니다 : 와 평균 풍속이다 표준 편차 는 IS 감마 함수 .케이

케이=(σ^V^)1.086
=V^Γ(1+1/케이)
V^σ^Γ

관측 된 분포에 적합한 최소 제곱

관측 된 풍속이 속도 간격 발생 빈도는 및 누적 빈도 이면 형식의 선형 회귀를 값에 맞출 수 있습니다 이블 파라미터는 선형 계수 관련된 및 의해 0V1,V1V2,,V1V에프1,에프2,,에프1=에프1,2=에프1+에프2,,=1+에프와이=+엑스

엑스나는=ln(V나는)
와이나는=ln[ln(1나는)]
=특급()
케이=

중앙 및 사 분위 풍속

관측 된 풍속이 없지만 중앙 및 사 분위수 및 이면 의 관계 로 와 를 계산할 수 있습니다. V미디엄V0.25V0.75 [(VV0.25)=0.25,(VV0.75)=0.75]케이c= V m / ln(2 ) 1 / k

케이=ln[ln(0.25)/ln(0.75)]/ln(V0.75/V0.25)1.573/ln(V0.75/V0.25)
=V미디엄/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

모든 방법은 매우 유사한 결과를 산출합니다. 최대 우도 접근법은 Weibull 모수의 표준 오차가 직접 제공된다는 이점이 있습니다.


부트 스트랩을 사용하여 PDF 또는 CDF에 포인트 단위 신뢰 구간 추가

비모수 적 부트 스트랩을 사용하여 추정 된 Weibull 분포의 PDF 및 CDF 주위에 점별 신뢰 구간을 구성 할 수 있습니다. 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")

Weibull PDF CI

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


+1, 좋은 개요. NB, 약간의 지름길은 자동차 패키지에서 ? qqPlot w / 를 사용하는 것일 수 있습니다 distribution=weibull.
gung-모니 티 복원

감사합니다. qqPlot from car이 MLE 매개 변수를 자동으로 계산 한다는 것을 알지 못합니다 . 나는 이블 분포 (와 임의의 변수가 발생하는 경우 rweibull)와 명령을 사용하여 qqPlot(rw, distribution="weibull")난 그 매개 변수를 제공해야합니다라는 오류 메시지가 도착 shapescale에를 qqPlot. 뭔가 빠졌습니까?
COOLSerdash

내 실수. 분명히, 그것은 일부 분포에서 모수를 자동으로 추정하며 Weibull도 그 중 하나가 아닙니다.
gung-모니 티 복원

안녕하세요, 나는 mydata를 R로 가져온 후, 명령을 할 때 fitdistr (mydata, densfun = "weibull") "mydata"를 찾을 수 없다는 오류 메시지를 나타냅니다. 실제로 내 데이터는 R로 가져 왔습니다. 모든 답변을 환영합니다.
Zay

@zaynah 답변을 수정하고 데이터를 가져 오는 데 사용하는 코드를 게시하십시오. 오류 메시지도 추가하십시오. 오류없이 데이터를 가져올 수 있습니까? 데이터를 올바르게 가져 왔는지 확인 했습니까?
COOLSerdash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.