1 Tương quan biến định tín hnhị phân

library(tidyverse)
library(chorddiag)
set.seed(2009)

dat=data_frame(A=sample(c("Y","N"),500, replace=T,prob=c(0.3,0.7))%>%as.factor(),
               B=sample(c("Y","N"),500, replace=T,prob=c(0.55,0.45))%>%as.factor(),
               C=sample(c("Y","N"),500, replace=T,prob=c(0.2,0.8))%>%as.factor(),
               D=sample(c("Y","N"),500, replace=T,prob=c(0.6,0.4))%>%as.factor(),
               E=sample(c("Y","N"),500, replace=T,prob=c(0.7,0.3))%>%as.factor(),
               X=sample(c("Y","N"),500, replace=T,prob=c(0.8,0.2))%>%as.factor(),
               Y=sample(c("Y","N"),500, replace=T,prob=c(0.4,0.6))%>%as.factor(),
               Z=sample(c("Y","N"),500, replace=T,prob=c(0.35,0.65))%>%as.factor())

head(dat)%>%knitr::kable()
A B C D E X Y Z
N Y Y Y N Y Y N
N Y Y N Y Y N N
N Y N Y Y Y N N
N N Y Y Y N N N
N Y N Y N Y N Y
N N Y Y Y Y N N

2 Chuẩn bị hàm vẽ chord_diagram

draw_chord_diagram = function(dat = dat, categoric = T) {
  if (categoric == T) {
  cat_list = colnames(dat)
  cor_mat = matrix(nrow = dim(dat)[2], ncol = dim(dat)[2])
  
  for (i in c(1:dim(dat)[2])){
    long_dat = dat %>% gather(cat_list[-i], key = "fact", value = "status")
    cond = long_dat[1]=="Y" & long_dat[3] == "Y"
    filt_long_dat = long_dat[cond,]
    xtb_vect = filt_long_dat %>%group_by(cat_list[1],fact)%>%tally()%>%t()
    cor_mat[i,-i] = xtb_vect[3,]%>%as.integer()
    cor_mat[i,i] = sum(dat[i]=="Y")%>%as.integer()
  }
  
  dimnames(cor_mat) <- list(r = colnames(dat),
                    c = colnames(dat))
  
  chorddiag(cor_mat, 
          groupColors = pals::brewer.spectral(dim(dat)[2]), 
          groupnamePadding = 10,
          showTicks = F)
  }
  else{
    cm = cor(dat)
  diag(cm) = NA
  
  chorddiag(abs(cm),showTicks = F,
            groupColors = pals::brewer.spectral(dim(dat2)[2]))
  }
  }

3 Kết quả

draw_chord_diagram(dat,categoric = T)

4 Chord diagram áp dụng được cả cho biến định lượng

dat2 = data_frame(A= rnorm(500),
                  B= rnorm(500),
                  C= rnorm(500),
                  D= rnorm(500),
                  E= rnorm(500),
                  X= rnorm(500),
                  Y= rnorm(500),
                  Z= rnorm(500))

