Как нарисовать небольшое двумерное распределение в R?

#r #plot #visualization

#r #график #визуализация

Вопрос:

В иллюстративных целях я пытаюсь нарисовать небольшое двумерное нормальное распределение. Я бы хотел, чтобы он был плотным, с центром в (3,4;1) и радиусом 0,5 или меньше. Под этим я подразумеваю, что я хотел бы, чтобы точки данных были ограничены небольшим радиусом.

Ниже приведен код, который я использую (с этого сайта); Я пытался настроить его по-разному, но двумерное распределение всегда распределено.

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

# Parameters for bivariate normal distribution
mu <- c(mu1,mu2) # Mean 
sigma <- matrix(c(s1^2, s1*s2*rho, s1*s2*rho, s2^2),
                2) # Covariance matrix
X <- mvrnorm(N, mu = mu, Sigma = sigma)
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)
 

Создано 2021-01-05 пакетом reprex (версия 0.3.0)

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

1. Если я вас правильно понимаю, вы просто хотите установить s2 <- s1 <- 0.25 , т. е. Это даст приблизительно 95% значений в пределах — 2 * sd от предельного среднего, т.е. == радиус 0,5

2. @user20650 Спасибо, все работает. Я пробовал что-то подобное и не знаю, почему тогда это не сработало.

Ответ №1:

Использование s2 <- s1 <- 0.25 решает проблему, как указано @user20650.

 library(MASS)
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
mu <- c(mu1,mu2) # Mean 
sigma <- matrix(c(s1^2, s1*s2*rho, s1*s2*rho, s2^2),
                2) # Covariance matrix
X <- mvrnorm(N, mu = mu, Sigma = sigma)
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)
 

Создано 2021-01-05 пакетом reprex (версия 0.3.0)