我有一个来自特斯拉退货的10年数据集(2天差异百分比)

tsla <- quantmod::getSymbols("TSLA", from = base::as.Date("2011-01-01"), to = base::as.Date("2022-01-31"), auto.assign = F)
tsla = as_tibble(tsla)
head(tsla)

我还有一个感兴趣的功能:


alpha = 0.01
garnor = function(x){
  require(fGarch)
  t = length(x)
  fit = garchFit(~garch(1,1),data=x,trace=F,cond.dist="norm")
  m = fit@fitted
  cv = fit@sigma.t
  var = m+cv*qnorm(1-alpha)
  return(var[t])
}

现在我想用一种巧妙的方式对函数进行回溯测试:回溯期将是前252个交易日.然后每个月(即21天)我都要判断风险.这意味着在21天内,风险将保持不变.但是rollapply函数输出NA.我想用前一个值替换NA,然后绘制y值(y列)和后一个值(一个绘图中的后一列).

d = tsla%>%
  dplyr::select(TSLA.Adjusted)%>%
  dplyr::mutate(Close = TSLA.Adjusted)%>%
  dplyr::mutate(y = as.numeric((Close - dplyr::lag(Close, 2)) / Close))%>%
  dplyr::select(Close,y)%>%
  tidyr::drop_na()%>%
  dplyr::mutate(back = zoo::rollapplyr(y,width = 252,FUN = garnor,by = 21,fill=NA))

例如,输出如下所示:

252  5.54 -0.0307    0.0927
253  5.42 -0.0354   NA     
254  5.38 -0.0297   NA     
255  5.45  0.00477  NA     
256  5.52  0.0257   NA     
257  5.65  0.0347   NA     
258  5.65  0.0223   NA     
259  4.56 -0.239    NA     
260  5.32 -0.0620   NA     
261  5.36  0.150    NA     
262  5.35  0.00598  NA     
263  5.32 -0.00789  NA     
264  5.35  0.000374 NA     
265  5.48  0.0299   NA     
266  5.59  0.0429   NA     
267  5.79  0.0525   NA     
268  5.87  0.0464   NA     
269  5.91  0.0213   NA     
270  5.81 -0.00894  NA     
271  5.92  0.000338 NA     
272  6.05  0.0390   NA     
273  6.23  0.0504    0.104 
274  6.36  0.0487   NA     
275  6.32  0.0142   NA     
276  6.39  0.00407  NA     
277  6.52  0.0301   NA     
278  6.22 -0.0267   NA     
279  6.30 -0.0346   NA     
280  6.63  0.0624   NA     
281  6.72  0.0628   NA     
282  6.84  0.0295   NA     
283  6.99  0.0392   NA     
284  6.9   0.00928  NA     
285  6.84 -0.0219   NA     
286  6.91  0.000869 NA     
287  6.75 -0.0139   NA     
288  6.72 -0.0271   NA     
289  6.76  0.00177  NA     
290  6.68 -0.00629  NA     
291  6.88  0.0174   NA     
292  6.81  0.0185   NA     
293  6.75 -0.0190   NA     
294  6.62 -0.0281    0.0950
295  6.62 -0.0196   NA     
296  6.61 -0.00121  NA     
297  6.95  0.0466   NA     
298  7.20  0.0816   NA     
299  7.22  0.0374   NA     
300  7.06 -0.0204   NA  

理想情况下,我希望(例如)重复值0.0927,直到出现下一个值0.104.后者以同样的方式(模式)重复.我怎么做这个替换?

然后把他们一起策划?

推荐答案

使用na.locf0代表结转的最后一次事件.下面我们简化了代码.如果需要单独的面板,请忽略facet=NULL.下面的代码不使用dplyr,因此如果没有加载dplyr,可以只编写lag来代替stats::lag.(dplyr用它自己不兼容的版本重击了R的滞后.)

library(quantmod)
library(fGarch)
library(ggplot2)

garnor <- function(x, alpha = 0.01) {
  t <- length(x)
  fit <- garchFit(~ garch(1,1), data = x, trace = FALSE, cond.dist = "norm")
  m <- fit@fitted
  cv <- fit@sigma.t
  var <- m+cv*qnorm(1-alpha)
  var[t]
}

getSymbols("TSLA", from = "2011-01-01", to = "2022-01-31")
adj <- Ad(TSLA)
y <- na.omit(1 - stats::lag(adj, 2) / adj)
back <- na.locf0(rollapplyr(y, 252, by = 21, garnor))
names(back) <- "Back"
autoplot(cbind(y, back), facets = NULL)

screenshot

R相关问答推荐

如何使用R以NASAGIBS.ViirsEarthAtNight2012风格绘制自定义 map

了解.groups的目的= dØr的摘要功能中的删除

如何在热图中绘制一个图形,但在每个单元格中通过饼形图显示?

在位置周围设定一个半径并识别该半径内的其他位置

将复杂的组合列表转换为数据框架

如何使用R中的dhrr函数将李克特量表的因子列从长转换为宽?

R中的子集文件—读取文件名索引为4位数字序列,例如0001到4000,而不是1到4000)

未识别时区

如何在R forestplot中为多条垂直线分配唯一的 colored颜色 ?

哪一行和行和 Select 特定行,但是考虑到Nas

Data.table';S GForce-将多个函数应用于多列(带可选参数)

具有重复元素的维恩图

派生程序包| ;无法检索';return()';的正文

根据约束随机填充向量的元素

R中的类别比较

使用geom_iles在一个切片中包含多个值

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

如何将宽格式的患者信息数据高效地转换为患者计数的时间序列?

在shiny 表格中输入的文本在第一次后未更新

将边列表转换为路径长度列表