Python 有没有办法生成非正态相关随机变量?
这是我的第一篇帖子,请原谅我的不便 我的目标是模拟资产回报时间序列,它通常是厚尾的。因此,除了生成相关的正态变量,我还必须看得更远。我发现它基本上就是我想要的。但是,它是针对Python2.x.x的,我使用的是Python3.8Python 有没有办法生成非正态相关随机变量?,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
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'