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

#r #plot

#r #график

Вопрос:

У меня есть несколько точек траектории из эксперимента, который я провел (см. Красные точки ниже).) Что я хотел бы сделать, так это получить предопределенные значения контура для двумерного стандартного нормального распределения, соответствующего этим точкам красной линии. Это двумерное распределение сосредоточено в точке at c(3.4, 1) (где находится синий круг).

На графике ниже я построил двумерное нормальное распределение с помощью моделирования с использованием mvrnorm . В этом случае выбираются значения x и y, а затем я могу получить z-значения. Но как я могу получить z-значения для заданных точек?

(код для двумерного распределения взят с этого веб-сайта.)

 library(MASS)
library(shape)
#> Warning: package 'shape' was built under R version 3.6.2
x <- c(5.04,4.68,4.39,4.09,3.73,3.37,3.07,2.77,2.47,2.11)
y <- c(0.74,0.69,0.64,0.60,0.56,0.52,0.50,0.50,0.50,0.51)

N <- 200 # Number of random samples
set.seed(123)
# Parameters 
rho <- 0.5
mu1 <- 3.4; s1 <- 0.25
mu2 <- 1; s2 <- 0.25

# Parameters for bivariate normal distribution
# Mean 
mu <- c(mu1,mu2) 
# Covariance matrix
sigma <- matrix(c(s1^2, s1*s2*rho, s1*s2*rho, s2^2),2) 

X <- mvrnorm(N, mu = mu, Sigma = sigma)
tail(X,2)
#>            [,1]      [,2]
#> [199,] 3.425264 0.7100933
#> [200,] 3.187654 0.6990182

z <- kde2d(X[,1], X[,2], n=50)
plot(X, xlab="X label", ylab="Y label",  
   xlim=c(2,6), ylim=c(-1,3.5),pch=19, cex=.4)
contour(z, drawlabels=FALSE, add=TRUE)
lines(x,y,type="p", xlim=range(x), ylim=c(-1,3.5), 
       xlab="x", ylab="y", pch=16, col = "red")
plotcircle(mid = c(3.4, 1), r = 0.05, col="blue") 
 

У меня возник еще один вопрос о том, как центрировать распределение при определенных значениях. Вопрос возник из-за недоразумения, которое было разъяснено в комментариях. Я оставляю это ниже для записи, но нет необходимости обращаться к нему.

  • как я могу «центрировать» двумерное распределение там, где находится синий круг ( c(3.4, 1) )? Прямо сейчас распределение сосредоточено там, потому что я установил mu1 <- 3.4 и mu2 <- 1 , но я думал, что mu1 и mu2 были значениями средних. На самом деле я хотел бы, чтобы среднее значение составляло около 0,5 для каждого.

Комментарии:

1. Как и в случае с одномерным нормальным распределением, вы можете центрировать его там, где хотите, добавляя / вычитая любые значения, которые вам нужны. Если ваши средние значения данных равны 3,4 и 1, но вы хотите преобразовать их в 0,5, вы можете вычесть 2,9 из значений x и 0,5 из значений y.

2. @GregorThomas спасибо за ваш отзыв. Мое замешательство связано с тем, что я думал, что mu1 и mu2 были значениями средних и, следовательно, «сегментов», но вместо этого они кажутся координатами.

3. Я не знаю, что вы подразумеваете под этим комментарием. Откуда берется концепция «сегментов»?

4. @GregorThomas Спасибо, я несколько смутил среднее и sd в своем мысленном представлении распределения. Теперь все ясно. Я редактирую вопрос.

5. Я думаю z , что значения OP предназначены для контуров двумерного нормального определения (BND), которые они в настоящее время «конструируют» эмпирически из случайной выборки. Я думаю, что они хотят, это контуры предопределенного BND, для которых mvtnorm::dmvnorm() , вероятно, будет полезно.