在 R 中绘制多元逻辑回归模型的结果

Posted

技术标签:

【中文标题】在 R 中绘制多元逻辑回归模型的结果【英文标题】:Plot the results of a multivariate logistic regression model in R 【发布时间】:2012-07-02 18:13:37 【问题描述】:

我想绘制针对特定自变量调整(即独立于模型中包含的混杂因素)与结果(二元)关系的多元逻辑回归分析 (GLM) 的结果。

我看到一些帖子推荐使用以下方法,使用predict 命令后跟curve,这是一个示例;

x     <- data.frame(binary.outcome, cont.exposure)
model <- glm(binary.outcome ~ cont.exposure, family=binomial, data=x)
plot(cont.exposure, binary.outcome, xlab="Temperature",ylab="Probability of Response") 
curve(predict(model, data.frame(cont.exposure=x), type="resp"), add=TRUE, col="red")

但是,这似乎不适用于多元回归模型。当我添加“年龄”(任意 - 可以是任何相同长度的变量)作为混杂变量时,出现以下错误;

> x     <- data.frame(binary.outcome, cont.exposure, age)
> model <- glm(binary.outcome ~ cont.exposure + age, family=binomial, data=x)
> plot(cont.exposure, binary.outcome, xlab="Temperature",ylab="Probability of Response") 
> curve(predict(model, data.frame(cont.exposure=x), type="resp"), add=TRUE, col="red")
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
  variable lengths differ (found for 'age')
In addition: Warning message:
  'newdata' had 101 rows but variable(s) found have 698 rows 

上面的模型是我想跑的模型的简化版,但是原理是一样的; 我想绘制二元结果变量与连续暴露之间的关系,不受混杂因素的影响。

如果能找到解决上述问题的方法,或者另一种方法来查看我感兴趣的关系,那就太好了。非常感谢。

【问题讨论】:

你可以看看car包中的crPlots函数。 @BenBarnes 对此表示感谢。我查看并快速使用了数据,但该函数无法识别我正在执行逻辑回归。但是,如果我使用线性回归(即,我的曝光现在是我的结果,我的二元变量是自变量),那么我确实得到了我想要的。你会发布这个作为我接受的答案,还是我应该接受? 我要支持蒂埃里的回答! @Luke 你有没有找到解决这个问题的好方法?正如您在评论中指出的那样,接受的答案有点错过了问题的意图。 @colin 很遗憾没有,在过去的几年里我没有看到任何东西可以做我真正追求的事情。你有什么建议吗? 【参考方案1】:
set.seed(12345)
dataset <- expand.grid(Temp = rnorm(30), Age = runif(10))
dataset$Truth <- with(dataset, plogis(2 * Temp - 3 * Age))
dataset$Sample <- rbinom(nrow(dataset), size = 1, prob = dataset$Truth)
model <- glm(Sample ~ Temp + Age, data = dataset, family = binomial)
newdata <- expand.grid(
  Temp = pretty(dataset$Temp, 20), 
  Age = pretty(dataset$Age, 5))
newdata$Sample <- predict(model, newdata = newdata, type = "response")
library(ggplot2)
ggplot(newdata, aes(x = Temp, y = Sample)) + geom_line() + facet_wrap(~Age)

ggplot(newdata, aes(x = Temp, y = Sample, colour = Age, group = Age)) + 
  geom_line()

【讨论】:

感谢您的回复 - 我应该在我的问题中指定,但我在我的示例中提供了一个简化模型。实际上有许多混杂变量(其中一些是连续的,其他因素),我想将我的结果(二元)和暴露(连续)之间的关系可视化,独立于我在模型中包含的其他变量。你知道ggplot是否可以做到这一点?再次感谢 @BenBarnes 确实提供了一个很好的方法来实现连续的结果;通过使用我的二元变量作为曝光运行线性回归,我可以获得一个不错的图,但这不是我使用的原始逻辑框架,所以替代方案也很棒。 @LukeTheDuke:在这种情况下,为感兴趣的协变量设置一系列值,并将所有其他协变量固定在相关级别。

以上是关于在 R 中绘制多元逻辑回归模型的结果的主要内容,如果未能解决你的问题,请参考以下文章

逻辑回归算法实现_基于R语言

R语言在逻辑回归中求R square R方

R语言使用broom包将回归模型(线性回归逻辑回归比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集

多元线性回归模型用r语言怎么来实现

多元回归分析类型

SPSS多元线性回归输出结果的详细解释