有没有办法生成非正态相关随机变量?

问题描述

这是我的第一篇文章,如有不便,敬请原谅。

我的目标是模拟资产回报时间序列,这通常是肥尾的。因此,我必须比生成相关的正态变量更进一步。我遇到了 this package 基本上完全符合我的要求。但是,它适用于 python 2.x.x,而我使用的是 python 3.8。

from connorav import correlatedNonnormalRandomVariates
returns = pd.read_csv(r'datasets/eurostoxx_share_returns.csv',sep=';',parse_dates=True,index_col='Date')
nsim = 10
corr = returns.corr()
corr = posdef.nearestPD(returns.cov())
stats = pd.DataFrame(data={'mean': returns.mean(),'std': returns.std(),'skew': returns.skew(),'kurt': returns.kurt()
                           }).to_numpy()
corr = corr.to_numpy()
rv = correlatedNonnormalRandomVariates(stats,corr,nsim)

我收到一个错误,因为 python 2 会在 map() 上返回一个列表,而 python 3 不会。所以我在 correl_rv.py 中进行了调整:

self.moments = moments
self.correlations = correlations
self.distributions = map(MSSKdistribution,moments.tolist())

self.moments = moments
self.correlations = correlations
self.distributions = list(map(MSSKdistribution,moments.tolist()))

但现在我收到以下输出

~\Anaconda3\envs\python\lib\site-packages\connorav\correl_rv.py in __init__(self,moments,correlations,num_samples,method)
     21         self.moments = moments
     22         self.correlations = correlations
---> 23         self.distributions = list(map(MSSKdistribution,moments.tolist()))
     24 
     25         self.generate(num_samples,method)

~\Anaconda3\envs\python\lib\site-packages\connorav\distribution.py in __init__(self,mean,std,skew,kurt)
     12         self.skew = skew
     13         self.kurt = kurt
---> 14         self.fit()
     15 
     16     def fit(self):

~\Anaconda3\envs\python\lib\site-packages\connorav\distribution.py in fit(self)
     16     def fit(self):
     17 
---> 18         if abs(self.skew) < norMAL_CUTOFF and abs(self.kurt) < norMAL_CUTOFF:
     19             # It is hard to solve the johnson su curve when it is very close
     20             # to normality,so just use a normal curve instead.

TypeError: bad operand type for abs(): 'nonetype'

我使用的数据是 2000-2021 年所有 50 家 EuroSTOXX 公司的每日股票收益。

谢谢大家!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)