R中model.matrix中有序因子的列名

R中model.matrix中有序因子的列名,r,R,我使用model.matrix函数创建了一个设计矩阵 contr <- make.poly(n, scores) if (contrasts) { dn <- colnames(contr) dn[2:min(4, n)] <- c(".L", ".Q", ".C")[1:min(3, n - 1)] colnames(contr) <- dn contr[, -1, drop = FALSE] } 如果我使用有序因子数据,我会在列名中得到L、Q和C后缀

我使用
model.matrix
函数创建了一个设计矩阵

contr <- make.poly(n, scores)
if (contrasts) {
  dn <- colnames(contr)
  dn[2:min(4, n)] <- c(".L", ".Q", ".C")[1:min(3, n - 1)]
  colnames(contr) <- dn
  contr[, -1, drop = FALSE]
}
如果我使用有序因子数据,我会在列名中得到
L
Q
C
后缀这些后缀是什么意思?它们是如何映射到因子级别的?模型的帮助文件对此问题不清楚

head( model.matrix( as.formula( ~ ps ), 
                    model.frame( as.formula( ~ ps ),
                                 data.frame(ps = factor( x =  sample(x = c( 'none', '3XLT', '41X',  '3X' ),
                                                                     size = 50,
                                                                     replace = TRUE ),
                                                         levels = c( '3X', '3XLT', '41X', 'none' ),
                                                         ordered = TRUE ) ) ) ) )

#   (Intercept)       ps.L ps.Q       ps.C
# 1           1 -0.2236068 -0.5  0.6708204
# 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.6708204  0.5  0.2236068
# 6           1 -0.2236068 -0.5  0.6708204
如果我使用无序因子,我可以很容易地通过列名跟踪列的映射

head( model.matrix( as.formula( ~ ps ), 
                    model.frame( as.formula( ~ ps ),
                                 data.frame(ps = factor( x =  sample(x = c( 'none', '3XLT', '41X',  '3X' ),
                                                                     size = 50,
                                                                     replace = TRUE ),
                                                         levels = c( '3X', '3XLT', '41X', 'none' ) ) ) ) ) )

#   (Intercept) ps3XLT ps41X psnone
# 1           1      0     0      1
# 2           1      1     0      0
# 3           1      0     0      1
# 4           1      1     0      0
# 5           1      0     0      0
# 6           1      1     0      0

我仍然不知道这些后缀的含义,可能是由于一些历史原因

调试
model.matrix
函数后,调用了其中的
C\u modelmatrix

.External2(C_modelmatrix, t, data)
对于有序因子
对比度。poly
用于使用此调用中定义的
make.poly
函数获取设计矩阵。在得到设计矩阵后,列名被修改,并为第2-4列指定了那些奇怪的后缀。第一列将被忽略,如果超过4列,它们将保留由
make.poly
函数定义的名称

contr <- make.poly(n, scores)
if (contrasts) {
  dn <- colnames(contr)
  dn[2:min(4, n)] <- c(".L", ".Q", ".C")[1:min(3, n - 1)]
  colnames(contr) <- dn
  contr[, -1, drop = FALSE]
}
contr

contr <- make.poly(n, scores)
Browse[6]> contr
#             ^0         ^1         ^2            ^3         ^4
# [1,] 0.4472136 -0.6324555  0.5345225 -3.162278e-01  0.1195229
# [2,] 0.4472136 -0.3162278 -0.2672612  6.324555e-01 -0.4780914
# [3,] 0.4472136  0.0000000 -0.5345225 -4.095972e-16  0.7171372
# [4,] 0.4472136  0.3162278 -0.2672612 -6.324555e-01 -0.4780914
# [5,] 0.4472136  0.6324555  0.5345225  3.162278e-01  0.1195229 
control
#             ^0         ^1         ^2            ^3         ^4
#[1,]0.4472136-0.6324555 0.5345225-3.162278e-01 0.1195229
#[2,]0.4472136-0.3162278-0.26726126.3245555E-01-0.4780914
#[3,]0.4472136 0.0000000-0.5345225-4.095972e-16 0.7171372
#[4,]0.44721360.3162278-0.2672612-6.3245555E-01-0.4780914
#[5,]0.4472136 0.6324555 0.5345225 3.162278e-01 0.1195229
编辑: 有序因子对比矩阵中L、Q、C的展开式对应于线性项、二次项和三次项。多项式项次数(大于3)的命名由该多项式项次数的数值表示