首页 > 解决方案 > 将学生 t 拟合到不完全分布

问题描述

多亏了一个封闭形式的公式(我研究风险中性密度,使用这个公式之王:RND 公式,第 8 页),我有这种类型的不完全分布:

RND估计

我的想法是用一个学生-t来适应这个密度。

我已经尝试过MASSfitdistrplus软件包,但找不到如何执行我的任务。我现在能做的就是获取拟合参数(m=1702.041,s=6.608536,df=15.18036),但是从这里我不知道如何为我的分布获取拟合值。

代码示例:

temp = matrix(nrow=1000, ncol=3)
colnames(temp) = c("strikes", "first_density", "mulitply_first_density")
temp = as.data.frame(temp)

# we generate fake data
temp$strikes = seq(1000,2000,length=1000)
temp$first_density = runif(1000,max=0.006, min=1e-10)

# we multiply our first density to generate our sample
temp$mulitply_first_density = temp$first_density*1000000

# we generate our sample
vec = vector()
for (i in 1:nrow(temp))
{
    vec = c(vec, rep(temp$strike[i], temp$mulitply_first_density[i]))
}

# we laod our library
library("MASS")

# we fir our parameters
fitted_parameters = fitdistr(vec, "t")

标签: rdistribution

解决方案


使用位置和比例参数的 t 密度函数的公式在文档的示例中给出mydt

#simulated data
set.seed(42)
x <- rt(1e4, 7, 10)
plot(density(x))

library(MASS)
fitted_parameters = fitdistr(x, "t", start = list(df = 10, m = 10, s = 5))
#      df             m             s     
#  3.81901649   10.56816146    2.66905346 
#( 0.15295551) ( 0.03448627) ( 0.03361758)

mydt <- function(x, m, s, df) dt((x-m)/s, df)/s
curve(do.call(mydt, c(list(x), as.list(fitted_parameters$estimate))), add = TRUE, col = "red")
legend("topright", legend = c("kernel density estimate", "fitted t distribution"), 
       col = c("black", "red"), lty = 1)

结果图


推荐阅读