Функция множественной регрессии с использованием QR-декомпозиции и обратной подстановки - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь написать функцию для множественного регрессионного анализа с использованием 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

Где я ошибся с функцией?

Может кто-нибудь помочь?

1 Ответ

1 голос
/ 18 марта 2019

Вы можете просто использовать

b <- backsolve(R, z)

Исправлять цикл бессмысленно, если только вы не хотите делать это в Rcpp.

...