वितरण की तुलना करने के लिए अच्छे डेटा विज़ुअलाइज़ेशन तकनीक क्या हैं?


25

मैं अपनी पीएचडी थीसिस लिख रहा हूं और मुझे एहसास हुआ है कि मैं वितरण की तुलना करने के लिए बॉक्स भूखंडों में अत्यधिक भरोसा करता हूं। इस कार्य को प्राप्त करने के लिए आपको और कौन से विकल्प पसंद हैं?

मैं यह भी पूछना चाहता हूं कि क्या आपको R गैलरी के रूप में कोई अन्य संसाधन पता है जिसमें मैं डेटा विज़ुअलाइज़ेशन पर विभिन्न विचारों के साथ खुद को प्रेरित कर सकता हूं।


6
मुझे लगता है कि विकल्प उन सुविधाओं पर भी निर्भर करता है जिनकी आप तुलना करना चाहते हैं। आप हिस्टोग्राम पर विचार कर सकते हैं hist; चिकनी घनत्व density; QQ- भूखंडों qqplot; स्टेम और पत्ती भूखंड (थोड़ा प्राचीन) stem। इसके अलावा, कोलमोगोरोव-स्मिर्नोव परीक्षण एक अच्छा पूरक हो सकता है ks.test

1
एक हिस्टोग्राम, एक कर्नेल घनत्व का अनुमान या वायलिन की साजिश के बारे में कैसे?
अलेक्जेंडर

स्टेम और लीफ प्लॉट हिस्टोग्राम की तरह होते हैं लेकिन अतिरिक्त सुविधा के साथ वे आपको प्रत्येक अवलोकन के सटीक मूल्य को निर्धारित करने की अनुमति देते हैं। इसमें बॉक्सप्लेट या q हिस्टोग्राम से मिलने वाले डेटा के बारे में अधिक जानकारी है।
माइकल आर। चेरिक

2
@ प्रोक्रास्टिनेटर, जिसके पास एक अच्छे उत्तर की मेकिंग है, यदि आप इसे थोड़ा विस्तृत करना चाहते हैं, तो आप उसे उत्तर में बदल सकते हैं। पेड्रो, आप भी रुचि हो सकती है इस है, जो प्रारंभिक चित्रमय डेटा अन्वेषण शामिल किया गया। यह वास्तव में आप के लिए पूछ रहे हैं नहीं है, लेकिन फिर भी आप के लिए ब्याज की हो सकती है।
गूँग - मोनिका

1
धन्यवाद दोस्तों, मैं उन विकल्पों से अवगत हूं और उनमें से कुछ का उपयोग पहले ही कर चुका हूं। मैंने निश्चित रूप से लीफ प्लॉट की खोज नहीं की है। आपके द्वारा प्रदत्त लिंक पर और @Procastinator के उत्तर पर मेरी गहरी नज़र होगी
pedrosaurio

जवाबों:


24

मैं अपनी टिप्पणी को विस्तृत करने जा रहा हूं, जैसा कि @gung द्वारा सुझाया गया है। मैं पूर्णता के लिए @Alexander द्वारा सुझाए गए वायलिन प्लाट को भी शामिल करूंगा। इनमें से कुछ उपकरणों का उपयोग दो से अधिक नमूनों की तुलना के लिए किया जा सकता है।

# Required packages

library(sn)
library(aplpack)
library(vioplot)
library(moments)
library(beanplot)

# Simulate from a normal and skew-normal distributions
x = rnorm(250,0,1)
y = rsn(250,0,1,5)

# Separated histograms
hist(x)
hist(y)

# Combined histograms
hist(x, xlim=c(-4,4),ylim=c(0,1), col="red",probability=T)
hist(y, add=T, col="blue",probability=T)

# Boxplots
boxplot(x,y)

# Separated smoothed densities
plot(density(x))
plot(density(y))

# Combined smoothed densities
plot(density(x),type="l",col="red",ylim=c(0,1),xlim=c(-4,4))
points(density(y),type="l",col="blue")

# Stem-and-leaf plots
stem(x)
stem(y)

# Back-to-back stem-and-leaf plots
stem.leaf.backback(x,y)

