我正在尝试编写一个允许我进行向后选择的代码,但我不知道该怎么做。
基本思想如下:
我有一个结向量K
,该向量用于使用软件包bs
中的splines
函数来构造基本函数。
我想做的是按照以下方式从向量K
中消除一个结。
我删除向量的第i个观测值,即i = 1,2,...,length(K),用所得向量构建基础,并估计每个模型的平方余数和。之后,我用较小的RSS拾取一个,估计SIC并重新启动过程。
到目前为止,我所做的是:
library(splines)
x <- seq(0, 1, 1000)
y <- 2*sin(4*pi*x) - 6*abs(x - 0.4)^0.3 - 0.5*sign(0.7 - x) + rnorm(1000, 0, 0.1)
bound <- c(0, 1)
K <- seq(0, 1, length.out = 60)[-c(1, 60)]
for (i in 1:length(K))
RSS[i] <- sum((y - lm(y ~ bs(x, knots = K[-i], Boundary.knots = bound, degree = 2, intercept = T) - 1)$fitted.values)^2)
K <- K[-which.min(RSS)
(这只是一次迭代,应重复此过程)
问题在于向量K
的大小在每次迭代中都会变化,我真的不知道让R考虑一下(有点像在mathlab中将其设置为全局变量)。
在第二步中,我抓取这个“修剪的” K
并重复该过程,删除第i个组件,选择一个最小化RSS的组件,并继续直到K
的长度为零。
在每次迭代中,我还必须计算最小化RSS的模型的SIC。
SIC <- log(RSS[which.min(RSS)]) + log(n)*(length(K))/(2*n)
我还需要存储在每个步骤中选择的向量。
作为结果,我想获得的是一系列嵌套向量和每个向量的SIC值。
我正在努力寻找解决方案,但是我所有的尝试都失败了。
任何帮助将不胜感激。