Как проверить, соответствует ли мои данные экспоненциальному распределению?

22

Как я могу проверить, являются ли мои данные, например, зарплата непрерывным экспоненциальным распределением в R?

Вот гистограмма моего образца:

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

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

stjudent
источник
1
ваша переменная дискретная или непрерывная? Экспоненциальное распределение определяется как непрерывное .
Любопытно
непрерывный. Интересно, есть ли тест в R, чтобы проверить это
stjudent
1
Добро пожаловать. Найдите функцию fitdistrв R. Она корректирует функции плотности вероятности (pdfs) на основе метода оценки максимального правдоподобия (MLE). Также ищите в этом сайте такие термины, как pdf, fitdistr, mle и подобные вопросы. Имейте в виду, что такие вопросы почти требуют воспроизводимого примера, чтобы собрать хорошие ответы. Кроме того, это помогает, если вопрос не только о программировании (что может привести к тому, что он будет отложен как не по теме).
Андре Сильва
8
Экспоненциальное распределение будет отображаться в виде прямой линии против позиция построения), где положение построения графика (rank , rank - для наименьшего значения, - размер выборки, и популярные варианты включают себя . Это дает неформальный тест, который может быть таким же или более полезным, чем любой формальный тест. - ) / ( п - 2 + 1 ) 1 п 1 / 2ln(1a)/(n2a+1)1na1/2
Ник Кокс
@Berkan развил идею квантильного сюжета в своем посте.
Ник Кокс

Ответы:

29

Я бы сделал это, сначала оценив единственный параметр распределения, rateиспользуя fitdistr. Это не скажет вам, подходит ли дистрибутив или нет, поэтому вы должны затем использовать тест на соответствие . Для этого вы можете использовать ks.test:

require(vcd)
require(MASS)

# data generation
ex <- rexp(10000, rate = 1.85) # generate some exponential distribution
control <- abs(rnorm(10000)) # generate some other distribution

# estimate the parameters
fit1 <- fitdistr(ex, "exponential") 
fit2 <- fitdistr(control, "exponential")

# goodness of fit test
ks.test(ex, "pexp", fit1$estimate) # p-value > 0.05 -> distribution not refused
ks.test(control, "pexp", fit2$estimate) #  significant p-value -> distribution refused

# plot a graph
hist(ex, freq = FALSE, breaks = 100, xlim = c(0, quantile(ex, 0.99)))
curve(dexp(x, rate = fit1$estimate), from = 0, col = "red", add = TRUE)

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

Исходя из моего личного опыта (хотя я никогда нигде не находил его официально, пожалуйста, подтвердите или исправьте меня), он ks.testбудет работать, только если вы сначала предоставите оценку параметра. Вы не можете позволить ему оценивать параметры автоматически, как, например goodfit, это делает. Вот почему вам нужна эта двухшаговая процедура с fitdistr.

Для получения дополнительной информации следуйте отличное руководство по Ricci Установочный Распределения с R .

любознательный
источник
2
+1. Является ли ks.test лучшим тестом для проверки пригодности в таких ситуациях? Я думаю, что вы также ответили на один мой вопрос .
Андре Сильва
4
просто наперед, вам следует быть осторожным, оценивая параметры по самим данным. В этом случае лучше всего подойдет тест, подобный Андерсону, так как он устойчив к таким ситуациям.
JPC
О тесте KS на экспоненциальность при оценке параметра скорости по данным: см . Наивный вопрос о тесте Колмогорова Смирнова .
Scortchi - Восстановить Монику
8

Хотя я обычно рекомендую проверять экспоненциальность с использованием диагностических графиков (таких как графики QQ), я буду обсуждать тесты, поскольку люди часто хотят их:

Как предполагает Томас, критерий Колмогорова-Смирнова не подходит для проверки экспоненциальности с неопределенным параметром.

Однако, если вы отрегулируете таблицы для оценки параметров, вы получите тест Лиллифорса для экспоненциального распределения.

Lilliefors, H. (1969), «О тесте Колмогорова – Смирнова для экспоненциального распределения со средним неизвестным», журнал Американской статистической ассоциации , Vol. 64 С. 387–389.

Использование этого теста обсуждается в Практической непараметрической статистике Коновера .

Тем не менее, в D'Agostino & Stephens ' Goodness of Fit Techniques , они обсуждают аналогичную модификацию теста Андерсона-Дарлинга (несколько странно, если я правильно помню, но я думаю, что вся необходимая информация о том, как подойти к нему для экспоненциального случая, можно найти в книге), и это почти наверняка будет иметь больше силы против интересных альтернатив.

Точно так же можно оценить что-то вроде теста Шапиро-Франсии (похожего на Шапиро-Вилка, но более простого), основав тест на где - это корреляция между статистикой порядка и показательными показателями ( ожидаемая экспоненциальная статистика заказов). Это соответствует проверке корреляции на графике QQ.rn(1r2)r

Наконец, можно воспользоваться подходом плавного тестирования , как в книге Rayner & Best ( Smooth Tests of Goodness of Fit , 1990 - хотя я считаю, что есть более свежий, с добавлением Thas и « in R » к названию). Экспоненциальный случай также охватывается:

JCW Rayner и DJ Best (1990), «Плавные тесты на пригодность: обзор», International Statistical Review , Vol. 58, № 1 (апрель, 1990), с. 9-17

Косма Шализи также обсуждает плавные тесты в одной главе своих лекционных заметок Бакалавриата «Расширенный анализ данных» или см. Гл. 15 своей книги « Расширенный анализ данных с элементарной точки зрения» .

В некоторых случаях вам может понадобиться смоделировать распределение тестовой статистики; для других доступны таблицы (но в некоторых из этих случаев может быть проще симулировать в любом случае или даже точнее симулировать себя, как в случае теста Лиллифорса, из-за ограниченного размера симуляции в оригинале).

Из всех этих я бы предпочел сделать тот, который экспоненциально эквивалентен Шапиро-Франции (то есть я бы проверил корреляцию на графике QQ [или если бы я делал таблицы, возможно, использовал бы , который отвергнет те же случаи] - он должен быть достаточно мощным, чтобы быть конкурентоспособным с лучшими тестами, но очень прост в выполнении и иметь приятное соответствие визуальному виду графика QQ (можно даже при желании добавьте корреляцию и значение p к графику.n(1r2)

Glen_b - Восстановить Монику
источник
5

Вы можете использовать qq-plot , который является графическим методом для сравнения двух распределений вероятностей путем построения их квантилей друг относительно друга.

В R нет специальной функции qq-plot для экспоненциального распределения (по крайней мере, среди базовых функций). Тем не менее, вы можете использовать это:

qqexp <-  function(y, line=FALSE, ...) { 
    y <- y[!is.na(y)]
    n <- length(y)
    x <- qexp(c(1:n)/(n+1))
    m <- mean(y)
    if (any(range(y)<0)) stop("Data contains negative values")
    ylim <- c(0,max(y))
    qqplot(x, y, xlab="Exponential plotting position",ylim=ylim,ylab="Ordered sample", ...)
    if (line) abline(0,m,lty=2)
    invisible()
  }

При интерпретации ваших результатов: если два сравниваемых распределения схожи, точки на графике qq будут приблизительно лежать на линии y = x. Если распределения линейно связаны, точки на графике qq будут приблизительно лежать на линии, но не обязательно на линии y = x.

Zhubarb
источник
2
В Stata qexpот SSC есть консервированная реализация.
Ник Кокс