我正在做一个研究项目,我想重新创建一个我在一篇文章中读到的市场效率指标。由于我正在处理一个大数据集,我决定在R中自动化这个过程。首先,我定义了一个函数,它返回指标中使用的标准化beta系数,这里显示了一个可重复的例子:
beta_hats = function(j) {
step1 = ar(j, aic = TRUE)$asy.var.coef
step2 = ar(j, aic = TRUE)$ar
step3 = chol(step1)
step4 = t(step3)
step5 = solve(step4)
step6 = step5 %*% step2
step7 = abs(step6)
step8 = sum(step7)
return(step8)
}
repro = data.frame(rnorm(3000, 0.0003563425, 0.0216025))
beta_hats(repro)
> beta_hats(repro)
[1] 1.587869
这将为整个数据集生成所需的结果,但是,我希望我的度量是随时间变化的,所以我尝试在滚动窗口上重复该函数。
y = repro
t = 250
library(zoo)
z = rollapplyr(y, t, function(y) beta_hats(y))
Error in array(x, c(length(x), 1L), if (!is.null(names(x))) list(names(x), :
'data' must be of a vector type, was 'NULL'
此时功能不再工作。有人能帮我解决这个问题吗?
其他信息:
- 如果不将data.frame()规范添加到可重现的示例中,则会在整个数据集的函数中产生相同的错误
- 由于可重现的示例是完全随机的,因此如果您决定使用真实的市场回报来重现误差,则函数可能会产生高得多的值
- 数据集的class()返回“tbl_df”、“tbl”、“ Dataframe ”
1条答案
按热度按时间ej83mcc01#
这是当您要执行
NULL
对象的cholesky分解时产生的错误:这表明问题出在数据中,而不是出在
rollapply
函数中。请尝试重新生成数据,然后再次对数据调用函数。系数估计值的渐近理论方差矩阵似乎为NULL。请注意,如果阶数〉0,则会给出系数估计值例如:
由于阶数为0,因此步骤1中该数据集的渐近理论方差为
NULL
:因此,函数的第3步将抛出您遇到的错误。您需要在有效的数据集中运行函数。
另请注意,尽管函数可能不会在完整数据集中引发错误,但如果由于上述原因而使用子集,则函数最终可能会引发错误