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

时间:2015-08-12 16:45:08

标签: r r-mice

我在使用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?

由于

3 个答案:

答案 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))