"Gidon" grafiklerine alternatif grafikler


15

Araştırma alanımda, verileri göstermenin popüler bir yolu, çubuk grafiklerin "tutamak çubukları" ile birlikte kullanılmasıdır. Örneğin,

resim açıklamasını buraya girin

"Tutamak çubukları", yazara bağlı olarak standart hatalar ve standart sapmalar arasında değişir. Tipik olarak, her bir "bar" için numune boyutları oldukça küçüktür - yaklaşık altı.

Bu araziler özellikle biyolojik bilimlerde popüler görünmektedir - örnekler için BMC Biology, cilt 3'ün ilk birkaç makalesine bakın .

Peki bu verileri nasıl sunacaksınız?

Neden bu arazilerden hoşlanmıyorum

Şahsen ben bu çizimleri sevmiyorum.

  1. Örnek boyutu küçük olduğunda, neden yalnızca tek tek veri noktalarını göstermiyorsunuz?
  2. Görüntülenen sd veya se mi? Kimse hangisini kullanacağını kabul etmiyor.
  3. Neden hiç çubuk kullanmıyorsunuz? Veriler (genellikle) 0'dan gitmez, ancak grafikte ilk geçiş yapıldığını gösterir.
  4. Grafikler, verilerin aralığı veya örnek boyutu hakkında bir fikir vermez.

R komut dosyası

Bu, çizimi oluşturmak için kullandığım R kodudur. Bu şekilde (isterseniz) aynı verileri kullanabilirsiniz.

                                        #Generate the data
set.seed(1)
names = c("A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3")
prevs = c(38, 37, 31, 31, 29, 26, 40, 32, 39)

n=6; se = numeric(length(prevs))
for(i in 1:length(prevs))
  se[i] = sd(rnorm(n, prevs, 15))/n

                                        #Basic plot
par(fin=c(6,6), pin=c(6,6), mai=c(0.8,1.0,0.0,0.125), cex.axis=0.8)
barplot(prevs,space=c(0,0,0,3,0,0, 3,0,0), names.arg=NULL, horiz=FALSE,
        axes=FALSE, ylab="Percent", col=c(2,3,4), width=5, ylim=range(0,50))

                                        #Add in the CIs
xx = c(2.5, 7.5, 12.5, 32.5, 37.5, 42.5,  62.5, 67.5, 72.5)
for (i in 1:length(prevs)) {
  lines(rep(xx[i], 2), c(prevs[i], prevs[i]+se[i]))
  lines(c(xx[i]+1/2, xx[i]-1/2), rep(prevs[i]+se[i], 2))
}

                                        #Add the axis
axis(2, tick=TRUE, xaxp=c(0, 50, 5))
axis(1, at=xx+0.1, labels=names, font=1,
     tck=0, tcl=0, las=1, padj=0, col=0, cex=0.1)

6
Alanınızın sadece se v. Sd sorusu üzerinde fikir birliğine varmasına yardımcı olmak büyük bir ilerleme olacaktır. Tamamen farklı şeyler demek.
John

Katılıyorum - se genellikle seçilir, çünkü daha küçük bir bölge verir!
csgillespie

Belki daha bilgilendirici bir başlık?

3
Sadece referans olarak, daha önce "Dinamit Grafikler" adlı hata çubukları ile bu çubuk grafikler gördüm. Burada, hemen hemen herkesle aynı önerileri veren birkaç referans bulunmaktadır (nokta çizelgeleri). Tatsuki Koyama, Dinamit Posteri ve Drummond & Vowler'a Dikkat, 2011 .
Andy W

1
Mümkünse lütfen görüntüyü tekrar ekleyin. Ölü bir bağlantı haline gelmemesi için bu kez resim yükleyiciyi kullanın.
endolith

Yanıtlar:


16

Tüm cevaplarınız için teşekkürler. Tamlık için genellikle yaptığımı eklemeliyim diye düşündüm. Verilen önerilerin bir kombinasyonunu yapmaya eğilimliyim: noktalar, kutu grafikleri (n büyük olduğunda) ve se (veya sd) aralıkları.

