在 min(new_value, na.rm = T) 中:没有缺失值外的参数,返回无穷大。

3

我使用了四个独立的分类变量对模型进行了估计。

library(sjPlot)
library(sjmisc)
data(efc)
efc <- to_factor(efc, c161sex, e42dep, c172code)
mod <- lm(neg_c_7 ~ pos_v_4 + c12hour + e42dep + c172code,
          data = efc)

我希望绘制模型(其估计值和置信区间),只显示四个自变量中的两个。
当我使用以下命令绘制完整模型时,没有任何问题:
plot_model(mod)

然而,当我使用参数terms仅选择我需要的变量时:

plot_model(mod, terms=c("e42dep", "c172code"))
plot_model 没有正确运行,出现了以下警告信息:
Warning messages:
1: In min(new_value, na.rm = T) : no non-missing arguments to min; returning Inf
2: In min(dat$conf.low) : no non-missing arguments to min; returning Inf
3: In min(dat$estimate) : no non-missing arguments to min; returning Inf
4: In max(dat$conf.high) : no non-missing arguments to max; returning -Inf
5: In max(dat$estimate) : no non-missing arguments to max; returning -Inf
6: In .axisPars(usr, log = log, nintLog = nint) : NaNs produced

有人知道发生了什么事吗?这与IT技术有关。请注意,不要删除HTML标签。
2个回答

2
编辑:这是因为在估计图中需要指定分类变量的方式造成的。
我不确定问题的具体原因,但似乎是从完整模型结果中对术语进行子集划分的方式存在问题。在创建模型术语时,类别变量的级别会附加到术语名称上(除了参考级别),然后将该数据框子集划分为仅包括传递给terms参数的名称。
因此,正确的调用方法是明确指定如下:
library(sjPlot)
library(sjmisc)
data(efc)

efc <- to_factor(efc, c161sex, e42dep, c172code)

mod <- lm(neg_c_7 ~ pos_v_4 + c12hour + e42dep + c172code, data = efc)

您可以通过从模型对象中提取系数名称来查看术语的结果名称。
levels(efc$e42dep)
#[1] "1" "2" "3" "4"
levels(efc$c172code)
#[1] "1" "2" "3" 

names(mod$coefficients)
#[1] "(Intercept)" "pos_v_4"     "c12hour"     "e42dep2"     "e42dep3"    
#[6] "e42dep4"     "c172code2"   "c172code3"

#plot just the estimates of e42dep and c172code

plot_model(mod, type="est", terms=c("e42dep2",
                                    "e42dep3",
                                    "e42dep4",
                                    "c172code2",
                                    "c172code3"))

分类变量的sjPlot

请注意,其他类型的图表支持仅调用变量名称或添加索引,例如:

plot_model(mod, type="pred", terms=c("e42dep [2:4]", "c172code [2,3]"))
plot_model(mod, type="pred", terms=c("e42dep", "c172code"))

但是目前还没有为估算图实现这一功能。

这实际上不是一种变通方法,而是应该如何工作的预期方式,因此您可以显示/删除分类变量中甚至特定级别。也许可以进行修订,以展示一些其他默认行为? - Daniel
1
啊,我明白了。我原以为默认行为是在仅提供变量名时绘制所有级别。只是为了澄清,如果我像这样调用因子 plot_model(mod, type="est", terms=c("e42dep [2,3]", "c172code [2,3]")),根据文档,它应该可以工作,但我也收到了相同的错误?另外,当 type="pred" 时它确实可以工作,但当 type="est" 时却不行。 - Esther
1
是的,我首先实现了指定级别,即 terms=c("e42dep [2,3]", "c172code [2,3]")) 用于边际效应图。也许我也可以用这个来绘制估计值,但目前还没有实现。 - Daniel
好的,这很有道理。我之前对其他类型图表的文档预期行为感到困惑。我已经相应地更新了我的答案。 - Esther
1
谢谢!在当前的开发版本(https://github.com/strengejacke/sjPlot)中,我为`type =“est”`实现了相同的符号。我还在函数文档中对此进行了更清晰的说明。 - Daniel

0

我原本认为应该指定术语名称而不是它们的类别。然而,当我指定类别名称时,它可以正常工作。

plot_model(mod, type="est", terms=c("e42dep2", "e42dep3", "e42dep4", "c172code2", "c172code3"))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接