如何绘制 R 中逻辑模型预测的优势比?
How to plot odds ratio of prediction of logistic model in R?
我有一个这样的逻辑回归模型
model4 <- glm(diabetes ~ sex*age, data = df, family = "binomial")
其中年龄是连续变量,性别决定患者是男性还是女性。糖尿病要么是 0 要么是 1。我想通过与 50 岁的患者进行比较,绘制患者患糖尿病概率随年龄变化的优势比,从而使交互作用可视化。
我尝试通过仅对数据集中的女性使用 predict
函数,然后仅对男性使用函数,并采用这些向量的指数来做到这一点。这会产生一些没有意义的结果。
probabilitiesK <- predict(model4, sorteddfK,type = "response")
probabilitiesM <- predict(model4, sorteddfM,type = "response")
#plotting the points by age, male and female separate
plot(sorteddfK$age, exp(probabilitiesK), col = "red", ylim = c(1.04, 1.20)) #plotting exp(log - odds) = odds ratio for women
points(sorteddfM$age, exp(probabilitiesM), col = "blue") #plotting exp(log - odds) = odds ratio for men
这会产生:
this plot
我不明白如何与 50 岁的患者进行比较。我可以预测一个 50 岁的病人,然后除以这个值,但这只是一个常数,所以它不会改变我的情节的形状。
我还尝试制作一个采用 age50 = age-50 的新模型,但这给出了与我的示例代码相同的图。
我想我错过了比值比的一些重要方面,但我真的尝试阅读它但我仍然不明白。
有没有人有什么想法?
我通过创建一个函数来找到我的逻辑回归的几率,并将其除以 50 岁患有糖尿病的患者的几率来解决它。
首先我制作了带有交互作用的逻辑回归模型,将估计值保存为b0,b1,b2,b3,然后制作了函数
像这样:
model5 <- glm(diabetes ~ sex*age, data = df, family = "binomial")
summary(model5)
b0 <- -1.378675 #intercept
b1 <- -2.049248 #sexK
b2 <- -0.006735 #age
b3 <- 0.022666 #sexK:age
Odds_refM0 <- function(age, sexK){
return(exp(b0 + (b1*sexK) + (b2*age) + (b3*age*sexK)))
}
o_w_refMO <- Odds_refM0(age = sorteddfK$age, sexK = 1) #odds for women (men as reference)
o_w50_refMO <- Odds_refM0(age = 50, sexK = 1) #odds for women 50 yrs
OR_W <- o_w_refMO/o_w50_refMO # Odds ratios for women
o_m_refMO <- Odds_refM0(age = sorteddfM$age, sexK = 0) #odds for men
o_m50_refMO <- Odds_refM0(age = 50, sexK = 0) # odds for men of 50 yrs
OR_M <- o_m_refMO/o_m50_refMO # Odds ratios for men
#plotting
plot(sorteddfK$age, OR_W, type = "p", col = "red", xlim = c(20, 95), ylim = c(0.5,2), main = "Kønsspæcifik alderseffekt ifht alder = 50, kvinder: rød, mænd: blå", xlab = "alder", ylab = "OR") +
points(sorteddfM$age, OR_M, type = "p", col = "blue")
我有一个这样的逻辑回归模型
model4 <- glm(diabetes ~ sex*age, data = df, family = "binomial")
其中年龄是连续变量,性别决定患者是男性还是女性。糖尿病要么是 0 要么是 1。我想通过与 50 岁的患者进行比较,绘制患者患糖尿病概率随年龄变化的优势比,从而使交互作用可视化。
我尝试通过仅对数据集中的女性使用 predict
函数,然后仅对男性使用函数,并采用这些向量的指数来做到这一点。这会产生一些没有意义的结果。
probabilitiesK <- predict(model4, sorteddfK,type = "response")
probabilitiesM <- predict(model4, sorteddfM,type = "response")
#plotting the points by age, male and female separate
plot(sorteddfK$age, exp(probabilitiesK), col = "red", ylim = c(1.04, 1.20)) #plotting exp(log - odds) = odds ratio for women
points(sorteddfM$age, exp(probabilitiesM), col = "blue") #plotting exp(log - odds) = odds ratio for men
这会产生: this plot
我不明白如何与 50 岁的患者进行比较。我可以预测一个 50 岁的病人,然后除以这个值,但这只是一个常数,所以它不会改变我的情节的形状。 我还尝试制作一个采用 age50 = age-50 的新模型,但这给出了与我的示例代码相同的图。 我想我错过了比值比的一些重要方面,但我真的尝试阅读它但我仍然不明白。
有没有人有什么想法?
我通过创建一个函数来找到我的逻辑回归的几率,并将其除以 50 岁患有糖尿病的患者的几率来解决它。
首先我制作了带有交互作用的逻辑回归模型,将估计值保存为b0,b1,b2,b3,然后制作了函数
像这样:
model5 <- glm(diabetes ~ sex*age, data = df, family = "binomial")
summary(model5)
b0 <- -1.378675 #intercept
b1 <- -2.049248 #sexK
b2 <- -0.006735 #age
b3 <- 0.022666 #sexK:age
Odds_refM0 <- function(age, sexK){
return(exp(b0 + (b1*sexK) + (b2*age) + (b3*age*sexK)))
}
o_w_refMO <- Odds_refM0(age = sorteddfK$age, sexK = 1) #odds for women (men as reference)
o_w50_refMO <- Odds_refM0(age = 50, sexK = 1) #odds for women 50 yrs
OR_W <- o_w_refMO/o_w50_refMO # Odds ratios for women
o_m_refMO <- Odds_refM0(age = sorteddfM$age, sexK = 0) #odds for men
o_m50_refMO <- Odds_refM0(age = 50, sexK = 0) # odds for men of 50 yrs
OR_M <- o_m_refMO/o_m50_refMO # Odds ratios for men
#plotting
plot(sorteddfK$age, OR_W, type = "p", col = "red", xlim = c(20, 95), ylim = c(0.5,2), main = "Kønsspæcifik alderseffekt ifht alder = 50, kvinder: rød, mænd: blå", xlab = "alder", ylab = "OR") +
points(sorteddfM$age, OR_M, type = "p", col = "blue")