目前正在讨论舍入插补二元变量的可靠方法。尽管如此,Bernaards及其同事(2007)开发的所谓自适应舍入程序目前仍是最广泛接受的解决方案。
采用舍入程序涉及二项分布的正态近似。也就是说,基于由下面的公式导出的阈值,二进制变量中的估算值被赋值为0或1,其中x是插补二进制变量的平均值:
threshold <- mean(x) - qnorm(mean(x))*sqrt(mean(x)*(1-mean(x)))
据我所知,关于插补的主要R包(例如Amelia或鼠标)尚未包含有助于二进制变量舍入的函数。这个缺点使得那些打算在逻辑回归分析中使用推算值的研究人员很难,因为他们的因变量是用二进制编码的。
因此,为上面的Bernaards公式编写R函数是有意义的:
bernaards <- function(x)
{
mean(x) - qnorm(mean(x))*sqrt(mean(x)*(1-mean(x)))
}
使用这个公式,可以更容易地计算插补二元变量的阈值,其平均值为.623:
bernaards(.623)
[1] 0.4711302
计算阈值后,通常的下一步是对变量x中的插补值进行舍入。
我的问题是:如何扩展上述功能以包含该任务?
换句话说,可以使用三行代码在R中完成上述所有操作:
threshold <- mean(x) - qnorm(mean(x))*sqrt(mean(x)*(1-mean(x)))
df$x[x > threshold] <- 1
df$x[x < threshold] <- 0
最好是函数包含上述重新编码/舍入,因为对每个二进制变量重复相同的过程将非常耗时,尤其是在处理大型数据集时。有了这样的功能,人们可以在插补后简单地运行一行额外的代码(如下所示),并继续进行分析:
bernaards(dummy1, dummy2, dummy3)