【发布时间】:2019-11-27 07:56:52
【问题描述】:
晚上好,
我之前问了一个问题,发现很难实施该解决方案,因此我将以更清晰的方式重新提出。 我有一个问题,我想在股票每日收益的数据框中添加一列。假设它是正态分布的,我想添加一列,其中包含我自己编写的风险值(hist)。 限制是每个观察值都应该分配给我的函数,并且还要接受最后的 249 个观察值。 因此,当计算下一个观测值时,它也应该只取之前 das 的最后 249 个观测值。所以输入值应该随着时间的推移而移动。换句话说,我希望排除 251 天前的值。希望我能很好地解释自己。如果不是,那么代码可能会为我说话:
df<- data.frame(Date=seq(ISOdate(2000,1,1), by = "days", length.out = 500), Returns=rnorm(500))
#function
VaR.hist<- function(x, n=250, hd=20, q=0.05){
width<-nrow(x)
NA.x<-na.omit(x)
quantil<-quantile(NA.x[(width-249):width],probs=q)
VaR<- quantil*sqrt(hd)%>%
return()
}
# Run the function on the dataframe
df$VaR<- df$Returns%>%VaR.hist()
Error in (width - 249):width : argument of length 0
这是我得到的错误代码,而不是我的新变量... 谢谢!!
【问题讨论】:
-
您仅使用数字向量 (
df$Returns) 调用您的函数。当x是一个数字向量时,函数的第一行 (nrow(x)) 将返回NULL。 -
您能否给出前几行的预期输出示例?当您从分布中采样数字时,请使用
set.seed,以便我们可以在另一端复制相同的数字。 -
您好!如果样本预期输出意味着让您了解理想情况下会得出什么数字,那么它将是每日收益损失函数的第 5 个百分位的向量。 IE。 100 天回报系列中的第 5 个最差回报。 Schlegel 先生的解决方案只给了我 1 个重复 500 次的数字,这与我尝试其他东西时得到的结果相同,但从来没有真正成为数字的动态向量……希望它更清楚。