线性回归的 MLE 的推导:现在呢?为什么 R 中的 lm 存在差异?

机器算法验证 回归 数理统计 最大似然 衍生物
2022-04-08 06:05:02

我想从上到下理解线性模型的 ML 估计,反之亦然;-)。
我完全了解了制定 LogLikelihood 函数的部分以及如何获得 beta 和 sigma 的导数......
现在我有了 beta=X'Y/XX' 的公式

如果我在中生成一个简单的数据集R

x <- matrix(c(60, 50, 30, 120, 200, 70))
y <- matrix(c(8, 7, 5, 10, 11, 6))

我得到斜率 beta1 和截距 beta0,为:

b1 <- (t(x)%*%y)/(t(x)%*%x)
b1
0.07239819
b0 <- y[1]-x[1]*b1
b0
3.656109

如果我将其与 in 的输出进行lm比较R

lm(y~x)
Coefficients:
(Intercept)            x  
    4.89393      0.03328  

那么1.为什么会有差异?2.lm如果在情节中可视化,真的会更好。

那么我没有到达那里呢?我认为在我的结果中有对的隐含假设,而在sigma 中也是估计的。但我不确定这是否属实。yN(μ,1)lm

所以我读到了 Hessian 矩阵,var-cov 矩阵。我不知道在这种情况下将它们放在哪里......

谢谢弗朗茨

3个回答

简而言之,差异是因为您没有正确执行此操作。

回归系数的最小二乘估计(通常为 ML)是,其中由一列 1 和一列自变量组成。(实际上,您实际上并不计算逆。)(XX)1XyX

但是,您的方法适用于通过原点进行回归。普通线性回归通过(x¯,y¯)

因此,如果您首先通过平均校正来做到这一点,那么您的方法应该适用于简单的线性回归(至少如果您首先将帖子中的):XXXX

第 1 步:表示正确的 x 和 y:

 x <- matrix(c(60, 50, 30, 120, 200, 70))
 y <- matrix(c(8, 7, 5, 10, 11, 6))
 xm <- x-mean(x)
 ym <- y-mean(y)

第 2 步:应用您的方法:

 slope=crossprod(xm,ym)/crossprod(xm)  # a more efficient way to do your calculation
 intercept=mean(y)-slope*mean(x)
 print(c(intercept,slope),d=4)
[1] 4.89393 0.03328

非常感谢!

我了解问题和您的解决方案。但我不明白如何使用 2xn 矩阵来计算它。X

我不知道如何为解决这个问题:β0β1

β=[β0β1]=XTy[XTX]1=[111x1x2xn][y1y2yn][111x1x2xn][x1x2xn]

这应该通过原点吧?我知道设置为 0,但是为什么我需要矩阵中的 1 列呢?最好的,弗朗茨β0X

表达式是矩阵的乘积。矩阵乘积大多不交换,术语是矩阵逆。您可以通过在线性代数上进行搜索来找到有关此的信息。此外,总是需要这些,因为表达式来自β^=[XTX]1XTy[XTX]1y=[1,x][β0,β1]T