İki sıra değişken arasındaki ilişkinin grafiği


46

İki sıra değişken arasındaki ilişkiyi göstermek için uygun bir grafik nedir?

Aklıma gelen birkaç seçenek:

  1. Birbirini gizleyen noktaları durdurmak için rastgele titreşim eklenmiş dağılım grafiği. Görünüşe göre standart bir grafik - Minitab buna "bireysel değerler grafiği" diyor. Benim düşünceme göre, sanki veriler bir aralık ölçeğindeymiş gibi sıradan seviyeler arasında bir tür doğrusal enterpolasyonu görsel olarak teşvik ettiği için yanıltıcı olabilir.
  2. Her bir örnekleme birimi için bir nokta çizmek yerine, noktanın büyüklüğü (alan) bu seviye kombinasyonunun sıklığını temsil edecek şekilde uyarlanmış dağılım grafiği. Uygulamada zaman zaman böyle araziler gördüm. Okumak zor olabilir, ancak noktalar, dağınık dağılım grafiğinin, verileri görsel olarak "aralıklandırdığı" yönündeki eleştirinin biraz üstesinden gelen, düzenli aralıklarla yerleştirilmiş bir kafesin üzerinde yatıyor.
  3. Özellikle değişkenlerden biri bağımlı olarak değerlendirilirse, bağımsız değişken seviyelerine göre gruplanmış bir kutu grafiği. Bağımlı değişken seviyelerinin sayısı yeterince yüksek değilse (eksik bıyıkları olan çok "düz" ya da hatta medyanın görsel olarak tanımlanmasını imkansız kılan çökmüş çeyrekler) korkunç olabilir; ancak en azından medyan ve çeyreklerin dikkatini çeker. Bir sıra değişkeni için ilgili tanımlayıcı istatistikler.
  4. Değer tablosu veya sıklığı belirtmek için ısı eşlemeli hücrelerin boş ızgarası. Görsel olarak farklı fakat kavramsal olarak nokta grafiği, nokta alanını sıklıkta gösteren dağılım grafiğine benzer.

Arazilerin tercih edilebileceği başka fikirler veya düşünceler var mı? Ordinal-vs-ordinal parsellerin standart olduğu düşünülen herhangi bir araştırma alanı var mı? (Genomikte frekans ısı haritasının yaygın olduğunu hatırlıyor gibiyim ama nominal-nominal-nominal için daha sık olduğundan şüpheliyim.) İyi bir standart referans için öneriler de memnuniyetle karşılanacaktır, Agresti'den bir şey tahmin ediyorum.

Herhangi biri bir çizim ile göstermek isterse sahte numune verisi için R kodu takip eder.

"Sizin için egzersiz ne kadar önemli?" 1 = hiç önemli değil, 2 = biraz önemsiz, 3 = ne önemli ne de önemsiz, 4 = biraz önemli, 5 = çok önemli.

"10 dakikalık veya daha uzun bir süreyi ne kadar düzenli alıyorsunuz?" 1 = asla, 2 = iki haftada bir kezden az, 3 = her iki haftada bir veya iki haftada bir, 4 = haftada iki veya üç kez, 5 = haftada dört veya daha fazla kez.

Eğer "sık sık" bağımlı bir değişken olarak ele almak doğal ve bağımsız bir değişken olarak "önem" olarak değerlendirilirse, eğer bir arsa ikisi arasında ayrım yaparsa.

importance <- rep(1:5, times = c(30, 42, 75, 93, 60))
often <- c(rep(1:5, times = c(15, 07, 04, 03, 01)), #n=30, importance 1
           rep(1:5, times = c(10, 14, 12, 03, 03)), #n=42, importance 2
           rep(1:5, times = c(12, 23, 20, 13, 07)), #n=75, importance 3
           rep(1:5, times = c(16, 14, 20, 30, 13)), #n=93, importance 4
           rep(1:5, times = c(12, 06, 11, 17, 14))) #n=60, importance 5
running.df <- data.frame(importance, often)
cor.test(often, importance, method = "kendall") #positive concordance
plot(running.df) #currently useless

Sürekli değişkenler için ilgili bir soru faydalı, belki de yararlı bir başlangıç ​​noktası buldum: İki sayısal değişken arasındaki ilişkiyi incelerken saçılma noktalarına alternatifler nelerdir?


