一个分类变量内的两个二元变量之间的相关性

机器算法验证 相关性 广义线性模型 多元分析 二进制数据 lme4-nlme
2022-02-28 04:52:30

问题:

我已经测量了 1 个具有 5 个级别的分类变量中的两个二元变量。

最初,我认为我可以使用 Fisher 精确检验或一些N×M×K它的版本。但是我只找到了表格尺寸特别指定的参考资料2×2×2hypergea以 R 中的 " " 包为例)。就我而言,这是一个5×2×2.

我想知道是否还有其他合适的方法。

这是我在 R 中使用的示例。

set.seed(66)
group1<-as.data.frame(rbind(cbind(rep("GROUP_1",times=50),sample(x=c(1:50),size=50,replace=TRUE),rbinom(50,1,0.25),rep(NA,times=50)),cbind(rep("GROUP_1",times=50),sample(x=c(51:100),size=50,replace=TRUE),rep(NA,times=50),rbinom(50,1,0.75))))
group2<-as.data.frame(rbind(cbind(rep("GROUP_2",times=50),sample(x=c(101:150),size=50,replace=TRUE),rbinom(50,1,0.05),rep(NA,times=50)),cbind(rep("GROUP_2",times=50),sample(x=c(151:200),size=50,replace=TRUE),rep(NA,times=50),rbinom(50,1,0.95))))
group3<-as.data.frame(rbind(cbind(rep("GROUP_3",times=50),sample(x=c(201:250),size=50,replace=TRUE),rbinom(50,1,0.50),rep(NA,times=50)),cbind(rep("GROUP_3",times=50),sample(x=c(251:300),size=50,replace=TRUE),rep(NA,times=50),rbinom(50,1,0.50))))
group4<-as.data.frame(rbind(cbind(rep("GROUP_4",times=50),sample(x=c(301:350),size=50,replace=TRUE),rbinom(50,1,0.67),rep(NA,times=50)),cbind(rep("GROUP_4",times=50),sample(x=c(351:400),size=50,replace=TRUE),rep(NA,times=50),rbinom(50,1,0.33))))
group5<-as.data.frame(rbind(cbind(rep("GROUP_5",times=50),sample(x=c(301:350),size=50,replace=TRUE),rbinom(50,1,0.20),rep(NA,times=50)),cbind(rep("GROUP_5",times=50),sample(x=c(351:400),size=50,replace=TRUE),rep(NA,times=50),rbinom(50,1,0.20))))

testdata<-rbind(group1,group2,group3,group4)
names(testdata)<-c("GROUP","ID","Var1_","Var2_")

我会在这里指出,Var1_ 和 Var2_ 是从不同的个体中测量的,尽管这些个体是从同一人群中采样的。这就是我将 NA 放在数据框中的原因。另外,请注意,某些数据可能会被 ID 伪复制 - 我稍后会回到这一点。

我正在寻找一种分析这个问题的方法。

具体我想知道:

1. 的状态是否能Var1_显着预测 的状态Var2_关系是什么,它有多强?

2. 这种关系在 GROUP 级别之间是否存在显着差异?它有多大不同(效果大小)?

到目前为止我的方法:

一些搜索表明 GLM 可能是合适的。但是,据我所知,GLM 函数要求 V1 和 V2 变量是来自同一样本的观察值。所以,只是为了看看它的外观,我将把 NA 拿出来运行一个 GLM。

group1<-as.data.frame(cbind(rep("GROUP_1",times=50),rbinom(50,1,0.25),rbinom(50,1,0.75)))
group2<-as.data.frame(cbind(rep("GROUP_2",times=50),rbinom(50,1,0.05),rbinom(50,1,0.95)))
group3<-as.data.frame(cbind(rep("GROUP_3",times=50),rbinom(50,1,0.50),rbinom(50,1,0.50)))
group4<-as.data.frame(cbind(rep("GROUP_4",times=50),rbinom(50,1,0.67),rbinom(50,1,0.33)))
group5<-as.data.frame(cbind(rep("GROUP_5",times=50),rbinom(50,1,0.20),rbinom(50,1,0.20)))

testdata<-rbind(group1,group2,group3,group4)
names(testdata)<-c("GROUP","Var1_","Var2_")

glm_obj_1 <- glm(Var1_ ~ Var2_, data=testdata, family=binomial(link="logit"))

summary(glm_obj)

好的...我想这可能是我所追求的,但我想知道 GROUP 之间的关系是否不同。

glm_obj_2 <- glm(Var1_ ~ Var2_* GROUP, data=testdata, family=binomial(link="logit"))
summary(glm_obj_2)

行!这是一个合理的方法吗?删除 NA 对我来说似乎是有问题的,但我不确定如何在 GLM 规范中处理它。

额外学分:

我之前提到过伪复制。我认为这可以通过随机效应来控制?我将尝试在 LME4 中实现的 GLMM... 这次我将添加更少的 ID 级别以增加伪复制的几率。

library(lme4)
group1<-as.data.frame(cbind(rep("GROUP_1",times=50),sample(x=c(1:5),size=50,replace=TRUE),rbinom(50,1,0.25),rbinom(50,1,0.75)))
group2<-as.data.frame(cbind(rep("GROUP_2",times=50),sample(x=c(6:10),size=50,replace=TRUE),rbinom(50,1,0.05),rbinom(50,1,0.95)))
group3<-as.data.frame(cbind(rep("GROUP_3",times=50),sample(x=c(11:15),size=50,replace=TRUE),rbinom(50,1,0.50),rbinom(50,1,0.50)))
group4<-as.data.frame(cbind(rep("GROUP_4",times=50),sample(x=c(16:20),size=50,replace=TRUE),rbinom(50,1,0.67),rbinom(50,1,0.33)))
group5<-as.data.frame(cbind(rep("GROUP_5",times=50),sample(x=c(21:25),size=50,replace=TRUE),rbinom(50,1,0.20),rbinom(50,1,0.20)))

testdata<-rbind(group1,group2,group3,group4)
names(testdata)<-c("GROUP","ID","Var1_","Var2_")

glmer_obj<-glmer(Var1_ ~ Var2_ * GROUP + (1|ID), data=testdata, family=binomial(link="logit"))

summary(glm_obj)

好吧,它无法收敛,但出于说明目的,我希望它就足够了。这是否是处理此类数据的合适方法?

我渴望听到您的回应、建议、批评等。

1个回答

我将尝试简化您的问题,并考虑这些简化。

如果我们忽略该组(并且只考虑第 1 组)。你的问题是var1和var2之间是否有任何关系。正如上面的“hplieninger”评论,如果您没有对同一个人的 var1 和 var2 进行测量,则无法直接比较变量。

然而,一个实用的解决方案,虽然不理想,是使用匹配。换句话说,您将具有 var1 的个人与具有 var2 的个人匹配。因此,您会在每组中获得 25 个匹配项的数据集。此后,您假设匹配的确实是同一个人,并制作回归模型。关于匹配的细节我这里就不赘述了,但是要注意这个方法之后的结论。

另一种简化方法是只考虑 var1 和 group。通过这种方式,您可以使用简单的测试或回归方法来评估 group 和 var1 之间的关联。与 var2 类似。但是,这不考虑 var 1 和 var2 之间的任何关系。您可以评估结果以解释 var1 和 var2 是否在组间具有相似的趋势,但请注意,这只是没有统计证据的解释。

我希望这可以帮助你在你的过程中前进。