我正在尝试使用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
该功能在哪里出错?
有人可以帮忙吗?
答案 0 :(得分:1)
您可以使用
b <- backsolve(R, z)
修复循环毫无意义,除非您想在Rcpp中进行循环。