2

使用 MICE 后,我在显示因子变量的正确分组时遇到问题。我相信这是一个 R 的东西,但我把它和老鼠一起包括在内只是为了确定。

所以,我运行我的鼠标算法,这里是我如何调用我在鼠标算法中格式化它的一个片段。请注意,我希望它是 0 表示没有药物,1 表示有药物,所以我在运行它之前强制它成为水平 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 的幕后实际发生了什么?

谢谢

4

3 回答 3

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) 
于 2015-08-12T16:50:12.513 回答
1

0 和 1 是关卡的名称。与名称对应的基础整数是 1 和 2。您可以看到str

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

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

于 2015-08-12T16:49:39.317 回答
0

这就是 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))
于 2015-08-12T16:53:02.923 回答