與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