( Görüntüyü barındıran site artık düzgün çalışmıyor gibi göründüğü için moderatör tarafından kaldırıldı. )

Nokta grafiğinden, verilerin "gidon" grafiklerinin öne sürdüğü çok daha açıktır. Aslında, A3'te negatif bir değer var!


Bu cevabı bir CW yaptım, bu yüzden rep kazanmıyorum


3
Bu iyi bir cevap. Buna ek olarak, noktaları yatay olarak sarsmayı öneriyorum, bu yüzden üst üste gelmiyorlar, özellikle grup başına bundan daha fazla puanınız varsa. Ggplot2'de geom_jitter () bunu yapar.
Harlan

@Harlan: Katılıyorum. Her ne kadar daha fazla puanım olsaydı muhtemelen bir boxplot kullanardım.
csgillespie

1
Ben de küçük veri kümeleri için dağılım grafiklerini seviyorum (nb, biraz farklı bir arsa için 'dotplot' terimini kullanıyorum). Ancak, ne için değer, yukarıdaki barp daha temiz ve bu daha kolay okunur. Bunun daha iyi olduğundan emin değilim, ama dikkat çekmeye değer.
gung - Monica'yı eski durumuna döndürün

@Harlan: Alternatif olarak, noktaları saydam hale getirin, böylece çoklu noktalar birikir ve daha koyu bir nokta oluşturur mu?
endolith

Bu ölü bağlantıyı değiştirmek için orijinal görüntünüz var mı?
endolith

10

Frank Harrell'in kullanımdaki "Bilgi Alerjisi" başlıklı (en mükemmel) açılış konuşması! Geçen ay bunlara alternatifler gösterdi: ham verileri çubukların sağladığı toplama yoluyla gizlemek yerine, ham veriler de noktalar (veya noktalar) olarak gösterilir. "Verileri neden gizle?" Frank'in yorumu.

Alpa harmanlaması göz önüne alındığında, bu en mantıklı bir öneri olarak karşımıza çıkıyor (ve tüm konuşma en iyi ve önemli külçelerle dolu).


1
Video olarak kullanılabilir mi? Harika görünüyor.
Henrik

1
Bence kelime "sonunda olacak" - anahtar notlar kaydedildi.
Dirk Eddelbuettel

1
bence bu ggplot kolaydır, yani had.co.nz/ggplot2/geom_jitter.html
Mike Dewar

1
jitteraynı zamanda düz R'de.

2
Sadece protokol için, Frank'in konuşması (videoda) artık çevrimiçi: r-bloggers.com/RUG/2010/08/user-2010-conference-videos
Tal Galili

7

Psikolojik bir bakış açısından, veriyi ve veri hakkındaki belirsizliğinizi çizmeyi savunuyorum. Böylece, gösterdiğiniz gibi bir arsada, çubukları sıfıra kadar uzatmakla asla uğraşmam, bu sadece gözün veri aralığındaki farkları ayırt etme yeteneğini en aza indirmeye yarar.

Ayrıca, açıkçası anti-bargrafım; çubuk grafikler, iki değişkeni karışıklığa neden olabilecek aynı estetik nitelikle (x ekseni konumu) eşler. Daha iyi bir yaklaşım, bir değişkeni x eksenine ve başka bir değişkeni başka bir estetik niteliğe (örn. Nokta şekli veya rengi veya her ikisi) eşleyerek gereksiz estetik eşlemeden kaçınmaktır.

Son olarak, yukarıdaki grafiğinize yalnızca değerin üstüne hata çubukları eklersiniz. Bu değer, değerin üstünde ve altındaki çubuklara göre belirsizlik aralıklarını karşılaştırma yeteneğini engeller.

