我想估计大约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'))
Run Code Online (Sandbox Code Playgroud)
现在我估计使用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))
Run Code Online (Sandbox Code Playgroud)
这很好用.现在我这样做是为了使用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
Run Code Online (Sandbox Code Playgroud)
但是这会产生以下错误:
Error: Unknown input type: pairlist
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我哪里出错,什么是正确的代码?或者任何其他更快地估算滚动VaR的解决方案也是值得赞赏的.
我需要对每日股票收益进行滚动VaR估计.起初我做了以下事情:
library(PerformanceAnalytics)
data(edhec)
sample<-edhec[,1:5]
var605<-rollapply(as.zoo(sample),width=60,FUN=function(x) VaR(R=x,p=.95,method="modified",invert=T),by.column=TRUE,fill=NA)
Run Code Online (Sandbox Code Playgroud)
它执行计算并返回一个zoo对象,但给出了一系列警告,如下所示:
VaR calculation produces unreliable result (inverse risk) for column: 1 : -0.00030977098532231
Run Code Online (Sandbox Code Playgroud)
然后,我尝试了同样的数据样本,如下所示:
library(foreign)
sample2 <- read.dta("sample2.dta")
sample2.xts <- xts(sample2[,-1],order.by=as.Date(sample2$datadate,format= "%Y-%m-%d"))
any(is.na(sample2.xts))
var605<-rollapply(as.zoo(sample2.xts),width=60,FUN=function(x) VaR(R=x,p=.95,method="modified",invert=T),by.column=TRUE,fill=NA)
Run Code Online (Sandbox Code Playgroud)
但是不会返回任何动物园对象并给出以下警告和错误:
VaR calculation produces unreliable result (inverse risk) for column: 1 : -0.0077322590200255
Error in if (eval(tmp < 0)) { : missing value where TRUE/FALSE needed
Called from: top level
Run Code Online (Sandbox Code Playgroud)
从之前的文章(使用rollapply函数进行使用R的VaR计算)我理解,如果缺少完整的滚动窗口,则无法执行滚动估计,但在我的数据(sample2.dta)中没有缺失值.
sample2.dta可以从https://drive.google.com/file/d/0B8usDJAPeV85WDdDQTFEbGQwaUU/edit?usp=sharing下载
有谁可以帮我解决和理解这个问题?
我需要在xts数据上运行滚动窗口函数,该数据包含大约7,000行和11,000列.我做了以下事情:
require(PerformanceAnalytics)
ssd60<-rollapply(wddxts,width=60,FUN=function(x) SemiDeviation(x),by.column=TRUE)
Run Code Online (Sandbox Code Playgroud)
我等了12个小时,但计算没有完成.但是,当我尝试使用小数据集时,如下所示:
sample<-wddxts[,1:5]
ssd60<-rollapply(sample,width=60,FUN=function(x) SemiDeviation(x),by.column=TRUE)
Run Code Online (Sandbox Code Playgroud)
计算在60秒内完成.我在配备Intel i5-2450M CPU,Windows 7操作系统和12 GB RAM的计算机上运行它们.
任何人都可以建议我,如果有更快的方法在大型xts数据集上执行上述计算?
在R中运行Cox PH回归后,我需要在数据框中添加预测风险比率列.数据框是一个面板数据,其中numgvkey如果公司标识符和年龄是时间标识符.您可以从以下链接下载该日期的一小部分:https: //drive.google.com/file/d/0B8usDJAPeV85VFRWd01pb0h1MDA/view?usp=sharing
我有以下几点:
library(survival)
library(readstata13)
sme <- read.dta13("sme.dta")
reg<-coxph(Surv(age,EVENT2)~L1FETA+frailty(numgvkey), ties=c("efron"), data=sme)
summary(reg)
hr <- predict(reg, type="risk")
Run Code Online (Sandbox Code Playgroud)
如何在"sme"数据框中添加第5列"危险比"(hr)?另外,有没有办法预测EVENT2概率而不是'hr'?