R語言非線性模型的實現
什么是非線性回歸
在非線性回歸中,分析師通常采用一個確定的函數形式和相應的參數來擬合數據。最常用的參數估計方法是利用非線性最小二乘法(R中的nls函數)。該方法使用線性函數來逼近非線性函數,并且通過不斷迭代這個過程來得到參數的最優(yōu)解(本段來自維基百科)。非線性回歸的良好性質之一是估計出的參數都有清晰的解釋(如Michaelis-Menten模型的Vmax是指最大速率),而變換數據后得到的線性模型其參數往往難以解釋。
實例一
首先,繪制出原數據的散點圖。代碼試下如下:
data9.3<-read.csv("C:/Users/Administrator/Desktop/data9.3.csv",head=TRUE) attach(data9.3) plot(x,y)
輸出結果為:
可以看出,這時 y 與 x之間呈現出非線性,因此需要對數據進行非線性回歸分析。
代碼實現如下:
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 # 相關指數
輸出結果為:
由以上輸出結果可知,對參數的估計經過6步迭代計算后收斂,而且相關指數 R 2 = 0.9986,說明非線性回歸擬合效果很好。同時,上述結果中對參數的顯著性檢驗顯示參數均通過顯著性檢驗。
但是,在小樣本的情況下,不可線性化的非線性回歸的殘差通暢不滿足正態(tài)性,進而使用 t分布進行檢驗也是無效的,因此顯著性檢驗的結果并不具有重要意義。
另外,聽過對中間量的查看,回歸的利差平方和 S S R = 15156.55 ,而總離差平方和 S S T = 14917.89<S S R ,可見非線性回歸不再滿足平方和分解式。
該實例中殘差均值為 0.2856 ≠ 0,當然,如果回歸擬合的效果好,殘差均值會接近0.
通過上述分析可以認為, y與 x符合下面的非線性回歸:
實例二——Gompertz模型
回歸實現的代碼如下:
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) # 將模型的回歸系數賦值給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)
輸出結果為:
擬合結果為:
這里可以不用糾結這個模型是怎么得到的,這是一個計量經濟學上的模型,已經給出了確切的表達式為 。
舉這個例子的目的是了解由于回歸迭代中的參數超過范圍而導致代碼運算產生無限不收斂的情況時,如何對參數取值做出限定,并使用高斯-牛頓迭代算法(設定參數algorithm=“port”)。
到此這篇關于R語言非線性模型的實現的文章就介紹到這了,更多相關R語言非線性模型內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
R語言常用函數總結梳理(基本對象字符處理?數學?統(tǒng)計)
這篇文章主要介紹了R語言常用函數總結梳理(基本對象字符處理?數學?統(tǒng)計),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10R語言數據可視化繪制Circular?bar?plot實現環(huán)形柱狀圖
這篇文章主要為大家介紹了R語言繪制Circular?bar?plot實現環(huán)形柱狀圖的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02R語言繪制數據可視化小提琴圖Violin plot with dot畫法
這篇文章主要為大家介紹了R語言繪制數據可視化小提琴圖Violin plot with dot畫法的示例詳解有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-02-02