У меня есть набор данных, и я хочу выяснить, какое распределение лучше всего подходит для моих данных.
Я использовал fitdistr()
функцию для оценки необходимых параметров для описания предполагаемого распределения (т. Е. Вейбулла, Коши, Нормаль). Используя эти параметры, я могу провести тест Колмогорова-Смирнова, чтобы оценить, соответствуют ли мои выборочные данные тому же распределению, что и предполагаемое распределение.
Если значение р> 0,05, я могу предположить, что данные выборки взяты из того же распределения. Но значение р не дает никакой информации о божественности посадки, не так ли?
Таким образом, если значение p в моих выборочных данных составляет> 0,05 для нормального распределения, а также распределения Вейбулла, как я могу узнать, какое распределение лучше соответствует моим данным?
Это в основном то, что я сделал:
> mydata
[1] 37.50 46.79 48.30 46.04 43.40 39.25 38.49 49.51 40.38 36.98 40.00
[12] 38.49 37.74 47.92 44.53 44.91 44.91 40.00 41.51 47.92 36.98 43.40
[23] 42.26 41.89 38.87 43.02 39.25 40.38 42.64 36.98 44.15 44.91 43.40
[34] 49.81 38.87 40.00 52.45 53.13 47.92 52.45 44.91 29.54 27.13 35.60
[45] 45.34 43.37 54.15 42.77 42.88 44.26 27.14 39.31 24.80 16.62 30.30
[56] 36.39 28.60 28.53 35.84 31.10 34.55 52.65 48.81 43.42 52.49 38.00
[67] 38.65 34.54 37.70 38.11 43.05 29.95 32.48 24.63 35.33 41.34
# estimate shape and scale to perform KS-test for weibull distribution
> fitdistr(mydata, "weibull")
shape scale
6.4632971 43.2474500
( 0.5800149) ( 0.8073102)
# KS-test for weibull distribution
> ks.test(mydata, "pweibull", scale=43.2474500, shape=6.4632971)
One-sample Kolmogorov-Smirnov test
data: mydata
D = 0.0686, p-value = 0.8669
alternative hypothesis: two-sided
# KS-test for normal distribution
> ks.test(mydata, "pnorm", mean=mean(mydata), sd=sd(mydata))
One-sample Kolmogorov-Smirnov test
data: mydata
D = 0.0912, p-value = 0.5522
alternative hypothesis: two-sided
Значения p составляют 0,8669 для распределения Вейбулла и 0,5522 для нормального распределения. Таким образом, я могу предположить, что мои данные следуют как по Вейбуллу, так и по нормальному распределению. Но какая функция распределения лучше описывает мои данные?
Обращаясь к elevendollar, я нашел следующий код, но не знаю, как интерпретировать результаты:
fits <- list(no = fitdistr(mydata, "normal"),
we = fitdistr(mydata, "weibull"))
sapply(fits, function(i) i$loglik)
no we
-259.6540 -257.9268
I used the fitdistr() function
..... что такоеfitdistr
функция? Что-то из Excel? Или вы что-то написали сами на С?Ответы:
Во-первых, вот несколько быстрых комментариев:
Но давайте сделаем некоторые исследования. Я буду использовать отличный
fitdistrplus
пакет, который предлагает несколько хороших функций для настройки распределения. Мы будем использовать функцию,descdist
чтобы получить некоторые идеи о возможных распределениях кандидатов.Теперь давайте используем
descdist
:Куртоз и квадратная асимметрия вашего образца представлены в виде синей точки с именем «Наблюдение». Кажется, что возможные распределения включают распределение Вейбулла, Логнормального и, возможно, гамма-распределения.
Давайте подойдем к распределению Вейбулла и нормальному распределению:
Теперь осмотрите на предмет соответствия нормальному:
А для Вейбулла подойдет:
Оба выглядят хорошо, но, судя по QQ-Plot, Weibull, возможно, выглядит немного лучше, особенно на хвостах. Соответственно, AIC соответствия Вейбулла ниже по сравнению с нормальным соответствием:
Тестовое моделирование Колмогорова-Смирнова
Я буду использовать процедуру @ Aksakal, описанную здесь, чтобы смоделировать статистику KS под нулем.
ECDF моделируемой статистики KS выглядит следующим образом:
Наконец, наше значение, использующее смоделированное нулевое распределение KS-статистики:p
Это подтверждает наш графический вывод о том, что выборка совместима с распределением Вейбулла.
Как объяснено здесь , мы можем использовать начальную загрузку, чтобы добавить точечные доверительные интервалы к оцененному Weibull PDF или CDF:
Автоматическая распределительная арматура с GAMLSS
gamlss
ПакетR
предлагает возможность попробовать множество различных распределений и выбрать «лучший» в соответствии с GAIC (обобщенная информация Akaike критерий). Основная функция естьfitDist
. Важной опцией в этой функции является тип проверяемых дистрибутивов. Например, settingtype = "realline"
будет пробовать все реализованные распределения, определенные на всей реальной строке, тогда какtype = "realsplus"
будут пытаться только распределения, определенные на реальной положительной строке. Другим важным вариантом является параметр , который является штрафом для GAIC. В приведенном ниже примере я установил параметр который означает, что «лучшее» распределение выбирается в соответствии с классическим AIC. Вы можете установить на что угодно, напримерСогласно AIC, распределение Вейбулла (точнее
WEI2
, его специальная параметризация) наилучшим образом соответствует данным. Точная параметризация распределенияWEI2
подробно описана в этом документе на стр. 279. Давайте проверим соответствие, посмотрев на остатки на графике червя (в основном, детализированный график QQ):Мы ожидаем, что остатки будут близки к средней горизонтальной линии, и 95% из них будут лежать между верхней и нижней пунктирными кривыми, которые действуют как 95% точечные доверительные интервалы. В этом случае график червя выглядит хорошо для меня, указывая на то, что распределение Вейбулла адекватно подходит.
источник
gofstat
и AIC. Не существует единого мнения о том, как лучше определить «лучший» дистрибутив. Мне нравятся графические методы и АПК.Графики - это, в основном, хороший способ лучше понять, как выглядят ваши данные. В вашем случае я бы порекомендовал построить эмпирическую кумулятивную функцию распределения (ecdf) относительно теоретических cdfs с параметрами, которые вы получили из fitdistr ().
Я сделал это один раз для своих данных, а также включил доверительные интервалы. Вот картинка, которую я получил, используя ggplot2 ().
Черная линия - это эмпирическая кумулятивная функция распределения, а цветные линии - это файлы cdf из разных распределений с использованием параметров, которые я получил, используя метод максимального правдоподобия. Легко видеть, что экспоненциальное и нормальное распределение не очень хорошо подходят для данных, потому что линии имеют другую форму, чем ecdf, и линии довольно далеко от ecdf. К сожалению, другие дистрибутивы довольно близки. Но я бы сказал, что линия logNormal ближе всего к черной линии. Используя меру расстояния (например, MSE), можно проверить предположение.
Если у вас есть только два конкурирующих распределения (например , собирание те , которые , кажется, подходят лучше всего в сюжете) , вы можете использовать вероятностно-Ratio-тест , чтобы проверить , какие дистрибутивы лучше подходит.
источник