2017-07-26 47 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.