Saya mencoba menyesuaikan garis + kurva eksponensial untuk beberapa data. Sebagai permulaan, saya mencoba melakukan ini pada beberapa data buatan. Fungsinya adalah: Ini secara efektif merupakan kurva eksponensial dengan bagian linier, serta parameter pergeseran horizontal tambahan ( m ). Namun, ketika saya menggunakan fungsi R saya mendapatkan kesalahan " singular gradient matrix pada estimasi parameter awal ", bahkan jika saya menggunakan parameter yang sama yang saya gunakan untuk menghasilkan data di tempat pertama. Saya sudah mencoba algoritma yang berbeda, nilai awal yang berbeda dan mencoba menggunakan
nls()
optim
untuk meminimalkan jumlah sisa kuadrat, semuanya sia-sia. Saya sudah membaca bahwa alasan yang mungkin untuk hal ini bisa menjadi parametris berlebihan formula, tetapi saya tidak berpikir itu (kan?) Apakah ada yang punya saran untuk masalah ini? Atau ini hanya model yang canggung?
Contoh singkat:
#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)
Terima kasih!
r
nonlinear-regression
nls
Steiny
sumber
sumber
Jawaban:
Saya digigit oleh ini baru-baru ini. Niat saya sama, membuat beberapa model buatan dan mengujinya. Alasan utamanya adalah alasan yang diberikan oleh @whuber dan @marco. Model seperti itu tidak diidentifikasi. Untuk melihat itu, ingatlah bahwa NLS meminimalkan fungsi:
Juga tidak sulit untuk melihat mengapa gradiennya tunggal. Menunjukkan
Kemudian
Karena itu matriks
tidak akan memiliki peringkat penuh dan inilah mengapa
nls
akan memberikan pesan gradien singular.Saya telah menghabiskan lebih dari seminggu mencari bug di kode saya di tempat lain sampai saya perhatikan bahwa bug utama ada dalam model :)
sumber
Jawaban di atas tentu saja benar. Untuk apa nilainya, di samping penjelasan yang diberikan, jika Anda mencoba ini pada set data buatan, menurut halaman bantuan nls ditemukan di: http://stat.ethz.ch/R-manual/R-patched/ perpustakaan / statistik / html / nls.html
R's nls tidak akan bisa menanganinya. Halaman bantuan secara khusus menyatakan:
Jadi, tidak ada suara == tidak baik untuk R's nls.
sumber