# Violin plot (suggested by Alexander)
vioplot(x,y)

# QQ-plot
qqplot(x,y,xlim=c(-4,4),ylim=c(-4,4))
qqline(x,y,col="red")

# Kolmogorov-Smirnov test
ks.test(x,y)

# six-numbers summary
summary(x)
summary(y)

# moment-based summary
c(mean(x),var(x),skewness(x),kurtosis(x))
c(mean(y),var(y),skewness(y),kurtosis(y))

# Empirical ROC curve
xx = c(-Inf, sort(unique(c(x,y))), Inf)
sens = sapply(xx, function(t){mean(x >= t)})
spec = sapply(xx, function(t){mean(y < t)})

plot(0, 0, xlim = c(0, 1), ylim = c(0, 1), type = 'l')
segments(0, 0, 1, 1, col = 1)
lines(1 - spec, sens, type = 'l', col = 2, lwd = 1)

# Beanplots
beanplot(x,y)

# Empirical CDF
plot(ecdf(x))
lines(ecdf(y))

आशा है कि ये आपकी मदद करेगा।


14

आपके सुझावों पर थोड़ा और खोज करने के बाद मैंने @Procastinator के उत्तर के पूरक के लिए इस तरह का प्लॉट पाया। इसे 'मधुमक्खी का झुंड' कहा जाता है और यह बॉक्स प्लाट का मिश्रण होता है जिसमें वायलिन प्लॉट के साथ स्कैटर प्लॉट भी होता है।

beeswarm R पैकेज

बीज़वर्म प्लॉट का उदाहरण


2
मैंने भी शामिल किया है beanplot

7

एक नोट:

आप अपने डेटा के बारे में प्रश्नों का उत्तर देना चाहते हैं, न कि स्वयं विज़ुअलाइज़ेशन विधि के बारे में प्रश्न बनाना चाहते हैं। अक्सर, उबाऊ बेहतर है। यह तुलनाओं की तुलना को समझने में भी आसान बनाता है।

एक जवाब:

आर के बेस पैकेज से परे सरल स्वरूपण की आवश्यकता शायद आर में हेडली के जीजीपीलॉट पैकेज की लोकप्रियता को बताती है।

library(sn)
library(ggplot2)

# Simulate from a normal and skew-normal distributions
x = rnorm(250,0,1)
y = rsn(250,0,1,5)


##============================================================================
## I put the data into a data frame for ease of use
##============================================================================

dat = data.frame(x,y=y[1:250]) ## y[1:250] is used to remove attributes of y
str(dat)
dat = stack(dat)
str(dat)

##============================================================================
## Density plots with ggplot2
##============================================================================
ggplot(dat, 
     aes(x=values, fill=ind, y=..scaled..)) +
        geom_density() +
        opts(title = "Some Example Densities") +
        opts(plot.title = theme_text(size = 20, colour = "Black"))

ggplot(dat, 
     aes(x=values, fill=ind, y=..scaled..)) +
        geom_density() +
        facet_grid(ind ~ .) +
        opts(title = "Some Example Densities \n Faceted") +
        opts(plot.title = theme_text(size = 20, colour = "Black"))

ggplot(dat, 
     aes(x=values, fill=ind)) +
        geom_density() +
        facet_grid(ind ~ .) +
        opts(title = "Some Densities \n This time without \"scaled\" ") +
        opts(plot.title = theme_text(size = 20, colour = "Black"))

##----------------------------------------------------------------------------
## You can do histograms in ggplot2 as well...
## but I don't think that you can get all the good stats 
## in a table, as with hist
## e.g. stats = hist(x)
##----------------------------------------------------------------------------
ggplot(dat, 
     aes(x=values, fill=ind)) +
        geom_histogram(binwidth=.1) +
        facet_grid(ind ~ .) +
        opts(title = "Some Example Histograms \n Faceted") +
        opts(plot.title = theme_text(size = 20, colour = "Black"))

