r語言做斷軸_R語言用nls做非線性回歸以及函數模型的參數估計

非線性回歸是在對變量的非線性關系有一定認識前提下,對非線性函數的參數進行最優化的過程,最優化后的參數會使得模型的RSS(殘差平方和)達到最小。在R語言中最為常用的非線性回歸建模函數是nls,下面以car包中的USPop數據集為例來講解其用法。數據中population表示人口數,year表示年份。如果將二者繪制散點圖可以發現它們之間的非線性關系。在建立非線性回歸模型時需要事先確定兩件事,一個是非線性函數形式,另一個是參數初始值。

一、模型擬合

對于人口模型可以采用Logistic增長函數形式,它考慮了初期的指數增長以及總資源的限制。其函數形式如下。

function.jpg

首先載入car包以便讀取數據,然后使用nls函數進行建模,其中theta1、theta2、theta3表示三個待估計參數,start設置了參數初始值,設定trace為真以顯示迭代過程。nls函數默認采用Gauss-Newton方法尋找極值,迭代過程中第一列為RSS值,后面三列是各參數估計值。然后用summary返回回歸結果。

library(car)

pop.mod1

summary(pop.mod)

還有一種更為簡便的方法就是采用內置自啟動模型(self-starting Models),此時我們只需要指定函數形式,而不需要指定參數初始值。本例的logistic函數所對應的selfstarting函數名為SSlogis

pop.mod2

二、判斷擬合效果

非線性回歸模型建立后需要判斷擬合效果,因為有時候參數最優化過程會捕捉到局部極值點而非全局極值點。最直觀的方法是在原始數據點上繪制擬合曲線。

library(ggplot2)

p

p+geom_point(size=3)+geom_line(aes(year,fitted(pop.mod1)),col='red')

附注:關于fitted詳細講解轉——一個不錯的博客

cacf871ece8fa7fecedf73a6c706be89.png

若比較多個模型的擬合效果可使用AIC函數,取最小值為佳。(AIC是赤池系數用于比較模型的好壞,類似的BIC是貝葉斯系數)

三、殘差診斷

為了檢測這些假設是否成立我們用擬合模型的殘差來代替誤差進行判斷。

plot(fitted(pop.mod1) , resid(pop.mod1),type='b')

a1d9dfc52fc777b9938a3a2c841ecf22.png

fitted是擬合值(predict是預測值) resid和residuals表示殘差

四、函數模型的參數估計

關于函數估計至少有這么幾個問題是需要關心的:

1、知道函數的一個大概的模型,需要估計函數的參數;

2、不知道模型,但想用一個不壞的模型刻畫它;

3、不知道模型,不太關心其顯式表達是什么,只想知道它在沒觀測到的點的取值。

這三個問題第一個是擬合或者叫參數估計,第二個叫函數逼近,第三個叫函數插值。從統計的角度來看,第一個是參數問題,剩下的是非參數的問題

以含常數項的指數函數為例

模擬模型( y=x^beta+mu +varepsilon ),這里假設( beta=3,mu=5.2 )

產生仿真數據

len

x

y

ds

str(ds)

'data.frame': 24 obs. of 2 variables:

$ x: num 0.3961 0.2004 0.0407 0.9873 0.83 ...

$ y: num 5.37 5.15 5.21 6.06 5.75 ...

plot(y ~ x, main = "指數模型")

s

lines(s, s^3, lty = 2, col = "red")

1c9e80545d19507fb513131df97216bd.png

使用nls函數估計如下:

rhs

b0 + x^b1

}

m.1

power = 2), trace = T)

回顯如下:

629.9495 : 0 2

0.08918652 : 5.174334 2.526742

0.08346069 : 5.184992 2.786072

0.08303884 : 5.188992 2.870896

0.08301127 : 5.190252 2.894080

0.08300947 : 5.190594 2.900075

0.08300935 : 5.190683 2.901602

0.08300934 : 5.190705 2.901989

0.08300934 : 5.190711 2.902088

0.08300934 : 5.190713 2.902112

summary(m.1)

回顯如下:

Formula: y ~ rhs(x, intercept, power)

Parameters:

Estimate Std. Error t value Pr(>|t|)

intercept 5.19071 0.02189 237.150 < 2e-16

power 2.90211 0.30825 9.415 3.58e-09

intercept ***

power ***

---

Signif. codes:

0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.06143 on 22 degrees of freedom

Number of iterations to convergence: 9

Achieved convergence tolerance: 4.296e-06

如果采用最小二乘估計方法,得到的結果是:

model

summary(model)

回顯如下:

Call:

lm(formula = I(log(y)) ~ I(log(x)))

Residuals:

Min 1Q Median 3Q Max

