Как добавить новые столбцы в набор данных для каждой итерации цикла регрессии? - PullRequest
1 голос
/ 20 сентября 2019

Я пытаюсь проверить предсказательную силу модели, разбив наблюдения на 1/4-ю и 3/4-ю группы (тестирование и обучение соответственно), выполняя регрессию первого порядка с независимой переменной выборкой поезда, используя этикоэффициенты для получения прогнозных значений из тестовой выборки независимых переменных, а затем я хотел бы добавить новые столбцы этих прогнозных значений в тестовые данные зависимых переменных для каждой итерации цикла.

Для контекста: TSIP500 - полная выборка;iv является независимой переменной;dv является зависимой переменной, максимум 50 итераций - это просто тест, который не слишком велик по количеству итераций.

У меня были проблемы с функцией прогнозирования, поэтому я выполнил уравнение вручную.Мой код ниже:

for(i in 1:50){
  test_index <- sample(nrow(TSIP500iv), (1/4)*nrow(TSIP500iv), replace=FALSE)
  train_500iv <- TSIP500[-test_index,"distance"]
  test_500iv <- TSIP500[test_index,"distance"]
  train_500dv <- TSIP500[-test_index,"percent_of_max"]
  test_500dv <- TSIP500[test_index,"percent_of_max"]
  reg_model <- lm(train_500dv~train_500iv)
  int <- reg_model$coeff[1]
  B1 <- reg_model$coeff[2]
  predicted <- (int + B1*test_500iv)
  predicted <- data.frame(predicted)
  test_500dv <- data.frame(test_500dv)
  test_500dv[,i] <- apply(predicted)
}

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

1 Ответ

0 голосов
/ 20 сентября 2019
for(i in 1:50){
  test_index <- sample(nrow(TSIP500iv), (1/4)*nrow(TSIP500iv), replace=FALSE)
  train_500iv <- TSIP500[-test_index,"distance"]
  test_500iv <- TSIP500[test_index,"distance"]
  train_500dv <- TSIP500[-test_index,"percent_of_max"]
  test_500dv <- TSIP500[test_index,"percent_of_max"]
  reg_model <- lm(train_500dv~train_500iv)
  int <- reg_model$coeff[1]
  B1 <- reg_model$coeff[2]
  temp_results <- paste('pred',i,sep='_')
  assign(temp_results, as.data.frame(int + B1*test_500iv))
  test_500dv <- cbind(data.frame(test_500dv),temp_results)
}
...