2016-10-17 8 views
-1

관찰 된 데이터가 푸 아송 분포에 맞는지 확인하려면 Q-Q 플롯을 만들어야합니다.Poisson을 이론적 인 분포로 만드는 Q-Q 플롯을 만드는 방법

df = read.table(text = 'Var1 Freq 
1975 10 
1976 12 
1977 9 
1978 14 
1979 14 
1980 11 
1981 8 
1982 7 
1983 10 
1984 8 
1985 12 
1986 9 
1987 10 
1988 9 
1989 10 
1990 9 
1991 11 
1992 12 
1993 9 
1994 10', header = TRUE) 

df$Freq 열이 관찰 연간 이벤트의 수를 나타냅니다 나를 관심있는 하나입니다

여기 내 data.frame입니다.

나는 qqplot 함수와 qpois을 사용하여 이론적 인 분위수를 생성해야한다는 것을 알고 있지만 어떻게해야합니까?

+0

데이터가 푸 아송 배포되지 않았습니다. 그게 뭐라고 생각하니? –

+0

감사합니다. 나는 단지 당신이 말한 것에 대한 통계적 확인이 필요합니다. –

+0

당신이하려는 것을 이해하지 못합니다. 귀하의 데이터는 분명히 * Poisson이 아닙니다. 예 : 람다 = 1'x <- seq (1975, 1994)에 대한 CDF에서; plot (x, ppois (x, 1)); 또는 PMF'plot (x, rpois (x, 1))'과 같이 정의 할 수 있습니다. –

답변

0

ggplot2에는이 작업을위한 훌륭한 인터페이스가 있습니다. 다음은 빨간색의 합의 단계 라인이있는 QQ 플롯입니다. QQ 플롯은 stat_qq을 사용하고 distribution 인수를 변경합니다. dparams 인수에 lambda을 제공해야합니다.

ggplot(data = df, 
     mapping = aes(sample = Freq)) + 
    stat_qq(distribution = stats::qpois, 
      dparams = list(lambda = mean(df$Freq))) + 
    geom_step(data = data.frame(x = 6:16, 
           Freq = 6:16), 
      mapping = aes(x = x, 
          y = Freq), 
      colour = "red", 
      alpha = 0.5) 
+0

감사합니다 @ 벤자민! 나는 방금 내 자신의 답변을 올렸습니다. 당신이 어떤 실수를 한 것인지 좀 알려주세요. –

0

여기 내 가능한 대답은 : 당신이 어떤 실수를 발견하는 경우

#calculate Frequencies 
tbl = as.data.frame(table(df$Freq)) 

#create theoretical poisson distr 
dist = dpois(1:7, lambda = mean(tbl$Freq)) 
dist = dist * 20    #make values in the same scale as tbl$Freq (20 = sum(tbl$Freq)) 
dist = as.data.frame(dist) 
dist$Var1 = tbl$Var1 

#qqplot 
qqplot(dist$dist, tbl$Freq, xlab = 'Theoretical Quantiles', ylab = 'Empirical Quantiles', 
     main = 'Q-Q plot Poisson', xlim = c(0,5), ylim = c(0,5)) 
abline(0,1) #create 45° line 

알려 주시기 바랍니다. 감사합니다.

1

또한 fitdistrplus 패키지는 훨씬 적은 코드로이 작업을 수행 할 수 있습니다. 경험적, 이론적 밀도 및 CDF를 비교합니다.

library('fitdistrplus') 
plot(fitdist(df$Freq,"pois")) 

람다 등을 얻을 수 있고 다른 배포본도 확인할 수 있습니다. ggplot 접근 방식만큼 유연하지는 않지만 빠른 확인에 좋습니다.