Как ковариационная матрица влияет на выходной сигнал при генерации коррелированных нормально распределенных случайных выборок? - PullRequest
0 голосов
/ 24 января 2019

Документация scipy содержит пример создания коррелированных случайных выборок . Полный код в конце вопроса.

Ковариационная матрица:

# The desired covariance matrix.
r = np.array([
        [  3.40, -2.75, -2.00],
        [ -2.75,  5.50,  1.50],
        [ -2.00,  1.50,  1.25]
    ])

Мой вопрос: как каждое из значений в ковариационной матрице влияет на выход? То есть если я хочу создать образцы наборов данных, которые имеют только 2 переменные или более 3 переменных, как определить, какие значения я могу использовать в ковариационной матрице?


"""Example of generating correlated normally distributed random samples."""

import numpy as np
from scipy.linalg import eigh, cholesky
from scipy.stats import norm

from pylab import plot, show, axis, subplot, xlabel, ylabel, grid


# Choice of cholesky or eigenvector method.
method = 'cholesky'
#method = 'eigenvectors'

num_samples = 400

# The desired covariance matrix.
r = np.array([
        [  3.40, -2.75, -2.00],
        [ -2.75,  5.50,  1.50],
        [ -2.00,  1.50,  1.25]
    ])

# Generate samples from three independent normally distributed random
# variables (with mean 0 and std. dev. 1).
x = norm.rvs(size=(3, num_samples))

# We need a matrix `c` for which `c*c^T = r`.  We can use, for example,
# the Cholesky decomposition, or the we can construct `c` from the
# eigenvectors and eigenvalues.

if method == 'cholesky':
    # Compute the Cholesky decomposition.
    c = cholesky(r, lower=True)
else:
    # Compute the eigenvalues and eigenvectors.
    evals, evecs = eigh(r)
    # Construct c, so c*c^T = r.
    c = np.dot(evecs, np.diag(np.sqrt(evals)))

# Convert the data to correlated random variables. 
y = np.dot(c, x)

#
# Plot various projections of the samples.
#
subplot(2,2,1)
plot(y[0], y[1], 'b.')
ylabel('y[1]')
axis('equal')
grid(True)

subplot(2,2,3)
plot(y[0], y[2], 'b.')
xlabel('y[0]')
ylabel('y[2]')
axis('equal')
grid(True)

subplot(2,2,4)
plot(y[1], y[2], 'b.')
xlabel('y[1]')
axis('equal')
grid(True)

show()

1 Ответ

0 голосов
/ 24 января 2019

как определить, какие значения я могу использовать в ковариационной матрице?

Вы не «определяете» никакие значения. Это полностью ваш выбор. Если вы хотите использовать 2 переменные, то ковариационная матрица будет иметь форму (2,2). Если вы хотите, чтобы первая переменная коррелировала со второй, положите положительное значение в индекс [1,2]. Я думаю, что вам, возможно, нужно почитать о ковариационных матрицах в целом и посмотреть, как значения в ковариационной матрице влияют на выходное распределение. Это не скучный вопрос, как таковой. Вы полностью отвечаете за то, что вы хотите, чтобы значения в ковариационной матрице были. Это зависит от того, сколько вы хотите, чтобы RV были коррелированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...