2017-01-05 9 views
0

R (초급)에서 손실 혐오 모델을 작업 중이며 3 개의 열이있는 데이터 집합에서 일부 매개 변수를 계산하려고합니다. (손실/이득 값 (연속 또는 0 또는 1로 코드화 된 결정이있는 열) (바이너리) dropbox.com/s/fpw3obrqcx8ld1q/GrandAverage.RData?dl=0 코드 부분이이 경우 사용해야하는 경우 I는 아래 주어진 사용하고 : R에서 MLE 오류 : 'vmmin'의 유한 값이 유한 값이 아닙니다.

set <- GrandAverage[, 5:7]; 
    Beh.Parameters <- function (lambda, alpha, temp) { 
u = 0.5 * set$Gain^alpha + 0.5 * lambda * set$Loss^alpha 
    GambleProbability <- 1/(1 + exp(-temp * u)) 

    loglike <- set$Decision*log(GambleProbability) + 
    (1- set$Decision)*log(1-GambleProbability) 

    return(-sum(loglike)) 
} 

    temp_s <- 0.1 #runif(1, 0.1, 1) 

    ML.estim1 <- mle(Beh.Parameters, start = list (lambda = 1, alpha = 1, temp = temp_s), nobs = length(set$Decision)) 
    ML.estim2 <- mle(Beh.Parameters, start = list(lambda = 0.1, alpha = 0.1, temp = temp_s), nobs = length(set$Decision)) 

는 I는 3 개 개의 매개 변수 (람다, 알파 및 온도)를 추정하기 위해 MLE 함수를 사용하여 알파 않고 난 예컨대 이러한 출력 :

,745,151 5,

ML.estim1 호출 : MLE (minuslogl = Beh.Parameters = 목록 (람다 = 1, 온도 = temp_s)를 시작 = 길이 (세트 $ 결정) NOBS) 계수 : 람다 온도 1.298023 1.041057

나는 알파 매개 변수는 잘 작동하지만,하지 않고 그것을 실행하려고 나는 내가이 두 가지 오류를받은 포함 할 때 :

Optim을 (시작, F, 방법 = 방법, 헤센 오류 = TRUE, ...) :(시작, f, 메소드 = 메소드, 헤 시안 = TRUE, ...) : 'vmmin'의 값이 유한하지 않음 (첫 번째 MLE의 경우) 의 값이 아닌 유한 유한 차분 값[) MLE 두 번째에 대한

내가 미리 ... 감사 매트릭스, 특이 값 분해, BFGS 등 어떤 도움이 환영을 코딩하기 위해 노력했다.

+0

보관 용 계정 링크가 작동하지 않습니다. – csgillespie

+1

https://www.dropbox.com/s/fpw3obrqcx8ld1q/GrandAverage.RData?dl=0 – Oesj

+0

내 나쁜 ... 지금은? – Oesj

답변

2

Loss 변수가 음수입니다. R에서 음수 값을 분수로 늘리면 (set$Loss^alpha 인 경우 alpha은 정수가 아님) NaN 값을 반환합니다. (유일한 대안은 복잡하지 않은 대답을 반환하는 것입니다. 아마도 원하지 않을 것입니다.) Loss을 음수가 아닌 양수로 코딩 하시겠습니까? 아니면 -abs(set$Loss^alpha)을 원하십니까?

는 범용 디버깅 팁, 그것은 당신이 더 무슨 일이 일어나고 있는지 볼 수 있도록 목적 함수의 마지막에서 두 번째 라인으로

cat(lambda,alpha,temp,-sum(loglike),"\n") 

를 추가하는 데 도움이됩니다.

+0

@ 벤 볼커 감사합니다 havent 그것의 생각 .. 손실 변수를 recoding 의미가 있지만 아프게 시도해보십시오 – Oesj

+0

여전히 올바른 출력 ...- abs ($ Loss^알파 설정) 같은 오류가 발생하는 것 같습니다. 긍정적 인 도메인 또는 그 비슷한 뭔가를 양/부정 변수를 변환 할 수있는 방법이 있습니까? – Oesj