R语言隐马尔可夫模型HMM连续序列重要性重抽样CSIR估计随机波动率模型SV分析股票收益率时间序列

简介: R语言隐马尔可夫模型HMM连续序列重要性重抽样CSIR估计随机波动率模型SV分析股票收益率时间序列

原文链接:http://tecdat.cn/?p=26678


在本笔记本中,我们向读者介绍了基本的随机波动率模型,并通过连续序列重要性重采样讨论了它们的估计。我们使用收益率数据集来讨论 CSIR 在随机波动率模型估计中的实现和性能。


第一个随机波动率模型


令 yt 为时间 t 的股票收益,σt 为其标准差。考虑以下离散时间随机波动率模型:

zt∼N(0,1) 和 ηt∼N(0,τ2) ,

τ>0 和 |φ1|<1 以确保波动率遵循平稳过程。直观地说,波动过程被建模为一个潜在过程,其中 log(σ2t) 遵循 AR(1) 过程。我们模拟了这个过程。在笔记本上,我们将继续处理这些模拟数据。为简洁起见,我们定义 αt=log(σ2t) 和 θ=(ϕ0,ϕ1,τ) 为参数向量。

## ##我们模拟数据。
##我们设定pi_0 = 0.05, pi = 0.98, tau = 0.02
##模拟数据的函数
#Input 2: T - 时间序列的大小
#Ouput: retF - 模拟的收益率(y)和波动率(alpha)。
    pi <- thta\[2\] # 自相关系数 phi
    tu2 <- heta\[3\] # 具有tau2方差的正常误差
  
    eta <- rorm(T, 0, sqrt(tau2)) # AR(1)波动率模型的误差
    z <- rnrm(T, 0, 1) # 倍增项回报模型
    alha\[1\] <- cost # 在开始阶段没有自相关的观察值
# 仿真时间序列
smdf <- s_sm(theta, T)
y <- smdf$y
lpa <- smdf$apha


点击标题查阅往期内容


PYTHON用时变马尔可夫区制转换(MRS)自回归模型分析经济时间序列


01


02

03

04


隐马尔可夫模型:定义


上面显示的模型属于更一般的隐马尔可夫模型类。设 h(αt|αt-1;θ) 为跃迁密度,g(yt|αt;θ) 为测量密度。


序列蒙特卡罗


对于估计,我们使用序列蒙特卡罗,通过生成 P 随机抽取,称为“粒子”,以近似预测和过滤密度。虽然有很多变体,但我们只讨论(连续)序列重要性重采样(SIR)。

SIR有两个步骤,预测和过滤步骤。


具有连续序列重要性重采样的过滤步骤:算法


连续序列重要性重采样(CSIR) 是 SIR 的一种变体,它提供了过滤粒子的连续版本。该方法的主要优点是它确保模拟似然相对于参数 θ 的向量是“平滑的”,以便能够使用基于梯度的优化方法进行优化。

使用 CSIR 的过滤步骤的算法如下:

  • 输入:
  • 具有条目 u(j) 的排序均匀随机采样向量(拒绝采样);
  • 对于定义为 W(i)t 的每个粒子 α(i)t 在 yt 处评估的正态 PDF;
  • 从预测密度 α(i)t 中排序。


代码


下面我们生成粒子集,并使用 SIR 近似过滤和预测密度。在第一个图中,我们显示了预测密度平均值及其 95 和 5 分位数。在同一个图中,我们还绘制了波动率的真实值。在第二个图中,我们绘制了过滤密度的热图。黑线是真正的波动率。

