循环用于多个因素的回归

时间:2018-02-24 20:34:54

标签: regression

我正在努力获得一个循环来运行几个回归并存储系数和截距。我有类似的数据:

data <- data.frame(y = rnorm(10), x1 = rnorm(10)*2, ID = c(rep(1,10), rep(2,10)), group = c(rep(3,5), rep(4,5)))

因此,ID和组是因素:

data$ID <- as.factor(data$ID)
data$group <- as.factor(data$group)

到目前为止,我尝试了两种方法。

首先,我做了以下事情:

for (i in unique(data$ID)){
  for (j in unique(data$group)){
   fit <- glm(y ~ x1, data=data[data$ID == i & data$group == j, ])
  } 
}

之后我做了以下事情:

myfun <- function(data) {
  step(glm(y ~ x1, data = data), trace=0)
}
fcomb <- unique(data[,c("ID","group")])
mod <- list()

for(i in  1:nrow(fcomb)) {
  mod <- c(mod,list(myfun(subset(data,ID==fcomb$ID[i] & group==fcomb$group[i]))))
}

最后,我想有一个数据集,其中对于每个ID和组,我将得到截距和x对y的影响的beta。

当我执行第二个策略时,我得到了一些东西,但是测试版和截距是相同的(这是完全不可能的),我仍然不知道如何存储值。

1 个答案:

答案 0 :(得分:-2)

set.seed(1839)
data <- data.frame(
  y = rnorm(10), 
  x1 = rnorm(10) * 2, 
  ID = c(rep(1, 10), rep(2, 10)), 
  group = c(rep(3, 5), rep(4, 5))
)

grid <- expand.grid(ID = unique(data$ID), group = unique(data$group))

results <- lapply(1:nrow(grid), function(x) {
  lm(y ~ x1, data[data$ID == grid[x, 1] & data$group == grid[x, 2], ])$coef
})

results <- t(do.call(cbind, results))
results <- cbind(grid, results)
results

返回:

  ID group  (Intercept)         x1
1  1     3 -0.454072247  1.0295731
2  2     3 -0.454072247  1.0295731
3  1     4  0.007800405 -0.1832663
4  2     4  0.007800405 -0.1832663