Написание перекрестной проверки в R - PullRequest
0 голосов
/ 12 сентября 2018

Я новичок в статистике, и я впервые делаю регрессионную модель с использованием R. Я сделал базовое разделение 70/30 для простой модели lm, и я хотел бы сейчас написать код для перекрестной проверки, без использование каретного пакета. Вот мой код:

cv_ss <- model2[sample(nrow(model2)),]
folds <- cut(seq(1,nrow(cv_ss)),breaks=6, labels = FALSE)
for(i in 1:6){
  testIndexes <- which(folds==i,arr.ind = FALSE)
  testData <- cv_ss[testIndexes, ]
  trainData <- cv_ss[-testIndexes, ]
  model_cv_ss <- lm(trainData$ss ~., data = trainData)
  summary(model_cv_ss)
  pred_cv_ss<-predict(model_cv_ss,testData)
  actual_cv_ss<-testData[,"ss"]

  MAPE_ss = mean(abs((pred_cv_ss - actual_cv_ss)/actual_cv_ss))
  MAPE_ss

  error_ss = abs((pred_cv_ss- actual_cv_ss)/actual_cv_ss)
  error_ss
  save_ss<- rbind(save_ss, new)
}
new <- data.frame(MAPE_ss, error_ss)
#}
#save_ss<- rbind(save_ss, new)
save_ss

avg_error_ss <- mean(MAPE_ss)
avg_error_ss

Вот мои результаты:

 MAPE_ss   error_ss
11  0.4012435 0.01960784
10  0.4012435 0.20384160
7   0.4012435 0.70386888
151  0.4012435 0.67765551
.
.
.

Я очень смущен, потому что: У меня есть только 21 наблюдение, но наблюдения могут сосчитать до 151. Но в глобальной среде говорится только о 21 наблюдении. Во-вторых, все мои MAPE_ss одинаковы, что, я думаю, не должно иметь место, поскольку каждый фолд получает разные данные, поэтому MAPE_ss должен быть разным.

Поправь меня, если я ошибаюсь.

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

Edit: тусклый (model2)

> dim(model2)
[1] 25 13

dput (глава (model2))

> dput(head(model2,20))
structure(list(ï..SST = c(0, 
0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1), SSA = c(0, 
0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0), SSR = c(0, 
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0), SSC = c(0, 
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0), SSF = c(1, 
1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1), SSFH = c(0, 
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0), SSTC = c(1, 
1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0), SSH = c(1, 
1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1), SSC = c(1, 
1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1), SSW = c(0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), QTY = c(109, 
45, 48, 49, 31, 81, 13, 48, 109, 45, 48, 49, 31, 81, 13, 48, 
36, 47, 58, 37), SS = c(53000, 47000, 5e+05, 
450000, 62000, 950000, 660000, 1060000, 530000, 480000, 520000, 
430000, 630000, 970000, 650000, 1090000, 1230374, 1695561, 981224, 
1130354), TTH. = c(60, 45, 45, 45, 45, 90, 90, 90, 
60, 45, 45, 45, 45, 95, 90, 90, 60, 90, 40, 65)), row.names = c(NA, 
20L), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...