我估计了一个具有四个独立类别变量的模型。
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
有人知道可能发生的事情吗?
答案 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"))
请注意,某些其他类型的绘图支持仅调用变量名称或添加索引,例如
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”))