# --> (原始)序列重要性取样算法:过滤步骤
# 输入 1: appr - 预测密度
# 输入 2: aha_t - 在 y\[t\]评估的正态 pdf
# 输入 3: u - 排序均匀的随机采样向量(拒绝采样)
# 输出:alphp - 粒子过滤
    # 排序和加权的速度减慢
    alhawt <- alph\_wt/sum(alpha\_wt)
    alpa\_rt <- cbind(seq(1,P,1),alpha\_pr)
    alhapr\_id <- lpha\_sort\[order(alha_r\[,2\]),\]。
    alhapr <- alpha_ridx\[,2\]
    alph\_ix <- alha\_p_idx\[,1\]
    alha\_wt <- alp\_w\[alpha_idx\]
    alhacwt <- c(0, cumsum(alpha_wt))
    j <- 1
    for (i in 1:P)
        while((aphawt\[i\] < u\[j\]) && (u\[j\] <= alpawt\[i+1\])){
            lp\_up\[j\] <- alpa\_r\[i\] 。
}
# ----------------------------------------------------------------------
# 设置粒子过滤
# ----------------------------------------------------------------------
P <- 200 # 设置粒子的数量
lph_up <- rnorm(P,0,0.1)
alpar <- rep(0,P)
aha_w <- rep(1,P)/P
alphup_mt <- matrix(rep(0,T*3),T)
ala_pmat <- matrix(rep(0, T*3),T)
ah_prare <- matrix(rep(0, T*20),T)
# 从一个近似值中生成一个由P个随机抽样组成的粒子集
# 每个时间序列点的预测和过滤分布的近似值
for (t in 1:T){
    # 预测步骤
    appr <- nst + phi * alpp + rnorm(P,0,srt(tau2))
    # 更新/过滤步骤(态密度)
    ahat <- dnorm(y\[t\]*rep1,P), mean=0 , sd = exp(phar/2)
    alpap <- sir(alhapr=aph\_r,alhawt=alpa\_t, u=sort(runif(P,0,1))
# 绘制预测密度图
plot(sqrt(252) * exp(alpha/2), type='l')
## 筛选密度热图
    
het <- matrix(rep(1,T*20), T, 20)
plot(NULL, xlim = c(1, T), ylim = c(0, 160), main="过滤密度热图",

在下一部分中,我们提供了 CSIR 的 R 和 C 版本。R 版本仅出于代码可读性的目的而提供。

###连续序列重要性重取样:过滤步骤
# 输入 1: alppr - 预测密度
# 输入 2: alhawt - 在 y\[t\]处评估的正态 pdf
# 输入 3: u - 排序均匀的随机采样向量(拒绝采样)
# 输出:ala_up - 粒子过滤(连续版本)。
# R版本(性能较慢)
cir <- function(aph_r, phwt, u) {
    P <- length(aphpr)
    al_p <- rep(0,P)
    
    # 排序和加权的速度减慢
    alpha\_wt <- alpha\_wt/sum(alpha_wt)
  
    j <- 1
    for (i in 1:P){
        while((a_ct\[i\] < u\[j\]) & (u\[j\] <= alhwt\[i+1\])){
            alh\_u\[j\] <- aph\_pr\[i\] + ((apapr\[i+1\]-alar\[i\])/(ala\_ct\[i+1\]-alpha\_cwt\[i\]) * (u\[j\]-ala_wt\[i\])
         
}
csir.c <- function(alppr, aht, u) {
    P <- length(alpap)
    ala_u <- rep(0,P)
     .C("cir", alpup=as.dole(aphup), 
                          alha\_pr=as.double(aha\_r),
                          alh_wt=as.doublephawt), 
                          u=as.double(u),

我们现在提供用于最大化对数似然和估计参数 θ 的代码。为了计算标准误差,我们使用在 MLE 评估的对数似然的 Hessian 矩阵的逆矩阵的对角线。

我们现在可以转到参数θ的估计。使用 C 中的函数进行估计。

vas <- sfit(y, c(0.5,0.5,0.5), P, 1)
## 显示结果
matrix <- cbind(heta_mle
,eta_se)

矩阵

相关文章
|
3月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
65 3
【R语言实战】——带有新息为标准学生t分布的金融时序的GARCH模型拟合预测
【R语言实战】——带有新息为标准学生t分布的金融时序的GARCH模型拟合预测
|
4月前
|
机器学习/深度学习 算法 前端开发
R语言基础机器学习模型:深入探索决策树与随机森林
【9月更文挑战第2天】决策树和随机森林作为R语言中基础且强大的机器学习模型,各有其独特的优势和适用范围。了解并熟练掌握这两种模型,对于数据科学家和机器学习爱好者来说,无疑是一个重要的里程碑。希望本文能够帮助您更好地理解这两种模型,并在实际项目中灵活应用。
|
5月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
5月前
|
资源调度 数据挖掘
R语言回归分析:线性回归模型的构建与评估
【8月更文挑战第31天】线性回归模型是统计分析中一种重要且实用的工具,能够帮助我们理解和预测自变量与因变量之间的线性关系。在R语言中,我们可以轻松地构建和评估线性回归模型,从而对数据背后的关系进行深入的探索和分析。
【R语言实战】——Logistic回归模型
【R语言实战】——Logistic回归模型
|
4月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
8月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
8月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
4月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
下一篇
开通oss服务