You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改garch.sim函数的底层分布并解决rnd参数相关报错

garch.sim函数自定义底层分布报错解决方案

错误原因

garch.sim的rnd参数要求传入随机数生成函数对象,而非预先生成的随机数向量。你现有代码中将rnorm(351,sd = 4)返回的数值向量传入该参数,函数运行时会尝试将该向量作为函数调用,因此触发could not find function "rnd"报错。

修正方法

先封装符合要求的自定义随机数生成函数,要求函数第一个参数为需要生成的样本量n,再将函数名直接传入rnd参数即可。

场景1:使用标准差为4的正态分布

# 封装标准差为4的正态分布生成函数
rnorm_sd4 <- function(n) {
  rnorm(n, mean = 0, sd = 4)
}
# 调用garch.sim
u_garch <- garch.sim(alpha = c(0.01, 0.3), beta = 0.69, n = 251, rnd = rnorm_sd4, ntrans = 100)

场景2:替换为t分布

以自由度为5的t分布为例,可按需调整自由度或新增尺度调整逻辑:

# 自由度为5的t分布生成函数
rt_df5 <- function(n) {
  rt(n, df = 5)
}
# 调用
u_garch_t <- garch.sim(alpha = c(0.01, 0.3), beta = 0.69, n = 251, rnd = rt_df5, ntrans = 100)

场景3:替换为卡方分布

卡方分布默认均值不为0,建议先做标准化处理保证扰动项均值为0,以下为自由度为4的标准化卡方分布示例:

# 标准化自由度为4的卡方分布(均值为0,标准差为1,可通过乘法调整整体标准差)
rchisq_std_df4 <- function(n) {
  raw <- rchisq(n, df = 4)
  (raw - 4) / sqrt(8)
}
# 调用
u_garch_chisq <- garch.sim(alpha = c(0.01, 0.3), beta = 0.69, n = 251, rnd = rchisq_std_df4, ntrans = 100)

注意事项

  • 上述代码适配tseries包的原生garch.sim函数,如你使用其他包的同名函数,需根据对应文档调整参数逻辑
  • 自定义rnd函数的第一个参数必须为样本量n,garch.sim内部会自动根据所需样本量调用该函数
  • 非对称分布(如卡方分布)建议做中心化处理,避免扰动项均值非零导致模拟结果不符合GARCH模型假设

内容的提问来源于stack exchange,提问作者totnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:09:03