我目前正在开展一个小组项目,估计一系列回报的 VaR 和 ES。其中一项任务是估计分布的自由度。
我正在使用以下方法:
make_loglik <- function(x){ Vectorize( function(nu) sum(dt(x, df=nu, log=TRUE)) )}
t_nu_mle <- function(x) {
loglik <- make_loglik(x)
res <- optimize(loglik, interval=c(0.01, 2000), maximum=TRUE)$maximum
res
}
例如,这会产生:
set.seed(123)
t <- rt(20000,df=3)
t_nu_mle(t)
[1] 2.986434
但是,根据作业中给出的经验数据,我使用例如包 MASS 得到了 DF 的不同值:
library(MASS)
fitdistr(t, "t")
此外,我的其他小组成员在使用实际数据集时也获得了不同的结果。
我上面的功能有缺陷吗?这里可能是什么问题?