"Force" 在 R 中对数据建模? (线性回归)
"Force" model onto data in R? (Linear Regression)
我一直在自学 Andy Field 使用 R 发现统计数据并且遇到了这段话:
Data splitting: This approach involves randomly splitting your data
set, computing a regression equation on both halves of the data and
then comparing the resulting models. When using stepwise methods,
cross-validation is a good idea; you should run the stepwise
regression on a random selection of about 80% of your cases. Then
force this model on the remaining 20% of the data. By comparing values
of the R2 and b-values in the two samples you can tell how well the
original model generalizes (see Tabachnick & Fidell, 2007, for more
detail).
好吧,我了解对数据进行子集化(使用 sample()
),并且我知道如何拟合线性模型 (using lm()
),但是这条线
"Then force this model on the remaining 20% of the data"
让我困惑。
本书不再提及此技巧。 R 中是否有一些函数允许您将模型强制应用于数据并使用该强制模型计算 R^2
和 b-values
?也许在某些函数中,您将截距和斜率系数输入其中,它会输出类似 summary(lm)
的内容?
还是我没有理解这段话想表达的意思?
您使用预测函数,使用新数据。
我手边没有书,所以我不能告诉你确切的例子,但是如果你剩下的 20% 的数据是一个名为 'holdout' 的数据框,而你的回归模型被称为 'reg1' 然后使用:
holdout$pred <- predict(reg1, newdata=holdout)
然后您可以通过查看预测分数与原始结果分数之间的相关性来计算 $R^2$。如果结果称为'out',则:
cor(holdout$pred, holdout$out)^2
应该可以解决问题。
我支持 Jeremy 所说的。这是一个包含一些虚构数据的示例,您可以 运行 感受一下:
set.seed(26)
mydf = data.frame (a=1:20 , b = rnorm(20), c = 1:20 + runif(20), d = 1:20 + runif(1:20)*sin(1:20))
trainRows<-sample(1:20, 16)
mydf.train<-mydf[trainRows,]
mydf.test<-mydf[-trainRows,]
myModel<-lm(a~., data = mydf.train)
model1<-step(myModel)
summary(model1)
mydf.test$pred<-predict(model1, newdata = mydf.test)
cor(mydf.test$pred, mydf.test$a)^2
#[1] 0.9999522
我一直在自学 Andy Field 使用 R 发现统计数据并且遇到了这段话:
Data splitting: This approach involves randomly splitting your data set, computing a regression equation on both halves of the data and then comparing the resulting models. When using stepwise methods, cross-validation is a good idea; you should run the stepwise regression on a random selection of about 80% of your cases. Then force this model on the remaining 20% of the data. By comparing values of the R2 and b-values in the two samples you can tell how well the original model generalizes (see Tabachnick & Fidell, 2007, for more detail).
好吧,我了解对数据进行子集化(使用 sample()
),并且我知道如何拟合线性模型 (using lm()
),但是这条线
"Then force this model on the remaining 20% of the data"
让我困惑。
本书不再提及此技巧。 R 中是否有一些函数允许您将模型强制应用于数据并使用该强制模型计算 R^2
和 b-values
?也许在某些函数中,您将截距和斜率系数输入其中,它会输出类似 summary(lm)
的内容?
还是我没有理解这段话想表达的意思?
您使用预测函数,使用新数据。
我手边没有书,所以我不能告诉你确切的例子,但是如果你剩下的 20% 的数据是一个名为 'holdout' 的数据框,而你的回归模型被称为 'reg1' 然后使用:
holdout$pred <- predict(reg1, newdata=holdout)
然后您可以通过查看预测分数与原始结果分数之间的相关性来计算 $R^2$。如果结果称为'out',则:
cor(holdout$pred, holdout$out)^2
应该可以解决问题。
我支持 Jeremy 所说的。这是一个包含一些虚构数据的示例,您可以 运行 感受一下:
set.seed(26)
mydf = data.frame (a=1:20 , b = rnorm(20), c = 1:20 + runif(20), d = 1:20 + runif(1:20)*sin(1:20))
trainRows<-sample(1:20, 16)
mydf.train<-mydf[trainRows,]
mydf.test<-mydf[-trainRows,]
myModel<-lm(a~., data = mydf.train)
model1<-step(myModel)
summary(model1)
mydf.test$pred<-predict(model1, newdata = mydf.test)
cor(mydf.test$pred, mydf.test$a)^2
#[1] 0.9999522