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

Python 有没有办法生成非正态相关随机变量?,python,finance,quantitative-finance,Python,Finance,Quantitative Finance,这是我的第一篇帖子,请原谅我的不便 我的目标是模拟资产回报时间序列,它通常是厚尾的。因此,除了生成相关的正态变量,我还必须看得更远。我发现它基本上就是我想要的。但是,它是针对Python2.x.x的,我使用的是Python3.8 from connorav import CorrelatedNonNormalRandomVariates returns = pd.read_csv(r'datasets/eurostoxx_share_returns.csv', sep=';', parse_da

这是我的第一篇帖子,请原谅我的不便

我的目标是模拟资产回报时间序列,它通常是厚尾的。因此,除了生成相关的正态变量,我还必须看得更远。我发现它基本上就是我想要的。但是,它是针对Python2.x.x的,我使用的是Python3.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)
我收到一个错误,因为Python2将在map()上返回一个列表,而Python3没有。因此,我在correl_rv.py中进行了调整:

self.moments = moments
self.correlations = correlations
self.distributions = 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'
~\Anaconda3\envs\python\lib\site packages\connorav\correl\u rv.py in\uuuuuuu init\uuuuuu(自、矩、相关性、num\u样本、方法)
21自我时刻=时刻
22自我相关性=相关性
--->23 self.distributions=list(map(MSSKDistribution,moments.tolist())
24
25自我生成(样本数,方法)
~\Anaconda3\envs\python\lib\site packages\connorav\distribution.py in\uuuuuu init\uuuuu(self、mean、std、skew、kurt)
12自偏斜=偏斜
13 self.kurt=kurt
--->14.self.fit()
15
16 def安装(自):
~\Anaconda3\envs\python\lib\site packages\connorav\distribution.py in fit(self)
16 def安装(自):
17
--->18如果abs(自偏斜)
我使用的数据是2000-2021年间所有50家EuroSTOXX公司的每日股票收益率

谢谢大家

~\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'