Проблема в том, что пороговый параметр является особым: он определяет четкую границу распределения, поэтому любое значение thres
выше минимального значения данных даст нулевые вероятности (-In отрицательных логарифмических вероятностей): если данное значение xl
на меньше , чем указанное пороговое значение, тогда это невозможно в соответствии с определенной статистической моделью. Кроме того, мы уже знаем, что максимальное значение вероятности порога равно минимальному значению в наборе данных (аналогичные результаты верны для MLE оценки границ равномерного распределения . ..)
Я не знаю, почему другие вопросы по SO , касающиеся этого вопроса, не сталкиваются с этой конкретной проблемой - возможно, потому, что они используют начальное значение порога это достаточно далеко ниже минимального значения в наборе данных ...
Ниже я использую фиксированное значение min(xl)-1e-5
для порога (смещение значения вниз позволяет избежать численных проблем, когда значение находится точно на границе). Я также использую интерфейс формул, чтобы мы могли напрямую вызывать функцию dweibull3()
и устанавливать нижние границы для параметров формы и масштаба (в результате мне нужно использовать method="L-BFGS-B"
, который учитывает ограничения).
ml <- mle2(xl ~ dweibull3(shape=shape, scale = scale,
thres=min(xl)-1e-5),
start=list(shape=1, scale=1),
lower=c(0,0),
method="L-BFGS-B",
data=data.frame(xl))
(Интерфейс формулы удобен для простых примеров: если вы хотите сделать что-то намного более сложное, вы можете захотеть вернуться к явному определению собственной функции логарифмического правдоподобия.)
Если вы настаиваете на подборе порогового параметра, вы можете сделать это, установив верхнюю границу, которая (почти) равна минимальному значению в данных [любое большее значение даст NA
значений и, таким образом, нарушит оптимизация]. Тем не менее, вы обнаружите, что оценка порогового параметра всегда сходится к этой верхней границе ... так что при таком подходе действительно трудно добраться до предыдущего ответа (вы также получите предупреждения о том, что параметры на границе и о невозможности инвертировать гессиан).
eps <- 1e-8
ml3 <- mle2(xl ~ dweibull3(shape=shape, scale = scale, thres = thres),
start=list(shape=1, scale=1, thres=-5),
lower=c(shape=0,scale=0,thres=-Inf),
upper=c(shape=Inf,scale=Inf,thres=min(xl)-eps),
method="L-BFGS-B",
data=data.frame(xl))
Для того, чтобы это того стоило, кажется, что можно уместить модель без фиксирования порогового параметра, если вы начнете с небольшого значения и используете оптимизацию Nelder-Mead: однако, это, похоже, дает ненадежные результаты.