作为我的数据分析(重尾数据)的一部分,我希望计算大约100个公司回报时间序列的尾部(左右两侧)指数。我的数据存储在一个大型动物园对象中,公司名称为标题。
这是我目前计算山丘估算器的方法:
returns <- read.zoo("returns.csv", header=TRUE, sep=",", format="%d-%m-%y")
returns_hplots <- lapply(returns, hillPlot)
returns_hill <- sapply(returns_hplots, function(x) x$y)
returns_hill <- sapply(returns_hill, '[', seq(max(sapply(returns_hill,length)))
结果,我的105家公司有一个数据框[1:204,1:105],其中包含所有的山丘估算器和NA(所有列都有相同的行数)。
但是,我想计算左尾和右尾的山估计,目前整个分布只有一个山估计(每家公司)。
因此我需要根据分布分割我的数据。 我根据分布搜索了数据分割,但没有找到一个好的答案。 我的想法是计算50%分位数,然后根据这个分位数分离我的数据。
returns_quantile <- sapply(returns, quantile, .5)
这导致1:105向量包含所有50%分位数值。现在我想基于这个分位数分离我的返回动物园对象,如下所示:
returns_left <- ...
returns_right <- ...
有谁知道如何根据分位数分割动物园对象? 或者有没有其他方法直接计算左/右尾的山估计量?
答案 0 :(得分:2)
我终于找到了其他研究人员的一些示例代码,他们计算了上下尾部的山丘估算器。
以下是我计算两种尾巴的山丘估算器的代码:
returns <- read.zoo("returns.csv", header=TRUE, sep=",", format="%d-%m-%y")
returns_upper <- lapply(returns, hillPlot, doplot=FALSE) #set doplot to false to speed up calculation
returns_upper <- sapply(returns_upper, function(x) x$y) #extract the hill estimators
returns_upper <- sapply(returns_upper, '[', seq(max(sapply(returns_upper,length))) #create a data frame where each column has equal length (easier analysis)
returns_lower <- lapply(-returns, hillPlot, doplot=FALSE)
returns_lower <- sapply(returns_lower, function(x) x$y)
returns_lower <- sapply(returns_lower, '[', seq(max(sapply(returns_lower,length)))
所以我之前的方法(在问题中)实际上只是计算上(右)尾的山估计。