r - 如何在 R 中的 lm 中获得有序分类变量的 0-1 虚拟变量?

标签 r lm categorical-data

R 中运行带有分类因变量的线性模型时,该变量在内部重新编码为虚拟变量:

unord <- data.frame(y = c(1, 2, 3, 12, 11, 13, 101, 103, 102, 1003, 1002, 1001),
             cat = factor(rep(LETTERS[1:4], each = 3), ordered = FALSE))
model.matrix(lm(y~cat, data = unord))

   (Intercept) catB catC catD
1            1    0    0    0
2            1    0    0    0
3            1    0    0    0
4            1    1    0    0
5            1    1    0    0
6            1    1    0    0
7            1    0    1    0
8            1    0    1    0
9            1    0    1    0
10           1    0    0    1
11           1    0    0    1
12           1    0    0    1

我喜欢什么。 然而,如果分类因变量是有序的,则虚拟变量由于某种原因不太直观:

ord <- data.frame(y = c(1, 2, 3, 12, 11, 13, 101, 103, 102, 1003, 1002, 1001),
                cat = factor(rep(LETTERS[1:4], each = 3), ordered = TRUE))
model.matrix(lm(y~cat, data = ord))

   (Intercept)      cat.L cat.Q      cat.C
1            1 -0.6708204   0.5 -0.2236068
2            1 -0.6708204   0.5 -0.2236068
3            1 -0.6708204   0.5 -0.2236068
4            1 -0.2236068  -0.5  0.6708204
5            1 -0.2236068  -0.5  0.6708204
6            1 -0.2236068  -0.5  0.6708204
7            1  0.2236068  -0.5 -0.6708204
8            1  0.2236068  -0.5 -0.6708204
9            1  0.2236068  -0.5 -0.6708204
10           1  0.6708204   0.5  0.2236068
11           1  0.6708204   0.5  0.2236068
12           1  0.6708204   0.5  0.2236068

问题是如何获得有序分类变量的“通常”虚拟变量?注意:问题不在于如何正确使用排序中的信息( https://stats.stackexchange.com/questions/33413/continuous-dependent-variable-with-ordinal-independent-variable )。 p>

最佳答案

您可以通过在 lm 中或如下 model.matrix 中使用 contrasts 参数来强制使用哪种对比度(正如我删除的那样)额外的 lm 调用)

model.matrix(y ~ cat, data = ord, contrasts = list(cat=contr.treatment))

如果您有多个因素列,您可以这样做

nms <- names(ord)[sapply(ord, is.factor)] # get names of factor variables
model.matrix(y ~ cat, data = ord, 
                contrasts = sapply(nms, function(x) list(contr.treatment)))

关于r - 如何在 R 中的 lm 中获得有序分类变量的 0-1 虚拟变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46766692/

相关文章:

R从model.frame中恢复原始data.frame

R - 分析分类变量对连续变量的影响

Python:用整数替换分类后存储多个字典

r - 带有 $\lambda = 0$ 的 LASSO 和 OLS 在 R glmnet 中产生不同的结果

javascript - 如何在 R 中的同一箱形图上绘制来自一个数据集的 2 组分类数据

javascript - 使用shinyjs::reset重置自定义输入shiny R

r - 当字母作为字符串提供时如何在 R 图中显示希腊字母

r - 如何关闭 mongolite R 包中的消息

r - 将目录中的所有 .dta 文件转换为 .csv 的循环的正确措辞

r - 使用 lm() 进行线性回归 - 对结果感到惊讶