(다른 사람들이 지적했듯이, Weibull 분포는 데이터가 정수일 때 적절한 근사치가 아닐 가능성이 높습니다. 다음은 이전 연구원의 행동을 옳고 그름으로 판단하는 데 도움을주기위한 것입니다.)
다양한 순간 모멘트 추정기 사용과 같이 데이터에서 0의 영향을받지 않는 몇 가지 대체 방법이 있습니다. 와 이블 분포의 모멘트가이 함수의 관점에서 주어지기 때문에 이들은 일반적으로 감마 함수와 관련된 방정식의 수치 해를 필요로합니다. 나는 R에 익숙하지 않지만 여기 에 더 간단한 방법 중 하나를 보여주는 Sage 프로그램이 있습니다. 아마도 R에 적응할 수 있습니까? ( Horst Rinne의 "The Weibull distribution : handbook" , p. 455ff)에서이 방법과 다른 방법에 대해 읽을 수 있습니다 . 그러나 그의 방정식 12.4b에는 '-1' 중복 됨).
"""
Blischke-Scheuer method-of-moments estimation of (a,b)
for the Weibull distribution F(t) = 1 - exp(-(t/a)^b)
"""
x = [23,19,37,38,40,36,172,48,113,90,54,104,90,54,157,
51,77,78,144,34,29,45,16,15,37,218,170,44,121]
xbar = mean(x)
varx = variance(x)
var("b"); f(b) = gamma(1+2/b)/gamma(1+1/b)^2 - 1 - varx/xbar^2
bhat = find_root(f, 0.01, 100)
ahat = xbar/gamma(1+1/bhat)
print "Estimates: (ahat, bhat) = ", (ahat, bhat)
이것은 출력을 생산
Estimates: (ahat, bhat) = (81.316784310814455, 1.3811394719075942)
0
x = [23,0,37,38,40,36,172,48,113,90,54,104,90,54,157,
51,77,78,144,34,29,45,0,0,37,218,170,44,121]
그런 다음 동일한 절차로 출력을 생성합니다
Estimates: (ahat, bhat) = (78.479354097488923, 1.2938352346035282)
편집 : 방금 R을 설치하여 사용해보십시오. 이 답변을 오래 지속시킬 위험이 있으므로 여기에 관심있는 사람은 Blischke-Scheuer 방법에 대한 R 코드가 있습니다.
fit_weibull <- function(x)
{
xbar <- mean(x)
varx <- var(x)
f <- function(b){return(gamma(1+2/b)/gamma(1+1/b)^2 - 1 - varx/xbar^2)}
bhat <- uniroot(f,c(0.02,50))$root
ahat <- xbar/gamma(1+1/bhat)
return(c(ahat,bhat))
}
위의 두 가지 Sage 예를 5 자리 유효 숫자로 재현합니다.
x <- c(23,19,37,38,40,36,172,48,113,90,54,104,90,54,157,
51,77,78,144,34,29,45,16,15,37,218,170,44,121)
fit_weibull(x)
[1] 81.316840 1.381145
x <- c(23,0,37,38,40,36,172,48,113,90,54,104,90,54,157,
51,77,78,144,34,29,45,0,0,37,218,170,44,121)
fit_weibull(x)
[1] 78.479180 1.293821