R 建模包是否将字符变量视为与无序因子相同?
Do R modeling packages treat character variables the same as unordered factors?
我有属于字符列的分类变量。例如,一个字符列,其值全部为 "yes" 或 "no"。即使我将它们保留为字符列,R 建模包是否会正确地将它们处理为名义分类变量,或者这些包是否要求它们是无序因子?
每个函数都可以自由地做它想做的事,但如果函数使用 model.matrix
那么它会将字符串视为因子。
2 级
x2 <- c("yes", "no", "yes")
model.matrix(~ x2)
给予:
(Intercept) xyes
1 1 1
2 1 0
3 1 1
attr(,"assign")
[1] 0 1
attr(,"contrasts")
attr(,"contrasts")$x
[1] "contr.treatment"
3 级
x3 <- letters[1:3]
model.matrix(~ x3)
给予:
(Intercept) xxb xxc
1 1 0 0
2 1 1 0
3 1 0 1
attr(,"assign")
[1] 0 1 1
attr(,"contrasts")
attr(,"contrasts")$xx
[1] "contr.treatment"
跟进@GaborGrothendieck 的回答:答案是 "usually yes",因为大多数统计建模包都使用 model.matrix()
来处理各种类型的预测变量、交互等。
也就是说,最好的做法可能是明确地转换为因子,这样您就可以 control/know 知道发生了什么。缺点是什么?显式转换为因子还允许您控制级别、对比度等的顺序。
我有属于字符列的分类变量。例如,一个字符列,其值全部为 "yes" 或 "no"。即使我将它们保留为字符列,R 建模包是否会正确地将它们处理为名义分类变量,或者这些包是否要求它们是无序因子?
每个函数都可以自由地做它想做的事,但如果函数使用 model.matrix
那么它会将字符串视为因子。
2 级
x2 <- c("yes", "no", "yes")
model.matrix(~ x2)
给予:
(Intercept) xyes
1 1 1
2 1 0
3 1 1
attr(,"assign")
[1] 0 1
attr(,"contrasts")
attr(,"contrasts")$x
[1] "contr.treatment"
3 级
x3 <- letters[1:3]
model.matrix(~ x3)
给予:
(Intercept) xxb xxc
1 1 0 0
2 1 1 0
3 1 0 1
attr(,"assign")
[1] 0 1 1
attr(,"contrasts")
attr(,"contrasts")$xx
[1] "contr.treatment"
跟进@GaborGrothendieck 的回答:答案是 "usually yes",因为大多数统计建模包都使用 model.matrix()
来处理各种类型的预测变量、交互等。
也就是说,最好的做法可能是明确地转换为因子,这样您就可以 control/know 知道发生了什么。缺点是什么?显式转换为因子还允许您控制级别、对比度等的顺序。