R - 根据现有 lm 使用预测函数确定新数据的拟合优度

R - Determine goodness of fit of new data with predict function based on existing lm

我正在尝试将现有模型应用于新数据集。我试着用一个例子来解释它。我想知道确定适合度的优雅方法是什么样的。

基本上,我 运行 进行回归并获得模型。使用汇总函数,我获得了通常的输出,例如调整后的 R 平方、p 值等。

model.lm <- lm(Sepal.Length ~ Petal.Length, data = iris[1:75,])
summary(model.lm)

现在我想运行新数据的预测函数,我很想知道模型对新数据的表现如何。

pred.dat <- predict(model.lm, newdata = iris[76:150,])

我想问一下如何使用新数据获得预测值的调整 R 平方。例如,是否有类似 summary 功能的东西?理想情况下,我想找出基于新数据获得现有模型拟合优度的最佳实践。

非常感谢

可以将R-squared的公式转化为函数,如:

r_squared <- function(vals, preds) {
  1 - (sum((vals - preds)^2) / sum((vals - mean(preds))^2))
}
# Test
> r_squared(iris[76:150,]$Sepal.Length, pred.dat)
#[1] 0.5675686

基于此函数,使用正确的公式,我们还可以将 adjusted R-squared 定义为:

r_squared_a <- function(vals, preds, k) {
  1 - ((1-r_squared(vals, preds))*(length(preds)-1))/(length(preds) - k - 1)
}

其中 k 是预测变量的数量,因此:

> r_squared_a(iris[76:150,]$Sepal.Length, pred.dat, 1)
#[1] 0.5616448