对变量做dummy coding传入统计包报错,未被识别为factor如何解决
问题根源
- R的矩阵仅支持存储同类型数据,直接将矩阵列转为factor后,整个矩阵的元素类型会变为字符或因子整数编码,既无法保留因子属性用于自动编码,也不满足
crossprod运算要求的数值输入条件 - 你执行的
mode(xit_form) <- "numeric"操作,仅将因子的内部水平序号转为了数值,没有完成工具包明确要求的哑变量编码(dummy coding),相当于把分类变量误作为有序连续变量输入,自然无法被工具包正确识别
正确解决方案
按照工具包要求完成分类变量的哑编码后,输入数值矩阵即可,以下是基础R实现代码,无需额外依赖:
# 1. 转换为数据框后设置分类变量为因子类型 xit_df <- as.data.frame(xit_form) xit_df[, 1:2] <- lapply(xit_df[, 1:2], as.factor) # 2. 生成哑变量矩阵,自动去掉截距项避免共线性 xit_dummy_matrix <- model.matrix(~ . - 1, data = xit_df) # 3. 直接将xit_dummy_matrix传入工具包即可
补充说明
model.matrix输出结果本身就是标准数值矩阵,完全适配crossprod的运算要求,不存在类型报错问题- 若需要自定义分类变量的参照水平,可在编码前通过
relevel(xit_df[,1], ref = "你要设置的参照水平值")调整因子水平顺序 - 若偏好更简单的编码逻辑,也可使用
fastDummies包的dummy_cols()函数完成编码后再转为矩阵输入
内容的提问来源于stack exchange,提问作者Duba Minus
相关产品推荐
相关产品推荐

