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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:33:57