Weibull 분포를 0을 포함하는 입력 데이터에 맞추는 방법은 무엇입니까?


14

은퇴 한 연구원이 전달한 기존 예측 알고리즘을 재현하려고합니다. 첫 번째 단계는 일부 관측 된 데이터를 Weibull 분포에 맞추고 미래 값을 예측하는 데 사용할 모양과 스케일을 얻는 것입니다. R을 사용 하여이 작업을 수행하고 있습니다. 내 코드의 예는 다음과 같습니다.

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)
f<-fitdistr(x, 'weibull')

입력 배열에 0이 없으면 제대로 작동하지 않으므로 제대로 작동합니다. SAS에서도 마찬가지입니다. 내가 알기로, 이것은 Weibull 분포를 계산하는 단계 중 하나가 0에 대해 정의되지 않은 자연 로그를 취하고 있기 때문입니다.이 문제를 해결할 합리적인 방법이 있습니까?

지금까지 찾은 최선의 방법은 모든 입력 값에 1을 추가하고 곡선을 맞춘 다음 예상 값에서 1을 빼는 것입니다 (곡선을 "이동"한 다음 1 씩 줄임). 이것은 이전에 예측 된 데이터에 상당히 적합하지만 잘못된 방식이어야합니다.

편집 : 입력 배열의 값은 몇 년 동안 실제 데이터 (어떤 사건의 수)가 관찰됩니다. 그래서 몇 년 동안 발생 횟수는 0이었습니다. 그것이 최선의 방법인지 아닌지에 관계없이 (나는 그렇지 않을 수도 있음) 원본 알고리즘 작성자는 Weibull 분포를 사용했다고 주장하며 프로세스를 복제해야합니다.


5
Weibull은 연속 분포이므로 정확히 0을 얻을 확률은 0을 갖습니다. 데이터에서 0을 많이 얻는다면 Weibull이 부적절하다는 즉각적인 단서입니다. 어쨌든 데이터는 카운트 데이터 처럼 보이 거나 적어도 이산 형이므로 Weibull이 최선의 선택이 아닐 수 있습니다.
추기경

데이터가 어디에서 왔는지에 대한 컨텍스트를 추가하면 누구나 대답하려고 노력하는 데 도움이됩니다.
추기경

답변:


8

(다른 사람들이 지적했듯이, 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

4

θfitdistrθθfitdistr

foo <- function(theta, x)
{
  if (theta <= -min(x)) return(Inf);
  f <- fitdistr(x+theta, 'weibull')
  -2*f$loglik
}

그런 다음 1 차원 최적화를 사용하여이 기능을 최소화하십시오.

bar <- optimize(foo, lower=-min(x)+0.001, upper=-min(x)+10, x=x)

난 그냥 아무것도 기반으로 "+10"을 만들었습니다.

가장 작은 값이 3 개인 데이터는 0으로 대체됩니다.

> bar
$minimum
[1] 2.878442

$objective
[1] 306.2792

> fitdistr(x+bar$minimum, 'weibull')
     shape        scale   
   1.2836432   81.1678283 
 ( 0.1918654) (12.3101211)
> 

bar$minimum 의 MLE입니다 θ그리고 fitdistr출력은 공동으로, 이블 파라미터이다 MLEsθ그건. 보시다시피, 그들은 위에서 설명한 순간 방법 추정량에 매우 가깝습니다.


2

실패해야합니다. 실패한 것에 감사해야합니다.

관찰 한 결과, 관찰을 시작한 순간 실패가 발생했음을 알 수 있습니다. 이것이 실제 프로세스이고 실제 데이터 (시뮬레이션 된 데이터가 아님)에서 나오는 경우에는 0을 얻는 이유를 설명해야합니다. 여러 가지 중 하나의 결과로 0 번 나타나는 생존 연구를 보았습니다.

  1. 데이터가 실제로 잘립니다. 연구가 시작되기 전에 개체가 위험에 처해 있고 실패했으며 모두 함께 관찰 한 것처럼 보려고합니다.
  2. 계측기의 교정이 제대로 이루어지지 않았습니다. 연구에 필요한 측정 정밀도가 충분하지 않아 시작 시간 근처에서 발생하는 고장이 정확히 0으로 코딩되었습니다.
  3. 0으로 코딩 된 것은 0이 아닙니다. 그것들은 어떤 식 으로든 분석에서 제외 된 사람이나 물체입니다. 0은 결 측값을 병합, 정렬 또는 달리 코딩 한 결과 데이터에 나타납니다.

따라서 사례 1의 경우, 소급하여 레코드를 가져 오는 것을 의미하더라도 적절한 검열 방법을 사용해야합니다. 사례 2는 정밀도 문제가 있기 때문에 EM 알고리즘을 사용할 수 있음을 의미합니다. 베이지안 방법도 마찬가지로 작동합니다. 사례 3은 누락 된 것으로 간주 된 값만 제외하면된다는 의미입니다.


영업 이익은 이전 연구자가 데이터가 실제 있더라도,와 이블 분포에 맞게 선택했다고 설명 카운트 뭔가의 발생 횟수의 음이 아닌 정수의 수를 -. 세 가지 경우가 그러한 상황과 어떤 관련이 있는지는 확실하지 않습니다.
res

오, 참고! Weibull 분포에 피팅하는 것은 엄청나게 잘못되었습니다. 지속적인 지원을 제공하며 생존 횟수보다는 카운트를 모델링하는 데 사용되지 않습니다. 음 이항 분포는 모델링 카운트에 대한 2 개의 모수 분포의 일종으로, 데이터 생성 프로세스의 특성에 따라 다릅니다 (문제가 언급 된대로 정보가 0 임). 지적 해 주셔서 감사합니다.
AdamO

1

위의 추기경 답변에 동의합니다. 그러나 0을 피하기 위해 상수를 추가하는 것도 일반적입니다. 일반적으로 사용되는 다른 값은 0.5이지만 양의 상수가 사용되었을 수 있습니다. 이전 연구원이 사용한 정확한 값을 식별 할 수 있는지 확인하기 위해 다양한 값을 시도 할 수 있습니다. 그러면 더 나은 분포를 찾기 전에 그의 결과를 재현 할 수 있다고 확신 할 수 있습니다.


0

Johnson Weitz와 Balakrishnan의 저서에는 Weibull 모수를 추정하는 방법이 많이 있습니다. 이들 중 일부는 0을 포함하지 않는 데이터 (예 : 평균 및 표준 편차 사용 또는 특정 백분위 수 사용)에 의존하지 않습니다.

Johnson, NL, Kotz, S. 및 Balakrishnan, N. (1994). 연속 일 변량 분포. 뉴욕 : Wiley, 대략 663 페이지

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.