【发布时间】:2018-06-02 17:26:13
【问题描述】:
我正在从头开始计算多元回归。 我有这个代码:
#Multivariate regression
set.seed(18814)
n = 200
p = 300
real_p=4
X=matrix(rnorm(n*p), nrow=n, ncol=p)
y <- apply(X[,1:real_p], 1, sum) + rnorm(n)
data1=cbind(X,y)
betas <- solve(t(X) %*% X)%*%t(X) %*% y
#Using lm()
data1=as.data.frame(data1)
lm=lm(y~X, data = data1)
lm$coefficients
在代码的第一部分,我从头开始计算它,然后使用lm() 函数进行计算。
我收到草稿版本的此错误:
solve.default(t(X) %*% X) 中的错误: 系统在计算上是奇异的:倒数条件数 = 3.73902e-20
我不明白这是什么意思!
使用lm() 函数我得到了系数,但其中很多是NA 的。
我该怎么做才能获得与使用lm 相同的解决方案,即使使用NA 也是如此。
我非常感谢任何建议。
【问题讨论】:
-
变量多于观察值。如果你想使用你的解决方案来估计参数,那就不行了。
-
“计算奇异”意味着不能从数据中唯一确定系数(因为回归模型中的变量多于观察值)。具体来说,矩阵 X'X(其中 X 是回归的设计矩阵,X' 是它的转置)没有唯一的逆矩阵。但是这个矩阵需要是可逆的才能确定所有的回归系数。
标签: r