1
Peki ya bir spinplot?
Dimitriy V. Masterov

Bazı gruplar arasında tek değişkenli sıralı verileri görüntülemek için ilgili bir soru da ilgili olabilir: Sıralı Verileri Görüntüleme - Ortalamalar, Ortalamalar ve Ortalama Sıraları
Silverfish

Yanıtlar:


15

Döndürme grafiği (mozaik grafiği) buradaki örnek veriler için iyi çalışır, ancak bazı kategori kombinasyonlarının nadir olması veya bulunmaması durumunda okunması veya yorumlanması zor olabilir. Doğal olarak, makul ve beklenen bir şeydir, düşük bir frekansın küçük bir karo ile temsil edilmesi ve sıfırın hiç karo ile gösterilmemesi ancak psikolojik zorluk kalabilir. Ayrıca spinplotları seven insanların makaleleri veya sunumları için iyi sonuç veren örnekleri seçmeleri de doğaldır, ancak genelde kamusal alanda kullanamayacak kadar karışık örnekler ürettim. Tersine, bir döndürme çizgisi kullanılabilir alanı iyi kullanır.

Bazı uygulamalar etkileşimli grafikler öngörür, böylece kullanıcı, daha fazla bilgi edinmek için her bir döşemeyi sorgulayabilir.

Aynı zamanda oldukça iyi çalışabilen bir alternatif, iki yönlü bir çubuk grafiktir (diğer birçok isim vardır).

Örneğin tabplot, http://www.surveydesign.com.au/tipsusergraphs.html içindeki örneğe bakın.

