簡體   English   中英

在 R 中計算 VaR 並將其添加到 Data-Frame

[英]Calculate a VaR in R and add it to Data-Frame

晚安社區!

我目前正在嘗試計算 R 中的歷史風險價值。這需要一個股票價格數據框 ( Daimler->DAI ),其中有一個date列、一個pricedaily returns 我找到了一個PerformanceAnalytics包,它允許我計算這個值,但它只會獲取所有值( ~3,600觀察值)並返回一個數字。 相反,我想要添加一個列,其中包含每個時間日期的特定計算VaR

由於我對R相當陌生,因此我首先必須弄清楚如何制作自制函數並想出了這個:

require(dplyr)
# Read table from csv#
TableDAI <- read.csv2(xxx)
#Take columns from table to a dataframe#
DAI <- data.frame(Date=TableDAI$Date,  DAI.Close=TableDAI$Close)
### formulate an easy function for daily returns#
f.returns <- function(x, n=1){
  Returns <- x/lag(x,n)-1
  return(Returns)
}
## Open new column with returns##
DAI$DAI.Returns <- f.returns(DAI$DAI.Close)

到現在為止還挺好。

現在,如果我想做下一步,則需要計算一個VaR函數,該函數需要精確地250過去的回報觀察,然后取這些歷史回報的.05分位數。 之后,它將通過sqrt(20)為該值計時。

我的做法:

#Calculate the historic VaR for each row#
VaR.hist <- function(x, n=250, hd=20, q=0.05){
  quantil <- quantile(lag(x,n):x,q)
  VaR <- quantil*sqrt(hd)
  return(VaR)
}

不幸的是,結果只是一列0 我看到的另一個問題是前250無法計算,因為沒有足夠的觀察。

我希望我提出了這個問題,有人可以提供幫助。 謝謝!!

我不確定您如何為這些歷史數據定義 VaR。 你只想要經驗的第 95 個百分位數嗎? 如果是這樣,假設您的向量是x

VaR_95 <- quantile(x, .95)

另一方面,如果您想假設關於均值的平穩性和高斯“誤差”,以估計股票價格與歷史價格的簡單標准偏差,並使用它來計算您的 VaR:

mu_hat <- mean(x)
sigma_hat <- var(x) %>% sqrt
VaR_95 <- qnorm(.95, mu_hat, sigma_hat)

我不確定您遇到問題的部分是否在數據幀的邊距上應用此函數。 如果是這樣的話...

my_func <- function(x, q) {
    mu_hat <- mean(x)
    sigma_hat <- var(x) %>% sqrt
    qnorm(q, mu_hat, sigma_hat) %>%
      return()
}

apply(df, 1, my_func, q = .95)

這可能會成為一個非常復雜的話題,涉及回歸和其他建模技術,因為股票價格幾乎肯定不是靜止的,而且您的歷史數據可能沒有捕捉到未來可變性的真正潛力。 希望雖然這回答了您的編碼問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM