올바른 시작 값을 가진 nls의 특이 기울기 오류


19

일부 데이터에 선 + 지수 곡선을 맞추려고합니다. 처음에는 인공 데이터에 대해이 작업을 시도했습니다. 함수는 다음과 같습니다. 선형 섹션과 추가 수평 이동 매개 변수 ( m ) 가있는 지수 곡선입니다 . 그러나 R의 함수를 사용하면 처음에 데이터를 생성하는 데 사용한 것과 동일한 매개 변수를 사용하더라도 " 초기 매개 변수 추정치에서 단일 특이 적 기울기 행렬 "오류가 발생합니다. 다른 알고리즘, 다른 시작 값을 시도하고 사용하려고했습니다.

y=a+br(xm)+cx
nls()
optim잔차 제곱합을 최소화하기 위해 모두 소용이 없습니다. 나는 이것이 가능한 이유가 공식을 과도하게 매개 변수화 할 수 있다는 것을 읽었지만 그럴 것이라고 생각하지 않습니다
. 그렇습니다.이 문제에 대한 제안이 있습니까? 아니면 이것은 어색한 모델입니까?

간단한 예 :

#parameters used to generate the data
reala=-3
realb=5
realc=0.5
realr=0.7
realm=1
x=1:11 #x values - I have 11 timepoint data
#linear+exponential function
y=reala + realb*realr^(x-realm) + realc*x
#add a bit of noise to avoid zero-residual data
jitter_y = jitter(y,amount=0.2)
testdat=data.frame(x,jitter_y)

#try the regression with similar starting values to the the real parameters
linexp=nls(jitter_y~a+b*r^(x-m)+c*x, data=testdat, start=list(a=-3, b=5, c=0.5, r=0.7, m=1), trace=T)

감사!


2
힌트 : 의 계수 (고정 )를보고 에는 1 차원 해 집합 이 있습니다. . r b r m = 상수 ( b , m ) b = r m상수rxrbrm=constant(b,m)b=rmconstant
whuber

1
또는 이 어떻게 든 제한 되지 않는 한 식별 된 모델이 아닙니다 . 이 필요하다고 생각 합니다. r r ( 0 , 1 )brr(0,1)
매크로

답변:


16

나는 최근에 이것에 물렸다. 내 의도는 같았고 인공 모델을 만들고 테스트했습니다. 주된 이유는 @whuber와 @marco가 제공 한 이유입니다. 이러한 모델은 식별되지 않습니다. 이를 확인하려면 NLS가 기능을 최소화한다는 것을 기억하십시오.

i=1n(yiabrximcxi)2

매개 변수 집합 의해 최소화되었다고 가정하십시오 . 매개 변수 세트 가 최소화 될 함수의 동일한 값을 제공 한다는 것을 알기 어렵지 않습니다 . 따라서 모델이 식별되지 않습니다. 즉, 고유 한 솔루션이 없습니다.(a,b,m,r,c)(a,brm,0,r,c)

그라디언트가 왜 특이한지를 보는 것도 어렵지 않습니다. 표시

f(a,b,r,m,c,x)=a+brxm+cx

그때

fb=rxm

fm=blnrrxm

우리는 모든 대해 그것을 얻습니다.x

blnrfb+fm=0.

따라서 행렬

(f(x1)f(xn))

전체 순위가 아니므로 nls단일 그라데이션 메시지가 표시됩니다.

주 버그가 모델에 있음을 알 때까지 다른 곳에서 코드에서 버그를 찾는 데 일주일 이상을 보냈습니다. :)


2
이것은 내가 알고있는 나이이지만 궁금합니다. 이것은 nls를 식별 할 수없는 모델에 사용할 수 없다는 것을 의미합니까? 예를 들어 신경망?
카운트 제로

뚱뚱한 기회, 나는 알고 있지만, 당신은 덜 기억하는 사람들을 위해 이것을 분해 할 수 있습니까? :). 또한 OP 문제에 대한 해결책은 무엇입니까? 포기하고 집에가?
theforestecologist19

2
OP 문제에 대한 해결책, 즉 대신, 두 개가 아닌 하나 개의 파라미터를 사용하는 사용 . 그것으로 병합 이후 매개 변수이다 superflous , 즉 . β r x m β β = b r mbrxmβrxmββ=brm
mpiktas

@CountZero, 기본적으로 그렇습니다. 매개 변수가 식별되지 않으면 일반적인 최적화 방법이 실패합니다. 그러나 신경망은 추가적인 제약을 추가하고 다른 흥미로운 기법을 사용하여이 문제를 회피합니다.
mpiktas

I는 생각 ? 대답에 lnr이 누락되어 있습니까? fm=blnr rxm
wiswit

17

위의 답변은 물론 정확합니다. 주어진 설명에 덧붙여 인공 데이터 세트에서 이것을 시도하고 있다면 nls 도움말 페이지에 따르면 http://stat.ethz.ch/R-manual/R-patched/ library / stats / html / nls.html

R의 nls는 처리 할 수 ​​없습니다. 도움말 페이지에는 구체적으로 다음과 같은 내용이 있습니다.

경고

인공 "잔여없는"데이터에 nls를 사용하지 마십시오.

nls 함수는 현재 매개 변수 추정치의 수치 부정확 도와 잔차 제곱합을 비교하는 상대 오프셋 수렴 기준을 사용합니다. 이것은 양식의 데이터에서 잘 수행됩니다.

y = f (x, θ) + eps

(var (eps)> 0). 양식의 데이터에 대한 수렴을 나타내지 않습니다.

y = f (x, θ)

반올림 오차의 두 성분을 비교하는 기준이되기 때문입니다. 인공 데이터에서 nls를 테스트하려면 아래 예와 같이 노이즈 구성 요소를 추가하십시오.

따라서 잡음이 없습니다 == R의 nls에 좋지 않습니다.


@B_D_Dubbya 사이트에 오신 것을 환영합니다. 나는 당신의 대답을 자유롭게 만들었습니다. CV 에서 답변 편집에 대한 자세한 정보는 여기를 참조하십시오 .
gung-모니 티 복원

1
이 문제에 대해 알고 있습니다. 따라서 "지터"기능을 사용하여 노이즈를 추가하십시오
steiny
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.