## Note, I put in code to mimic the default "30 bins" setting
ggplot(dat, 
     aes(x=values, fill=ind)) +
        geom_histogram(binwidth=diff(range(dat$values))/30) +
        opts(title = "Some Example Histograms") +
        opts(plot.title = theme_text(size = 20, colour = "Black"))

अंत में, मैंने पाया है कि एक साधारण पृष्ठभूमि को जोड़ने से मदद मिलती है। यही कारण है कि मैंने "bgfun" लिखा, जिसे पैनल द्वारा कहा जा सकता है

bgfun = function (color="honeydew2", linecolor="grey45", addgridlines=TRUE) {
    tmp = par("usr")
    rect(tmp[1], tmp[3], tmp[2], tmp[4], col = color)
    if (addgridlines) {
        ylimits = par()$usr[c(3, 4)]
        abline(h = pretty(ylimits, 10), lty = 2, col = linecolor)
    }
}
plot(rnorm(100), panel.first=bgfun())

## Plot with original example data
op = par(mfcol=c(2,1))
hist(x, panel.first=bgfun(), col='antiquewhite1', main='Bases belonging to us')
hist(y, panel.first=bgfun(color='darkolivegreen2'), 
    col='antiquewhite2', main='Bases not belonging to us')
mtext( 'all your base are belong to us', 1, 4)
par(op)

(+1) अच्छा जवाब। मैं alpha=0.5पहले प्लॉट (को geom_density()) में जोड़ दूंगा ताकि ओवरलैपिंग वाले हिस्से छिपे न हों।
स्माइलिग

मैं अल्फा = .5 के बारे में सहमत हूँ, मैं वाक्यविन्यास याद नहीं कर सका!
जीनोरमा

7

यहां आर और यूएस राज्य-स्तरीय अपराध डेटा का उपयोग करके नाथन यॉ के फ़्लॉइंग डेटा ब्लॉग से एक अच्छा ट्यूटोरियल है । यह दिखाता है:

  • बॉक्स-एंड-व्हिस्कर भूखंड (जो आप पहले से ही उपयोग करते हैं)
  • हिस्टोग्राम
  • कर्नेल घनत्व प्लॉट
  • गलीचा भूखंड
  • वायलिन प्लाट
  • बीन प्लॉट्स (बॉक्स प्लॉट का एक अजीब कॉम्बो, घनत्व प्लॉट, बीच में एक गलीचा के साथ)।

हाल ही में, मैं खुद को CDF की हिस्टोग्राम की तुलना में बहुत अधिक प्लॉटिंग पाता हूं।


1
कर्नेल घनत्व भूखंडों के लिए +1। वे कई आबादी की साजिश रचने के लिए हिस्टोग्राम की तुलना में बहुत कम 'व्यस्त' हैं।
डोरशूम

3

विशेष रूप से वितरण की तुलना करने के लिए एक अवधारणा है, जिसे बेहतर ज्ञात होना चाहिए: सापेक्ष वितरण।

मान लें कि हमारे पास यादृच्छिक चर हैं Y0,Y संचयी वितरण कार्यों के साथ एफ0,एफ और हम उनका उपयोग करते हुए, उनकी तुलना करना चाहते हैं एफ0 संदर्भ के रूप में।

परिभाषित करें

आर=एफ0(Y)
यादृच्छिक चर का वितरण आर का सापेक्षिक वितरण है Y, साथ में Y0संधर्भ से। ध्यान दें कि हमारे पास वह हैएफ0(Y0) हमेशा समान वितरण (निरंतर यादृच्छिक चर के साथ, यदि यादृच्छिक चर असतत हैं तो यह अनुमानित होगा)।

आइए एक उदाहरण देखें। वेबसाइट http://www.math.hope.edu/swanson/data/cellphone.txt पुरुष और महिला छात्रों के अंतिम फोन कॉल की लंबाई पर डेटा देता है। आइए हम महिला छात्रों के साथ संदर्भ के रूप में पुरुष छात्रों के लिए फोन कॉल लंबाई के वितरण को व्यक्त करते हैं।

महिलाओं के साथ तुलना में फोन कॉल की लंबाई, पुरुषों के सापेक्ष वितरण

