对数收益率分布转算术收益率异常:均值与标准差偏差问题排查
问题定位与修正方案
你的核心问题出在年化对数收益率的计算逻辑错误,以及模拟时的尺度混淆,导致转换后的算术收益率和直接计算结果偏差过大。
错误点拆解
年化对数收益率计算错误
你用table.AnnualizedReturns(..., geometric = TRUE)得到的是年化几何收益率,而非年化对数收益率的均值。当传入月度对数收益率时,geometric = TRUE的计算逻辑是exp(mean(Monthly_Log_Returns)*12) - 1,这是几何年化收益,不是我们需要的对数收益率年化均值(正确值应为colMeans(Monthly_Log_Returns)*12)。模拟尺度混淆
你直接模拟了年化对数收益率,再转换为年化算术收益率,但如果你的对比基准是「月度算术收益率年化」,两者的统计维度不匹配。正确的做法应该是先模拟月度对数收益率,转换为月度算术收益率后再做年化处理。
修正后的R代码
# 1. 计算月度对数收益率的均值和协方差(原始月度尺度) monthly_mu_log <- colMeans(Monthly_Log_Returns) monthly_sigma_log <- cov(Monthly_Log_Returns) # 2. 模拟月度对数收益率,转换为月度算术收益率 sim_monthly_log <- MASS::mvrnorm(200000, mu = monthly_mu_log, Sigma = monthly_sigma_log) sim_monthly_arith <- exp(sim_monthly_log) - 1 # 3. 计算模拟的月度算术收益率的均值和方差,再年化 sim_annual_arith_mean <- colMeans(sim_monthly_arith) * 12 sim_annual_arith_var <- var(sim_monthly_arith) * 12 # 简单年化方差(若考虑复利则需另算) # 4. 和直接计算的月度算术收益率年化结果对比 direct_annual_arith_mean <- colMeans(Monthly_Arith_Returns) * 12 direct_annual_arith_var <- var(Monthly_Arith_Returns) * 12
补充说明
如果确实需要直接从年化对数收益率转换为年化算术收益率,需遵循理论公式:
年化算术收益率 ≈ 年化对数收益率 + 0.5 * 年化对数收益率的方差
用代码验证的话,正确的年化对数收益率均值应该是colMeans(Monthly_Log_Returns)*12,而非table.AnnualizedReturns的结果,修正后再模拟就能和直接计算的结果匹配。
内容的提问来源于stack exchange,提问作者Marc F
相关产品推荐
相关产品推荐

