2017-07-26 49 views
0

我試圖在R中使用the spline2 package來構建單調樣條。R中的單調樣條

我在評估自變量新值的模型時遇到了麻煩。一般來說,我很難掌握R預測的「預測」處理及其與spline2的關係,以及如何使用生成的bs對象。

我試圖關注使用spline1的this example。我的數據是在一個名爲BRIyII數據幀,具有獨立的變量t和相關的變量P這樣:

plot(BRIyII$t,BRIyII$P) 

產量: enter image description here

所以我做的:

knots=c(9) 
myMat=mSpline(BRIyII$t, knots = knots, degree = 3, intercept = TRUE) 
mylm=lm(BRIyII$P~myMat) 

現在,如果我們:

pr = predict(mylm,data.frame(BRIyII$t)) 
points(BRIyII$t,pr,col = "red") 

它產生: enter image description here

所以我的問題是:

1由於最右邊的預測值(紅點)是一個比它的左下方,我誤解m個樣條線的「單調」的性質?

2-我怎樣才能評估樣品中除BRIyII $ t中定義的值以外的值?我嘗試了幾種東西的組合,但我缺乏R語法知識。我會理想地想要做這樣的事情:

newdata=seq.int(0,41.5,0.1) 
+0

我不知道的單調性問題。事實上,當我用'mSpline'和另一個'bs'(使用內置的'mtcars'數據框)進行迴歸時,我得到的係數完全相同。關於預測:首先,你可以像這樣在一行中進行迴歸:'mylm = lm(P_mSpline(t,knots = knots,degree = 3,intercept = TRUE),data = BRIyII)''。 – eipi10

+1

其次,爲了預測你用來擬合模型的數據,你可以做'預測(mylm)',它會自動使用用來擬合模型的數據幀。爲了預測預測變量的其他值,需要用新值對數據幀進行預測(並且新數據幀中的列名必須與用於擬合模型的數據幀中的列名相匹配)。例如,預測(mylm,newdata = data.frame(t = seq(0,41.5,0.1)))'。 – eipi10

+0

感謝至少解決了「易」的部分! :) – cladelpino

回答

2

我會解決問題#1,因爲問題#2在評論中提到。

splines2文檔提到M-spline基礎爲「單調回歸樣條」基礎,但我認爲這是誤導。估計單調回歸樣條的方法是使用I樣條基礎,,限制條件是迴歸係數是非負的。 I樣條是M樣條的積分,因此是非遞減的。因此,它們的任何非負線性組合也將不減少。因此,您可以使用splines2 :: iSpline以及像nnls :: nnls這樣的非負迴歸方法來估計單調回歸函數。

對於M-樣條的解釋,我樣條和單調回歸,退房:

Ramsay, JO (1988) Monotone regression splines in action. Statistical Science 3(4), 425-461.