2016-07-05 2 views
0

이전 질문과 유사한 질문이 내 문제를 해결하는 데 도움이되지 않습니다.nls에서 모델을 맞추는 중 오류가 발생했습니다.

1 (40)에 나는 시작의 아이디어를 얻기 위해 데이터 라인을 그릴했습니다에서 내가 모델 y=a1*(1-exp(-a21*Age_WH40))^a3, a21=ln(1/a3)/a2에 맞게하려고하고 Age_WH40가 간다

plot(MOE_WH40 ~ Age_WH40) 
lines(ts(8*(1-exp(log(1/3)/5*(1:40)))^3),col="red", lwd=2) 

enter image description here

fit.nlm_MOE4A.WH <- nls(MOE_WH40 ~ a*(1-exp(log(1/c)/b*Age_WH40))^b, start=list(a=10, b=6, c=2)) 

하지만 분산을 방지하기 위해 데이터를 제한하더라도 난 단지 얻을

numericDeriv (양식 [[3L]], 이름 (IND), ENV)에서 5,

오류 : 누락 값 또는 모델을 평가할 때

내가 그것을 시작 값 문제라고 생각하지 않습니다 생산 무한대 , 그리고 Excel에서 아무런 문제없이 1에서 40까지 모델을 실행했습니다. 어떤 생각이 일어나고 있습니까?

structure(list(ID = c(245L, 246L, 247L, 248L, 249L, 250L, 251L, 
252L, 253L, 254L, 255L, 256L, 257L, 258L, 259L, 260L, 261L, 262L, 
263L, 264L, 265L, 266L, 267L, 268L, 269L, 270L, 508L, 509L, 510L, 
511L), MOE_WH40 = c(7.9, 7.12, 4.369, 5.44, 8.97, 9.58, 8.07, 
7.9, 6.93, 5.63, 6, 6.17, 8.51, 8.79, 7.21, 6.64, 6.7, 7.88, 
7.97, 6.93, 5.64, 6.86, 9.36, 9.44, 10.04, 9.58, 4.337, 5.12, 
6.7, 7.86), Age_WH40 = c(23L, 29L, 4L, 8L, 13L, 20L, 24L, 29L, 
33L, 2L, 7L, 9L, 15L, 20L, 23L, 27L, 12L, 13L, 20L, 23L, 3L, 
9L, 16L, 22L, 26L, 30L, 2L, 8L, 11L, 15L)), .Names = c("ID", 
"MOE_WH40", "Age_WH40"), class = "data.frame", row.names = c(NA, 
-30L)) 

감사

+1

우리가 쉽게 당신을 도울 수 있도록 [재현 가능한 예] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)를 제공해주십시오. –

+0

감사합니다 @ Zheyuan 리, 좋은 방법으로 데이터를 넣어 고군분투했습니다 – David

답변

0

당신은 개의 Levenberg-마르카토 알고리즘을 사용하는 minpack.lm 패키지를 사용하여 시도해 볼 수도 있습니다 : 여기에 데이터의 하위 집합이 있습니다. 간결함을 위해 데이터를 "데모"라고했습니다.

nlsLM(data = demo, formula = MOE_WH40 ~ a*(1-exp(log(1/c)/b*Age_WH40))^b, start=list(a=10, b=6, c=2)) 
Nonlinear regression model 
model: MOE_WH40 ~ a * (1 - exp(log(1/c)/b * Age_WH40))^b 
data: demo 
a  b  c 
8.5573 0.3774 1.0347 
residual sum-of-squares: 32.89 

Number of iterations to convergence: 24 
Achieved convergence tolerance: 1.49e-08 
Warning messages: 
1: In log(1/c) : NaNs produced 
2: In log(1/c) : NaNs produced 
3: In log(1/c) : NaNs produced 

nls에서 항상 시작 값입니다.

+0

감사합니다 @ biomiha. 이 문제를 해결했습니다. 그러나 "model <- nls (MOE_WH40 ~ a * (1-exp (-b * Age_WH40))^c와 같은 로그 표현식을 피하기 위해 계산 된 계수를 사용하여 모델을 맞추려고하면 start = list (a = 8, b = 0.03, c = 0.3)) "나는 여전히 같은 오류가 발생합니다 ... 어떤 생각? – David

+0

이것은 일반적으로 하나 또는 여러 개의 계수가 수렴하지 않기 때문에 발생합니다. 데이터를 보면 데이터 포인트에 상당한 변동이 있습니다. 즉, 여러 개의 다른 커브를 데이터에 맞출 수 있습니다. 당신은 더 간단한 모델을 시험해 볼 수 있습니까? – biomiha

+0

예 @biomiha. 나는 다른 곡선에 딱 맞았다. 표시된 하나만 더 많았습니다. 덕분에 간단하게 유지하는 것이 좋습니다. – David

관련 문제