lm() R 函数中的 subset() 函数是否可以用于仅删除某些变量的观察值?

Can the subset() function within the lm() R function can be used to remove observations only of certain variables?

我不确定我的问题是否有意义。但是,我正在考虑使用时间序列数据修改计量经济学模型。这是一个多元回归。自变量之一是 5 年期国债利率。该变量分为两个时间段。第一个变量是 1950 年到 1986 年的 5 年期国债利率。1986 年以后这个变量取值为 0。第二个变量是 1986 年到现在的 5 年期国债利率。在 1986 年之前,这第二个变量的值为 0。有人建议我将 0 值替换为空白(相当于缺失数据)。因为正如建议的那样,这些变量的含义应该可以更好地指定。你能用 subset() 函数做到这一点吗?换句话说,您是否可以在不实际删除或忽略整行数据的情况下从这些变量中删除或忽略 0 值,并从其他自变量中删除所有值。我知道这个编码问题取决于这个过程是否有意义。我不确定是否如此。我已经通过交叉验证的理论问题。但是,我不确定我会得到任何答复。我想我会继续在这里问编码问题。

假设您的数据在数据框中,答案是 "no." 您不能仅对 data.frame 的一部分使用 subset。这是因为 subset 在一个数据帧上 return 是另一个数据帧,并且在一个数据帧中所有变量的长度必须相同。

有很多方法可以解决此限制,但它们不适用于 lm。想想回归是如何工作的:必须充分观察每一次观察。如果您有缺失数据,您有以下三种选择:

  1. 删除缺少数据的观测值。这称为列表删除,它是 lm 中的默认设置(通过 na.omit 函数,隐藏在 model.matrix 函数中,它位于 lm 中)
  2. 填补缺失的数据。这是一个庞大的领域和活跃的研究领域
  3. 使用某种其他方法,例如可以整合缺失数据的贝叶斯模型

您应该能够从 Cross Validated 获得这方面的帮助。但事实是,根本没有办法在不等长的变量上使用 lm,也没有办法得到 subset 到 return 包含不等长变量的数据框,因为数据框中的所有变量必须具有相同的长度。