Saya memiliki data berikut dan ingin mencocokkan model pertumbuhan eksponensial negatif dengan itu:
Days <- c( 1,5,12,16,22,27,36,43)
Emissions <- c( 936.76, 1458.68, 1787.23, 1840.04, 1928.97, 1963.63, 1965.37, 1985.71)
plot(Days, Emissions)
fit <- nls(Emissions ~ a* (1-exp(-b*Days)), start = list(a = 2000, b = 0.55))
curve((y = 1882 * (1 - exp(-0.5108*x))), from = 0, to =45, add = T, col = "green", lwd = 4)
Kode berfungsi dan garis pas diplot. Namun, kecocokan secara visual tidak ideal, dan jumlah kuadrat residu tampaknya cukup besar (147073).
Bagaimana kita dapat meningkatkan kecocokan kita? Apakah data memungkinkan kesesuaian yang lebih baik?
Kami tidak dapat menemukan solusi untuk tantangan ini di internet. Bantuan atau tautan langsung ke situs web / posting lain sangat dihargai.
r
nonlinear-regression
fitting
nls
Strohmi
sumber
sumber
fit <- nls(Emissions ~ a* (1- u*exp(-b*Days)), start = list(a = 2000, b = 0.1, u=.5)); beta <- coefficients(fit); curve((y = beta["a"] * (1 - beta["u"] * exp(-beta["b"]*x))), add = T)
.Jawaban:
Hukum eksponensial (negatif) berbentuk . Ketika Anda mengizinkan perubahan unit dalam nilai x dan y , katakanlah ke y = α y ′ + β dan x = γ x ′ + δ , maka hukum akan dinyatakan sebagaiy= - exp( - x ) x y y= α y′+ β x = γx′+ δ
yang secara aljabar setara dengan
menggunakan tiga parameter , u = 1 / ( β exp ( δ ) ) , dan b = γ . Kita dapat mengenali a sebagai parameter skala untuk y , b sebagai parameter skala untuk x , dan u berasal dari parameter lokasi untuk x .a = - β/ α u = 1 / ( βexp( δ) ) b = γ Sebuah y b x kamu x
Sebagai patokan, parameter ini dapat diidentifikasi sekilas dari plot :
Parameter adalah nilai asymptote horizontal, sedikit kurang dari 2000 .Sebuah 2000
Parameter adalah jumlah relatif kurva naik dari asal ke asimtot horizontal. Di sini, kenaikan itu sedikit kurang dari 2000 - 937 ; relatif, itu sekitar 0,55 asimtot.kamu 2000 - 937 0,55
Karena , ketika x sama dengan tiga kali nilai 1 / b kurva seharusnya naik menjadi sekitar 1 - 0,05 atau 95 % dari totalnya. 95 % kenaikan dari 937 menjadi hampir 2000 menempatkan kita sekitar 1950 ; pemindaian di plot menunjukkan ini membutuhkan waktu 20 hingga 25 hari. Mari kita menyebutnya 24 untuk kesederhanaan, mana b ≈ 3 / 24exp( - 3 ) ≈ 0,05 x 1 / b 1 -0.05 95 % 95 % 937 2000 1950 20 25 24 . (Metode 95 % untuk mengamati skala eksponensial ini merupakan standar di beberapa bidang yang sering menggunakan plot eksponensial.)b ≈ 3 / 24 =0.125 95 %
Mari kita lihat seperti apa ini:
Tidak buruk untuk permulaan! (Bahkan meskipun mengetik
0.56
di tempat0.55
., Yang merupakan perkiraan kasar pula) Kami bisa memolesnya dengannls
:Output
nls
berisi informasi luas tentang ketidakpastian parameter. Misalnya , sederhanasummary
memberikan kesalahan estimasi standar:Kita dapat membaca dan bekerja dengan seluruh matriks kovarian estimasi, yang berguna untuk memperkirakan interval kepercayaan simultan (setidaknya untuk dataset besar):
nls
mendukung plot profil untuk parameter, memberikan informasi lebih rinci tentang ketidakpastiannya:sumber
res <- residuals(fit); res %*% res