-0.054991 -0.029944 -0.008994 0.037530 0.073063

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 1.755422 0.011128 157.755 < 2e-16

I(log(x)) 0.055445 0.009502 5.835 7.17e-06

(Intercept) ***

I(log(x)) ***

---

Signif. codes:

0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.03851 on 22 degrees of freedom

Multiple R-squared: 0.6075,Adjusted R-squared: 0.5897

F-statistic: 34.05 on 1 and 22 DF, p-value: 7.166e-06

我們可以將估計數據、真實模型、nls估計模型、最小二乘模型得到的結果展示在下圖中,來擬合好壞有個直觀的判斷:

plot(ds$y ~ ds$x, main = "Fitted power model, with intercept", sub = "Blue: fit; magenta(洋紅): fit LSE ; green: known")

lines(s, s^3 + 5.2, lty = 2, col = "green")

lines(s, predict(m.2, list(x = s)), lty = 1, col = "blue")

lines(s, exp(predict(model, list(x = s))), lty = 2, col = "magenta")

segments(x, y, x, fitted(m.2), lty = 2, col = "red")

legend("topleft",c("nsl擬合","最小二乘法(洋紅)","真實","nls估計"),col=c("blue","magenta","green","red"),pch=15:15,cex = 0.7)

062563bd2a8398299aaf5f3167244316.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453572.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453572.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453572.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

day8-異常處理與網絡編程

第1章 異常處理 1.1 什么是異常? 1.1.1 描述 #1 什么是異常&#xff1f; # 異常是錯誤發生的信號&#xff0c;一旦程序出錯&#xff0c;就會產生一個異常&#xff0c;應用程序未處理該異常&#xff0c; # 異常便會拋出&#xff0c;程序隨之終止 異常就是程序運行時發生錯誤的信…

常用數據結構的一部分類

VECTORvector是可以實現自動增長的對象數組。java.util.vector提供了向量類&#xff08;vector&#xff09;來實現向量數組的功能。在C和C中可以使用指針來實現動態數組&#xff0c;java通過提供大量的類庫來彌補這個功能。向量類的對象 可以向其中隨意插入不同類的對象&#x…

進程(并發,并行) join start 進程池 (同步異步)

一、背景知識 顧名思義&#xff0c;進程即正在執行的一個過程。進程是對正在運行程序的一個抽象。進程的概念起源于操作系統&#xff0c;是操作系統最核心的概念&#xff0c;也是操作系統提供的最古老也是最重要的抽象概念之一。操作系統的其他所有內容都是圍繞進程的概念展開的…

面對職業誘惑,我們如何作出理性的選擇?

版權聲明&#xff1a;原創作品&#xff0c;允許轉載&#xff0c;轉載時請務必以超鏈接形式標明文章原始出版、作者信息和本聲明。否則將追究法律責任。本文地址&#xff1a;http://blog.csdn.net/jobchanceleo/archive/2007/07/08/1682484.aspx 分享一個發生在我們身邊的案例&a…

xamarin怎么調用java的_XamarinSQLite教程在Xamarin.Android項目中使用數據庫

XamarinSQLite教程在Xamarin.Android項目中使用數據庫在Xamarin.Android項目中使用預設數據庫的具體操作步驟如下&#xff1a;(1)創建一個Xamarin.Android項目&#xff0c;如AndroidSQLiteDemo。(2)在AndroidSQLiteDemo項目的Resources文件夾下創建一個Raw文件夾。(3)將上一節中…

Selector的一些state使用

(一)Selector的基本狀態android:state_selected 控件選中狀態&#xff0c;可以為true或falseandroid:state_focused 控件獲得焦點狀態&#xff0c;可以為true或falseandroid:state_pressed 控件點擊狀態&#xff0c;可以為true或falseandroid:state_enabled 控件使能狀態&#…

服務框架及服務治理組件——業界調研

聲明&#xff1a;主要內容來自公司內部 對業界的調研,不一定恰當、準確、實時。 表格文字較多&#xff0c;APP閱讀體驗較差 團隊服務相關組件\方案通信框架監控負載均衡\路由是否開源騰訊完全自研&#xff1b;BG內部自治&#xff0c;每個BG有自己相應的解決方案&#xff0c;單獨…

在操作系統重啟后恢復應用程序的工作狀態

Windows 10 創意者更新之后&#xff0c;默認開啟了重啟后恢復應用程序狀態的功能。這是自 Vista 以來就提供的功能——Restart Manager。 應用程序實現這一功能只需要調用 RegisterApplicationRestart 即可。傳入兩個參數&#xff1a; 重啟后使用的命令行參數&#xff08;例如當…

裁員感悟