Verileri nasıl çizeceğim (ggplot2 paketi aracılığıyla). Aynı serideki bağlantı noktalarını birleştirdiğimi unutmayın; bazıları bunun sadece hatların bağlandığı seri sayısal olduğunda (bu durumda olduğu gibi) uygun olduğunu savunurlar, ancak x ekseni değişkeninin seviyeleri arasında makul bir sıralı ilişki olduğu sürece, bence bağlantı çizgileri, gözün x ekseni boyunca bağlantı noktalarına yardımcı olmak için kullanışlıdır. Bu, özellikle çizgilerle öne çıkan etkileşimleri tespit etmek için özellikle yararlı olabilir.

library(ggplot2)
a = data.frame(names,prevs,se)
a$let = substr(a$names,1,1)
a$num = substr(a$names,2,2)
ggplot(data = a)+
layer(
    geom = 'point'
    , mapping = aes(
        x = num
        , y = prevs
        , colour = let
        , shape = let
    )
)+
layer(
    geom = 'line'
    , mapping = aes(
        x = num
        , y = prevs
        , colour = let
        , linetype = let
        , group = let
    )    
)+
layer(
    geom = 'errorbar'
    , mapping = aes(
        x = num
        , ymin = prevs-se
        , ymax = prevs+se
        , colour = let
    )
    , alpha = .5
    , width = .5
)

resim açıklamasını buraya girin


1
"Sadece veriyi ve belirsizliği çiz" önerimin kalifiye olması gerektiğini eklemeliyim: verileri, çizilen değişkenle ilgili deneyim / uzmanlığa sahip bir kitleye sunarken, yalnızca verileri ve belirsizliği çizin. Naieve izleyiciye veri sunarken ve sıfır anlamlı bir veri noktası olduğunda, önce izleyicinin ölçeğe yönelebilmesi için sıfıra uzanan verileri gösterirdim, sonra sadece verileri ve belirsizliği göstermek için yakınlaştırın.
Mike Lawrence

R kodu yazmakta zorlandığınız için, son arsaya bir jpeg görüntüsü ekleyebilir misiniz? Sadece img84.imageshack.us dosyasına resim yüklerken buluyorum ve ona link vermek oldukça kolay. Cevabınız için teşekkürler :)
csgillespie

@csgillespie: bitti.
Mike Lawrence

geom_ribbon()Hatayı belirterek böyle bir arsa okumak daha kolay buldum . 1 ile 2 arasındaki bölgeler için görünür tahminler yapmaktan hoşlanmıyorsanız, en azından hata çubuğunun genişliğini azaltın.
JoFrhwld

@JoFrwld: Ben de şeritler seviyorum, ama ben x ekseni değişkeni gerçekten sayısal olduğu durumlarda onları ayırmak eğilimindedir; Yukarıdaki cevabımda ihlal ettiğimi düşündüğüm "x ekseni değişkeni sayısal olmadığı sürece çizgi çizmeyin" kuralı: Op
Mike Lawrence

2

Bu arazileri neden sevmediğinizi merak ediyorum. Onları her zaman kullanıyorum. Çiçeklenme barizliğini belirtmek istemeden, farklı grupların araçlarını karşılaştırmanıza ve% 95 CI'lerinin çakışıp çakışmadığını görmenize izin verir (yani, gerçek ortalama farklı olabilir).

Farklı amaçlar için basitlik ve bilgi dengesi elde etmek önemlidir. Ama bu grafikleri kullandığımda, "bu iki grup birbirinden önemli bir şekilde farklıdır" diyorum [ya da değil].

Benim için harika görünüyor, ama karşı örnekleri duymak isterim. Ben arsa kullanımı örtük veri ortalama geçersiz veya yanıltıcı hale tuhaf bir dağıtım yok olmasıdır.


Bu arazileri neden sevmediğime dair küçük bir bölüm ekledim.
csgillespie

1
@Chris örtüşen CIs pubs.amstat.org/doi/abs/10.1198/000313001317097960 hakkındaki orijinal soruyu da iki farklı
şeyken

Veya bu sitede bir analiz için, bkz. Stats.stackexchange.com/questions/18215 . @ tosonb1 Bağlantınız zaman aşımına uğradı. Makaleye referans verebilir misiniz?
whuber

