R語言非線性模型的實現(xiàn)
什么是非線性回歸
在非線性回歸中,分析師通常采用一個確定的函數(shù)形式和相應的參數(shù)來擬合數(shù)據(jù)。最常用的參數(shù)估計方法是利用非線性最小二乘法(R中的nls函數(shù))。該方法使用線性函數(shù)來逼近非線性函數(shù),并且通過不斷迭代這個過程來得到參數(shù)的最優(yōu)解(本段來自維基百科)。非線性回歸的良好性質之一是估計出的參數(shù)都有清晰的解釋(如Michaelis-Menten模型的Vmax是指最大速率),而變換數(shù)據(jù)后得到的線性模型其參數(shù)往往難以解釋。
實例一
首先,繪制出原數(shù)據(jù)的散點圖。代碼試下如下:
data9.3<-read.csv("C:/Users/Administrator/Desktop/data9.3.csv",head=TRUE)
attach(data9.3)
plot(x,y)
輸出結果為:

可以看出,這時 y 與 x之間呈現(xiàn)出非線性,因此需要對數(shù)據(jù)進行非線性回歸分析。
代碼實現(xiàn)如下:
nls9.3<-nls(y~a-a/(1+(x/c)^b),start=list(a=100,b=5,c=4.8)) summary(nls9.3) e<-resid(nls9.3) ebar<-mean(e) SE<-deviance(nls9.3) # 殘差平方和,由于e的均值不等于0,所以SE不等于殘差的離差平方和 SSE<-sum((e-ebar)^2) # 殘差的離差平方和 prey<-fitted(nls9.3) # y的預測值 pybar<-mean(prey) # y的預測值的均值 ybar<-mean(y) # y的均值 SST<-sum((y-ybar)^2) # 總離差平方和 Rsquare<-1-SE/SST # 相關指數(shù)
輸出結果為:


由以上輸出結果可知,對參數(shù)的估計經(jīng)過6步迭代計算后收斂,而且相關指數(shù) R 2 = 0.9986,說明非線性回歸擬合效果很好。同時,上述結果中對參數(shù)的顯著性檢驗顯示參數(shù)均通過顯著性檢驗。
但是,在小樣本的情況下,不可線性化的非線性回歸的殘差通暢不滿足正態(tài)性,進而使用 t分布進行檢驗也是無效的,因此顯著性檢驗的結果并不具有重要意義。
另外,聽過對中間量的查看,回歸的利差平方和 S S R = 15156.55 ,而總離差平方和 S S T = 14917.89<S S R ,可見非線性回歸不再滿足平方和分解式。
該實例中殘差均值為 0.2856 ≠ 0,當然,如果回歸擬合的效果好,殘差均值會接近0.
通過上述分析可以認為, y與 x符合下面的非線性回歸:

實例二——Gompertz模型
回歸實現(xiàn)的代碼如下:
data9.4<-read.csv("C:/Users/Administrator/Desktop/data9.4.csv",head=TRUE)
y<-data9.4[,2]
t<-data9.4[,1]
model<-nls(y~k*(a^(b^t)),start=list(a=0.5,b=0.5,k=120),lower=c(0,0,116),upper=c(1,1,10000),algorithm="port")
summary(model)
c<-coef(model) # 將模型的回歸系數(shù)賦值給c
tt<-c(1:30)
yp<-c[3]*(c[1]^(c[2]^tt)) # 計算時間取值為tt時對應的y的預測值
t1=t+1979 # 計算對應的年份
t2<-tt+1979
plot(t1,y,type="o",ann=FALSE,ylim=c(0,160),xlim=c(1975,2015))
lines(t2,yp)
輸出結果為:

擬合結果為:

這里可以不用糾結這個模型是怎么得到的,這是一個計量經(jīng)濟學上的模型,已經(jīng)給出了確切的表達式為
。
舉這個例子的目的是了解由于回歸迭代中的參數(shù)超過范圍而導致代碼運算產(chǎn)生無限不收斂的情況時,如何對參數(shù)取值做出限定,并使用高斯-牛頓迭代算法(設定參數(shù)algorithm=“port”)。
到此這篇關于R語言非線性模型的實現(xiàn)的文章就介紹到這了,更多相關R語言非線性模型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
R語言常用函數(shù)總結梳理(基本對象字符處理?數(shù)學?統(tǒng)計)
這篇文章主要介紹了R語言常用函數(shù)總結梳理(基本對象字符處理?數(shù)學?統(tǒng)計),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10
R語言數(shù)據(jù)可視化繪制Circular?bar?plot實現(xiàn)環(huán)形柱狀圖
這篇文章主要為大家介紹了R語言繪制Circular?bar?plot實現(xiàn)環(huán)形柱狀圖的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02
R語言 實現(xiàn)將1對多數(shù)據(jù)與1對1數(shù)據(jù)互換
這篇文章主要介紹了R語言 實現(xiàn)將1對多數(shù)據(jù)與1對1數(shù)據(jù)互換的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
R語言繪制數(shù)據(jù)可視化小提琴圖Violin plot with dot畫法
這篇文章主要為大家介紹了R語言繪制數(shù)據(jù)可視化小提琴圖Violin plot with dot畫法的示例詳解有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-02-02

