我在使用MICE后,显示因子变量的正确分组存在问题。我认为这是一个R语言问题,但我将其与MICE一起使用以确保它不是其他问题。
所以,我运行了MICE算法,以下是我如何调用和格式化它的片段。请注意,我希望它为0表示没有药物,1表示有药物,因此在运行之前我将其强制转换为具有级别0和1的因子。
我们可以查看它。
即使我强制将其转换为数字
我认为这与对比度有关,但当我通过执行删除对比度时,它似乎并没有影响到我的代码。
所以,我运行了MICE算法,以下是我如何调用和格式化它的片段。请注意,我希望它为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?
谢谢
cbind
,它试图绝望地返回一个矩阵。而且你不能将因子存储在矩阵中。你应该考虑不涉及cbind
的解决方案。 - Benjamin