Wie vergleiche ich zwei Datensätze mit dem QQ-Plot mit ggplot2?

11

Als Statistik- und R-Neuling hatte ich große Schwierigkeiten, qqplots mit einem Seitenverhältnis von 1: 1 zu erstellen. ggplot2 scheint weitaus mehr Kontrolle über das Plotten zu bieten als die Standard-R-Plot-Pakete, aber ich kann nicht sehen, wie ein qqplot in ggplot2 durchgeführt wird, um zwei Datensätze zu vergleichen.

Also meine Frage, was ist das ggplot2-Äquivalent von so etwas wie:

qqplot(datset1,dataset2)
Psychemedia
quelle
Die ggplot2-Dokumente könnten hilfreich sein: docs.ggplot2.org/current/stat_qq.html
Charlie

Antworten:

12

Am einfachsten ist es, sich anzusehen, wie es qqplotfunktioniert. Also in R Typ:

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>

Um die Handlung zu erzeugen, müssen wir nur bekommen sxund sy, dh:

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

qqplot mit ggplot2

csgillespie
quelle
2
ggplot2hat eine stat_qq(), gibt es eine Möglichkeit, das zu nutzen? Es scheint so konzipiert zu sein, dass ein Vektor mit einer theoretischen Verteilung verglichen wird. Ich konnte nicht sehen, wie ich damit zwei verschiedene Vektoren vergleichen kann.
Ken Williams
7
Sie können tatsächlich qqplot()alle sort/ length/ approxBerechnungen für Sie durchführen: d <- as.data.frame(qqplot(x, y, plot.it=FALSE)); ggplot(d) + geom_point(aes(x=x, y=y))
Ken Williams
9

Ich benutze dies, wenn ich auch eine normale Leitung möchte.

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

KLDavenport
quelle
0

Wenn Sie ursprünglich nur das Seitenverhältnis steuern möchten, haben Sie folgende Möglichkeiten:

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 Handlung

Ken Williams
quelle