Невозможно отобразить два тусклых контура нормального распределения с помощью библиотеки mvtnorm - PullRequest
0 голосов
/ 24 декабря 2018

Я не смог показать контур этого распределения в следующих кодах.

grid <- seq(-1,1,0.01)
mu_prior <- rep(0, 2)
alpha <- 0.5
sigma_prior <- alpha * diag(2)

library(mvtnorm)
f <- function(x,y){return(dmvnorm(c(x,y), mu_prior, sigma_prior))}

z <- outer(grid, grid, f)
contour(grid, grid, z)

Ошибка показывает

Ошибка в dmvnorm (z, mu_prior, sigma_prior): среднееи sigma имеют несоответствующий размер

Я не могу понять это, потому что размер столбца mu_prior такой же, как у sigma_prior.Например, следующий код успешно выполнен

dmvnorm(c(0,0), mu_prior, sigma_prior)

[1] 0,07957747

Не могли бы вы сказать мне, где я должен исправить?

1 Ответ

0 голосов
/ 24 декабря 2018

В документе R outer() аргумент FUN ограничен векторизацией .Короче говоря, двоичная функция, которую вы вызываете в outer(), должна удовлетворять свойству много-к-одному , то есть FUN(c(-1, 0, 1), 0) должна быть исполняемой.Ваша функция:

f <- function(x,y){return(dmvnorm(c(x, y), mu_prior, sigma_prior))}

не может справиться с f(c(-1, 0, 1), 0).Есть два способа сделать его векторизованным:

(1) cbind()

f1 <- function(x,y){return(dmvnorm(cbind(x, y), mu_prior, sigma_prior))}
z1 <- outer(grid, grid, f1)
contour(grid, grid, z1)

(2) Vectorize()

f2 <- Vectorize(f)              # It's slower than the former.
z2 <- outer(grid, grid, f2)
contour(grid, grid, z2)

enter image description here

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