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

使用R计算Yahoo标普500简单收益率全为0的问题求助

问题分析

你遇到的问题根源在于quantmod获取的GSPC是xts/zoo时间序列对象,直接通过行号子集后做算术运算时,会基于时间索引自动对齐。adj[2:n,1]和adj[1:(n-1),1]的时间索引完全不重叠,导致运算逻辑失效,最终得到全0的错误结果。

解决方案

有两种简单可靠的修复方式:

方式1:提取核心数值计算

用coredata()提取xts对象的底层数值矩阵,脱离时间索引进行行号运算:

library(quantmod)
getSymbols("^gspc", src='yahoo')

adj <- GSPC[, "GSPC.Adjusted", drop = FALSE]
n <- nrow(adj)
# 提取底层数值矩阵
adj_values <- coredata(adj)
# 手动计算简单收益率
simpleReturn <- (adj_values[2:n, 1] - adj_values[1:(n-1), 1]) / adj_values[1:(n-1), 1]
# 可选:将结果转回带时间索引的xts对象
simpleReturn_xts <- xts(simpleReturn, index(adj)[2:n])

方式2:使用quantmod自带的收益率函数

quantmod内置了dailyReturn()函数,可直接计算简单收益率,无需手动处理索引:

library(quantmod)
getSymbols("^gspc", src='yahoo')

# 计算调整收盘价的简单日收益率(arithmetic对应简单收益率)
simpleReturn <- dailyReturn(GSPC$GSPC.Adjusted, type = "arithmetic")

若需要对数收益率,只需将type参数改为"log"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:16:02