Имитация временных рядов, удовлетворяющих ковариационной матрице - PullRequest
1 голос
/ 18 октября 2019

Как я могу сгенерировать df со случайными значениями, имеющими ту же ковариацию и среднее значение, что и мой входной df?

У меня есть входной фрейм данных: "my_input_df" с размером = (240, 8) Я хочу выходной фрейм данных«my_output_df» с размером (10000, 8), где каждая из 10000 строк представляет собой случайную ничью соответствующего столбца, так что cov и среднее значение «my_output_df» совпадают с ковариацией и средним значением «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, но мне не ясно, как использовать его в фреймах данных.

1 Ответ

0 голосов
/ 21 октября 2019

Спасибо за все. Ответ прост:

Используйте 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()

Для преобразования в df результат использования multitivariate_normal use

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

Это работает. Еще раз спасибо.

...