Учитывая набор случайных чисел, взятых из непрерывного одномерного распределения, найдите распределение

Вам нужно создать функцию без параметров, которые вы можете использовать в качестве команды:

b = Button(admin, text='as', command=lambda: button('hey'))

См. раздел «Передача аргументов в обратные вызовы» в этом документе .

30
задан Ben Bolker 4 May 2012 в 21:36
поделиться

5 ответов

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

x <- c(15.771062,14.741310,9.081269,11.276436,11.534672,17.980860,13.550017,13.853336,11.262280,11.049087,14.752701,4.481159,11.680758,11.451909,10.001488,11.106817,7.999088,10.591574,8.141551,12.401899,11.215275,13.358770,8.388508,11.875838,3.137448,8.675275,17.381322,12.362328,10.987731,7.600881,14.360674,5.443649,16.024247,11.247233,9.549301,9.709091,13.642511,10.892652,11.760685,11.717966,11.373979,10.543105,10.230631,9.918293,10.565087,8.891209,10.021141,9.152660,10.384917,8.739189,5.554605,8.575793,12.016232,10.862214,4.938752,14.046626,5.279255,11.907347,8.621476,7.933702,10.799049,8.567466,9.914821,7.483575,11.098477,8.033768,10.954300,8.031797,14.288100,9.813787,5.883826,7.829455,9.462013,9.176897,10.153627,4.922607,6.818439,9.480758,8.166601,12.017158,13.279630,14.464876,13.319124,12.331335,3.194438,9.866487,11.337083,8.958164,8.241395,4.289313,5.508243,4.737891,7.577698,9.626720,16.558392,10.309173,11.740863,8.761573,7.099866,10.032640)
> qqnorm(x)

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

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

> library(MASS)
> fitdistr(x, 't')$loglik
[1] -252.2659
Warning message:
In log(s) : NaNs produced
> fitdistr(x, 'normal')$loglik
[1] -252.2968
> fitdistr(x, 'logistic')$loglik
[1] -252.2996
> fitdistr(x, 'weibull')$loglik
[1] -252.3507
> fitdistr(x, 'gamma')$loglik
[1] -255.9099
> fitdistr(x, 'lognormal')$loglik
[1] -260.6328
> fitdistr(x, 'exponential')$loglik
[1] -331.8191
Warning messages:
1: In dgamma(x, shape, scale, log) : NaNs produced
2: In dgamma(x, shape, scale, log) : NaNs produced
17
ответ дан 27 November 2019 в 23:55
поделиться

Другой подобный подход заключается в использовании пакета fitdistrplus

library(fitdistrplus)

Перебирать интересующие дистрибутивы и генерировать объекты «fitdist». Используйте либо «mle» для оценки максимального правдоподобия , либо «mme» для оценки момента совпадения в качестве метода подбора.

f1<-fitdist(x,"norm",method="mle")

Используйте повторную выборку бутстрапа для имитации неопределенности в параметрах выбранной модели

b_best<-bootdist(f_best)
print(f_best)
plot(f_best)
summary(f_best)

Метод fitdist позволяет использовать пользовательские распределения или распределения из других пакетов при условии, что соответствующая функция плотности dname , соответствующая функция распределения pname и соответствующая функция квантиля qname были определены (или даже просто функция плотности).

Итак, если вы хотите проверить логарифмическую вероятность обратного нормального распределения:

library(ig)
fitdist(x,"igt",method="mle",start=list(mu=mean(x),lambda=1))$loglik

Вы также можете найти Подгонка распределений с помощью R .

15
ответ дан 27 November 2019 в 23:55
поделиться

Мне трудно представить реалистичную ситуацию, в которой это было бы полезно. Почему бы не использовать непараметрический инструмент, такой как оценка плотности ядра?

8
ответ дан 27 November 2019 в 23:55
поделиться

Вы можете попробовать использовать тесты Колмогорова-Смирнова ( ks.тест в R).

Если у вас есть данные о времени до события, вот программное обеспечение, которое выполняет байесовский критерий хи-квадрат по списку распространенных распределений, чтобы сообщить о наилучшем соответствии.

3
ответ дан 27 November 2019 в 23:55
поделиться

(Ответ отредактирован, чтобы добавить дополнительное объяснение)

  1. Вы не можете найти "этот" дистрибутив; Фактическое распределение, из которого взяты данные, почти всегда * гарантированно не входит в какой-либо «общий список», предоставляемый любым таким программным обеспечением. В лучшем случае вы можете найти "один" дистрибутив (скорее несколько), адекватный описанию. Даже если вы найдете что-то подходящее, всегда есть бесконечное количество распределений, которые сколь угодно близко расположены. Реальные данные, как правило, берутся из разнородных смесей распределений, которые сами по себе не обязательно имеют простую функциональную форму.

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

  2. Я не думаю, что простое сравнение вероятностей обязательно будет иметь смысл, поскольку некоторые распределения имеют больше параметров, чем другие. AIC может иметь больше смысла, за исключением того, что ...

  3. Попытка определить «наиболее подходящее» распределение из списка кандидатов, как правило, приводит к переобучению, и, если эффект от такого выбора модели не учтен должным образом, приведет к самоуверенности (модель, которая выглядит великолепно, но на самом деле не соответствуют данные не в вашей выборке). Такие возможности есть в R (на ум приходит пакет fitdistrplus ), но в качестве обычной практики я бы не советовал использовать эту идею. Если вы должны это сделать, используйте контрольные выборки или перекрестную проверку, чтобы получить модели с лучшей ошибкой обобщения.

9
ответ дан 27 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: