nls ()가 왜“초기 모수 추정에서 특이 기울기 행렬”오류를 발생 시키는가?


21

배출량 감축 및 차량 당 비용에 대한 몇 가지 기본 데이터가 있습니다.

q24 <- read.table(text = "reductions  cost.per.car
    50  45
    55  55
    60  62
    65  70
    70  80
    75  90
    80  100
    85  200
    90  375
    95  600
    ",header = TRUE, sep = "")

나는 이것이 지수 함수라는 것을 알고 있으므로 다음에 맞는 모델을 찾을 수있을 것으로 기대합니다.

    model <- nls(cost.per.car ~ a * exp(b * reductions) + c, 
         data = q24, 
         start = list(a=1, b=1, c=0))

하지만 오류가 발생했습니다.

Error in nlsModel(formula, mf, start, wts) : 
  singular gradient matrix at initial parameter estimates

나는 내가보고있는 오류에 대해 많은 질문 을 읽었 으며 문제는 아마도 더 나은 / 다른 start값이 필요하다는 것입니다 ( initial parameter estimates약간 더 이해가가 능합니다). 더 나은 매개 변수를 추정하는 방법에 대해 알고 싶습니다.


사이트에서 오류 메시지를 검색 하여 해독을 시작할 것을 제안 합니다 .
whuber

3
실제로, 나는 그것을했고 전체 오류에 대한 나의 검색은 세 가지 데이터 포인트와 답이없는 반 구운 질문으로 밝혀졌습니다. 그러나 더 구체적인 검색은 결과를 얻습니다. 여기에 더 많은 경험이 있고 어떤 용어가 관련성이 있는지 알고 있기 때문일 수 있습니다.
Amanda

소프트웨어 오류에 대해 내가 찾은 것 중 하나는 특정 오류 메시지 (일반적으로 따옴표)를 검색하는 것이 이전에 논의되었는지 여부를 확인하는 가장 확실한 방법이라는 것입니다. (이것은 SE 사이트뿐만 아니라 인터넷 전체에서도 가능합니다.) "보류 중"메시지에서 알 수 있듯이 추가 연구로 문제가 해결되지 않으면 돌아와서 다시 문의 해주세요.이 질문은 통계와 컴퓨팅의 교차로 여기에 큰 관심의 문제가 노출 될 수 있습니다.
whuber

1
시작 값에 대한 적합성은 데이터와는 거리가 멀습니다. 비교 exp(50)exp(95)X = 50이고, x = 95에서의 y 값에 관한 것이다. c=0y의 로그 (선형 관계 만들기) 를 설정 하고 취하면 회귀를 사용 하여 데이터에 충분한 log ( ) 및 b의 초기 추정치를 얻을 수 있습니다 (또는 원점을 통해 선을 맞추는 경우 떠날 수 있음). a at 1이고 b에 대한 추정치를 사용 하면 데이터에도 충분합니다). b 가이 두 값 주위의 상당히 좁은 간격을 벗어나 면 몇 가지 문제가 발생합니다. [또는 다른 알고리즘을 시도해보십시오]
Glen_b-복지국 Monica

1
감사합니다 @Glen_b. 통계 계산기 교과서 (및 과정 자체를 뛰어 넘기 위해)를 사용하여 그래프 계산기 대신 R을 사용할 수 있기를 바랐습니다. 그래서 나는 가장 통계적인 통찰력으로 시작하지만 R에서 다른 슬라이싱과 다이 싱을하는 많은 경험이 있습니다. .
아만다

답변:


38

비선형 모델에 적합한 시작 값을 자동으로 찾는 것은 예술입니다. (데이터를 플로팅하고 시각적으로 추측 할 수있는 경우 일회성 데이터 세트의 경우 비교적 쉽습니다.) 한 가지 방법은 모형선형화하고 최소 제곱 추정값을 사용하는 것입니다.

이 경우 모델의 형식은

이자형(와이)=특급(엑스)+

