我正在玩R中使用线性代数对OLS估算器进行手动计算,我对R的内置回归函数lm()得到了不同的答案。有人能告诉我为什么会有区别吗? R不执行OLS吗?
> x1<-rbind(1,2,3,4,5)
> x2<-rbind(3,65,7,2,1)
> x3<-rbind(34,7,23,2,4)
> x4<-rbind(25,50,70,90,110)
> y<-rbind(1,2,3,4,5)
> X<-as.matrix(cbind(x1,x2,x3,x4))
> Y<-as.matrix(cbind(y))
>
> beta.hat<-solve(t(X)%*%X)%*%t(X)%*%Y
> r.regression<-lm(Y~0+X)
>
> beta.hat
[,1]
[1,] 1.000000e+00
[2,] -2.595146e-15
[3,] 8.174017e-15
[4,] -2.309264e-14
> r.regression
Call:
lm(formula = Y ~ 0 + X)
Coefficients:
X1 X2 X3 X4
1.000e+00 3.331e-18 4.152e-17 -6.783e-17
答案 0 :(得分:0)
R正在执行OLS,问题出在您提供的示例中。这是一个基于@DWin评论的演示。
set.seed(1234)
x1 <- rnorm(5,mean=3)
x2 <- rnorm(5,mean=1,sd=5)
x3 <- rnorm(5,mean=7,sd=1)
x4 <- rnorm(5,mean=1,sd=2)
X<-as.matrix(cbind(x1,x2,x3,x4))
Y<-as.matrix(cbind(y))
(beta.hat<-solve(t(X)%*%X)%*%t(X)%*%Y)
lm(Y~X+0)
如您所见,系数完全相同,除了更合适的数据外,您的代码会重复。
P.S。如果这被归类为非主题问题,请随时删除答案。我的意图只是用一些代码说明问题,这些代码不适合评论。