R交叉验证lm预测功能

我现在正在做的交叉验证有问题。我有一个数据集,将其随机分为4个部分,从中选择3个作为回归模型,然后使用左第4个模型为目标值建模。到目前为止,我一直使用手动方法,但这需要大量工作,因此我想尝试使用lm中的预测函数。但是当我比较这些值时,我永远不会得到相同的结果。

这是我的数据集:

df = mtcars
subs = 4
set.seed(5)
idx <- gl(n = subs,round(nrow(df)/subs)) 
df = split(df,sample(idx))
names(df) = c("S1","S2","S3","S4")

df_split= rbind(df$S1,df$S2)
df_split = rbind(df_split,df$S3)

我正在像这样进行回归:

Regression <- lm(df_split$mpg ~ df_split$cyl + df_split$disp + df_split$hp + df_split$drat + df_split$wt
                 + df_split$qsec)

summary(Regression)
StepRegression = step(Regression,direction="both")
finalmod = as.character(StepRegression$call)[2]
OptiRegression = lm(finalmod)
Regression_Summary= as.data.frame (summary(OptiRegression)$coefficient)
Regression_Summary$RSquared = summary(OptiRegression)$r.squared
Regression_Summary$AdjRSquared = summary(OptiRegression)$adj.r.squared

现在这是我手动计算第4个子集的mpg的方法:

gridnames = str_sub(rownames(Regression_Summary)[-1],start = 10)

Model_manual <- ((as.matrix(df$S4[,gridnames]) %*%
                 Regression_Summary[-1,1]) + Regression_Summary[1,1])[,1]

Model_manual = as.data.frame(Model_manual)

Model_manual 
    Datsun 710       25.23129
    Merc 280         19.72129
    Merc 280C        19.72129
    Merc 450SL       16.11353
    Merc 450SLC      15.97497
    Fiat 128         25.96176
    Toyota Corolla   26.98801
    Porsche 914-2    25.75960

我尝试过使用prepare()函数来避免过多的工作。但是我从来没有得到相同的结果,而且我总是得到警告和不同的长度。

predict(OptiRegression,df$S4[,gridnames],type = "response")
 1        2        3        4        5        6        7        8        9       10       11       12       13 
22.18532 16.99089 11.53276 10.90318 27.78928 15.86852 16.42750 20.81169 20.53641 15.59900 15.17130 24.77051 17.13763 
      14       15       16       17       18       19       20       21       22       23       24 
14.85076 14.27263 23.72070 21.47865 19.93114 23.27714 22.90166 10.90105 17.37318 26.69614 27.17296

我做错了什么?我很确定我的手动方法是正确的。有人可以给我一些支持吗?

net00111 回答:R交叉验证lm预测功能

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3115826.html

大家都在问