You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言简单逻辑回归绘图无法正确显示p值问题求助

问题原因
  • 第一个stat_fit_glance报错的核心原因:你在method.args中传入了formula = formula,formula是R内置函数,属于closure类型,并没有指向你逻辑回归用到的具体公式y~x,程序无法解析所以抛出"object of type 'closure' is not subsettable"错误。
  • stat_fit_tidy的"no applicable method for 'tidy'"报错:ggpmisc的模型结果提取功能依赖broom包提供的tidy()/glance()方法,你没有安装或加载broom包,无法解析glm对象的输出。
  • 最终运行后p值与手动计算、lrm结果不符的原因:大概率是包版本冲突(你之前加载的rms包会覆盖部分glm相关的方法),或者stat_fit_tidy提取的是模型截距项的p值,而非你需要的ancestry自变量的Wald检验p值,也可能是默认用了似然比检验的p值,和lrm输出的Wald检验p值逻辑不同。
解决方案

优先推荐最稳妥、不会出现结果偏差的方案:手动提取模型结果后用annotate添加文本,不需要依赖ggpmisc的动态计算,结果100%和你拟合的model一致:

library(ggplot2)
# 读取数据、拟合模型
da <- read.table('data.txt', header=TRUE)
model <- glm(variable ~ ancestry, family=binomial, data=da)
# 提取ancestry的系数和p值:系数表第二行对应ancestry的结果,第四列为p值
p_val <- summary(model)$coefficients[2,4]
coef_val <- summary(model)$coefficients[2,1]

# 绘图
ggplot(da, aes(x = ancestry, y = variable)) + 
  geom_point(alpha=.5, aes(color=colorsite)) + 
  stat_smooth(method="glm", se=FALSE, method.args = list(family=binomial)) +
  # 手动添加文本,x和y的位置可以根据自身数据范围调整
  annotate("text", x = min(da$ancestry), y = 0.9, 
           label = sprintf("Coef = %.3g\np-value = %.3g", coef_val, p_val),
           hjust = 0)
ggsave("test.pdf")

如果你一定要用ggpmisc的自动计算功能,修正代码如下:需要先加载broom包,同时避免和rms包同时加载引发方法冲突:

library(ggplot2)
library(ggpmisc)
library(broom) # 必须加载,为glm对象提供tidy方法

da <- read.table('data.txt', header=TRUE)

ggplot(da,aes(x = ancestry,y = variable)) + 
  geom_point() +
  stat_smooth(method="glm",se=FALSE,method.args = list(family=binomial)) +
  stat_fit_tidy(method = "glm",
                method.args = list(family=binomial, formula = y~x),
                # 明确提取自变量对应的系数和p值
                mapping = aes(label = sprintf("Coef = %.3g\np-value = %.3g",
                                              after_stat(x_estimate),
                                              after_stat(x_p.value))),
                label.x = "left", label.y = "top")
ggsave("test.pdf")

如果还是出现p值不符的情况,直接使用第一种手动提取的方案即可,动态计算的统计层容易受包依赖、环境冲突影响,手动提取的结果完全和你拟合的model一致,不会出错。

内容的提问来源于stack exchange,提问作者dnv89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:54:06