Я пытаюсь воспроизвести следующий пример из «Статистики и анализа данных для финансовой инженерии» Дэвида Рупперта, который подходит для t-распределения студентов по исторической ставке без риска:fitdistr из библиотеки MASS дает предупреждения при подключении t-распределения
library(MASS)
data(Capm, package = "Ecdat")
x <- Capm$rf
fitt <- fitdistr(x,"t", start = list(m=mean(x),s=sd(x)), df=3)
as.numeric(fitt$estimate)
0.437310595161651 0.152205764779349
выход сопровождается следующими предупреждениями сообщение:
Предупреждение сообщение:
In log(s): NaNs producedWarning message:
In log(s): NaNs producedWarning message:
In log(s): NaNs producedWarning message:
In log(s): NaNs producedWarning message:
In log(s): NaNs producedWarning message:
In log(s): NaNs producedWarning message:
In log(s): NaNs producedWarning message:
In log(s): NaNs producedWarning message:
In log(s): NaNs produced
Он появляется из файла справки Тл АиР hat MASS::fitdistr
использует максимальную вероятность для нахождения оптимальных параметров. Однако, когда я делаю оптимизацию вручную (той же книги), все идет гладко, и нет никаких предупреждений:
library(fGarch)
loglik_t <- function(beta) {sum(- dt((x - beta[1])/beta[2],
beta[3], log = TRUE) + log(beta[2]))}
start <- c(mean(x), sd(x), 5)
lower <- c(-1, 0.001, 1)
fit_t <- optim(start, loglik_t, hessian = T, method = "L-BFGS-B", lower = lower)
fit_t$par
0.44232633269102 0.163306955396773 4.12343777572566
Подобранные параметры находятся в пределах допустимых стандартных ошибок, и, кроме того, означает и сд я получил df
.
Может кто-нибудь посоветовать мне, пожалуйста:
- Почему
MASS::fitdistr
производит предупреждения, тогда как оптимизация с помощьюfGarch::optim
удается без предупреждения? - Почему нет
df
вMASS::fitdistr
продукции? - Есть ли способ запустить
MASS:fitdistr
по этим данным без предупреждения и получитеdf
?
Отказ от ответственности:
подобный вопрос был задан несколько раз без ответа here и here
Спасибо, предупреждения исчезли! Как насчет получения 'df'? –
'fitt <- fitdistr (x," t ", start = list (m = mean (x), s = sd (x), df = 3), lower = c (-1, 0.01))', но он возвращает не целое число 'df'result. Может быть, это может помочь? – submartingale