使用ggpmisc::stat_poly_eq()报错! out[1]<=out[2] is not TRUE的原因咨询
解决
stat_poly_eq()报错out[1] <= out[2] is not TRUE的问题 这个错误是stat_poly_eq()在计算R²的置信区间时触发的——当计算得到的置信区间下限大于上限时,内置的检查逻辑就会抛出该错误。
为什么NA位置会影响结果?
你遇到的NA位置不同、结果不同的情况,核心在于剩余有效数据的分布对多项式拟合的稳定性影响:
- 第一个数据集
df去掉首行NA后,剩余7个点的bar值波动极大(正负跳变),配合默认的二次多项式拟合,导致计算R²置信区间时,非中心F分布的参数搜索出现异常(从警告Upper limit outside search range也能佐证),最终得到上下限反转的置信区间,触发错误。 - 第二个数据集
df_2去掉中间行NA后,剩余数据的拟合结果更稳定,置信区间计算未出现异常,因此能正常生成方程和R²标签。
可行的解决方法
方法1:降低多项式阶数
如果你的数据不需要二次拟合,指定degree=1做线性拟合,能避免复杂拟合带来的异常:
df |> ggplot(aes(x = foo, y = bar)) + stat_poly_line(degree = 1) + stat_poly_eq(use_label(c("eq", "R2")), degree = 1)
方法2:跳过R²置信区间计算
通过设置R2.conf.level = NA,让stat_poly_eq()不计算置信区间,直接输出R²值:
df |> ggplot(aes(x = foo, y = bar)) + stat_poly_line() + stat_poly_eq(use_label(c("eq", "R2")), R2.conf.level = NA)
方法3:优化数据集
从数据分布看,bar列存在多个极端跳变值,这类数据本身不适合二次拟合。如果业务允许,可以过滤异常点或补充更多数据,提升拟合稳定性。
内容的提问来源于stack exchange,提问作者Emman
相关产品推荐
相关产品推荐

