使用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
相关产品推荐
相关产品推荐

