使用QR分解和向后替换的多元回归功能

时间:2019-03-16 21:43:20

标签: r regression linear-regression qr-decomposition

我正在尝试使用QR分解和 for 循环向后替换编写用于多元回归分析的函数。

我有一个输入矩阵X和一个自变量y,我正在寻找回归系数b

我的功能看起来像这样

X <- matrix(c(floor(runif(15, min=0, max=10))), nrow = 5, ncol = 3)
y <- matrix(floor(runif(5, min=0, max=10)), nrow = 5, ncol = 1)

regression <- function(X,y) {

  R <- qr.R(qr(X))
  Q <- qr.Q(qr(X))
  z <- as.vector(t(Q)%*%y)
  y <- as.matrix(y)
  m <- dim(X)[2]
  b <- 0

  for (i in seq(m,1,-1)) {
    for (j in c(0,seq(m-1,1,-1))) {
      p <- as.numeric((z[i]-R[i, j]*b[j+1])/R[i,1])
      b <- as.vector(c(b, p))
    }
  }
  return(b)
}

但我的输出仅给我NA

regression(X,y)
#[1]  0 NA NA NA NA NA NA

该功能在哪里出错?

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您可以使用

b <- backsolve(R, z)

修复循环毫无意义,除非您想在Rcpp中进行循环。