我可以像这样生成分段线性样条的模型矩阵:
> k=seq(0,8,by=2)
> x=seq(0,6,by=1)
> bs(x, degree=1, knots=k, Boundary.knots=c(min(k),max(k)))
1 2 3 4 5 6
[1,] 1.0 0.0 0.0 0.0 0 0
[2,] 0.5 0.5 0.0 0.0 0 0
[3,] 0.0 1.0 0.0 0.0 0 0
[4,] 0.0 0.5 0.5 0.0 0 0
[5,] 0.0 0.0 1.0 0.0 0 0
[6,] 0.0 0.0 0.5 0.5 0 0
[7,] 0.0 0.0 0.0 1.0 0 0
但不允许使用0度样条(即步长函数):
> bs(x, degree=0, knots=k, Boundary.knots=c(min(k),max(k)))
Error in bs(x, degree = 0, knots = k, Boundary.knots = c(min(k), max(k)):
'degree' must be integer >= 1
是否有正统的方法在R中构建这些,最好是可以用作模型公式术语的方法?我确信我可以破解某些东西,但我喜欢惯用的方式,如果它存在的话。
答案 0 :(得分:0)
您可以使用cut
:
> data.frame(x,cut_x=cut(x, breaks=k,include.lowest=T))
x cut_x
1 0 [0,2]
2 1 [0,2]
3 2 [0,2]
4 3 (2,4]
5 4 (2,4]
6 5 (4,6]
7 6 (4,6]