我想为约2250万个观测值的数据集估算滚动风险值,因此我想使用Sparklyr进行快速计算。这是我所做的(使用示例数据库):

library(PerformanceAnalytics)
library(reshape2)
library(dplyr)

data(managers)
data <- zerofill(managers)
data<-as.data.frame(data)
class(data)
data$date=row.names(data)
lmanagers<-melt(data, id.vars=c('date'))

现在,我使用dplyr和PerformanceAnalytics软件包估算VaR:
library(zoo) # for rollapply()
var <- lmanagers %>% group_by(variable) %>% arrange(variable,date) %>%
  mutate(var=rollapply(value, 10,FUN=function(x) VaR(x, p=.95, method="modified",align = "right"), partial=T))

这很好。现在,我这样做是为了利用sparklyr:
library(sparklyr)
sc <- spark_connect(master = "local")
lmanagers_sp <- copy_to(sc,lmanagers)
src_tbls(sc)

var_sp <- lmanagers_sp %>% group_by(variable) %>% arrange(variable,date) %>%
  mutate(var=rollapply(value, 10,FUN=function(x) VaR(x, p=.95, method="modified",align = "right"), partial=T)) %>%
  collect

但这会产生以下错误:
Error: Unknown input type: pairlist

谁能告诉我错误在哪里和正确的代码是什么?或任何其他估计更快的滚动VaR的解决方案也将受到赞赏。

最佳答案

对于像dplyr这样的自定义sparklyr后端,mutate目前不支持其他包中定义的任意R函数;因此,当前不支持rollapply()

为了计算sparklyr中的风险值,一种方法是对extend sparklyr using Scala and R并遵循类似于Estimating Financial Risk with Apache Spark的方法。

关于使用sparklyr滚动处理大数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46024271/

10-12 17:15