#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,52. @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)