【问题标题】:Correlation for multiple categorical variables tableau多个分类变量的相关性表
【发布时间】:2016-12-14 14:21:40
【问题描述】:

问题已更新!!

我有 15 列分类变量,我想要它们之间的相关性。数据集 20,000+ 长,数据集如下所示:

state | job | hair_color | car_color | marital_status
NY    | cs  | brown      | blue      | s
FL    | mt  | black      | blue      | d
NY    | md  | blond      | white     | m
NY    | cs  | brown      | red       | s

请注意,第一行和最后一行 NYcss 重复。我想找出那种模式。 NY 和 cs 高度相关。我需要对列中的值组合进行排名。希望现在这个问题有意义。请注意计算NYcs。是关于找出NYblond 在同一行中一起出现的次数。我需要按行对所有值执行此操作。希望现在这有意义。

我尝试将cor() 与 R 一起使用,但由于这些是分类变量,因此该函数不起作用。我如何使用这个数据集来找出它们之间的相关性?

【问题讨论】:

  • 你能澄清一下你想用cor()测量什么吗?例如,cor(c("red","blue"), c("red","yellow")) 是高于、等于还是低于 cor(c("red","blue"), c("red","brown"))
  • 不,不一般。对于 id 1 我有 15 种颜色,对于 id 2 其他 15 种颜色,我有 20,000 个 id。颜色不会按 id 重复。我想找出每种颜色与其他颜色的相关性。使用cor(),R 返回一个表格矩阵,其中包含所有变量以及每个变量的相关性。颜色变量不是普通的,它们只是分类的。明白我在做什么?
  • 是的,但是对于 16 个变量而不是 2 个。

标签: r correlation categorical-data


【解决方案1】:

您不妨参考Ways to calculate similarity。假设您的数据是

d <- structure(list(state = structure(c(2L, 1L, 1L, 2L, 2L), .Label = c("FL", 
"NY"), class = "factor"), job = structure(c(2L, 1L, 4L, 3L, 2L
), .Label = c("bs", "cs", "md", "mt"), class = "factor"), hair_color = structure(c(3L, 
3L, 1L, 2L, 3L), .Label = c("black", "blond", "brown"), class = "factor"), 
    car_color = structure(c(1L, 2L, 1L, 3L, 2L), .Label = c("blue", 
    "red", "white"), class = "factor"), marital_status = structure(c(3L, 
    1L, 1L, 2L, 3L), .Label = c("d", "m", "s"), class = "factor")), .Names = c("state", 
"job", "hair_color", "car_color", "marital_status"), class = "data.frame", row.names = c(NA, 
-5L))

数据:

> d
  state job hair_color car_color marital_status
1    NY  cs      brown      blue              s
2    FL  bs      brown       red              d
3    FL  mt      black      blue              d
4    NY  md      blond     white              m
5    NY  cs      brown       red              s

我们可以计算观察之间的“差异”:

library(cluster)
daisy(d, metric = "euclidean")

输出:

> daisy(d, metric = "euclidean")
Dissimilarities :
    1   2   3   4
2 0.8            
3 0.8 0.6        
4 0.8 1.0 1.0    
5 0.2 0.6 1.0 0.8

Metric :  mixed ;  Types = N, N, N, N, N 
Number of objects : 5

这告诉我们观察 1 和 5 的差异最小。有很多观察,显然不可能直观地检查相异矩阵,但我们可以过滤掉低于某个阈值的对,例如

out <- daisy(d, metric = "euclidean")
pairs <- expand.grid(2:5, 1:4)
pairs <- pairs[pairs[,1]!=pairs[,2],]
similars <- pairs[which(out<.8),]

给定阈值 0.8,

> similars
  Var1 Var2
4    5    1
6    3    2
8    5    2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2021-01-19
    • 2020-07-03
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多