Нормальное распределение смеси

Я пытаюсь создать qqplot и запустить тест KS для нормального распределения смеси с 25% N (μ = 0, σ = 4) и 75% N (μ = 4, σ = 2). Как мне адаптировать свой qqplot и тест KS для этого распределения? Я не думаю, что мой аблайн правильный, и мой тест KS не совсем правильно отражает распределение.

Любая помощь будет оценена.

set.seed(4711)
n = 500
P = ppoints(n)
Q = qnorm(P)

dt <- sample(c(1,2), prob= c(0.25,0.75), size = n, replace = T)
x <- c()
for(i in 1:n){
  if(dt[i] == 1) x[i]=rnorm(1, mean = 0, sd = 4) else x[i] = rnorm(1, mean = 4, sd = 2)
}

hist(x, prob = T, breaks = 27, col = "lightgreen", main = "Mixture Normal")
curve(0.25*dnorm(x, mean = 0, sd = 4) + 0.75*dnorm(x, mean = 4, sd = 2), add = T, col = 2, lwd = 3, lty = 2)

qqplot(Q, x)
abline(0,1)


ks.test(x, 'pnorm')

person John Huang    schedule 26.11.2020    source источник
comment
Я не знаю, что имеется в виду, когда вы говорите, что мой тест KS на самом деле не отражает распределение правильно, но ответ на вопрос, почему ваш график выглядит неправильным, легко найти. Я отправлю запоздалый ответ с более разумным видом qqplot.   -  person IRTFM    schedule 28.02.2021


Ответы (1)


Способ получить более разумный qqplot, то есть такой, где прямая линия, представляющая теоретическую (или эмпирическую в случае версии с двумя образцами, как в этом случае), заключается в правильном масштабировании аргументов. График qqplot для теста KS с одним образцом на самом деле является полупараметрическим, то есть сначала извлекается среднее значение и стандартное отклонение тестируемого образца, а затем используется для масштабирования графика статистики порядка. Итак, сделайте это:

 qqplot(Q, scale(x) )  # make the mean 0 and the SD=1
 abline(0,1)

введите описание изображения здесь

ks.test(x, 'pnorm')
#------------------
    One-sample Kolmogorov-Smirnov test

data:  x
D = 0.70763, p-value < 2.2e-16
alternative hypothesis: two-sided
person IRTFM    schedule 28.02.2021