我在使用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?
由于
答案 0 :(得分:2)
因素首先由内部表示第一级别。
您有两个选择:
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)
答案 1 :(得分:1)
0和1是你关卡的名字。与名称对应的基础整数是1和2.您可以使用str
,
str(drug)
# Factor w/ 2 levels "0","1": 2 2 2 2 2 2 1 1 2 2
当您将因子强制转换为数字时,删除名称并获取整数表示。
答案 2 :(得分: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))