在min(new_value,na.rm = T)中:没有min不可缺少的参数;返回Inf

时间:2018-06-25 18:57:50

标签: r

我估计了一个具有四个独立类别变量的模型。

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

有人知道可能发生的事情吗?

2 个答案:

答案 0 :(得分:1)

编辑:这是由于需要为估算图中的分类变量指定术语。

我不确定问题到底是什么,但似乎是将术语从完整模型结果中提取出来的一个错误。创建模型术语时,分类变量具有它们的级别附加到术语名称(参考级别除外)上,然后该数据框是仅包含传递给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 with categorical variables

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

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

,但是尚未针对估算图实施。

答案 1 :(得分:0)

我认为我应该指定terms的名称,而不是类别。但是,当我指定类别名称时,它可以正常工作。

  

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