PortfolioAnalytics包中chart.Scatter()函数运行异常问题求助
解决
chart.Scatter绘图异常的排查步骤 我来帮你一步步排查这个散点图异常的问题~
第一步:先确认数据是否存在异常
首先咱们得排除是数据本身的问题,运行以下代码检查你的收益率数据:
# 查看数据结构 str(ret_INDU) str(ret_VZ) # 查看前几行数据 head(ret_INDU) head(ret_VZ) # 检查是否有NA或极端值 sum(is.na(ret_INDU)) sum(is.na(ret_VZ)) summary(ret_INDU) summary(ret_VZ)
如果发现有NA值,可以用na.omit()清理:
ret_INDU <- na.omit(ret_INDU) ret_VZ <- na.omit(ret_VZ)
要是有极端的异常值(比如收益率突然跳到100%以上),那大概率是雅虎财经的原始数据有问题,你可以手动剔除这些条目,或者重新获取数据试试。
第二步:检查包版本兼容性
你当前使用的R(3.4.4)、PerformanceAnalytics(1.5.2)和quantmod(0.4-12)都是2017年左右的旧版本,很可能存在包之间的兼容性bug。建议:
- 优先更新R到最新稳定版(比如4.x系列),然后重新安装所有相关包:
install.packages(c("PortfolioAnalytics", "quantmod"), dependencies = TRUE)
- 如果暂时不想更新R,也可以尝试重新安装对应版本的包,强制覆盖旧版本,确保依赖包都处于兼容状态。
第三步:替换绘图函数验证
如果数据没问题,那可能是chart.Scatter函数本身的bug,你可以用基础R或者ggplot2来绘制散点图验证:
用基础R绘图
plot(ret_INDU, ret_VZ, main = "INDU vs VZ Returns", xlab = "INDU Returns", ylab = "VZ Returns")
用ggplot2绘图(更美观且稳定)
library(ggplot2) # 把时间序列转成数据框 return_df <- data.frame( INDU = as.vector(ret_INDU), VZ = as.vector(ret_VZ) ) # 绘制散点图 ggplot(return_df, aes(x = INDU, y = VZ)) + geom_point(alpha = 0.6) + labs(title = "INDU vs VZ Daily Returns", x = "INDU Returns", y = "VZ Returns") + theme_minimal()
如果这些替代方法能正常出图,那就是PerformanceAnalytics旧版本的绘图函数有问题,升级包就能解决。
第四步:尝试更换收益率计算方法
Return.calculate默认用对数收益率,你可以试试切换成简单离散收益率,看看会不会改善:
ret_INDU <- Return.calculate(Cl(INDU), method = "discrete")[-1,] ret_VZ <- Return.calculate(Cl(VZ), method = "discrete")[-1,] chart.Scatter(ret_INDU, ret_VZ)
内容的提问来源于stack exchange,提问作者sdittmar
相关产品推荐
相关产品推荐

