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

使用TTR包rollSFM函数加载CSV文件报错,滚动线性回归失败

解决rollSFM报错:missing value where TRUE/FALSE needed

这个错误的核心原因是你给rollSFM传入的自变量格式不符合函数要求,下面来一步步分析和解决:

错误原因拆解

rollSFM(y, x, n, ...)函数要求第二个参数x必须是多列的数值矩阵或数据框(用于代表回归模型中的解释变量/因子),但你传入的1:nrow(mydata)是一个一维向量。当函数内部尝试计算自变量的列数nc时,向量的ncol()结果为NULL,导致后续检查by参数的逻辑(if (any(by < 0L) || any(by > nc)))出现了缺失值,从而抛出这个错误。

另外,如果你只是想做普通的滚动线性回归(用行索引作为自变量,拟合PRICE的趋势),rollSFM其实不是最适配的工具——它主要用于滚动计算单因子模型(比如CAPM的beta),普通滚动回归用TTR包的rollLM函数更合适。

解决方案

方案1:使用rollLM做普通滚动线性回归(推荐)

把自变量转换成矩阵格式,确保函数能正确识别列数:

library(TTR)
# 读取数据
mydata <- read.csv("EURUSD2.csv", sep=",", header=TRUE)
# 将行索引转换为矩阵(保证列属性存在)
x_matrix <- as.matrix(1:nrow(mydata))
# 执行滚动线性回归,窗口大小n=5
reg <- rollLM(mydata[, "PRICE"], x_matrix, n=5)
# 查看前几行结果
head(reg)

方案2:调整格式后继续使用rollSFM

如果你一定要用rollSFM,只需要把一维向量转换成矩阵即可:

library(TTR)
mydata <- read.csv("EURUSD2.csv", sep=",", header=TRUE)
# 转换自变量为矩阵
x_matrix <- as.matrix(1:nrow(mydata))
# 执行滚动单因子模型计算
reg <- rollSFM(mydata[, "PRICE"], x_matrix, n=5)

验证结果

执行上述代码后,你应该能得到窗口为5的滚动回归结果,每一行对应一个窗口的回归系数(截距和斜率)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:31:52