Написать цикл для обратного выбора - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь написать код, который позволяет мне делать обратный выбор, но я не могу понять, как это сделать.

Основная идея заключается в следующем: у меня есть вектор узла 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 для каждого из них.

Я изо всех сил пытаюсь найти решение, но все мои испытания не увенчались успехом.

Любая помощь будет принята с благодарностью,

...