根据经验数据生成随机多元值


10

我正在使用蒙特卡洛(Monte Carlo)函数对具有部分相关收益的几种资产进行估值。目前,我只是生成协方差矩阵并将其馈送到rmvnorm()R中的函数。(生成相关的随机值。)

但是,从资产收益的分布来看,它不是正态分布的。

这实际上是一个由两部分组成的问题:
1)当我拥有的只是一些真实世界的数据而没有已知分布时,我如何估算某种PDF或CDF?

2)我如何生成相关值(例如rmvnorm),但对于这种未知(非正态)分布呢?

谢谢!


分布似乎不适合任何已知的分布。我认为假设参数然后将其用于蒙特卡洛估计将非常危险。

我是否可以查看某种引导程序或“经验蒙特卡洛”方法?

Answers:


2

(1)这是生成模拟时间序列所需的CDF。要构建它,首先要对价格变化/回报进行直方图绘制。从您最左侧填充的垃圾箱开始,累计垃圾箱总数。通过除以总箱数来归一化您的新功能。您剩下的是CDF。这是一些实现技巧的numpy代码:

# Make a histogram of price changes

counts,bin_edges = np.histogram(deltas,numbins,normed=False) # numpy histogram

# Make a CDF of the price changes

n_counts,bin_edges2 = np.histogram(deltas,numbins,normed=True)
cdf = np.cumsum(n_counts)  # cdf not normalized, despite above
scale = 1.0/cdf[-1]
ncdf = scale * cdf

(2)要生成相关的拣货,请使用copula。请参阅我先前有关生成相关时间序列的问题的答案


4

关于第一个问题,您可以考虑重新采样数据。如果您的数据随时间而相关(而不是同时相关),则可能会出现问题,在这种情况下,您将需要诸如块引导程序之类的东西。但是对于返回数据,简单的引导程序可能就可以了。

我想第二个问题的答案很大程度上取决于目标分布。


3

第一个问题的答案是建立模型。在您的情况下,这意味着选择分布并估算其参数。

有了发行版后,您可以使用Gibbs或Metropolis算法从中进行采样。

在旁注中,您是否真的需要从此分布中取样?通常,兴趣在于分布的某些特征。您可以通过引导程序使用经验分布来估计它,或者再次为此特征建立模型。


我对抽样给定资产的可能回报感兴趣。由于分布不正常且资产随时间而变,因此在选择分布时会遇到挑战。我正在探索蒙特卡洛方法进行投资组合优化。
诺亚

1
@Noah,您是否考虑过各种随机波动率模型,例如GARCH?
mpiktas 2010年

我看过GARCH模型。但是,GARCH无法解决此问题。我正在查看从多个时间序列生成相关的随机样本。随机多元范数样本工作,但它们需要假设收益呈正态分布,而在这种情况下则不是。
诺亚

1
@Noah,多元GARCH怎么样?每个单独的序列都是GARCH,具有多元正态与非对角协方差矩阵的创新。然后,收益将不具有正态分布,但将被关联。
mpiktas

3

我支持@mpiktas,因为我也认为您需要一个模型。

我认为这里的标准方法是估计一个关联函数,以捕获不同资产之间的依存关系,并对不同资产使用偏态正态分布或t分布边际分布。这为您提供了一个非常通用的模型类(更通用的是假设例如多元t分布),几乎是您的任务类型的标准(例如,我认为巴塞尔协议II要求金融机构使用copula方法来估计其VaR) 。有一个copulaR包。


1

使用ecdf()函数R ...可以解决问题的第一部分

# simulate some data...
N <- 1000
fdata <- c( rnorm(N %/% 2, mean=14), rnorm(N %/% 2, mean=35))

# here's the Empirical CDF of that data...
E1 <- ecdf(fdata)
plot(E1)

# now simulate 1000 numbers from this ECDF...
ns <- 1000
ans <- as.numeric(quantile(E1, runif(ns)))
hist(ans,pro=T,nclass=113,col='wheat2')

1
这仅适用于单变量数据。
斯特凡·洛朗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.