Я пытаюсь написать код, который позволяет мне делать обратный выбор, но я не могу понять, как это сделать.
Основная идея заключается в следующем: у меня есть вектор узла 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
не будет иметь нулевую длину.
На каждой итерации Iтакже нужно рассчитать SIC для модели, которая свела к минимуму RSS.
SIC <- log(RSS[which.min(RSS)]) + log(n)*(length(K))/(2*n)
Мне также нужно сохранить вектор, который был выбран на каждом шаге.
Что я хотел бы получить какРезультатом является ряд вложенных векторов и значение SIC для каждого из них.
Я изо всех сил пытаюсь найти решение, но все мои испытания не увенчались успехом.
Любая помощь будет принята с благодарностью,