【发布时间】:2020-08-24 22:23:01
【问题描述】:
我有代码在几个选定的因变量(称为结果 1-4)上循环逻辑回归。如果满足自变量中的条件,我只想运行模型。假设我希望每个结果和类型组合至少有两个女性。
虚拟数据:
set.seed(5)
df <- data.frame(
id = c(1:100),
age = sample(20:80, 100, replace = TRUE),
sex = sample(c("M", "F"), 100, replace = TRUE, prob = c(0.7, 0.3)),
type = sample(letters[1:4], 100, replace = TRUE),
outcome1 = sample(c(0L, 1L), 100, replace = TRUE, prob = c(0.68, 0.32)),
outcome2 = sample(c(0L, 1L), 100, replace = TRUE, prob = c(0.65, 0.35)),
outcome3 = sample(c(0L, 1L), 100, replace = TRUE, prob = c(0.60, 0.40)),
outcome4 = sample(c(0L, 1L), 100, replace = TRUE, prob = c(0.45, 0.55)))
循环 GLM 的代码(信任 https://stats.idre.ucla.edu/r/codefragments/looping_strings/):
outcomelist <- names(df)[5:8]
modelall <- lapply(outcomelist, function(x) {
glm(substitute(i ~ type + sex, list(i = as.name(x))), family = "binomial", data = df)})
我发现了很多关于循环的问题,但没有发现任何附加条件。我正在考虑子集,但不是 lapply 的专业人士,但我不知道该放在哪里。
如果这不是一个额外的问题,我希望将每个模型命名为列表中结果变量的名称(而不是 1 到 4),否则当条件为添加。
感谢任何帮助!
【问题讨论】:
-
“我只想在满足自变量中的条件时运行模型”这意味着独立运行结果 1 - 4 对吗?
-
你已经在modelall中拥有它
-
@StupidWolf 是的,完全独立运行,但是当每个结果为 1 时,每种类型(a、b、c、d)中至少需要 2 名女性才能运行模型。我可能在问题中以不好的方式解释了它。此处的数字 2 仅作为示例。
-
好吧,我的错……我读的太快了。因此,如果每个组合组至少有两个,则要运行它。嗯,抱歉,只是想问一下,您排除了 type = a 的所有结果 = 0 的情况?
-
所有案例(行)都保留在 df 中,但对于女性少于两个给定结果 == 1 的结果,模型不会针对每种类型运行。如果可以在所有模型运行后检查这也很好,但我还不太擅长列表,所以我无法弄清楚。我可能会像@Mr.那样做。 Zen建议在下面首先清除df中不符合条件的结果。我已经为此苦苦挣扎了一段时间,以保持df尽可能长并使用
group_by,但id应该只包含一次每个结果(0/1)所以最后我决定spread它并对其进行一次热编码。