如何获取R语言中因子列的参考水平?
问题
我已知可以使用relevel将某个值设置为因子的参考水平。
我想要实现反向操作:给定一个因子列,如何检索它对应的参考值?
我能想到的最简易方法是借助lm运行线性回归,查看估计系数中缺失的因子取值即为参考水平。
请问是否有专门的方法或函数可以实现这一需求?
提出这个问题我有些不好意思,搜索因子参考水平获取方法时,返回的结果几乎全是关于如何重设因子参考水平的内容,完全找不到反向获取参考水平的相关解答,如果该问题属于重复提问,我在此提前致歉。
回答
不需要借助lm跑回归这么绕,R原生就有最简单的实现方式:因子的参考水平永远是其水平列表的第一个元素,直接调用levels()函数取第一个返回值即可。
方法演示
# 构造测试因子 x <- factor(c("low", "mid", "high", "mid", "low")) # 查看所有水平 levels(x) # [1] "high" "low" "mid" # 取第一个元素即为当前参考水平 levels(x)[1] # [1] "high" # 用relevel重设参考水平为low之后 x2 <- relevel(x, ref = "low") levels(x2) # [1] "low" "high" "mid" levels(x2)[1] # [1] "low"
如果是已经构建好回归模型的场景,也可以用contrasts()函数直接验证:对比矩阵中没有出现在行名里的水平就是当前模型使用的参考水平,结果和上面的方法完全一致。
contrasts(x) # low mid # high 0 0 # low 1 0 # mid 0 1 # 行名无high,即high为参考水平
注意:就算你手动修改了因子的对比编码方式(比如和差编码、Helmert编码等),参考水平依然是
levels(因子)[1],不会随编码规则变化。
你之前想到的跑回归看缺失系数的方法逻辑是成立的,但对于大数据集来说性能浪费非常严重,直接取levels首元素是零成本的原生方案,也是所有R内置建模函数默认识别参考水平的规则。
内容的提问来源于stack exchange,提问作者Arturo Sbr
相关产品推荐
相关产品推荐

