构造具有固定相关性的2个时间序列随机变量

2 投票
1 回答
1167 浏览
提问于 2025-04-17 21:26

有没有简单的方法可以生成两个时间序列,并且它们之间的相关性是固定的?比如说相关性是0.5。

有没有人知道在R或者Python中怎么实现这个?谢谢!

1 个回答

2

这个问题我觉得比较普遍,不仅仅局限于时间序列。你问的是如何生成一个二维的随机变量,并且这个随机变量有已知的协方差。比如说,r==0.5, std1=1 和 std2=2,这就可以转化为一个协方差矩阵,表示为 [[1,1],[1,4]]。所以,如果我们假设这些数据是多维正态分布的,我们就可以生成这样的随机变量:

In [42]:
import numpy as np
val=np.random.multivariate_normal((0,0),[[1,1],[1,4]],1000)
In [43]:

np.corrcoef(val.T)
Out[43]:
array([[ 1.      ,  0.488883],
       [ 0.488883,  1.      ]])
In [44]:

np.cov(val.T)
Out[44]:
array([[ 1.03693888,  0.96490767],
       [ 0.96490767,  3.75671707]])
In [45]:

val=np.random.multivariate_normal((0,0),[[1,1],[1,4]],10)
In [46]:

np.corrcoef(val.T)
Out[46]:
array([[ 1.        ,  0.56807297],
       [ 0.56807297,  1.        ]])
In [48]:

val[:,0]
Out[48]:
array([-0.77425116,  0.35758601, -1.21668939, -0.95127533, -0.5714381 ,
        0.87530824,  0.9594394 ,  1.30123373,  1.92511929,  0.98070711])
In [49]:

val[:,1]
Out[49]:
array([-1.75698285,  2.24011423, -3.5129411 , -1.33889305,  2.32720257,
        0.53750133,  3.23935645,  2.96819425, -0.72551024,  3.0743096 ])

在这个例子中,如果你的样本量很小,生成的随机变量可能会和 r=0.5 有很大的偏差。

撰写回答