我目前正在对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)
} )
谢谢!
答案 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函数中使用模型,并从中获取包含所有重要参数的表。