r - 将学生 t 拟合到不完全分布
问题描述
多亏了一个封闭形式的公式(我研究风险中性密度,使用这个公式之王:RND 公式,第 8 页),我有这种类型的不完全分布:
我的想法是用一个学生-t来适应这个密度。
我已经尝试过MASS和fitdistrplus软件包,但找不到如何执行我的任务。我现在能做的就是获取拟合参数(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")
解决方案
使用位置和比例参数的 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)
推荐阅读
- apache-spark - parquet 文件大小,firehose 与 spark
- php - 尝试访问 Microsoft Graph 时“无法获取本地颁发者证书”
- javascript - 如何使用 Jest 测试 React 组件的 onClick 行?
- python - 类型错误:
() 缺少 1 个必需的位置参数:“项目” - sql - 如果 n-1、n-2.. 结果在 n 的 30 天内,则在分区中获得第 n 个结果
- excel - 尝试用 Excel 单元格内容替换书签时出现 MS Word 自动化错误
- jquery - 通过 JQuery 检测元素上的内联样式/CSS 更改
- python - 汇总 Dataframe 中具有匹配列标题的列
- excel - 是否有 VBA 代码根据另一个列表从过滤器中排除项目
- javascript - Javascript:更简洁的按键减少/聚合方式?