好員工&#xff0c;別以為裁員與你無關(上) 版權聲明&#xff1a;原創作品&#xff0c;允許轉載&#xff0c;轉載時請務必以超鏈接形式標明文章原始出版、作者信息和本聲明。否則將追究法律責任。本文地址&#xff1a;http://blog.csdn.net/jobchanceleo/archive/2007/05/26/…

php傳中文給Java_完美解決PHP中文亂碼(轉) - - JavaEye技術網站

PHP中文亂碼一般是字符集問題&#xff0c;編碼主要有下面幾個問題。一&#xff0e;首先是PHP網頁的編碼1.文件本身的編碼與網頁的編碼應匹配a.如果欲使用gb2312編碼&#xff0c;那么php要輸出頭&#xff1a;header(“Content-Type: text/html; charsetgb2312")&#xff0c…

CharSequence類

CharSequence是char類型的一個可讀序列&#xff0c;它本身是一個接口&#xff0c;CharBuffer、String、StringBuffer、StringBuilder這個四個類實現了這個接口。此接口對于不同種類的char序列提供統一的只讀訪問以下是這個函數的API 它只定義了四個方法 /*** This interface re…

程序員考核的五大死因

程序員考核的五大死因&#xff08;上&#xff09; 程序員作為企業開發力量的最核心資產&#xff0c;無疑得到公司從上至下的一致關注。開發是個智力密集型產業&#xff0c;程序開發的特點是&#xff0c;付出相同時間的情況下&#xff0c;兩個開發者之間的產能會相差十幾甚至幾…

java編寫螺旋矩陣講解_Java如何實現螺旋矩陣 Java實現螺旋矩陣代碼實例

本篇文章小編給大家分享一下Java實現螺旋矩陣代碼實例&#xff0c;小編覺得挺不錯的&#xff0c;現在分享給大家供大家參考&#xff0c;有需要的小伙伴們可以來看看。給定一個包含 m x n 個元素的矩陣(m 行, n 列)&#xff0c;請按照順時針螺旋順序&#xff0c;返回矩陣中的所有…

Vue Axios的配置 (高仿餓了么)

export default {name: "app",components: {"v-header": header},data() {return {seller: {}};},created() {let _this this; // 讓this始終代表最初this指向的對象this.axios.get(../data.json).then(function(res) {_this.seller res.data.sellercons…

PagerAdapter學習

前言: ViewGroup可以實現很多功能&#xff0c;如簡單的頁面導航和頁面滑動等等。谷歌公司為我們提供ViewGroup的API。谷歌公司推薦我們把ViewGroup和Fragment一起使,如果一起使用的話&#xff0c;應該使用FragmentPagerAdapter和FragmentStatePagerAdapter來進行適配處理&#…

arXiv網站

arXiv 原先是由物理學家保羅金斯巴格在1991年建立的網站&#xff0c; 我們會將預稿上傳到arvix作為預收錄&#xff0c;因此這就是個可以證明論文原創性&#xff08;上傳時間戳&#xff09;的文檔收錄網站。轉載于:https://www.cnblogs.com/AntonioSu/p/8387324.html

加薪——愛你在心口難開

加薪——愛你在心口難開(1) &#xff08;原文刊登于《程序員》雜志07年第4期&#xff09; 剛過了春節的4月份&#xff0c;空氣中到處透著躁動的味道&#xff0c;“求職”、“招聘”不斷刺激著程序員們的耳鼓&#xff0c;其實大多數跳槽者如果能靜下心來審視自己一下&#xf…

java線程interrupt用法_Java線程中interrupt那點事 | 學步園

1.先看一下例子程序&#xff1a;import java.io.IOException;import java.net.ServerSocket;import javax.rmi.CORBA.Tie;/**author: ZhengHaibo*web: http://blog.csdn.net/nuptboyzhb*mail: zhb931706659126.com*2014-3-16 Nanjing,njupt,China*/public class TestThread {/*…

Kotlin Native新增Objective-C互操作能力以及對WebAssembly的支持

根據JetBrains技術主管Nikolay Igotti的介紹&#xff0c;Kotlin/Native 0.4已經可用于為iOS和macOS開發原生應用。此外該版本還為WebAssembly平臺提供了實驗性支持。 \\Kotlin/Native對iOS/macOS開發的支持&#xff0c;關鍵在于實現了與Objective-C的互操作性。JetBrains目前已…

TranslateAnimation動畫

眾所周知&#xff0c;TranslateAnimation是android中重要的一個動畫函數&#xff0c;很多時候我們都需要使用它來實現更好的UI效果&#xff0c;今天就簡單研究下這個TranslateAnimation。TranslateAnimation這個位移動畫主要有三個構造函數&#xff0c;對應著三種不同的參數形式…