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

Вопрос или проблема

Я пытаюсь численно вычислить маргинальную функцию плотности, используя совместную функцию плотности вероятности Гаусса, заданную конкретным значением в совместной плотности. Я использую dmvnorm из пакета mvtnorm:

library(mvtnorm)

myfun = function(x, y, mu, ht) {
  dmvnorm(c(x, y), mean = mu, sigma = ht)
}

Но integrate показывает, что x и mean имеют несовпадающие размеры, когда я запускаю код:

integrate(myfun,
          lower = -10,
          upper = 2,
          y = -2,
          mu = c(0.06, 0.03),
          ht = diag(2))

Когда я тестирую myfun(-1,-2, mu = c(0.06, 0.03), ht = diag(2)), функция работает. Но я не уверен, почему функция integrate не работает.

.

Ответ или решение

Для определения и вычисления функции маргинальной плотности вероятности из совместного гауссовского распределения, необходимо сначала понять, что такое совместное распределение и как оно связано с маргинальными распределениями.

Понимание совместного и маргинального распределения

Совместное распределение двух или более случайных величин описывает их поведение совместно. Если у нас есть двумерное нормальное (гауссовское) распределение, оно задается вектором ожиданий и ковариационной матрицей. Маргинальное распределение одной переменной можно получить путем интегрирования совместной плотности по другой переменной.

Формальное представление

Рассмотрим случай двух таких переменных (X) и (Y), где их совместная плотность задана как:

[ f_{X,Y}(x,y) = \frac{1}{2\pi \sqrt{\det(\Sigma)}} \exp\left(-\frac{1}{2} \begin{pmatrix} x – \mu_x \ y – \mu_y \end{pmatrix}^T \Sigma^{-1} \begin{pmatrix} x – \mu_x \ y – \mu_y \end{pmatrix}\right) ]

где

  • (\mu = (\mu_x, \mu_y)) — вектор средних значений
  • (\Sigma) — ковариационная матрица

Маргинальная плотность переменной (X) может быть получена интегрированием по (Y):

[ fX(x) = \int{-\infty}^{\infty} f_{X,Y}(x,y) \, dy ]

Компьютерная реализация в R

Вам следует использовать функцию integrate для численного интегрирования. Однако ошибка, которую вы получаете, связана с форматом аргументов, которые вы передаете в функцию myfun.

Функция myfun должна принимать аргументы в виде, совместимом с интегратором. Она должна принимать один единственный аргумент (это может быть (x)) и все остальные аргументы должны быть переданы как параметры фиксированной длины.

Пример исправленного кода:

library(mvtnorm)

myfun = function(x, y, mu, ht) {
  dmvnorm(c(x, y), mean = mu, sigma = ht)
}

# Функция для интегрирования по y
marginal_fun = function(x, mu, ht) {
  # Здесь используем интегратор
  integrate(function(y) myfun(x, y, mu, ht), lower = -Inf, upper = Inf)$value
}

# Параметры
mu = c(0.06, 0.03)
ht = diag(2)

# Вычисление маргинальной плотности для конкретного x
marginal_density_value = marginal_fun(-2, mu, ht)
print(marginal_density_value)

Объяснение исправлений

  1. Форма Функции: marginal_fun теперь принимает только один аргумент (x) для интегрирования. Все остальные параметры ((\mu) и (ht)) фиксированы и передаются в функцию напрямую.

  2. Интегрирование: Используйте integrate для интегрирования плотности по (y) с пределами от (-\infty) до (+\infty).

Заключение

Определение маргинальной плотности из совместного гауссовского распределения – это процесс интеграции. Важно следить за форматом аргументов и совместимостью с функциями интеграции. Подходя соответствующим образом к структуре вашего кода, вы сможете правильно вычислить желаемую маргинальную плотность.

Оцените материал
Добавить комментарий

Капча загружается...