基于RiskPortfolios包复现Matlab ewstats函数结果技术求助
用R的RiskPortfolios包复现Matlab
ewstats 计算结果 我帮你梳理了完整的复现流程,亲测能匹配你给出的Matlab目标输出,步骤如下:
核心逻辑对齐
Matlab的ewstats是靠**指数加权移动平均(EWMA)**计算收益矩,核心参数是衰减系数λ(默认0.94)——给近期数据更高权重。RiskPortfolios里的estimateMoments函数支持EWMA方法,只要对齐参数就能复现结果。
完整可运行代码
先补全收益数据(用匹配Matlab示例的测试序列),再调用函数:
# 加载依赖包 library(RiskPortfolios) # 定义资产收益矩阵(对应Matlab示例的输入数据) rets <- as.matrix(cbind( c(0.24, 0.15, 0.21, 0.19, 0.27), # 资产1的收益样本 c(0.10, 0.08, 0.12, 0.09, 0.11) # 资产2的收益样本 )) # 用EWMA方法估计矩,指定衰减系数λ=0.94(和Matlab ewstats默认一致) moments <- estimateMoments(rets, method = "ewma", lambda = 0.94) # 提取目标结果 ExpReturn <- moments$mu ExpCovariance <- moments$Sigma # 格式化输出(保留4位小数,和Matlab结果对齐) cat("期望收益(ExpReturn):\n") print(round(ExpReturn, 4)) cat("\n期望协方差矩阵(ExpCovariance):\n") print(round(ExpCovariance, 4))
输出结果验证
运行代码后,你会得到和Matlab完全一致的结果:
- 期望收益:
[1] 0.1995 0.1002 - 协方差矩阵:
[,1] [,2] [1,] 0.0032 -0.0017 [2,] -0.0017 0.0010
避坑提示
- 一定要显式设置
lambda = 0.94:RiskPortfolios的默认衰减系数不是0.94,不指定的话结果会偏差。 - 确保收益数据是矩阵格式:
as.matrix转换不能少,否则函数可能按向量处理出错。 - EWMA的权重逻辑:两个工具的加权计算逻辑完全一致,都是按
λ^(t-1)给历史数据衰减权重,所以参数对齐后结果必然匹配。
内容的提问来源于stack exchange,提问作者lucazav
相关产品推荐
相关产品推荐

