如何用confint()获取各水平置信区间?diet4置信区间求解
解决diet4置信区间无法显示的问题
原因分析
你使用了contr.sum(总和对比)编码分类变量,这种编码的核心约束是所有水平的系数之和为0。对于4个水平的diet来说,就是β1 + β2 + β3 + β4 = 0,因此diet4的系数β4 = -(β1+β2+β3),模型不会单独输出这个系数,所以confint()自然也不会显示它的置信区间。
两种解决方法
方法1:基于sum对比手动计算diet4的置信区间
可以通过线性组合推导,借助multcomp包的glht函数直接计算:
# 安装并加载multcomp包(首次使用需安装) install.packages("multcomp") library(multcomp) data(coagulation,package="faraway") options(contrasts=c("contr.sum","contr.poly")) fit.coag <- aov(coag ~ diet,data= coagulation) # 构建diet4的线性组合:β4 = -β1 -β2 -β3 lc <- glht(fit.coag, linfct = c("diet1 + diet2 + diet3 = 0")) # 输出置信区间 confint(lc)
运行结果中的区间就是diet4的置信区间。
方法2:切换对比方式直接输出diet4的系数
如果改用contr.treatment(处理对比,R默认的分类变量编码方式),模型会将第一个水平(diet1)作为参考组,其余水平(包括diet4)都会生成单独的系数,confint()就能直接显示其置信区间:
data(coagulation,package="faraway") # 切换为处理对比 options(contrasts=c("contr.treatment","contr.poly")) fit.coag <- aov(coag ~ diet,data= coagulation) # 查看所有系数 coef(fit.coag) # 输出所有水平的置信区间 confint(fit.coag)
注意:这里diet4的系数代表其与diet1的均值差,和sum对比中“水平与总体均值偏差”的含义不同,需根据需求选择。
内容的提问来源于stack exchange,提问作者Anne
相关产品推荐
相关产品推荐

