R中一组分类变量的相关矩阵

时间:2015-07-06 05:26:28

标签: r matrix correlation

我有大约20个关于标记为“Y”或“N”的不同城市的变量并且是因素。变量就像“有合作社”等。我想找到一些相关性,并可能使用corrplot包来显示所有这些变量之间的连接。但由于某种原因,我无法强制变量,以便以cor()或甚至 M <- cor(model.matrix(~.-1,data=mydata[c(25:44)])) 喜欢的方式阅读它们,以便我可以将它们放入矩阵中。我试过了:

userInput = raw_input(
    'Enter n to deal a new hand, r to replay the last '
    'hand, or e to end game: ')

但是corrplot的结果真的很奇怪。有没有人有快速的方法将一堆Y / N答案变成相关矩阵?谢谢!

2 个答案:

答案 0 :(得分:7)

您可以使用sjp.corr函数或sjt.corr函数进行sjPlot-package的图形或表格输出。

DF <- data.frame(v1 = sample(c("Y","N"), 100, T),
                 v2 = sample(c("Y","N"), 100, T),
                 v3 = sample(c("Y","N"), 100, T),
                 v4 = sample(c("Y","N"), 100, T),
                 v5 = sample(c("Y","N"), 100, T))
DF[] <- lapply(DF,as.integer)
library(sjPlot)
sjp.corr(DF)
sjt.corr(DF)

情节:

enter image description here

表格(在RStudio查看器窗格中):

enter image description here

您可以使用许多参数来修改绘图或表格的外观,请参阅一些示例here

答案 1 :(得分:3)

对于二进制变量,您可以考虑cross tabs(R中的table函数)。

但是,获取相关矩阵非常简单:

# example data
set.seed(1)
DF <- data.frame(x=sample(c("Y","N"),100,T),y=sample(c("Y","N"),100,T))

# how to get correlation
DF[] <- lapply(DF,as.integer)
cor(DF)
#            x          y
# x  1.0000000 -0.0369479
# y -0.0369479  1.0000000

# visualize it
library(corrplot)
corrplot(cor(DF))

在此示例中转换为整数时,"N"1"Y"2。我不确定这是否一般(对于R的存储因素)。要查看数据的映射,请在转换为整数之前尝试lapply(DF,levels)

对我而言,情节是有道理的。如果您对此相关的统计解释有疑问,请考虑查看http://stats.stackexchange.com