对于基于R中变量名的回归循环

时间:2015-06-09 15:39:48

标签: r for-loop regression

我目前正在对72,000个观察数据集进行一系列回归分析,每个观察结果大约有20个变量。其中一个变量由56个名称组成,我想为每个名称运行一个回归。我想我会为此创建一个for循环,但是我对使用这种大小的数据集有点经验不足 包含名称的变量不在回归中。 NAME:变量我想运行for循环来为每个名称运行回归。

我的代码:

 my.mods = lapply(s.dat, FUN = function(x) {
 lm(log(TM+1000) ~ log(Inc+1) + log(Slip_sq_K+1) +
log(Ten+1) + log(HF+1) + log(BroP+1) + log(B+1) +
log(sian+1) + log(H_+1) + log(C_65+1) + log(D+1) +
log(TIP+1) + log(p+1) + log(X34itP+1) + log(FGK+1) +
log(X19tP+1) + log(X2nitP+1) + log(Car_AloneP+1) +
log(CaoledP+1) +log(PTsP+1) + log(Gy+1) +
log(OthemeansP+1) + log(HP+1) + log(Coi+1) +
log(electr) + log(Na+1),
data = x, na.action=na.exclude)

} )

谢谢!

4 个答案:

答案 0 :(得分:0)

无需循环。只需拆分数据并使用lapply

acs.dat.split = split(acs.dat, acs.dat$NAME)

my.mods = lapply(acs.dat, FUN = function(x) {
  lm(log(TSM+1000) ~ log(Inc+1) + log(Slip_sq_K+1) +
    log(Teen+1) + log(HFGG+1) + log(BrownP+1) + log(BlackP+1) +
    log(AsianP+1) + log(H_65+1) + log(C_65+1) + log(Detachedp+1) +
    log(TIP+1) + log(X2Unitp+1) + log(X34UnitP+1) + log(FGK+1) +
    log(X189tP+1) + log(X20PlusUnitP+1) + log(Car_AloneP+1) +
    log(CarpooledP+1) +log(PublicTransP+1) + log(Gly+1) +
    log(OthermeansP+1) + log(HomeP+1) + log(CommTime+1) +
    log(electr) + log(Natural_gas+1),
    data = x, na.action=na.exclude)
  } 
)

答案 1 :(得分:0)

如果您想使用循环,您可以为每个名称分组数据:

data(mtcars)
models = list()
for (i in 1:length(unique(row.names(mtcars)))) {
  sub_cars <- subset(x = mtcars, subset = row.names(mtcars) == row.names(mtcars)[i])
  models[i] <- lm(mpg ~ cyl, data = sub_cars)
}

答案 2 :(得分:0)

这是我在裸R中的解决方案,只是有点长,因为我生成了一个代码,因为我不确定我是否得到了你想要的东西。但我认为如果我得到它你可以使用最后一行。

    # Random code for example
    set.seed(1)
    names <- c("Homer", "Bart", "Lisa")
    da <- rnorm(30)
    da1 <- rnorm(30, 2)
    data <- data.frame(Names = rep(names, 10), da, da1)

在这里我相信你可以使用:

reg <- by(data[, 2:3], data$Names, lm)

他输出:

reg
data$Names: Bart

Call:
FUN(formula = data[x, , drop = FALSE])

Coefficients:
(Intercept)          da1  
     0.7738      -0.3076  

-------------------------------------------------------------- 
data$Names: Homer

Call:
FUN(formula = data[x, , drop = FALSE])

Coefficients:
(Intercept)          da1  
    0.14672     -0.01079  

-------------------------------------------------------------- 
data$Names: Lisa

Call:
FUN(formula = data[x, , drop = FALSE])

Coefficients:
(Intercept)          da1  
    -1.3974       0.7396  

答案 3 :(得分:0)

如果可能的话,我更喜欢没有循环的工作,我发现this页真有帮助。它展示了如何在plyr函数中使用模型,并从中获取包含所有重要参数的表。