2014-07-07 10 views
2

배포본을 결합하기 위해 R에 mixdist 패키지를 설치했습니다. 특히 mix() 함수를 사용하고 있습니다. See documentation. 기본적으로, 나는 Error in nlm(mixlike, lmixdat = mixdat, lmixpar = fitpar, ldist = dist, : missing value in parameterR : mixdist 패키지의 mix()가 오류를 반환합니다.



받고 있어요 나는 오류 메시지를 봤하지만, 유용한 결과를 팝업합니다.

mix()의 첫 번째 인수는 data.df라는 데이터 프레임입니다. 이것은 내장 데이터 세트 pike65와 똑같은 포맷입니다. 나도 data.df <- as.mixdata(data.df)를했다.

두 번째 인수에는 두 개의 행이 있습니다. 그것은 pikepar과 똑같은 포맷의 datapar라는 데이터 프레임입니다. 내 pi 값은 0.5와 0.5입니다. 내 mu 값은 250 및 463 (내 데이터 세트 기준)입니다. 내 sigma 값은 0.5 1. 있습니다

처럼 mix() 내 전화 보이는 : 인쇄 내 pi 값이 첫 번째 반복 한 후 NaN이 0.5에서 갈 것을, 내 그라데이션이되고 있음을 보여줍니다
fitdata <- mix(data.df, datapar, "norm", constr = mixconstr(consigma="CCV"), emsteps = 3, print.level = 2)

0.

이 오류를 분류하는 데 도움이 되었으면합니다.

감사합니다,
n.i. 당신이 링크 된 테스트 데이터를 사용

+0

A [최소 만드세요 재현 가능한 예제] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) 코드를 복사하여 붙여 넣으면 동일한 오류가 발생합니다. 어떤 값을 추측하는지 많은 시간을 들이지 않고도 문제를 재현 할 수 있다면 도움이됩니다. ar 실제로 당신의 특정한'datapar' 또는 그것이 어떻게 구조화되어 있는지에 대해 말입니다. – MrFlick

+0

내가 좋아할 것이지만 불행히도 내가 사용하고있는 데이터는 독점적입니다. 그러나, 나는이 오류를 제공하는 데이터로이 [link] (http://r.789695.n4.n4.ca.com/double-gaussian-with-mixdist-what-s-wrong-td4650161.html)을 찾았습니다. 내 코드는 거의 동일하게 보입니다. – swetharevanur

답변

3

library(mixdist) 
time <- seq(673,723) 
counts <-c(3,12,8,12,18,24,39,48,64,88,101,132,198,253,331, 
    419,563,781,1134,1423,1842,2505,374,6099,9343,13009, 
    15097,13712,9969,6785,4742,3626,3794,4737,5494,5656,4806, 
    3474,2165,1290,799,431,213,137,66,57,41,35,27,27,27) 
data.df <- data.frame(time=time, counts=counts) 

에 우리는

startparam <- mixparam(c(699,707),1) 
data.fit <- mix(data.mix, startparam, "norm") 

같은 오류를 제공 것을 볼 수 있습니다. 이 오류는 데이터와 밀접하게 관련되어있는 것 같습니다 (이 데이터가 작동하지 않는 이유는 사용자가 작동하지 않는 이유와 잠재적으로 다를 수 있지만 사용자가 제공 한 유일한 예입니다).

이 데이터의 문제점은 두 그룹 간의 확률이 어느 시점에서 구별 할 수 없게된다는 것입니다. 그런 다음 알고리즘의 "E"단계에서 pi 변수를 올바르게 추정 할 수 없습니다. 여기

pnorm(717,707,1) 
# [1] 1 
pnorm(717,699,1) 
# [1] 1 

모두 정확히 1이며이 오류를 일으키는 것으로 보입니다. mix이이 값을 1에서 빼고 그룹을 추정 할 때 비율을 비교하면 NaN 값을 가져와 비율의 추정치로 전파됩니다. 내부적으로 이러한 NaN 값은 추정을 할 nlm()에 전달되면, 당신은 같은 오류 메시지가

f <- function(x) sum((x-1:length(x))^2) 
nlm(f, c(10,10)) 
nlm(f, c(10,NaN)) #error 

으로 복제 할 수

Error in nlm(mixlike, lmixdat = mixdat, lmixpar = fitpar, ldist = dist, : 
    missing value in parameter 

오류 메시지를 얻을 그래서는 maxdist 패키지가 작동하지 않습니다 나타납니다 이 시나리오에서 패키지 관리자에게 문의하여 문제를 알고 있는지 확인하십시오. 그 동안 당신은 혼합 모델의 매개 변수를 추정하는 또 다른 방법을 찾아야 할 것입니다.

1

지금은 혼합 배포판의 전문가는 아니지만 @ MrFlick의 대답은 오류 메시지를 검색하는 사람들에게 오해의 소지가 있다고 생각합니다. 핵심 문제는 linked code과 예제에서 sigma 값이 mu 값에 비해 매우 작습니다. 알고리즘은 그런 작은 시작 시그마 값을 가진 솔루션을 찾을 수 없다고 생각합니다. 시그마 값을 증가 시키면 솔루션을 얻을 수 있습니다. 예를 들어 Linked code :

library(mixdist) 
time <- seq(673,723) 
counts <- c(3, 12, 8, 12, 18, 24, 39, 48, 64, 88, 101, 132, 198, 253, 331, 419, 563, 781, 1134, 1423, 1842, 2505, 374, 6099, 9343, 13009, 15097, 13712, 9969, 6785, 4742, 3626, 3794, 4737, 5494, 5656, 4806, 3474, 2165, 1290, 799, 431, 213, 137, 66, 57, 41, 35, 27, 27, 27) 
data.df <- data.frame(time=time, counts=counts) 
data.mix <- as.mixdata(data.df) 
startparam <- mixparam(mu = c(699,707), sigma = 1) 
data.fit <- mix(data.mix, startparam, "norm") ## Leads to the error message 

startparam <- mixparam(mu = c(699,707), sigma = 5) # Adjust start parameters 
data.fit <- mix(data.mix, startparam, "norm") 
plot(data.fit) 
data.fit ### Estimates somewhat reasonable mixture distributions 
# Parameters: 
#  pi mu sigma 
# 1 0.853 699.3 4.494 
# 2 0.147 708.6 2.217 

enter image description here

바닥 라인 : 당신이 당신의 시작 매개 변수 시그마 값을 증가시킬 수 있다면, mix 기능은 당신을 위해 합리적인 견적을 찾을 수 있습니다. 반드시 다른 패키지를 사용해 볼 필요는 없습니다.

0

또한 데이터 집합에 누락 된 데이터가있는 경우이 메시지가 표시 될 수 있습니다. 예제

가 NLM에

data(pike65) 
data(pikepar) 
pike65$freq[10] <- NA 
fitpike1 <- mix(pike65, pikepar, "lnorm", constr = mixconstr(consigma = "CCV"), emsteps = 3) 

에러 세트 (mixlike, lmixdat = mixdat, lmixpar = fitpar, ldist = DIST : 파라미터 값을 놓치기