Bootstrap с пошаговой регрессией в R - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь взять bootstrap выборок и провести пошаговую регрессию в R. Я пытаюсь посмотреть на распределение коэффициентов регрессии, но матрица "bhat", над которой я работаю, в основном распечатывает NA, за исключением первого ряда (который является одинаковым номером во всех столбцах). Как я могу это исправить?

B <- 100 #number of bootstrap samples
n <- nrow(dat)
d <- ncol(dat) - 1
bhat <- matrix(NA, nrow = B, ncol = ncol(dat) - 1)

for(b in 1:B) {

  s <- sample(1:n, n, replace=TRUE)
  samp <- as.matrix(dat[s, c(1:15)])
  samp <- as.data.frame(samp)

  #stepwise regression
  null <- lm(dat$Y ~ 1, data=samp)
  full <- lm(dat$Y ~ ., data=samp)
  fit <- step(null, scope=formula(full), direction="forward", k=log(n), trace=0)

  bhat[b,] <- coef(fit)

}

1 Ответ

0 голосов
/ 21 апреля 2020

Каждый раз, когда вы делаете шаг, количество коэффициентов различается, это не то же самое измерение, что и ваша матрица, и вы не можете «вставить» его, вы можете сделать:

dat = data.frame(Y=rnorm(100),matrix(rnorm(100*15),ncol=15))
colnames(dat)[-1] = paste0("Var",1:15)

B <- 100 #number of bootstrap samples
n <- nrow(dat)
d <- ncol(dat) - 1
full_mdl = colnames(model.matrix(Y~.,data=dat))
bhat <- matrix(NA, nrow = B, ncol = length(full_mdl))
colnames(bhat) = full_mdl

for(b in 1:B) {

  samp <- dat[sample(1:n, n, replace=TRUE), c(1:15)]
  null <- lm(dat$Y ~ 1, data=samp)
  full <- lm(dat$Y ~ ., data=samp)
  fit <- step(null, scope=formula(full), direction="forward", k=log(n), trace=0)

  bhat[b,names(coef(fit))] <- coef(fit)

}
...