Я пытаюсь написать функцию для множественного регрессионного анализа с использованием QR-разложения и обратных подстановок с циклом для .
У меня есть входная матрица 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
Где я ошибся с функцией?
Может кто-нибудь помочь?