具有多个二进制变量的相关矩阵
Correlation Matrix with multiple binary variables
我有几个二分变量(大约 15 个)我想相互关联。
为了简单起见,我将使用一个类似的、更简单的数据集来描述我的问题。
假设我们有一个包含 5 个变量的数据框
var1 <- c(1,0,0,1,NA,1,0,0,1,NA)
var2 <- c(1,NA,1,1,NA,1,NA,1,1,NA)
var3 <- c(NA,0,0,1,NA,NA,0,0,1,NA)
var4 <- c(0,0,0,NA,1,0,0,0,NA,1)
var5 <- c(1,1,0,1,NA,1,1,0,1,NA)
DF <- data.frame(var1, var2, var3, var4, var5)
因为我只有二元变量,所以我不能使用皮尔逊相关。
我读过,卡方检验或 phi 相关性可以解决我的问题,但我只找到了带有 2 个变量的说明。一个 2x2 的框架,而不是多个变量。
有没有办法将几个二进制变量相互关联并使用矩阵表示它们?
非常感谢您的回答!
这里有两个二进制变量之间相似性的度量,Jaccard 距离和准确度。
jaccard <- function(x, y){
x <- factor(x, levels = 0:1)
y <- factor(y, levels = 0:1)
tbl <- table(x, y)
tbl[2, 2]/(tbl[1, 2] + tbl[2, 1] + tbl[2, 2])
}
sapply(DF, \(X) sapply(DF, \(Y) jaccard(X, Y)))
sapply(DF, \(X) sapply(DF, \(Y) mean(X == Y, na.rm = TRUE)))
phi 的值等于相关性,因此您可以使用 cor 来获得它。
cor(var1, var5, "pair")
## [1] 0.5773503
library(psych)
phi(table(var1, var5), 7)
## [1] 0.5773503
cor(DF, use = "pair")
## var1 var2 var3 var4 var5
## var1 1.0000000 NA 1.0 NA 0.5773503
## var2 NA NA NA NA NA
## var3 1.0000000 NA 1.0 NA 0.5000000
## var4 NA NA NA 1 NA
## var5 0.5773503 NA 0.5 NA 1.0000000
## Warning message:
## In cor(DF, use = "pair") : the standard deviation is zero
我有几个二分变量(大约 15 个)我想相互关联。
为了简单起见,我将使用一个类似的、更简单的数据集来描述我的问题。
假设我们有一个包含 5 个变量的数据框
var1 <- c(1,0,0,1,NA,1,0,0,1,NA)
var2 <- c(1,NA,1,1,NA,1,NA,1,1,NA)
var3 <- c(NA,0,0,1,NA,NA,0,0,1,NA)
var4 <- c(0,0,0,NA,1,0,0,0,NA,1)
var5 <- c(1,1,0,1,NA,1,1,0,1,NA)
DF <- data.frame(var1, var2, var3, var4, var5)
因为我只有二元变量,所以我不能使用皮尔逊相关。
我读过,卡方检验或 phi 相关性可以解决我的问题,但我只找到了带有 2 个变量的说明。一个 2x2 的框架,而不是多个变量。
有没有办法将几个二进制变量相互关联并使用矩阵表示它们?
非常感谢您的回答!
这里有两个二进制变量之间相似性的度量,Jaccard 距离和准确度。
jaccard <- function(x, y){
x <- factor(x, levels = 0:1)
y <- factor(y, levels = 0:1)
tbl <- table(x, y)
tbl[2, 2]/(tbl[1, 2] + tbl[2, 1] + tbl[2, 2])
}
sapply(DF, \(X) sapply(DF, \(Y) jaccard(X, Y)))
sapply(DF, \(X) sapply(DF, \(Y) mean(X == Y, na.rm = TRUE)))
phi 的值等于相关性,因此您可以使用 cor 来获得它。
cor(var1, var5, "pair")
## [1] 0.5773503
library(psych)
phi(table(var1, var5), 7)
## [1] 0.5773503
cor(DF, use = "pair")
## var1 var2 var3 var4 var5
## var1 1.0000000 NA 1.0 NA 0.5773503
## var2 NA NA NA NA NA
## var3 1.0000000 NA 1.0 NA 0.5000000
## var4 NA NA NA 1 NA
## var5 0.5773503 NA 0.5 NA 1.0000000
## Warning message:
## In cor(DF, use = "pair") : the standard deviation is zero