Doğru başlangıç ​​değerlerine sahip nls cinsinden tekil gradyan hatası


19

Bazı verilere bir satır + üstel eğri sığdırmaya çalışıyorum. Başlangıç ​​olarak, bunu bazı yapay veriler üzerinde yapmaya çalıştım. Fonksiyon şu şekildedir :

y=a+br(xm)+cx
Doğrusal bir bölümün yanı sıra ek bir yatay kaydırma parametresi ( m ) ile etkin bir üstel eğridir . Ancak, R nls()işlevini kullandığımda, ilk etapta veri oluşturmak için kullandığım parametreleri kullandığım halde , korkunç " tekil gradyan matrisi ilk parametre tahminlerinde " hatası alıyorum.
Farklı algoritmaları, farklı başlangıç ​​değerlerini denedim optimve karelerin kalan toplamını en aza indirmek için kullanmaya çalıştım , hepsi boşuna. Bunun olası bir nedeninin formülün aşırı parametrelenmesi olabileceğini okudum, ancak bunun olduğunu düşünmüyorum (öyle mi?)
Bu sorunla ilgili bir önerisi olan var mı? Yoksa bu sadece garip bir model mi?

Kısa bir örnek:

#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)

Teşekkürler!


2
İpucu: katsayısına bakın (sabit bir r için ) ve b r - m = sabitinin b = r msabitiyle tek boyutlu bir çözüm ailesine ( b , m ) sahip olduğuna dikkat edin . rxrbrm=constant(b,m)b=rmconstant
whuber

1
veya şekilde kısıtlanmadığı sürece, bu tanımlanmış bir model değildir . Bence işi yapar. r r ( 0 , 1 )brr(0,1)
Makro

Yanıtlar:


16

Son zamanlarda bunu ısırdım. Niyetlerim aynıydı, yapay bir model yap ve test et. Ana neden @whuber ve @marco tarafından verilen nedendir. Bu model tanımlanmamıştır. Bunu görmek için NLS'nin işlevi en aza indirdiğini unutmayın:

i=1n(yiabrximcxi)2

Parametre seti (a,b,m,r,c) ile küçültüldüğünü varsayalım . Parametre setinin (a,brm,0,r,c) en aza indirilecek fonksiyonun aynı değerini vereceğini görmek zor değildir . Bu nedenle model tanımlanmamıştır, yani benzersiz bir çözüm yoktur.

Degradenin neden tekil olduğunu görmek de zor değil. Göstermek

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

Sonra

fb=rxm

fm=blnrrxm

ve bunu tüm x

blnrfb+fm=0.

Dolayısıyla matris

(f(x1)f(xn))

tam sıralı nlsolmayacak ve bu yüzden tekil degrade mesajını verecektir.

Ben ana hata modeli olduğunu fark kadar benim kod başka bir yerde hata aramak için bir hafta geçirdim :)


2
Bu bildiğim çok eski ama merak ediyorum, bu nls tanımlanamayan modellerde kullanılamaz mı? Örneğin, bir sinir ağı?
Kont Sıfır

Şişman şans, biliyorum, ama bunu daha az kireç hatırlayan insanlar için yıkabilir misin? :). ayrıca, OP sorununa çözüm nedir? Vazgeç ve eve git?
theforestecologist

2
OP sorununun çözümü iki yerine bir parametre kullanmaktır, yani yerine β r x kullanın . M, o birleştiği çünkü parametre superflous olan P , örneğin β =brxmβrxmβ . β=brm
mpiktas

@CountZero, temelde evet, parametreler belirtilmemişse normal optimizasyon yöntemleri başarısız olur. Sinir ağları, ek kontrendikasyonlar ekleyerek ve diğer ilginç numaralar kullanarak bu sorunu ortadan kaldırır.
mpiktas

Ben düşünürdüm ? cevapta bir eksik var mı? fm=blnr rxm
wiswit

17

Yukarıdaki cevaplar elbette doğrudur. Değeri için, verilen açıklamalara ek olarak, bunu yapay bir veri kümesinde deniyorsanız, şu adreste bulunan nls yardım sayfasına göre: http://stat.ethz.ch/R-manual/R-patched/ kütüphane / istatistik / html / nls.html

R'nin nls'leri üstesinden gelemez. Yardım sayfasında özellikle şunlar belirtilir:

Uyarı

Yapay "sıfır artık" veriler üzerinde nls kullanmayın.

Nls işlevi, geçerli parametre tahminlerindeki sayısal belirsizliği kalan kareler toplamı ile karşılaştıran bir göreli-öteleme yakınsama ölçütü kullanır. Bu, formdaki veriler üzerinde iyi performans gösterir

y = f (x, θ) + eps

(var (eps)> 0 ile). Formun verilerinin yakınsamasını gösteremiyor

y = f (x, θ)

çünkü kriter yuvarlama hatasının iki bileşeninin karşılaştırılması demektir. Yapay verileri nls üzerinde test etmek isterseniz, lütfen aşağıdaki örnekte gösterildiği gibi bir gürültü bileşeni ekleyin.

Yani, gürültü yok == R'nin nls için iyi değil.


Siteye hoş geldiniz, @B_D_Dubbya. Cevabınızı biçimlendirme özgürlüğünü aldım, umarım umursamazsınız. CV'de cevaplarınızı düzenleme hakkında daha fazla bilgiyi burada bulabilirsiniz .
gung - Monica'yı eski durumuna döndürün

1
Ben bu sorunun farkındayım - bu nedenle biraz gürültü eklemek için "jitter" işlevini kullanarak
steiny
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.