经典线性模型-模型选择

机器算法验证 r 回归 自习 线性模型
2022-01-23 01:25:15

我有一个经典的线性模型,有 5 个可能的回归器。它们彼此不相关,并且与响应的相关性很低。我已经得出一个模型,其中 3 个回归变量的 t 统计量具有显着系数(p<0.05)。对于添加的变量,添加剩余 2 个变量中的一个或两个变量会使 t 统计量的 p 值 >0.05。这让我相信 3 变量模型是“最好的”。

但是,在 R 中使用 anova(a,b) 命令,其中 a 是 3 变量模型,b 是完整模型,F 统计量的 p 值 < 0.05,这告诉我更喜欢完整模型而不是 3 变量模型。我怎样才能调和这些明显的矛盾?

谢谢 PS 编辑:一些进一步的背景。这是作业,所以我不会发布细节,但我们没有得到回归量代表什么的细节——它们只是编号为 1 到 5。我们被要求“推导出一个合适的模型,给出理由”。

4个回答

当您寻求简化模型并使用数据而不是主题知识来选择预测变量时,问题就开始了。尽管经常使用,但没有同时缩小以惩罚变量选择的逐步变量选择是一种无效的方法。关于这一点已经写了很多。没有理由相信 3 变量模型是“最好的”,也没有理由不使用预先指定的预测变量的原始列表。使用 P 值选择变量后计算的 P 值无效。这在功能成像文献中被称为“双重浸渍”。

这是一个类比。假设有人对比较 6 种治疗方法感兴趣,但使用成对 t 检验来选择哪些治疗方法“不同”,从而减少了 4 种治疗方法。然后分析人员用 3 个自由度测试总体差异。这个 F 检验将有夸大的 I 型错误。具有 5 df 的原始 F 检验非常有效。

请参阅http://www.stata.com/support/faqs/stat/stepwise.html了解更多信息。

一个答案是“没有主题知识就无法做到这一点”。不幸的是,这可能会让你的作业获得 F。除非我是你的教授。然后它会得到一个A。

但是,鉴于你的说法R2是 0.03 并且所有变量之间的相关性很低,我对任何模型都显着感到困惑。什么是N?我猜它非常大。

然后有

所有 5 个预测变量均由正态分布的独立模拟生成。

好吧,如果您知道这一点(即您的教练告诉您)并且如果“独立”是指“与 DV 无关”,那么您就知道最好的模型是没有预测变量的模型,并且您的直觉是正确的。

您可以尝试进行交叉验证。选择样本的一个子集,使用 F 或 t 检验找到该子集的“最佳”模型,然后将其应用于完整数据集(完全交叉验证可能比这更复杂,但这将是一个好的开始)。这有助于缓解一些逐步测试的问题。

请参阅David Freedman 的A Note on Screening Regression Equations以获得对这个想法的一个可爱的小模拟。

我真的很喜欢caret包中使用的方法:递归特征消除。您可以在vignette中阅读更多相关信息,但这是基本过程: 变量选择

基本思想是使用一个标准(例如 t 统计量)来消除不重要的变量,并看看它如何提高模型的预测准确性。您将整个事物包装在重新采样循环中,例如交叉验证。这是一个示例,使用线性模型以类似于您所描述的方式对变量进行排名:

#Setup
set.seed(1)
p1 <- rnorm(50)
p2 <- rnorm(50)
p3 <- rnorm(50)
p4 <- rnorm(50)
p5 <- rnorm(50)
y <- 4*rnorm(50)+p1+p2-p5

#Select Variables
require(caret)
X <- data.frame(p1,p2,p3,p4,p5)
RFE <- rfe(X,y, sizes = seq(1,5), rfeControl = rfeControl(
                    functions = lmFuncs,
                    method = "repeatedcv")
                )
RFE
plot(RFE)

#Fit linear model and compare
fmla <- as.formula(paste("y ~ ", paste(RFE$optVariables, collapse= "+")))
fullmodel <- lm(y~p1+p2+p3+p4+p5,data.frame(y,p1,p2,p3,p4,p5))
reducedmodel <- lm(fmla,data.frame(y,p1,p2,p3,p4,p5))
summary(fullmodel)
summary(reducedmodel)

在这个例子中,算法检测到有 3 个“重要”变量,但它只得到了其中的 2 个。