【问题标题】:Simulate time series satisfying a covariance matrix模拟满足协方差矩阵的时间序列
【发布时间】:2020-02-14 20:34:43
【问题描述】:

如何生成具有与输入 df 相同协方差和均值的随机值的 df?

我有一个输入数据框:“my_input_df”,size= (240, 8) 我想要一个大小为 (10,000 , 8) 的输出数据帧“my_output_df”,其中 10,000 行中的每一行都是相应列的随机抽取,例如 "my_output_df" 的 cov 和均值与 “my_input_df”。

即:

my_input_df:

A       B      C       D
a1      b1     c1     d1
a2      b2     c2     d2
a3      b3     c3     d3
....
a240   b240    c240   d240

my_output_df:
A              B             C               D
rand_a1       rand_b1        rand_c1         rand_d1
rand_a2       rand_b2        rand_c2         rand_d2
rand_a3       rand_b3        rand_c3         rand_d3
... 
rand_a10000   rand_b10000    rand_c10000     rand_d10000

My_ouput_df 每列必须有随机值,满足:

my_output_df.cov() = my_input_df.cov()

还有:

mean of my_output_df['A'] = mean of my_input_df['A']
mean of my_output_df['B'] = mean of my_input_df['B']
mean of my_output_df['C'] = mean of my_input_df['C']
.... Etc

我怀疑它与 numpy.random.multivariate_normal 有关,但不是 让我清楚如何在数据框中使用它。

【问题讨论】:

  • 查看 Cholesky 分解。这还不是 Python 问题——仍然是统计数据。
  • 对不起,我不知道怎么用 Python 写,这正是我的问题! numpy.random.multivariate_normal 可以用于数据帧吗?
  • 您可以轻松地将数据帧转换为 numpy 数组。这个功能能解决你的问题吗?

标签: python random correlation


【解决方案1】:

谢谢大家。 答案很简单:

使用np.random.multivariate_normal并转换为df,如下:

dataNew = np.random.multivariate_normal(my_mean,cov,1000)
where  my_mean=my_input_df.mean  
and    cov = my_input_df.cov()

将 multivariate_normal 使用的结果转换为 df

my_output_df = pd.DataFrame(dataNew , columns= 'A', 'B', 'C'...)

这行得通。 再次感谢。

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 2015-07-08
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2020-02-12
    • 2020-04-13
    相关资源
    最近更新 更多