Это сложный вопрос, и нет идеальных ответов. Я попытаюсь дать вам обзор основных концепций и указать вам направление некоторого полезного чтения по этой теме.
Предположим, что у вас одномерный набор данных, и у вас есть конечный набор функций распределения вероятностей, которые, по вашему мнению, могут быть сгенерированы. Вы можете рассматривать каждый дистрибутив самостоятельно и пытаться найти параметры, которые являются разумными с учетом ваших данных. Есть два способа настройки параметров для функции распределения вероятностей приведенных данных:
- Least Squares
- Maximum Likelihood
По моему опыту, максимального правдоподобия был предпочтительным в последние годы, хотя это не может в каждом поле.
Вот конкретный пример того, как оценивать параметры в R. Рассмотрим множество случайных точек, полученных от гауссовского распределения со средним 0 и стандартным отклонением 1:
x = rnorm(n = 100, mean = 0, sd = 1)
Предположим, что вы знаете, данные были созданы с использованием гауссова процесса, но вы забыли (или никогда не знали!) параметры для гауссова. Вы хотите использовать данные, чтобы дать вам разумные оценки среднего и стандартного отклонения. В R, имеется стандартная библиотека, которая делает это очень просто:
library(MASS)
params = fitdistr(x, "normal")
print(params)
Это дало мне следующий вывод:
mean sd
-0.17922360 1.01636446
(0.10163645) (0.07186782)
Это довольно близко к правильному ответу, а цифры в скобках являются доверительные интервалы вокруг параметров. Помните, что каждый раз, когда вы создаете новый набор точек, вы получите новый ответ для оценок.
Математически это использует максимальную вероятность для оценки среднего и стандартного отклонения гауссова. Вероятность означает (в данном случае) «вероятность данных при заданных значениях параметров». Максимальное правдоподобие означает «значения параметров, которые максимизируют вероятность генерации моих входных данных». Оценка максимального правдоподобия - это алгоритм для нахождения значений параметров, которые максимизируют вероятность генерации входных данных, а для некоторых распределений он может включать в себя алгоритмы numerical optimization. В R большая часть работы выполняется fitdistr, которая в некоторых случаях будет звонить optim.
Вы можете извлечь из журнала правдоподобия из ваших параметров, как это:
print(params$loglik)
[1] -139.5772
Это чаще работать с логарифмической вероятности, а не вероятности избежать ошибок округления. Оценка совместной вероятности ваших данных связана с умножением вероятностей, которые все меньше 1. Даже для небольшого набора данных общая вероятность приближается к 0 очень быстро, и добавление логарифмических вероятностей ваших данных эквивалентно умножению вероятностей. Вероятность максимизируется по мере приближения логарифмического правдоподобия к 0, и, следовательно, более отрицательные числа хуже подходят для ваших данных.
С помощью таких вычислительных инструментов легко оценить параметры для любого распределения. Рассмотрим следующий пример:
x = x[ x >= 0 ]
distributions = c("normal","exponential")
for (dist in distributions) {
print(paste("fitting parameters for ", dist))
params = fitdistr(x, dist)
print(params)
print(summary(params))
print(params$loglik)
}
Экспоненциальное распределение не генерирует отрицательные числа, так что я удалил их в первой строке.Выход (который является стохастическим) выглядит следующим образом:
[1] "fitting parameters for normal"
mean sd
0.72021836 0.54079027
(0.07647929) (0.05407903)
Length Class Mode
estimate 2 -none- numeric
sd 2 -none- numeric
n 1 -none- numeric
loglik 1 -none- numeric
[1] -40.21074
[1] "fitting parameters for exponential"
rate
1.388468
(0.196359)
Length Class Mode
estimate 1 -none- numeric
sd 1 -none- numeric
n 1 -none- numeric
loglik 1 -none- numeric
[1] -33.58996
экспоненциальное распределение на самом деле немного более вероятно, породил эти данные, чем нормальное распределение, вероятно, потому, что экспоненциальное распределение не должно назначать любую плотность вероятности к отрицательным числам.
Все эти проблемы с оценкой ухудшаются, когда вы пытаетесь подогнать свои данные к большему количеству распределений. Распределения с большим количеством параметров более гибкие, поэтому они будут лучше соответствовать вашим данным, чем распределения с меньшими параметрами. Кроме того, некоторые дистрибутивы являются особыми случаями других распределений (например, Exponential является частным случаем Gamma). Из-за этого очень часто используется предварительное знание, чтобы ограничить ваши модели выбора подмножеством всех возможных моделей.
Один трюк, чтобы обойти некоторые проблемы при оценке параметров, состоит в том, чтобы сгенерировать много данных и оставить некоторые данные для cross-validation. Чтобы перекрестно проверить соответствие параметров параметрам данным, оставьте некоторые данные из вашей процедуры оценки, а затем оцените вероятность каждой модели по остальным данным.
Вы не смогли описать наиболее важную часть вашего вопроса - что вы хотите сделать с моделью? – hadley 2010-11-27 09:25:30
Этот вопрос лучше подходит для [stats.se] (http://stats.stackexchange.com/) – csgillespie 2010-11-27 10:43:17
Эх, я согласен разрешить ему не учитывать, что он будет делать с параметрической моделью. Даже просто работа с синтетическими данными, полученными из адекватной параметрической модели, достаточно для того, чтобы задать такой вопрос. Бутстрап замечательный, но вы должны сохранить или отправить данные. – Iterator 2011-09-09 12:41:56