Bu veriler için, olası bir arsa ( tabplotStata'da üretilen ancak herhangi bir makul yazılımda kolay olması gereken)

görüntü tanımını buraya girin

Biçim, tek tek çubukları satır ve sütun tanımlayıcıları ile ilişkilendirmenin kolay olduğu ve sıklık, oran ya da yüzdelere açıklama ekleyebileceğiniz anlamına gelir (sonucun doğal olarak çok meşgul olduğunu düşünüyorsanız bunu yapmayın).

Bazı olasılıklar:

  1. Eğer bir değişken bir yordayıcı olarak bir başkasına bir cevap olarak düşünülebilirse, o zaman onu her zamanki gibi dikey eksende çizmeyi düşünmek gerekir. Burada bir tutumu ölçmek olarak "önemi", soruyu daha sonra davranışı etkileyip etkilemediğini ("sık sık") düşünüyorum. Nedensel mesele bu hayali veriler için bile çoğu zaman daha karmaşık olmakla birlikte, konu hala devam etmektedir.

  2. Öneri # 1, tersi daha iyi çalışırsa, anlamı, düşünmesi ve yorumlanması daha kolaysa, her zaman zordur.

  3. Yüzde veya olasılık arızaları çoğu zaman anlamlıdır. Ham frekans grafiği de yararlı olabilir. (Tabii ki, bu arsa, her iki bilgiyi aynı anda gösteren mozaik parsellerin erdeminden yoksundur.)

  4. Elbette gruplanmış çubuk grafiklerin veya yığınlanmış çubuk grafiklerin (ya da hala yaygın olan gruplandırılmış nokta grafiklerinin WS Cleveland anlamında) (çok daha yaygın) alternatiflerini deneyebilirsiniz. Bu durumda, onların da işe yaradığını sanmıyorum ama bazen daha iyi çalışıyorlar.

  5. Bazıları farklı yanıt kategorilerini farklı renklendirmek isteyebilir. İtirazım yok ve eğer istersen itirazları hiçbir şekilde ciddiye almazsın.

Grafik ve tabloyu hibritleme stratejisi daha genel olarak yararlı olabilir, ya da gerçekten istediğiniz şeyi değil. Sıklıkla tekrarlanan bir tartışma, Şekil ve Tabloların ayrılmasının, baskı icatının ve ürettiği emeğin bölünmesinin yalnızca bir yan etkisi olduğu; Tıpkı bir kez daha gereksiz, tıpkı yazarları tam olarak nasıl ve nerede sevdiklerini gösteren resimler yazmaları gibi.


Grafiği eklediğiniz için teşekkür ederiz. Bu, grafiklerin ve metinsel verilerin nasıl bir araya geldiği sorununu gündeme getirmektedir - bazı insanların çubukların üzerine sayıları koymaktan hoşlanmadıklarını biliyorum (çünkü barların gerçekte olduğundan daha uzun boylu görünmesini sağlar; bu ama bence bilinen bir fikir.
Silverfish

Öte yandan, sayıların konumunu sabitlemek iki sorundan birini yaratıyor gibi görünüyor: ya sayılar çubukları üzerine bindirilmiş sayılarla sonuçlanabilir, ya da onları engelleyen ya da sayıların üstünü sabitlemek onları alt çubuklardan "ayırabilir" özellikle. Bir yerde bu konuların iyi bir tartışma var mı?
Silverfish

Bir referansa ihtiyacın olduğunu sanmıyorum; bu ortak bir tutum. Başka değişkenler de görüyorum: (1) ekranın sadece çok meşgul, düzensiz vb. Olduğu önerilere özgü öneriler (2) aynı bilgilerin örtük olması nedeniyle (veya bazılarına göre açık) sayısal metnin gereksiz olduğu fikrine itiraz ) grafikte (3) herhangi bir şekilde "erkekler mavi giyer ve kızlar pembe giyer", Şekillerin rakamlar ve Tabloların masa olduğu, ve bunların hiçbirinin uymayacağı düşüncesi. (3) saf önyargı olarak beni vurur; (2) prensipte doğrudur, ancak yine de sayılar yardımcı olabilir, (1) örnek olarak düşünülmelidir.
Nick Cox,

Belirli takasların tartışmalarını bilmiyorum. Renklendirilmemiş çubukların bırakılması, böylece sayıların içlerine konabilmesi için genellikle iyi bir fikirdir. Bazen çubuklar bunun her zaman yapılması için çok küçük olabilir.
Nick Cox

30

İşte bir ısı haritasında hızlı bir girişim , hücreleri kırmak için siyah hücre sınırlarını kullandım, ama belki de fayanslar Glen_b'in cevabında olduğu gibi daha fazla ayrılmalı.

Sıcaklık haritası

library(ggplot2)
runningcounts.df <- as.data.frame(table(importance, often))
ggplot(runningcounts.df, aes(importance, often)) +
   geom_tile(aes(fill = Freq), colour = "black") +
   scale_fill_gradient(low = "white", high = "steelblue")

Andy W'nin daha önceki bir yorumuna dayanan bir dalgalanma grafiği : Onları tanımladığı gibi, "kategorik veriler için temelde sadece bindirilmiş noktalar ve bir noktanın boyutu, bu bölmenin içine giren gözlemlerin sayısıyla eşleştiriliyor." Referans için bkz.

Wickham, Hadley ve Heike Hofmann. 2011. Ürün arazileri . IEEE Görselleştirme ve Bilgisayar Grafiği İşlemleri (Proc. Infovis `11) . Önceden yazdırılmış PDF

dalgalanma grafiği

theme_nogrid <- function (base_size = 12, base_family = "") {
  theme_bw(base_size = base_size, base_family = base_family) %+replace% 
    theme(panel.grid = element_blank())   
}

ggplot(runningcounts.df, aes(importance, often)) +
  geom_point(aes(size = Freq, color = Freq, stat = "identity", position = "identity"), shape = 15) +
  scale_size_continuous(range = c(3,15)) + 
  scale_color_gradient(low = "white", high = "black") +
  theme_nogrid()

1
" belki de fayanslar Glen_b'in cevabında olduğu gibi ayrılmalı " - Bu durumda gerekli olduğundan emin değilim, kategorileri burada sürekli olarak görmenin daha az cazibesi var.
Glen_b

18

İşte verilerin bir dönüm noktası nasıl olacağını bir örnek. Bunu Stata'da oldukça hızlı bir şekilde yaptım, ancak bir R uygulaması var . Bence R sadece olmalı:

spineplot(factor(often)~factor(importance))

Eğer R kategorik değişkenleri verirseniz, spineplot aslında varsayılan gibi gözükür:

plot(factor(often)~factor(importance))

Her kategorideki kesirli dağılım, her bir önem kategorisi için gösterilmektedir. Yığınlı çubuklar, çoğunlukla önem kategorisinin verilen kısmını gösteren dikey boyutta çizilir. Yatay boyut, her bir önem kategorisindeki kesri gösterir. Bu nedenle, oluşturulan kiremit alanları, önem ve sıklıktaki her bir çapraz kombinasyon için frekansları veya daha genel olarak toplamları temsil eder.

görüntü tanımını buraya girin


1
Etrafında değiştirdim.
Dimitriy V. Masterov 17:13

1
Nick Cox'tan alıntı (Stata'nın spineplot yazarı): İki değişkene yapılan kısıtlama, gerçeklerden daha belirgindir. Kompozit değişkenler, iki veya daha fazla kategorik değişkenin çapraz kombinasyonu ile yaratılabilir. Bir yanıt değişkeni genellikle y ekseninde gösterilir. Bir değişken ikiliyse, bunu y ekseninde çizmek genellikle daha iyidir. Doğal olarak, bu öneriler arasında bir miktar gerilim olabilir.
Dimitriy V. Masterov 17:13

3
Yukarıdakilere katılıyorum. Fakat Stata'nın varsayılan colour şeması, sıra değişkenler için oldukça kötüdür. Bazı iyi alternatifler, kırmızı ve / veya mavi renklerin farklı tonları veya sadece gr {a | e} yscale seçenekleridir.
Nick Cox

3
@Dimitriy Aynı durumda rastgele bir renk karışımı kullanmayı çok garip buluyorum! Kantitatif olarak, kesin renklerden herhangi bir şey ima veya çıkarımda bulunmam. Ancak mesele, yalnızca derecelendirilmiş bir ölçeğin derecelendirilmiş bir renk dizisi ile iyi eşleşmesidir. Isı haritalarının renklendirilmesinde ve aslında pek çok tematik haritacılıkta da bazı keyfi vardır.
Nick Cox

2
Renkler farklı olduğu sürece, dereceli renk şemasıyla ilgili sorunu görmüyorum. Neden biri enterpolasyon yapmaya istekli olsun ki? Keyfi renklere bir mantık göremiyorum. Gökkuşağı dizileri fizikte anlamlıdır, ancak insanların renkleri nasıl algıladıkları açısından değil (örneğin sarı ve kırmızı çok farklı). Seçimler yoluyla birçok öğrenciyle konuşma konusunda kanıtlarım var ve% 80'inin gökkuşağı veya meyve salatası üzerinde ince bir derecelendirilmiş sekans gördüklerinde içtenlikle "Bu çok daha iyi" olduğunu söyleyebilirim. Soluk maviden soluk kırmızıya kırmızıya doğru mavi iyi çalışır. Bunu hem erkekler hem de kadınlar üzerinde denediğinizden emin olun.
Nick Cox

13

Bunu yapma şeklim biraz şekerleme, ama yeterince kolayca düzeltilebilir.

Bu, titreme yaklaşımının değiştirilmiş bir versiyonudur.

Eksenleri çıkarmak, ölçeği sürekli olarak yorumlama eğilimini azaltır; titreşimli kombinasyonların etrafına kutular çizmek, "ölçek sonu" gibi bir şeyin olduğunu vurguluyor - aralıkların mutlaka eşit olması gerekmiyor

İdeal olarak, 1..5 etiketlerinin kategori isimleri ile değiştirilmesi gerekir, ancak şimdilik hayal gücü için bırakacağım; Bence bunun anlamını taşıyor.

 plot(jitter(often)~jitter(importance),data=running.df,bty="n",
    ylim=c(0.5,5.5),xlim=c(0.5,5.5),cex=0.5,pty="s",xaxt="n",yaxt="n") 
 axis(1,tick=TRUE,col=0)
 axis(2,tick=TRUE,col=0)
 rect(rep(seq(0.75,4.75,1),5),rep(seq(0.75,4.75,1),each=5),
       rep(seq(1.25,5.25,1),5),rep(seq(1.25,5.25,1),each=5),
       border=8)

sarsılmış sıralı arsa


Muhtemel iyileştirmeler:

i) molaları daha küçük yapmak (kişisel olarak bundan daha büyük molaları tercih ederim) ve

ii) kutular içinde belirgin desen oluşumunu azaltmak için bir yarı-seri dizisi kullanmaya çalışmak. Denemem biraz yardımcı olsa da, daha az sayıda noktaya sahip hücrelerde hala daha az ya da daha az ilişkili bir görünüme sahip alt diziler olduğunu görebilirsiniz (örneğin, üst satırdaki kutu, 2. sütun). Bunu önlemek için, yarı-rastgele dizinin her alt kutu için başlatılması gerekebilir . (Bir alternatif Latin Hypercube örneklemesi olabilir.) Bir kez dizilince, bu tam olarak jitter gibi çalışan bir işleve eklenebilir.

yarı rastgele jitter ve daha büyük kutular

library("fOptions")

 hjit <- runif.halton(dim(running.df)[1],2) 
 xjit <- (hjit[,1]-.5)*0.8
 yjit <- (hjit[,2]-.5)*0.8  

 plot(I(often+yjit)~I(importance+xjit),data=running.df,bty="n",
    ylim=c(0.5,5.5),xlim=c(0.5,5.5),cex=0.5,pty="s",xaxt="n",yaxt="n") 
 axis(1,tick=TRUE,col=0)
 axis(2,tick=TRUE,col=0)
 rect(rep(seq(0.55,4.55,1),5),rep(seq(0.55,4.55,1),each=5),
       rep(seq(1.45,5.45,1),5),rep(seq(1.45,5.45,1),each=5),
       border=8)

1
Bunu sevdim, benim için ayrılık gerçekten verilerin sıralı yapısını vurguluyor! Maalesef insan gözü, jittering'deki görünür örüntülere doğal olarak çizilir, örneğin panellerde (4,5) ve (5,3) "yukarı doğru eğilimler". Artı tarafta, "puanları saymak" bana frekansı nokta boyutuna göre değerlendirmekten daha doğal hissettiriyor. "Jitter trendlerinin" dikkatini dağıtmamak için noktaların merkezlerinde eşit aralıklarla yerleştirildiği veya düzenli şekillerde kümelendiği değişkenler var mı?
Silverfish,

1
@Silverfish, coğrafyada benzer bir kavram olarak nokta yoğunluklu haritalardır. Coğrafyacılar, belirli bir miktarda beyaz alanı dolduran düzenli kalıpların veya kalıpların (yani, rasgele birbirinden uzak), gözlemciler arasında daha doğru algılar üretme eğiliminde olduklarına dair bazı kanıtlar buldular.
Andy W,

IMO bu iyi bir fikir, ancak paneller arasındaki boşluk bu örnekte o kadar büyük ki herhangi bir eğilimi görselleştirmeyi çok zorlaştırıyor. Tedavi hastalıktan daha kötüdür (ancak panelleri birbirine daha yakın hale getirmek oldukça kolay olmalıdır).
Andy W,

1
@ gümüş balığı yarı rastgele titreşim vermek bunun için olası bir çözüm olacaktır. Endişen, benim sahip olduğum kişi.
Glen_b

1
Çok hoş! IMO bu, bu örnekteki spinplottan daha iyi bir seçenektir (omurga veya mozaik araziler, herhangi bir kategori çifti için koşullu dağılımları değerlendirmek için daha iyidir - bu sarsıntılı nokta arsa trendleri değerlendirmek için daha kolaydır - verinin sıradan niteliğinden yararlanarak ve bazılarını varsayarak monotonik bir ilişki türü).
Andy W,

7

R paketi riverplot'ı kullanarak:

  data$importance <- factor(data$importance, 
                            labels = c("not at all important",
                                       "somewhat unimportant",
                                       "neither important nor unimportant",
                                       "somewhat important",
                                       "very important"))
  data$often <- factor(data$often, 
                       labels = c("never",
                                  "less than once per fortnight",
                                  "once every one or two weeks",
                                  "two or three times per week",
                                  "four or more times per week"))

  makeRivPlot <- function(data, var1, var2, ...) {

    require(plyr)
    require(riverplot)
    require(RColorBrewer)

    names1 <- levels(data[, var1])
    names2 <- levels(data[, var2])

    var1 <- as.numeric(data[, var1])
    var2 <- as.numeric(data[, var2])

    edges <- data.frame(var1, var2 + max(var1, na.rm = T))
    edges <- count(edges)

    colnames(edges) <- c("N1", "N2", "Value")

    nodes <- data.frame(ID     = c(1:(max(var1, na.rm = T) +
                                      max(var2, na.rm = T))),
                        x      = c(rep(1, times = max(var1, na.rm = T)),
                                   rep(2, times = max(var2, na.rm = T))),
                        labels = c(names1, names2) ,
                        col    = c(brewer.pal(max(var1, na.rm = T), "Set1"),
                                   brewer.pal(max(var2, na.rm = T), "Set1")),
                        stringsAsFactors = FALSE)

    nodes$col <- paste(nodes$col, 95, sep = "")

    return(makeRiver(nodes, edges))

  }

a <- makeRivPlot(data, "importance", "often")

riverplot(a, srt = 45)

görüntü tanımını buraya girin


1
(+1) Bunun için paralel koordinat kullanma fikrini seviyorum ! Yolları diyagram boyunca izlemenin daha kolay olacağını ve eğer renkler soldan sağa doğru akıyorsa, "sık sık" cevapların nasıl çözüldüğünü görmenin daha kolay olacağını düşünüyorum (bağımlı değişken ve açıklayıcı değişken olarak "önemi". Bu tür parsellerin bazı etkileşimli uygulamalarında , bu değişkene göre renklendirmek için bir ekseni tıklatabilirsiniz.
Silverfish

1
Karşılaştırma için, Robert Kosara'nın kategorik veriler için tasarlanan "paralel kümeler" görselleştirmesi şema boyunca akan renklere sahiptir.
Silverfish

6

Aslen düşünmediğim farklı bir fikir, bir elek arsasıydı .

görüntü tanımını buraya girin

Her karonun boyutu beklenen frekansla orantılıdır; dikdörtgenlerin içindeki küçük kareler gerçek frekansları temsil eder. Bu nedenle karelerin yoğunluğu, beklenenden daha yüksek olduğunu gösterir (ve mavi renktedir); karelerin düşük yoğunluğu (kırmızı) beklenenden düşüktür.

Rengin artık kalıntının sadece işaretini değil, boyutunu temsil etmesi durumunda tercih edeceğimi düşünüyorum. Bu özellikle beklenen ve gözlenen frekansların benzer olduğu ve artıkların sıfıra yakın olduğu uç durumlar için geçerlidir; Dikotosik bir kırmızı / mavi şemada küçük sapmaların gereğinden fazla vurgulandığı görülüyor.

R'deki Uygulama:

library(vcd)
runningcounts.df <- as.data.frame(table(importance, often))
sieve(Freq ~ often + importance, data=runningcounts.df, shade= TRUE)

1
Rengin yanı sıra işareti temsil ettiği yönündeki tercihinize göre, bir olasılık beklenenden farkı göreceli olarak küçük olduğunda renkleri daha gri yapmaktır.
Glen_b

6

R'deki yönlü bir çubuk grafik, her bir “önem” düzeyinde “sık sık” dağılımını çok net bir şekilde gösterir. Ancak, eğer maksimum sayım "önem" seviyeleri arasında daha fazla değişiklik yapsaydı, o kadar iyi çalışmayabilirdi; Çok fazla boş alandan kaçınmak için scales="free_y"ggplot'ta ( buraya bakınız ) ayarlamak yeterince kolaydır , ancak dağıtımın şeklinin, çubuklar çok küçük olacağından düşük frekanslı "önem" seviyelerinde ayırt edilmesi zor olacaktır. Belki bu durumlarda, dikey eksende bağıl frekansı (koşullu olasılık) kullanmak daha iyidir.

yönlü çubuk grafiği

Bu tabplot şekilde "temiz" değildir Stata içinde Nick Cox bağlantılı olduğunu, ancak temlikler benzer bilgiler.

R kodu:

library(ggplot)
running2.df <- data.frame(often = factor(often, labels = c("never", "less than once per fortnight", "once every one or two weeks", "two or three times per week", "four or more times per week")), importance = factor(importance, labels = c("not at all important", "somewhat unimportant", "neither important nor unimportant", "somewhat important", "very important")))
ggplot(running2.df, aes(often)) + geom_bar() +
  facet_wrap(~ importance, ncol = 1) +
  theme(axis.text.x=element_text(angle = -45, hjust = 0)) +
  theme(axis.title.x = element_blank())
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.