绘制uni森林图报错,提示
Error in check_errors(data = data, est = est, lower = lower, upper = upper, :
Sizes must be larger than 0.
我的数据
library(tidyverse)
pu <-
forest(data1[,c(5:8)],
est = as.numeric(data1$HR),
lower = as.numeric(data1$lowerCI),
upper = as.numeric(data1$upperCI),
sizes = as.numeric(data1$se),
ci_column = 3,
ref_line = 1,
arrow_lab = c("Placebo Better", "Treatment Better"),
xlim = c(0, 20),
ticks_at = c(0,4,8,12,16)
)
到底哪里出了问题呢
基于Monster 组和GPT的调写:
错误提示表明你传递给 forest 函数的数据中有一些列或行的大小为零。
参考GPT和自己的思路,根据报错信息,看起来出错是因为在函数中传入了一个大小小于或等于0的变量。根据你提供的代码,可以发现在 forest 函数中传入了一个名为 sizes 的变量,该变量是一个向量,应该包含每个点的大小,而且应该是大于0的数值。
你可以检查一下 data1$se 向量是否包含大小小于或等于0的元素,如果包含,则需要将其过滤掉或将其替换为大于0的值。下面是一种可能的解决方法:
# 过滤掉大小小于等于0的元素
data1 <- data1[data1$se > 0, ]
# 将 data1$se 中小于等于0的值替换为一个很小的正数
data1$se[data1$se <= 0] <- 1e-10
# 使用修改后的 data1$se 变量调用 forest 函数
pu <- forest(data1[,c(5:8)],
est = as.numeric(data1$HR),
lower = as.numeric(data1$lowerCI),
upper = as.numeric(data1$upperCI),
sizes = as.numeric(data1$se),
ci_column = 3,
ref_line = 1,
arrow_lab = c("Placebo Better", "Treatment Better"),
xlim = c(0, 20),
ticks_at = c(0,4,8,12,16)
)
这将过滤掉大小小于等于0的元素,并将大小小于等于0的元素替换为一个很小的正数,以确保 sizes 变量中不会包含大小小于等于0的元素。
该回答引用ChatGPT
根据错误提示,似乎是在执行forest()函数时出现了一个问题,Sizes must be larger than 0.说明所传入的sizes参数的值必须大于0。
在这种情况下,建议检查一下数据中sizes列的值是否都大于0,可以使用summary()函数来查看sizes列的一些摘要统计量,例如:
summary(data1$sizes)
如果sizes列中存在值为0或者缺失值,可以通过排除或替换这些值来解决该问题,例如:
pu <-
forest(data1 %>% filter(sizes > 0), # 只选择sizes > 0的行
est = as.numeric(data1$HR),
lower = as.numeric(data1$lowerCI),
upper = as.numeric(data1$upperCI),
sizes = as.numeric(data1$se),
ci_column = 3,
ref_line = 1,
arrow_lab = c("Placebo Better", "Treatment Better"),
xlim = c(0, 20),
ticks_at = c(0,4,8,12,16)
)
或者将sizes中的0替换为一个较小的正数,例如:
data1$sizes[data1$sizes == 0] <- 0.1 # 将0替换为0.1
pu <-
forest(data1[,c(5:8)],
est = as.numeric(data1$HR),
lower = as.numeric(data1$lowerCI),
upper = as.numeric(data1$upperCI),
sizes = as.numeric(data1$se),
ci_column = 3,
ref_line = 1,
arrow_lab = c("Placebo Better", "Treatment Better"),
xlim = c(0, 20),
ticks_at = c(0,4,8,12,16)
)