हम तुरंत देख सकते हैं कि पुरुष (इस कॉलेज वर्ग में ...) में महिलाओं की तुलना में कम फोन कॉल होते हैं ... और इसे सीधे, बहुत ही प्रत्यक्ष तरीके से व्यक्त किया जाता है। परएक्स अक्ष को महिलाओं के वितरण में अनुपात दिखाया गया है, और हम इसे पढ़ सकते हैं, उदाहरण के लिए, समय के लिए टी(जो कुछ भी है, उसका मूल्य नहीं दिखाया गया है) जैसे कि 20% महिलाओं की कॉल कम (या बराबर) थीं, उस अंतराल में पुरुषों के लिए सापेक्ष घनत्व लगभग 1.3 और 1.4 के बीच भिन्न होता है। यदि हम (ग्राफ से मानसिक रूप से) लगभग 1.35 के रूप में उस अंतराल में सापेक्ष घनत्व, हम देखते हैं कि उस अंतराल में पुरुषों का अनुपात महिलाओं के अनुपात से लगभग 35% अधिक है। यह उस अंतराल में 27% पुरुषों से मेल खाती है।

हम सापेक्ष घनत्व वक्र के आसपास बिंदुवार आत्मविश्वास अंतराल के साथ एक ही साजिश भी कर सकते हैं:

बिंदुवार विश्वास अंतराल के साथ सापेक्ष वितरण की साजिश

इस मामले में व्यापक आत्मविश्वास बैंड छोटे नमूने के आकार को दर्शाता है।

इस विधि के बारे में एक पुस्तक है: हैंडकॉक

प्लॉट के लिए R कोड यहाँ है:

phone <-  read.table(file="phone.txt", header=TRUE)
library(reldist)
men  <-  phone[, 1]
women <-  phone[, 3]
reldist(men, women)
title("length of mens last phonecall with women as reference")

अंतिम प्लॉट परिवर्तन के लिए:

reldist(men, women, ci=TRUE)
title("length of mens last phonecall with women as reference\nwith pointwise confidence interval (95%)")

ध्यान दें कि भूखंडों को कर्नेल घनत्व अनुमान के उपयोग के साथ उत्पादित किया जाता है, जिसमें चिकनाई की डिग्री को जीसीवी (सामान्यीकृत क्रॉस वैधता) के माध्यम से चुना जाता है।

रिश्तेदार घनत्व के बारे में कुछ और जानकारी। चलोक्यू0 करने के लिए इसी मात्रात्मक समारोह हो एफ0। चलोआर का परिमाण हो आर साथ में yआरमूल माप पैमाने पर संबंधित मूल्य। फिर रिश्तेदार घनत्व के रूप में लिखा जा सकता है

जी(आर)=(क्यू0(आर))0(क्यू0(आर))
या के रूप में मूल माप पैमाने पर जी(आर)=(yआर)0(yआर)। इससे पता चलता है कि सापेक्ष घनत्व की व्याख्या घनत्व के अनुपात के रूप में की जा सकती है। लेकिन, पहले रूप में, तर्क के साथआर, यह भी अपने आप में एक घनत्व है, जो अंतराल पर एक को एकीकृत करता है (0,1)। यह अनुमान के लिए एक अच्छा प्रारंभिक बिंदु बनाता है।

1

मुझे केवल घनत्व का अनुमान लगाना और उन्हें प्लॉट करना पसंद है,

head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

library(ggplot2)
ggplot(data = iris) + geom_density(aes(x = Sepal.Length, color = Species, fill = Species), alpha = .2)

यहाँ छवि विवरण दर्ज करें


आप पीडीएफ के अंदर (वक्र के नीचे) रंग क्यों करते हैं?
भेड़ियों की

मुझे लगता है कि यह प्रीतिकर लगता है।
TrynnaDoStat

शायद - लेकिन यह गलत धारणा को व्यक्त कर सकता है - द्रव्यमान या क्षेत्र को व्यक्त करने के लिए, जो नेत्रहीन रूप से अनुचित हो सकता है।
भेड़ियों

1
यह अनुभवजन्य संभाव्यता द्रव्यमान को व्यक्त करता है।
लेपिडोप्टेरिस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.