2013-01-15 42 views
6

非線性迴歸我有一個問題,這也許比一個直接關係到爲r的統計查詢,但是這可能是因爲我只是調用的R包不正確,因此我將張貼問題在這裏。我有以下數據集:分段線性和R中

x<-c(1e-08, 1.1e-08, 1.2e-08, 1.3e-08, 1.4e-08, 1.6e-08, 1.7e-08, 
1.9e-08, 2.1e-08, 2.3e-08, 2.6e-08, 2.8e-08, 3.1e-08, 3.5e-08, 
4.2e-08, 4.7e-08, 5.2e-08, 5.8e-08, 6.4e-08, 7.1e-08, 7.9e-08, 
8.8e-08, 9.8e-08, 1.1e-07, 1.23e-07, 1.38e-07, 1.55e-07, 1.76e-07, 
1.98e-07, 2.26e-07, 2.58e-07, 2.95e-07, 3.25e-07, 3.75e-07, 4.25e-07, 
4.75e-07, 5.4e-07, 6.15e-07, 6.75e-07, 7.5e-07, 9e-07, 1.15e-06, 
1.45e-06, 1.8e-06, 2.25e-06, 2.75e-06, 3.25e-06, 3.75e-06, 4.5e-06, 
5.75e-06, 7e-06, 8e-06, 9.25e-06, 1.125e-05, 1.375e-05, 1.625e-05, 
1.875e-05, 2.25e-05, 2.75e-05, 3.1e-05) 

y2<-c(-0.169718017273307, 7.28508517630734, 71.6802510299446, 164.637259265704, 
322.02901173786, 522.719633360006, 631.977073772459, 792.321270345847, 
971.810607095548, 1132.27551798986, 1321.01923840546, 1445.33152600664, 
1568.14204073109, 1724.30089942149, 1866.79717333592, 1960.12465709003, 
2028.46548012508, 2103.16027631327, 2184.10965255236, 2297.53360080873, 
2406.98288043262, 2502.95194879366, 2565.31085776325, 2542.7485752473, 
2499.42610084412, 2257.31567571328, 2150.92120390084, 1998.13356362596, 
1990.25434682546, 2101.21333152526, 2211.08405955931, 1335.27559108724, 
381.326449703455, 430.9020598199, 291.370887491989, 219.580548355043, 
238.708972427248, 175.583544448326, 106.057481792519, 59.8876372379487, 
26.965143266819, 10.2965349811467, 5.07812046132922, 3.19125838983254, 
0.788251933518549, 1.67980552001939, 1.97695007279929, 0.770663673279958, 
0.209216903989619, 0.0117903221723813, 0.000974437796492681, 
0.000668823762763647, 0.000545308757270207, 0.000490042305650751, 
0.000468780182460397, 0.000322977916070751, 0.000195423690538495, 
0.000175847622407421, 0.000135771259866332, 9.15607623591363e-05) 

其中當情節看起來像這樣: Segmentation test http://i48.tinypic.com/25pltoy.png

我已經然後試圖使用分割包中的三個區域,以產生三個線性迴歸(黑色實線)(10因爲我有在這些不同地區找到不同關係的理論基礎。但是很顯然使用下面的代碼我的嘗試是不成功的:

lin.mod <- lm(y2~x) 
segmented.mod <- segmented(lin.mod, seg.Z = ~x, psi=c(0.0000001,0.000001)) 

因此我的第一question-是分割的有更多的參數,我可以比斷點調整其他?據我所知,我已將迭代設置爲默認最大值。

我的第二個問題是:我能使用NLS包可能試圖分割?它看起來好像在圖上所述第一兩個區域(10 ^⁻8--10^⁻7和10^-7--10^-6)是進一步從線性那麼最終的部分,因此可能是一個多項式函數將是更好這裏?

作爲一個結果的例子,我覺得可以接受我已經用手標註了原始圖: Annotated segmentation example http://i45.tinypic.com/zjb439.jpg

編輯:之所以使用線性擬合是他們提供的簡單,我外行眼裏它需要一個相當複雜的非線性函數退步數據集爲一個單元。我想到的一個想法是爲數據擬合一個對數正態模型,因爲這可能會沿着一個對數x軸傾斜。我沒有足夠的權限在R做這件事,但是我的知識只能延伸到fitdistr,據我所知,這種做法在這裏不起作用。

在相關方向的任何幫助或指導將是非常讚賞。

回答

4

如果您對segmented軟件包不滿意,您可以試用earth軟件包,並使用火星軟件算法。但在這裏,我發現分段模型的結果是非常可接受的。請參閱下面的R-Squared。

lin.mod <- lm(y2~x) 
segmented.mod <- segmented(lin.mod, seg.Z = ~x, psi=c(0.0000001,0.000001)) 
summary(segmented.mod) 

Meaningful coefficients of the linear terms: 
       Estimate Std. Error t value Pr(>|t|)  
(Intercept) -2.163e+02 1.143e+02 -1.893 0.0637 . 
x   4.743e+10 3.799e+09 12.485 <2e-16 *** 
U1.x  -5.360e+10 3.824e+09 -14.017  NA  
U2.x   6.175e+09 4.414e+08 13.990  NA  

Residual standard error: 232.9 on 54 degrees of freedom 
Multiple R-Squared: 0.9468, Adjusted R-squared: 0.9419 

Convergence attained in 5 iterations with relative change 3.593324e-14 

您可以通過繪製模型檢查結果:

plot(segmented.mod) 

enter image description here

要獲得該地塊的係數,你可以這樣做:

 intercept(segmented.mod) 
$x 
              Est. 
intercept1 -216.30 
intercept2 3061.00 
intercept3   46.93 

> slope(segmented.mod) 
$x 
             Est.   St.Err.  t value  CI(95%).l  CI(95%).u 
slope1  4.743e+10 3.799e+09  12.4800  3.981e+10  5.504e+10 
slope2 -6.177e+09 4.414e+08 -14.0000 -7.062e+09 -5.293e+09 
slope3 -2.534e+06 5.396e+06  -0.4695 -1.335e+07  8.285e+06 
+0

阿怪我無法讓它第一次工作。感謝提示以及獲取係數等的額外信息。出於興趣,您是否知道我可能會如何處理這類數據的對數正態分佈?這可能需要一個單獨的問題,但如果有一個快速的解決方法,我想我會在這裏添加它作爲評論。再次感謝。 – user1912925