ggplot2를 사용하여 두 데이터 세트를 QQ 플롯과 비교하는 방법은 무엇입니까?


11

통계와 R 초보자 모두 1 : 1의 종횡비로 qqplots를 생성하는 데 어려움을 겪고 있습니다. ggplot2는 기본 R 플로팅 패키지보다 플로팅에 대해 훨씬 많은 제어 기능을 제공하는 것으로 보이지만 ggplot2에서 qqplot을 수행하여 두 데이터 세트를 비교하는 방법을 알 수 없습니다.

그래서 내 질문에, ggplot2는 다음과 같은 것이 무엇입니까?

qqplot(datset1,dataset2)

ggplot2 문서가 도움이 될 수 있습니다. docs.ggplot2.org/current/stat_qq.html
Charlie

답변:


12

가장 쉬운 방법 qqplot은 작동 방식을 살펴 보는 것 입니다. 그래서 R 타입에서 :

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

ggplot2를 사용한 qqplot


2
ggplot2이 있는가 stat_qq(), 그것을 사용하는 몇 가지 방법은 무엇입니까? 하나의 벡터를 이론적 분포와 비교하도록 설계된 것 같습니다.이 벡터를 사용하여 두 개의 다른 벡터를 비교하는 방법을 알 수 없었습니다.
Ken Williams

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 줄거리

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.