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

求助:R语言血清转化率绘图中数据点超出CI问题

血清转化率绘图问题:数据点超出置信区间

我用R语言绘制血清转化率图时,出现数据点超出置信区间(CI)的情况,代码如下:

proportions <- plot_data %>%
  group_by(Age) %>%
  summarize( 
    Prop_pfmsp119 = sum(Sero_pfmsp119 == 1, na.rm = TRUE) / n(),
    Prop_pfama1 = sum(Sero_pfama1== 1, na.rm = TRUE) / n(),
    Prop_pvama1 = sum(Sero_pvama1== 1, na.rm = TRUE) / n(),
    prop_pvmsp119=sum(sero_pvmsp119== 1, na.rm = TRUE)/n()
  )
proportions <- proportions[proportions$Prop_pfmsp119 > 0, ]
proportions <- proportions[proportions$Prop_pfama1 > 0, ]
proportions <- proportions[proportions$Prop_pvama1 > 0, ]
proportions=proportions[proportions$prop_pvmsp119 > 0, ]

# 绘图代码
p1 <- ggplot(mydata, aes(x = Age, y = p)) +
  geom_point(data=proportions,aes(x = Age , y = Prop_pfama1),col="red") +
  # geom_smooth(method="glm",se=T,color="black",method.args = list(family=binomial))+
  #geom_smooth(method = "loess", se = TRUE, color = "black", linewidth = 1) +
  labs(x = "Age (in years)", y = "Probability of Positive") +
  ggtitle("PfAMA1") +
  geom_text(x = 45, y = 0.9, label = "λ = 0.010;95% CI:(0.006-0.014)", color = "black", size = 4) +
  theme_classic() +
  #scale_x_continuous(breaks = seq(0, 100, 20)) +
  ylim(0,1)+
  #geom_ribbon(aes(ymin = l_p, ymax = u_p), fill = "red", linetype = "dashed")
  
  geom_line()+
  geom_line(aes(y=u_p),linetype="dashed")+
  geom_line(aes(y=l_p),linetype="dashed")+
  theme_classic()

绘图后可见红色数据点有部分落在虚线置信区间之外。


问题原因及修正方案

  1. 数据源不匹配
    绘图时,散点用的是proportions中分组计算的比例,而拟合线和置信区间用的是mydata的p、u_p、l_p,两个数据集的Age分组或数据范围可能不一致,导致点和区间不对应。

  2. 修正步骤

    • 统一数据源:将拟合值和置信区间列合并到proportions数据框中,以proportions作为绘图主数据源:
      # 假设已将p、u_p、l_p计算好并添加到proportions中
      p1 <- ggplot(proportions, aes(x = Age)) +
        geom_point(aes(y = Prop_pfama1), col = "red") +
        geom_line(aes(y = p)) +
        geom_line(aes(y = u_p), linetype = "dashed") +
        geom_line(aes(y = l_p), linetype = "dashed") +
        labs(x = "Age (in years)", y = "Probability of Positive") +
        ggtitle("PfAMA1") +
        geom_text(x = 45, y = 0.9, label = "λ = 0.010;95% CI:(0.006-0.014)", color = "black", size = 4) +
        theme_classic() +
        ylim(0,1)
      
    • 直接用geom_smooth拟合并生成置信区间:这种方法无需手动计算区间,更可靠,适合比例数据的二项式拟合:
      p1 <- ggplot(proportions, aes(x = Age, y = Prop_pfama1)) +
        geom_point(col = "red") +
        geom_smooth(method = "glm", se = TRUE, color = "black", method.args = list(family = binomial)) +
        labs(x = "Age (in years)", y = "Probability of Positive") +
        ggtitle("PfAMA1") +
        geom_text(x = 45, y = 0.9, label = "λ = 0.010;95% CI:(0.006-0.014)", color = "black", size = 4) +
        theme_classic() +
        ylim(0,1)
      
    • 检查数据过滤逻辑:当前过滤了所有四个指标均大于0的Age组,若置信区间计算包含这些被删除的组,会导致区间与剩余数据点不匹配,可调整过滤条件或同步置信区间的计算范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:53:19