经典线性模型-模型选择


16

我有一个经典的线性模型,带有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编号。我们被要求“推导适当的模型,给出理由”。


6
可以采用一个适当的模型来表示一个模型,该模型可以有效地使用所有预先指定的变量(考虑非线性等)。希望您的老师知道逐步选择变量无效。很少这样做。
弗兰克·哈雷尔

1
再次嗨,谢谢。对不起,所有来回。这些说明还说:“不一定有一个“最佳”模型,您不一定必须包括所有预测变量”。而且,不存在共线性或非线性。实际上,所有5个预测变量都是通过正态分布的独立模拟生成的。因此,预测变量和响应之间的相关性也很小(最大值小于0.1)。坦率地说,我的直觉说“最佳”模型可能只是样本均值(调整后的r平方小于0.03)
P Sellaz 2011年

@P Sellaz:鉴于这是使用模拟数据的作业,因此您的直觉可能会为您带来好处。为您的直觉写一个合理的解释。
Zach

1
通常情况下,您无法接受,因为多大取决于上下文。但是根据准确地执行模拟的方式,您是正确的,总体均值可能是所需的。R2
Frank Harrell

1
总的来说,做一个好工作并不需要包括所有预测变量,这是正确的。但是数据无法告诉您要使用哪些预测变量。
Frank Harrell

Answers:


18

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

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

有关更多信息,请参见http://www.stata.com/support/faqs/stat/stepwise.html


1
感谢您的回复。我添加了一个原始问题的编辑。我希望可以。任何进一步的建议将是最欢迎的。
P Sellaz

6

一个答案将是“没有主题知识就无法做到”。不幸的是,这很可能会使您在任务上得到F。除非我是你的教授。然后它将得到一个A。

但是,鉴于您的陈述为0.03且所有变量之间的相关性都很低,我感到困惑的是,任何模型都非常重要。什么是N?我猜它很大。[R2

然后有

所有5个预测变量都是通过正态分布的独立模拟生成的。

好吧,如果您知道这一点(即您的讲师告诉您),并且如果“独立”是指“与DV不相关”,那么您知道最佳模型是没有预测因子的模型,您的直觉是正确的。


嗨,彼得,谢谢。N是900。所有数据都是通过模拟生成的。我知道这一点,因为我们必须自己进行模拟。就本作业而言,它们应该代表真实数据。进行了100次仿真,并选择了与响应相关性最大的5个(也进行了仿真,但只有一次)作为候选回归指标。
P Sellaz

1
只需确定您要模拟X和Y之间没有任何联系即可。然后就像其他人所说的那样,回归模型无关紧要,总体均值就足够了。
弗兰克·哈雷尔

1
是的,它们是完全独立的。我们选择了具有最大5个相关性的数据作为候选回归变量,我们必须从中“推导适当的模型,给出理由”,但“不一定要包括所有5个预测变量”。
P Sellaz

听起来您的教授要么是a)完全困惑,要么是b)做一些非常有趣的事情。很难说。如果他/她打算以此显示@FrankHarrell和我以及其他人指出的事情,那就好!(可能是b)。OTOH,如果他/她打算将其作为“真实”回归,那么呃,哦,这是a)。
彼得·弗洛姆

1
当文件标记上标签时,我会通知您:)
P Sellaz

4

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

请参阅David Freedman撰写的关于筛选回归方程注释,以对此方法进行一些可爱的模拟。


2

我真的很喜欢该caret包中使用的方法:递归功能消除。您可以在小插图中了解更多信息,但这是基本过程: 变量选择

基本思想是使用准则(例如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个。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.