编辑
我发现了一些关于这个问题的更好的信息。
如果预测变量完全相关,您可以获得NA 系数。这似乎是一个不寻常的情况,因为我们只有一个预测变量。所以在这种情况下,dt 似乎与截距线性相关。
我们可以使用alias 找到线性因变量。见https://stats.stackexchange.com/questions/112442/what-are-aliased-coefficients
在第一个例子中
test<-data.frame(dt=c(36996616, 36996620, 36996623, 36996626), value=c(1,2,3,4))
fit1 <- lm(value ~ dt, test)
alias(fit1)
Model :
value ~ dt
没有线性相关项。但在第二个例子中
test$dt <- test$dt + 1
fit2 <- lm(value ~ dt, test)
alias(fit2)
Model :
value ~ dt
Complete :
[,1]
dt 147986489/4
这似乎显示了dt 和intercept 之间的线性相关关系。
有关lm 如何处理降阶模型的其他信息:https://stat.ethz.ch/pipermail/r-help/2002-February/018512.html。
lm 不会反转 X'X https://stat.ethz.ch/pipermail/r-help/2008-January/152456.html,但我仍然认为下面有助于显示 X'X 的奇异性。
x <- matrix(c(rep(1, 4), test$dt), ncol=2)
y <- test$value
b <- solve(t(x) %*% x) %*% t(x) %*% y
Error in solve.default(t(x) %*% x) :
system is computationally singular: reciprocal condition number = 7.35654e-30
lm.fit中的默认tol是1e-7,这是qr分解中计算线性依赖的容差。
qr(t(x) %*% x)$rank
[1] 1
如果减少此值,您将获得dt 的参数估计值。
# decrease tol in qr
qr(t(x) %*% x, tol = 1e-31)$rank
[1] 2
# and in lm
lm(value~dt, test, tol=1e-31)$coefficients
(Intercept) dt
-1.114966e+07 3.013699e-01
有关简单线性回归中的矩阵代数的详细信息,请参阅https://stats.stackexchange.com/questions/86001/simple-linear-regression-fit-manually-via-matrix-equations-does-not-match-lm-o。