我从头开始计算多元回归。我有这样的代码:
#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()
函数进行计算。
对于scratch版本,我得到以下错误:
solve.default(t(X) %*%X)中的错误:系统在计算上是单一的:倒数条件数= 3.73902e-20
我不明白这是什么意思!
使用lm()
函数我得到了系数,但其中很多是NA
的,我该怎么做才能得到与使用lm
相同的解,即使是NA
的。
如果有任何建议,我将非常感谢。
发布于 2018-06-03 03:07:20
您必须使数据观察值的数量大于数据中的数据属性数量
执行如下所示的更改:
set.seed(18814)
n = 300
p = 200
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
在上面的情况下,它不会给出误差,而且系数也不是NA值
https://stackoverflow.com/questions/50659432
复制相似问题