Как рассчитать корреляцию между двумя распределением в байесовской статистике?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как рассчитать корреляцию между двумя распределением в байесовской статистике?

Сообщение Anonymous »

Я пытаюсь рассчитать корреляцию между двумя распределениями (давайте назовем их ростом и весом). Я знаю, как вычислить простую корреляцию Пирсона, используя частый подход: вычислить ковариацию, вычислить ковариационную матрицу, а затем разделить ее на SD (x) × SD (y)
Стандартная формула для ковариации может быть рассчитана как: Ковариационная формула 1 < /p>
или через коэффициент корреляции 𝜌 as:
ковариационная формула 2 < /p>

Первый вопрос, который у меня есть, заключается в том, является ли уместно рассчитать среднее значение, как в частых методе. Было бы правильно получить два отдельных постеритора (для веса и высоты), а затем рассчитать ковариацию и корреляцию, используя первое уравнение? < /P>
< /li>
это возможно обработать ρ как задний? Должен ли я сначала получить позиции для высоты и веса, а затем рассчитать ρ после? >
Я пытаюсь использовать PYMC, но в моей модели я могу получить только оценку для одного распределения. Предыдущий и задний ρ отличается, но я не понимаю, почему. < /P>

Код: Выделить всё

high_values = df['high'].values #no NaN
weight_values = df["weight"].values

with pm.Model() as model:
rho_transformed = pm.Beta("rho_transformed", alpha=2, beta=2)
rho = pm.Deterministic("rho", rho_transformed * 2 - 1)  # Map back to [-1, 1]

# Define mean
mu_high = pm.NegativeBinomial("mu_1", mu=mu_1, alpha = 4) #t or poisson ...
mu_weight = pm.NegativeBinomial('mu_2', mu=mu_2, alpha=shape) #negBin
# Difine std
sigma_high = pm.HalfNormal("sigma_1", sigma=1)
sigma_weight = pm.HalfNormal("sigma_2", sigma=1)

cov_matrix = pm.math.stack([
[sigma_high**2, rho * sigma_high * sigma_weight],
[rho * sigma_high * sigma_weight, sigma_weight**2]
]) #is it correct in bayes?

# Observed data
observed_data = np.column_stack([high_values, weight_values]).astype("float64")

mu_value = pt.as_tensor_variable([mu_high, mu_weight]) #thats a very strange thing
observed = pm.MvNormal("observed", mu=mu_value, cov=cov_matrix, observed=observed_data) #multivariate normal distribution

# Prior and Posterior Predictive Checks
prior_samples = pm.sample_prior_predictive(draws=1000)
posterior_samples = pm.sample_posterior_predictive(trace)

# Run the sampler
trace = pm.sample(1000, return_inferencedata=True) #Markov Chain Monte Carlo (MCMC) sampling to draw samples from the posterior distribution of each parameter.
Вы можете позвонить в witre_samples.prior ['rho'] и trace.posterior ['rho'], чтобы проверить, что они отличаются :)

Подробнее здесь: https://stackoverflow.com/questions/791 ... statistics
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»