Bivariate plot of a bivariate normal distribution
An example:
# Standard deviations and correlation
sig_x <- 1
sig_y <- 2
rho_xy <- 0.7
# Covariance between X and Y
sig_xy <- rho_xy * sig_x *sig_y
# Covariance matrix
Sigma_xy <- matrix(c(sig_x ^ 2, sig_xy, sig_xy, sig_y ^ 2), nrow = 2, ncol = 2)
# Load the mvtnorm package
library("mvtnorm")
# Means
mu_x <- 0
mu_y <- 0
# Simulate 1000 observations
set.seed(12345) # for reproducibility
xy_vals <- rmvnorm(1000, mean = c(mu_x, mu_y), sigma = Sigma_xy)
# Have a look at the first observations
head(xy_vals)
# Create scatterplot
# plot(xy_vals[, 1], xy_vals[, 2], pch = 16, cex = 2, col = "blue",
# main = "Bivariate normal: rho = 0.0", xlab = "x", ylab = "y")
library(graphics)
x <- xy_vals[, 1]
y <- xy_vals[, 2]
par(mar=c(4, 4, 2, 6)+0.4)
smoothScatter(x, y, asp=1,
main = paste("Bivariate normal: rho = ", rho_xy),
xlab = "x", ylab = "y")
# Add lines
abline(h = mu_y, v = mu_x)
library(fields)
n <- matrix(0, ncol=128, nrow=128)
xrange <- range(x)
yrange <- range(y)
for (i in 1:length(x)) {
posx <- 1+floor(127*(x[i]-xrange[1])/(xrange[2]-xrange[1]))
posy <- 1+floor(127*(y[i]-yrange[1])/(yrange[2]-yrange[1]))
n[posx, posy] <- n[posx, posy]+1
}
image.plot( legend.only=TRUE,
zlim= c(0, max(n)), nlevel=128,
col=colorRampPalette(c("white", blues9))(128))
# Standard deviations and correlation
sig_x <- 1
sig_y <- 2
rho_xy <- 0.7
# Covariance between X and Y
sig_xy <- rho_xy * sig_x *sig_y
# Covariance matrix
Sigma_xy <- matrix(c(sig_x ^ 2, sig_xy, sig_xy, sig_y ^ 2), nrow = 2, ncol = 2)
# Load the mvtnorm package
library("mvtnorm")
# Means
mu_x <- 0
mu_y <- 0
# Simulate 1000 observations
set.seed(12345) # for reproducibility
xy_vals <- rmvnorm(1000, mean = c(mu_x, mu_y), sigma = Sigma_xy)
# Have a look at the first observations
head(xy_vals)
# Create scatterplot
# plot(xy_vals[, 1], xy_vals[, 2], pch = 16, cex = 2, col = "blue",
# main = "Bivariate normal: rho = 0.0", xlab = "x", ylab = "y")
library(graphics)
x <- xy_vals[, 1]
y <- xy_vals[, 2]
par(mar=c(4, 4, 2, 6)+0.4)
smoothScatter(x, y, asp=1,
main = paste("Bivariate normal: rho = ", rho_xy),
xlab = "x", ylab = "y")
# Add lines
abline(h = mu_y, v = mu_x)
library(fields)
n <- matrix(0, ncol=128, nrow=128)
xrange <- range(x)
yrange <- range(y)
for (i in 1:length(x)) {
posx <- 1+floor(127*(x[i]-xrange[1])/(xrange[2]-xrange[1]))
posy <- 1+floor(127*(y[i]-yrange[1])/(yrange[2]-yrange[1]))
n[posx, posy] <- n[posx, posy]+1
}
image.plot( legend.only=TRUE,
zlim= c(0, max(n)), nlevel=128,
col=colorRampPalette(c("white", blues9))(128))
Commentaires
Enregistrer un commentaire