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

相关性元分析绘制森林图遇xlim报错的解决求助

相关性元分析森林图绘制报错解决

我是R语言初学者,正在进行相关性元分析,学习自YouTube教程。运行以下代码绘制森林图时出现报错:

install.packages("metafor")
install.packages("robumeta")
install.packages("dplyr")

library(metafor)
library(robumeta)
library(dplyr)

Main<- read.csv("Meta-main.csv")
Main <- mutate(Main, study_id = 1:23)
Main <- Main %>% select(study_id, Authur:Quality)
View(Main)


Main <-escalc(measure = "ZCOR", ri=EffSize, ni=Ssize, data = Main, slab = paste(Authur, Year, sep = ", "))
View(Main)

res <- rma(yi, vi, data = Main)
res
predict(res, digits = 3, transf = transf.ztor)
confint(res)

b_res <- rma(yi, vi, data = Main, slab = study_id)
baujat(b_res)

inf<-influence(res)
print(inf)
plot(inf)

forest(res, xlim=c(-1.6,1.6), atransf = transf.ztor,
       at = transf.rtoz(c(-4,-2,0,.2,.4,.6)), digits = c(2,1),cex = .8)

报错信息:

Error in plot.window(...) : need finite 'xlim' values

我尝试用x<-1.6:1.6解决但无效,恳请提供帮助。


问题根源

这个错误是因为你在forest()函数的at参数中使用了超出皮尔逊相关系数r合法范围的数值。r的取值范围是**[-1, 1]**,你输入的-4和-2完全超出了这个区间,transf.rtoz()函数处理这些非法值时会返回NaN(非数值),导致绘图函数无法生成有效的坐标轴范围,最终触发报错。你可以自己运行transf.rtoz(c(-4,-2,0,.2,.4,.6))验证,前两个结果肯定是NaN。

解决步骤

  1. 修正坐标轴刻度参数:将at中的r值替换为[-1,1]范围内的合法值,比如调整为c(-1, -0.5, 0, 0.2, 0.4, 0.6)
  2. 匹配合理的xlim范围:要么去掉xlim让函数自动计算合适的范围,要么根据修正后的刻度设置对应的区间,比如xlim=c(-1.2, 1.2)
  3. 修改后的森林图代码:
# 方案1:让函数自动计算xlim
forest(res, 
       atransf = transf.ztor,
       at = transf.rtoz(c(-1, -0.5, 0, 0.2, 0.4, 0.6)), 
       digits = c(2,1),
       cex = .8)

# 方案2:手动设置合适的xlim
forest(res, 
       xlim=c(-1.2, 1.2),
       atransf = transf.ztor,
       at = transf.rtoz(c(-1, -0.5, 0, 0.2, 0.4, 0.6)), 
       digits = c(2,1),
       cex = .8)

额外检查点

  • 确认你的效应值转换流程正确:escalc(measure="ZCOR")已经将原始相关系数r转换为Fisher's z值用于元分析,atransf=transf.ztor是将坐标轴重新转换回r尺度,所以at必须使用r的合法取值。

内容的提问来源于stack exchange,提问作者אלין קצ'וקי

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:42:49