如何让 lm 忽略 NA 列

How to make lm ignore NA columns

我正在尝试计算一组贝塔值。不幸的是,有时某些列都是 NA。这是一个玩具示例:

x = structure(c(0.946032318625641, -0.472255854964591, -0.570914946839299, -0.624246840976067, -0.484359645048786, 0.888922481497905, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), .Dim = c(6L, 3L), .Dimnames = list(c("AAPL", "AXP", "BA", "CAT", "CSCO", "CVX"), c("TV", "HG", "PT")))
y = structure(c(0.0519592742218189, 0.0148741387994269, 0.0646644308305699, 0.0406382502886822, 0.0454770268265812, 0.0403287646059043), .Names = c("AAPL", "AXP", "BA", "CAT", "CSCO", "CVX"))
b = lm(y ~ x)$coefficients

如何让 lm 忽略这些?我不介意某些测试版以 NA.

的形式回归

我猜你的主要问题是如何实现良好的对齐。看起来你正在用一个循环拟合许多线性模型。设计矩阵的维度保持不变,但不同的列可能会突然消失,即在不同的迭代中变为 NA。最后,您需要一个漂亮的系数矩阵,为那些消失的列填充 NA。

一个简单的解决方案是用零列替换那些 NA 列。这样,设计矩阵是秩亏的,那些零列的系数将为 NA。