알 수없는 매개 변수 . 지수가 있으면 로그를 사용하도록 권장하지만 c 를 추가 하면 그렇게하기가 어렵습니다. 주의 사항은,하지만, 경우에 것을 A가 양수 한 후 C는 이하의 작은 기대 값보다 것이다 Y를 따라서 - 그리고 가장 작은 것보다 약간 작을 수 있습니다 관측Y . ( a 가 음수이면 c 의 가장 큰 관측 값 Y 보다 약간 큰 c 값을 고려해야합니다 .),,와이와이와이

그런 다음 관측치의 최소값 y i 의 절반과 같은 초기 추정값 c 0 을 사용하여 를 처리합시다 . 이처럼 가혹한 추가 용어없이 모델을 다시 작성할 수 있습니다.0와이나는

이자형(와이)0특급(엑스).

그건 우리의 로그를 취할 수 있습니다 :

로그(이자형(와이)0)로그()+엑스.

그것은 모델에 대한 선형 근사치입니다. 두 (b)은 최소 제곱으로 추정 할 수있다.로그()

수정 된 코드는 다음과 같습니다.

c.0 <- min(q24$cost.per.car) * 0.5
model.0 <- lm(log(cost.per.car - c.0) ~ reductions, data=q24)
start <- list(a=exp(coef(model.0)[1]), b=coef(model.0)[2], c=c.0)
model <- nls(cost.per.car ~ a * exp(b * reductions) + c, data = q24, start = start)

출력 (예제 데이터)은 다음과 같습니다.

Nonlinear regression model
  model: cost.per.car ~ a * exp(b * reductions) + c
   data: q24
        a         b         c 
 0.003289  0.126805 48.487386 
 residual sum-of-squares: 2243

Number of iterations to convergence: 38 
Achieved convergence tolerance: 1.374e-06

수렴이 좋아 보인다. 그것을 플로팅합시다 :

plot(q24)
p <- coef(model)
curve(p["a"] * exp(p["b"] * x) + p["c"], lwd=2, col="Red", add=TRUE)

그림

잘 작동했습니다!

이를 자동화 할 때 극한값을 ( ) 데이터 의 스프레드와 비교하는 등 잔차에 대한 빠른 분석을 수행 할 수 있습니다 . a < 0 가능성을 처리하기 위해 유사한 코드가 필요할 수도 있습니다 . 나는 그것을 운동으로 남겨둔다.와이<0


초기 값을 추정하는 또 다른 방법은 경험, 물리 이론 등을 기반으로 할 수있는 의미를 이해하는 데 달려 있습니다 . 초기 값을 이러한 방식으로 결정할 수있는 (보통 어려운) 비선형 적합의 확장 된 예는 제 답변에 설명되어 있습니다 에서 /stats//a/15769 .

산점도의 시각적 분석 (초기 매개 변수 추정값 결정)은 /stats//a/32832에 설명되어 있습니다 .

경우에 따라 솔루션이 느리게 변경 될 수있는 일련의 비선형 피팅이 만들어집니다. 이 경우 이전 솔루션을 다음 솔루션의 초기 추정값으로 사용하는 것이 편리하고 빠릅니다 . /stats//a/63169 에서이 기술을 사용하여 (댓글없이) 기억 합니다.



-1

그래서 ... 나는 이것을 지수 함수로 잘못 읽은 것 같습니다. 내가 필요한 건poly()

model <- lm(cost.per.car ~ poly(reductions, 3), data=q24)
new.data <- data.frame(reductions = c(91,92,93,94))
predict(model, new.data)

plot(q24)
lines(q24$reductions, predict(model, list(reductions = q24$reductions)))

또는 다음을 사용하십시오 lattice.

xyplot(cost.per.car ~ reductions, data = q24,
       panel = function(x, y) {
         panel.xyplot(x, y)
         panel.lines(x, predict(model,list(reductions = x) ))
       }, 
       xlab = "Reductions", 
       ylab = "Cost per car")

2
이것은 당신이 요구 한 질문에 대한 답이 아니며, 다른 것으로 (그리고 덜 흥미로운 IMHO로) 변경합니다.
whuber

6
데이터를 표현하기 위해 함수를 맞추는 문제를 해결할 수도 있지만, 귀하의 대답은 귀하의 질문에 대한 기대치가 아닙니다. @whuber 씨는 훌륭한 설명을 제공했으며 허용 된 답변을받을 자격이 있습니다.
Lourenco
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.