与R中传统循环有关的大多数问题通过使用代码较少的函数来解释,并且通常更灵活。For循环用于在R中按顺序调整回归
然而,请纠正我,我觉得迭代次序很重要,因为循环仍然占主导地位。
在我的情况下,我想建立一个顺序和累积调整逻辑回归模型,存储OR/CIs和一列显示正在调整的内容。这是我的预期输出:
Model OR CI
Biomarker
+Age
+Sex
+Smoking
这里就是我所做的:
df1 <- subset(df, select = c(age_cat, is_female, smoking_category,
bmi_calc, has_diabetes, sbp_mean,
alcohol_category, highest_education,
occupation, household_income))
model <- data.frame(NULL)
for (i in seq_along(df1)) {
model <- exp((cbind(OR = coef(glm(as.formula(paste("istroke ~ log2(hscrp_mgl)", i, sep = "+")),
family=binomial, data=df)),
confint(glm(as.formula(paste("istroke ~ log2(hscrp_mgl)", i, sep = "+")),
family=binomial, data=df)))))
}
我的结果变量是中风(istroke,0或1)。我感兴趣的暴露是生物标志物(hscrp_mgl)。我知道我在某个地方犯了一个根本性的错误。我在其他SO帖子中寻找,但其中大多数不希望按顺序累积调整回归模型。
请让我知道如果这是重复的,但如果有什么不清楚的。
编辑
我的原始数据集DF包含DF1的所有变量,我的结果变量,然后一些。下面是它的一个重复的样品:
age_cat is_female smoking_category bmi_calc has_diabetes sbp_mean istroke
(59,69] 0 4 19.6 0 103.5 0
(59,69] 1 1 19.1 0 138 0
(29,59] 0 4 26.8 0 155.5 0
(29,59] 0 1 23.1 0 130 1
(29,59] 1 1 22.7 0 126 1
(59,69] 0 4 25 0 182.5 0
(29,59] 1 1 20 0 96 1
(29,59] 1 2 23.9 0 134.5 0
(59,69] 0 4 24.4 0 160.5 1
编辑 更可重复的例子:
df <- data.frame(age = c(50, 60, 50, 40, 70, 90, 30),
gender = c(0, 1, 1, 0, 1, 1, 1),
smoke = c(4, 3, 2, 1, 4, 3, 4),
BMI = c(19, 20, 21, 22, 23, 24, 25),
SBP = c(100, 120, 140, 110, 120, 130, 120),
diab = c(0, 1, 1, 1, 0, 1, 1),
stroke = c(0, 1, 0, 0, 1, 1, 1))
dput(df)
structure(list(age = c(50, 60, 50, 40, 70, 90, 30), gender = c(0,
1, 1, 0, 1, 1, 1), smoke = c(4, 3, 2, 1, 4, 3, 4), BMI = c(19,
20, 21, 22, 23, 24, 25), SBP = c(100, 120, 140, 110, 120, 130,
120), diab = c(0, 1, 1, 1, 0, 1, 1), stroke = c(0, 1, 0, 0, 1,
1, 1)), .Names = c("age", "gender", "smoke", "BMI", "SBP", "diab",
"stroke"), row.names = c(NA, -7L), class = "data.frame")
请您提供DF的可重复的例子吗? – OmaymaS
@OmaymaS,请参阅编辑。 – Mak
请问你是否想要它?只是为了开始。 – OmaymaS