在 R 中显示因子水平和标签

Displaying of factor levels and labels in R

我在使用 MICE 后显示因子变量的正确分组时遇到问题。我相信这是一个 R 的东西,但为了确定,我将它包含在鼠标中。

所以,我 运行 我的鼠标算法,这是我如何在鼠标算法中格式化它的片段。请注意,我希望它为 0 表示没有药物,1 表示有药物,所以我在 运行 it

之前强制它成为水平 0 和 1 的一个因素
mydat$drug=factor(mydat$drug,levels=c(0,1),labels=c(0,1))

然后我 运行 老鼠和它 运行 对药物的逻辑回归(这是默认设置),以及我要估算的其他变量。

我可以通过

提取完成其中一项估算的结果
drug=complete(imp,1)$drug

我们可以查看

> head(drug)
[1] 0 0 1 0 1 1
attr(,"contrasts")
  2
0 0
1 1
Levels: 0 1

所以数据肯定是0,1。

但是,当我用它做一些事情时,比如 cbind,它会变成 1 和 2

> head(cbind(drug))
 drug
[1,]    1
[2,]    1
[3,]    2
[4,]    1
[5,]    2
[6,]    2

即使我将它强制转换为数字

> head(as.numeric(drug))
[1] 1 1 2 1 2 2

我想说它与对比度有关,但是当我通过执行

删除对比度时
attr(drug,"contrasts")=NULL

其他人调用打印时仍然显示1和2

我可以使用 I()

使其正确打印
> head(I(drug))
[1] 0 0 1 0 1 1
Levels: 0 1

所以,我认为这是一个 R 问题,但我不知道如何解决它。使用 I() 是正确的解决方案,还是只是一种恰好适用于此的解决方法?使输出显示为 1 和 2 的幕后实际发生了什么?

谢谢

0 和 1 是关卡的名称。 names对应的底层整数是1和2,可以用str,

str(drug)
# Factor w/ 2 levels "0","1": 2 2 2 2 2 2 1 1 2 2

当您将因子强制转换为数字时,您删除名称并获得整数表示。

因子从第一层开始,内部用 1 表示。

你的两个选择:

1) 调整基于 1 的级别索引:

as.numeric(drug) - 1

2) 取因子的标签并转换为数值:

as.numeric(as.character(drug))

有些人会向您指出执行相同操作的更快选项的方向:

as.numeric(levels(drug))[drug]

我也会考虑首先使用 logical 值而不是 factor

mydat$drug = as.logical(mydat$drug) 

这就是 R 编码因子的方式。因子的基础数字表示始终以 1 开头。正如您在以下示例中看到的那样:

as.numeric(factor(c(0,1)))
as.numeric(factor(c(A,B)))

不确定 MICE 工作原理的具体细节,但如果它需要一个因子而不是简单的 0/1 数值变量来使用逻辑回归,您可以随时使用类似以下的方法来破解结果:

as.numeric(as.character(factor(c(0,1)))) 

或在您的具体情况下

drug <- as.numeric(as.character(drug))