2

Veriler oranlarsa : bu, başarı sayısının deneme sayısına bölünmesiyle elde edilirse, çok zarif bir yöntem bir huni grafiğidir. Örneğin, bkz. Http://qshc.bmj.com/content/11/4/390.2.full (bağlantı bir abonelik gerektiriyorsa özür dilerim - bana bildirin ve başka bir tane bulacağım).

Diğer veri türlerine uyarlamak mümkün olabilir, ancak herhangi bir örnek görmedim.

GÜNCELLEME:

Abonelik gerektirmeyen (ve bunların nasıl kullanılacağına dair iyi bir açıklaması olan) bir örneğin bağlantısı: http://understandinguncertainty.org/fertility

Oranları standart olmayan verilere karşı basit bir şekilde çizerek orantısız veriler için kullanılabilir, ancak basitliklerinin bir kısmını kaybedebilirler.

Vikipedi makalesi sadece meta-analizlerde kullanımlarını tartıştığı için harika değildir. Diğer birçok bağlamda faydalı olabileceklerini iddia ediyorum.


Veriler gerekli oranlar değildir. Herhangi bir şey olabilir.
csgillespie

Abonelik bağlantısı maalesef.
Matt Parker

... ancak huni parsellerindeki Wikipedia bağlantısı: en.wikipedia.org/wiki/Funnel_plot
Matt Parker

2

Ben burada boxplots kullanın; temiz, anlamlı, parametrik olmayan ... Ya da dağılım daha ilginçse viyolonsel .


2
Boxplots veya vioplots böyle küçük bir örnek boyutu (n = 6) ile uygun olacağından emin değilim
csgillespie

Doğru, soruyu yeterince dikkatle okumadığımı itiraf ediyorum, bu yüzden genel bir fikirdi; yine de 6 puan minimum ama bir boxplot için yeterli olduğunu düşünüyorum. Bazı deneyler yaptım ve anlamlılardı. Öte yandan, açık bir şekilde boxplot (burada önemli bir bilgi parçasıdır) gözlem sayısını göstermez, bu yüzden onun ve noktaların bir kombinasyonunu kullanmayı tercih ederim.

6 puan ile - dağılım arsa muhtemelen en iyisidir (belki de ortalama için kırmızı bir nokta ekleyerek)
Tal Galili

2
Genelde üst üste bindirilmiş noktaları olan boxplotlar kullanıyorum, çok "görsel" buluyorum. Bunun yerine, keman çizimlerini anlamak biraz zor.
nico

1
@csgillespie: Bar ve bıyık grafiklerinin daha iyi olduğunu gösteren nedir? Temelde bir boxplot ile aynı bilgileri gösteriyorlar (işaret ettiğiniz gibi, bıyıklar çeşitli şeyleri temsil edebilir), hatayı sadece bir yönde verirler, bu da kesintili olmasa bile oldukça kafa karıştırıcı olabilir ... Boxpts için tartışmıyor . Ancak, beanplots / violinplots, nispeten düşük örnek boyutları için bile hala çalışmalıdır, çünkü burada açıkladığım gibi sadece bir gauss yoğunluk tahmini .
naught101

1

@ Csgillespie'nin müthiş kodunu yukarıdan basitleştirmek:

qplot(
    data=a,
    x=num,
    y=prevs,
    colour=let,
    shape=let,
    group=let,
    ymin=prevs-se,
    ymax=prevs+se,
    position=position_dodge(width=0.25),
    geom=c("point", "line", "errorbar")
    )

0

Geom_pointrange'ı hata çubuğuna tercih ediyorum ve satırların yararlı olmaktan ziyade dikkat dağıtıcı olduğunu düşünüyorum. @James veya @csgillespie sürümünden çok daha temiz bulduğum sürüm:

qplot(
 data=a,
 x=num,
 y=prevs,
 colour=let,
 ymin=prevs-se,
 ymax=prevs+se,
 position=position_dodge(width=0.25),
 geom=c("pointrange"), size=I(2)
 )
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.