gpt4 book ai didi

r - 飞跃 : Running all possible linear models

转载 作者:行者123 更新时间:2023-12-02 08:25:54 35 4
gpt4 key购买 nike

我正在尝试使用 R 包 leaps 在单个因变量和超过 50 个可能的预测变量上运行所有可能的回归模型组合——所有可能的大小。每个变量都是一个包含大约 50 个数值的向量。

这是我尝试过但没有成功的方法:

vars <- c("var1", "var2", "var3", ... , "var60")
xs <- as.formula(paste("yvar ~ ", paste(vars, collapse="+")))
model1 <- regsubsets(x=xs, y=yvar, really.big=TRUE,
method="exhaustive", data=data)
summary(model1)

我收到的错误是:

Warning message:
In leaps.setup(x, y, wt = wt, nbest = nbest, nvmax = nvmax, force.in = force.in,:
15 linear dependencies found

最佳答案

这里有几个问题与您尝试做的事情有关,一些是计算性的,一些是统计性的。评论中已经提到了一些,但我认为将它们全部放在一个答案中是很好的。

首先,对于 50 个可能的预测变量,有 $2^50$ 个可能的模型(当以 10 为基数表示时,这是一个 16 位数字):

> 2^50
[1] 1.1259e+15

虽然算法中有一些不错的捷径,但每个可能的模型仍然需要一些时间来计算(以及一些内存来存储结果)。如果我们假设您的计算机每秒可以计算 100,000 个模型,那么它只需要 356 年以上的时间就可以完成(假设您的计算机没有开始交换内存来保留所有结果,这确实会减慢速度):

> 2^50/100000/60/60/24/365.24
[1] 356.7859

所以我建议坚持使用“最佳”模型,而不是尝试适应所有可能的模型。

另一个问题(这是导致警告消息的原因)是,如果您只有 50 个观测值(“每个变量是一个包含大约 50 个数值的向量”),那么您可以唯一估计的绝对最大斜率数 (假设您还拟合了一个截距)是 49,但是您正试图在最完整的模型中拟合 50 个斜率,因此所涉及的矩阵保证是奇异的。即使限制为 49 个预测变量也不允许估计误差方差。一个常见的经验法则表明,您应该尝试为每 10 个观测值拟合不超过 1 个预测变量,以便获得对斜率和标准误差的合理估计,这意味着您实际上应该只使用最多 5 个预测变量模型(如果您确实有50 个观察值,您描述中的“大约”意味着缺失值或其他问题可能会使这个值变得更少)。

从最佳子集回归中学到的最好的东西不是“最佳”模型是什么,而是很少有“最佳”模型,并且多个模型可能具有类似的良好属性。更好的方法可能是使用 Lasso/LARS 样式拟合(取决于您真正想要回答的问题)。

future 的一些编程技巧:

了解用于指定模型的 y ~ . 方法,这可能使您无需担心使用 pasteas.formula.

引用您的数据名称,请参阅 fortune(77)

关于r - 飞跃 : Running all possible linear models,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32213547/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com