[英]Calculate a VaR in R and add it to Data-Frame
晚安社區!
我目前正在嘗試計算 R 中的歷史風險價值。這需要一個股票價格數據框 ( Daimler->DAI
),其中有一個date
列、一個price
和daily 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.