如何使用R中的QR分解计算最小二乘估计的方差?

时间:2016-09-19 08:50:21

标签: r regression linear-regression least-squares qr-decomposition

我正在尝试学习QR分解,但无法在不借助传统矩阵计算的情况下弄清楚如何获得beta_hat的方差。我正在练习iris数据集,这是我到目前为止所拥有的:

y<-(iris$Sepal.Length)
x<-(iris$Sepal.Width)
X<-cbind(1,x)
n<-nrow(X)
p<-ncol(X)
qr.X<-qr(X)
b<-(t(qr.Q(qr.X)) %*% y)[1:p]
R<-qr.R(qr.X)
beta<-as.vector(backsolve(R,b))
res<-as.vector(y-X %*% beta)

感谢您的帮助!

1 个答案:

答案 0 :(得分:7)

设置(在代码中复制)

n - p

数学

enter image description here

计算

剩余自由度为se2 <- sum(res ^ 2) / (n - p) ,因此估计方差为

V <- chol2inv(R) * se2

#           [,1]         [,2]
#[1,]  0.22934170 -0.07352916
#[2,] -0.07352916  0.02405009

因此,估计系数的方差协方差矩阵是

lm

验证

让我们通过与fit <- lm(Sepal.Length ~ Sepal.Width, iris) vcov(fit) # (Intercept) Sepal.Width #(Intercept) 0.22934170 -0.07352916 #Sepal.Width -0.07352916 0.02405009 比较来检查正确性:

b <- (t(qr.Q(qr.X)) %*% y)[1:p]

同样的结果!

备注1(跳过形成'Q'因子)

而不是qr.qty,您可以使用函数b <- qr.qty(qr.X, y)[1:p] (以避免形成'Q'矩阵):

R <- qr.R(qr.X)

备注2(跳过形成'R'因子)

您不必为backsolve提取qr.X$qr;使用beta <- as.vector(backsolve(qr.X$qr, b)) 就足够了:

X

附录:估算函数

以上是最简单的演示。在实践中,需要处理列旋转和秩缺陷。以下是一个实现。 y是模型矩阵,lm(y ~ X + 0)是响应。结果应与qr_estimation <- function (X, y) { ## QR factorization QR <- qr(X) r <- QR$rank piv <- QR$pivot[1:r] ## estimate identifiable coefficients b <- qr.qty(QR, y)[1:r] beta <- backsolve(QR$qr, b, r) ## fitted values yhat <- base::c(X[, piv] %*% beta) ## residuals resi <- y - yhat ## error variance se2 <- base::c(crossprod(resi)) / (nrow(X) - r) ## variance-covariance for coefficients V <- chol2inv(QR$qr, r) * se2 ## post-processing on pivoting and rank-deficiency p <- ncol(X) beta_full <- rep.int(NA_real_, p) beta_full[piv] <- beta V_full <- matrix(NA_real_, p, p) V_full[piv, piv] <- V ## return list(coefficients = beta_full, vcov = V_full, fitted.values = yhat, residuals = resi, sig = sqrt(se2)) } 进行比较。

$con = new mysqli("localhost", "***", "***", "***"); 
if ($mysqli->connect_errno) { 
    ^^^^^^^^^^^^^^^^^^^^^^
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
                                           ^^^^^^^^^^^^^^^^^^^^^^          ^^^^^^^^^^^^^^^^^^^^^^
}