head(dat2)%>%knitr::kable()
A B C D E X Y Z
0.5967539 1.0212297 0.1362541 -0.0969490 -0.8733515 -1.0551382 -0.8908629 -1.6135771
0.4787556 -1.0990761 1.4098798 1.3027122 1.0541796 0.3604073 -1.2343853 1.2976629
0.6860399 1.1180576 0.5233555 -0.0043952 1.1081349 0.0964058 -0.0432363 -0.0059015
-0.0895731 0.0577317 -1.2212518 0.2915248 0.3563021 -0.1785445 0.2564587 -0.4844600
-0.3527248 0.6881995 -1.3911750 0.0317707 0.9862375 -2.2138065 0.2614178 1.0838553
-0.2084523 1.8137606 0.7932908 -0.8125831 0.0065936 -0.2444381 -0.2144368 -0.9408870
draw_chord_diagram(dat2,categoric = F)
LS0tDQp0aXRsZTogIkNob3JkIGRpYWdyYW0iIA0KYXV0aG9yOiAiTMOqIE5n4buNYyBLaOG6oyBOaGkiDQpkYXRlOiAiMjAgVGjDoW5nIDkgbsSDbSAyMDE5Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50OiANCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0aGVtZTogImRlZmF1bHQiDQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgZGV2OiAnc3ZnJw0KLS0tDQoNCmBgYHtyIHNldHVwLGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KIVtdKGNob3JkLnBuZykNCg0KIyBUxrDGoW5nIHF1YW4gYmnhur9uIMSR4buLbmggdMOtbiBobmjhu4sgcGjDom4NCg0KYGBge3IsbWVzc2FnZSA9IEZBTFNFLHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoY2hvcmRkaWFnKQ0KYGBgDQoNCg0KYGBge3IsbWVzc2FnZSA9IEZBTFNFLHdhcm5pbmc9RkFMU0V9DQpzZXQuc2VlZCgyMDA5KQ0KDQpkYXQ9ZGF0YV9mcmFtZShBPXNhbXBsZShjKCJZIiwiTiIpLDUwMCwgcmVwbGFjZT1ULHByb2I9YygwLjMsMC43KSklPiVhcy5mYWN0b3IoKSwNCiAgICAgICAgICAgICAgIEI9c2FtcGxlKGMoIlkiLCJOIiksNTAwLCByZXBsYWNlPVQscHJvYj1jKDAuNTUsMC40NSkpJT4lYXMuZmFjdG9yKCksDQogICAgICAgICAgICAgICBDPXNhbXBsZShjKCJZIiwiTiIpLDUwMCwgcmVwbGFjZT1ULHByb2I9YygwLjIsMC44KSklPiVhcy5mYWN0b3IoKSwNCiAgICAgICAgICAgICAgIEQ9c2FtcGxlKGMoIlkiLCJOIiksNTAwLCByZXBsYWNlPVQscHJvYj1jKDAuNiwwLjQpKSU+JWFzLmZhY3RvcigpLA0KICAgICAgICAgICAgICAgRT1zYW1wbGUoYygiWSIsIk4iKSw1MDAsIHJlcGxhY2U9VCxwcm9iPWMoMC43LDAuMykpJT4lYXMuZmFjdG9yKCksDQogICAgICAgICAgICAgICBYPXNhbXBsZShjKCJZIiwiTiIpLDUwMCwgcmVwbGFjZT1ULHByb2I9YygwLjgsMC4yKSklPiVhcy5mYWN0b3IoKSwNCiAgICAgICAgICAgICAgIFk9c2FtcGxlKGMoIlkiLCJOIiksNTAwLCByZXBsYWNlPVQscHJvYj1jKDAuNCwwLjYpKSU+JWFzLmZhY3RvcigpLA0KICAgICAgICAgICAgICAgWj1zYW1wbGUoYygiWSIsIk4iKSw1MDAsIHJlcGxhY2U9VCxwcm9iPWMoMC4zNSwwLjY1KSklPiVhcy5mYWN0b3IoKSkNCg0KaGVhZChkYXQpJT4la25pdHI6OmthYmxlKCkNCmBgYA0KDQojIENodeG6qW4gYuG7iyBow6BtIHbhur0gY2hvcmRfZGlhZ3JhbQ0KDQpgYGB7cixtZXNzYWdlID0gRkFMU0Usd2FybmluZz1GQUxTRX0NCmRyYXdfY2hvcmRfZGlhZ3JhbSA9IGZ1bmN0aW9uKGRhdCA9IGRhdCwgY2F0ZWdvcmljID0gVCkgew0KICBpZiAoY2F0ZWdvcmljID09IFQpIHsNCiAgY2F0X2xpc3QgPSBjb2xuYW1lcyhkYXQpDQogIGNvcl9tYXQgPSBtYXRyaXgobnJvdyA9IGRpbShkYXQpWzJdLCBuY29sID0gZGltKGRhdClbMl0pDQogIA0KICBmb3IgKGkgaW4gYygxOmRpbShkYXQpWzJdKSl7DQogICAgbG9uZ19kYXQgPSBkYXQgJT4lIGdhdGhlcihjYXRfbGlzdFstaV0sIGtleSA9ICJmYWN0IiwgdmFsdWUgPSAic3RhdHVzIikNCiAgICBjb25kID0gbG9uZ19kYXRbMV09PSJZIiAmIGxvbmdfZGF0WzNdID09ICJZIg0KICAgIGZpbHRfbG9uZ19kYXQgPSBsb25nX2RhdFtjb25kLF0NCiAgICB4dGJfdmVjdCA9IGZpbHRfbG9uZ19kYXQgJT4lZ3JvdXBfYnkoY2F0X2xpc3RbMV0sZmFjdCklPiV0YWxseSgpJT4ldCgpDQogICAgY29yX21hdFtpLC1pXSA9IHh0Yl92ZWN0WzMsXSU+JWFzLmludGVnZXIoKQ0KICAgIGNvcl9tYXRbaSxpXSA9IHN1bShkYXRbaV09PSJZIiklPiVhcy5pbnRlZ2VyKCkNCiAgfQ0KICANCiAgZGltbmFtZXMoY29yX21hdCkgPC0gbGlzdChyID0gY29sbmFtZXMoZGF0KSwNCiAgICAgICAgICAgICAgICAgICAgYyA9IGNvbG5hbWVzKGRhdCkpDQogIA0KICBjaG9yZGRpYWcoY29yX21hdCwgDQogICAgICAgICAgZ3JvdXBDb2xvcnMgPSBwYWxzOjpicmV3ZXIuc3BlY3RyYWwoZGltKGRhdClbMl0pLCANCiAgICAgICAgICBncm91cG5hbWVQYWRkaW5nID0gMTAsDQogICAgICAgICAgc2hvd1RpY2tzID0gRikNCiAgfQ0KICBlbHNlew0KICAgIGNtID0gY29yKGRhdCkNCiAgZGlhZyhjbSkgPSBOQQ0KICANCiAgY2hvcmRkaWFnKGFicyhjbSksc2hvd1RpY2tzID0gRiwNCiAgICAgICAgICAgIGdyb3VwQ29sb3JzID0gcGFsczo6YnJld2VyLnNwZWN0cmFsKGRpbShkYXQyKVsyXSkpDQogIH0NCiAgfQ0KYGBgDQoNCiMgS+G6v3QgcXXhuqMNCg0KYGBge3IsbWVzc2FnZSA9IEZBTFNFLHdhcm5pbmc9RkFMU0V9DQpkcmF3X2Nob3JkX2RpYWdyYW0oZGF0LGNhdGVnb3JpYyA9IFQpDQpgYGANCg0KIyBDaG9yZCBkaWFncmFtIMOhcCBk4bulbmcgxJHGsOG7o2MgY+G6oyBjaG8gYmnhur9uIMSR4buLbmggbMaw4bujbmcNCg0KYGBge3IsbWVzc2FnZSA9IEZBTFNFLHdhcm5pbmc9RkFMU0V9DQpkYXQyID0gZGF0YV9mcmFtZShBPSBybm9ybSg1MDApLA0KICAgICAgICAgICAgICAgICAgQj0gcm5vcm0oNTAwKSwNCiAgICAgICAgICAgICAgICAgIEM9IHJub3JtKDUwMCksDQogICAgICAgICAgICAgICAgICBEPSBybm9ybSg1MDApLA0KICAgICAgICAgICAgICAgICAgRT0gcm5vcm0oNTAwKSwNCiAgICAgICAgICAgICAgICAgIFg9IHJub3JtKDUwMCksDQogICAgICAgICAgICAgICAgICBZPSBybm9ybSg1MDApLA0KICAgICAgICAgICAgICAgICAgWj0gcm5vcm0oNTAwKSkNCg0KaGVhZChkYXQyKSU+JWtuaXRyOjprYWJsZSgpDQoNCmBgYA0KDQoNCmBgYHtyLG1lc3NhZ2UgPSBGQUxTRSx3YXJuaW5nPUZBTFNFfQ0KZHJhd19jaG9yZF9kaWFncmFtKGRhdDIsY2F0ZWdvcmljID0gRikNCmBgYA0KDQo=