Ggplot2 का उपयोग करके QQ प्लॉट के साथ दो डेटासेट की तुलना कैसे करें?


11

दोनों एक आँकड़े और आर नौसिखिए के रूप में, मैं 1 के 1 के अनुपात अनुपात के साथ qqplots उत्पन्न करने के लिए वास्तव में कठिन समय रहा है। ggplot2 डिफ़ॉल्ट R प्लॉटिंग पैकेज की तुलना में प्लॉटिंग पर अधिक नियंत्रण प्रदान करता है, लेकिन मैं यह नहीं देख सकता कि दो डेटासेट की तुलना करने के लिए ggplot2 में qqplot कैसे करें।

तो मेरा सवाल है, ggplot2 कुछ के बराबर क्या है:

qqplot(datset1,dataset2)

Ggplot2 डॉक्स सहायक हो सकता है: docs.ggplot2.org/current/stat_qq.html
चार्ली

जवाबों:


12

सबसे आसान काम यह है कि कैसे qqplotकाम करता है। तो आर प्रकार में:

R> qqplot
function (x, y, plot.it = TRUE, xlab = deparse(substitute(x)), 
    ylab = deparse(substitute(y)), ...) 
{
    sx <- sort(x)
    sy <- sort(y)
    lenx <- length(sx)
    leny <- length(sy)
    if (leny < lenx) 
        sx <- approx(1L:lenx, sx, n = leny)$y
    if (leny > lenx) 
        sy <- approx(1L:leny, sy, n = lenx)$y
    if (plot.it) 
        plot(sx, sy, xlab = xlab, ylab = ylab, ...)
    invisible(list(x = sx, y = sy))
}
<environment: namespace:stats>

इसलिए प्लॉट जेनरेट करने के लिए हमें सिर्फ sxऔर सिर्फ syयानी:

x <- rnorm(10);y <- rnorm(20)

sx <- sort(x); sy <- sort(y)
lenx <- length(sx)
leny <- length(sy)
if (leny < lenx)sx <- approx(1L:lenx, sx, n = leny)$y
if (leny > lenx)sy <- approx(1L:leny, sy, n = lenx)$y

require(ggplot2)
g = ggplot() + geom_point(aes(x=sx, y=sy))
g

gqplot2 का उपयोग कर qqplot


2
ggplot2क्या इसका stat_qq()उपयोग करने का कोई तरीका है? यह एक वेक्टर को सैद्धांतिक वितरण की तुलना करने के लिए डिज़ाइन किया गया लगता है, मैं यह नहीं देख सकता कि दो अलग-अलग वैक्टर की तुलना करने के लिए इसका उपयोग कैसे किया जाए।
केन विलियम्स

7
आप वास्तव में आपके qqplot()लिए सभी sort/ length/ approxगणना करने के लिए प्राप्त कर सकते हैं: d <- as.data.frame(qqplot(x, y, plot.it=FALSE)); ggplot(d) + geom_point(aes(x=x, y=y))
केन विलियम्स

9

मैं इसका उपयोग तब करता हूं जब मुझे एक सामान्य रेखा भी चाहिए।

ggplot(data, aes(sample = data$column1)) + stat_qq(color="firebrick2", alpha=1) + geom_abline(intercept = mean(data$column1), slope = sd(data$column1))


0

यदि आपकी मूल आवश्यकता सिर्फ पहलू अनुपात को नियंत्रित करने की है, तो ऐसा करने का एक तरीका है:

x <- rnorm(1000)
y <- rnorm(1500, 2)

myqq <- function(x, y, ...) {
  rg <- range(x, y, na.rm=T)
  qqplot(x, y, xlim=rg, ylim=rg, ...)
}

myqq(x, y)

myqq साजिश

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