dnorm() calculates the density function of a
normal distribution.
# Create a sequence of values between -10 and 10 with a difference of 0.1
x <- seq(-10, 10, by=0.1)
y <- dnorm(x, mean(x), sd(x))
plot(x, y, type="l")
abline(v=mean(x), col="red")
pnorm() calculates the cumulative distribution
function.
x <- seq(-10, 10, by=0.1)
y <- pnorm(x, mean(x), sd(x))
plot(x, y, type="l")
qnorm() is the inverse of pnorm(). It takes
the probability value and gives output which corresponds to the
probability value. It is useful in finding the percentiles of a normal
distribution.
x <- seq(0, 1, by=0.02)
y <- qnorm(x, mean(x), sd(x))
plot(x, y, type="l")
rnorm() is used to generate a vector of random numbers
which are normally distributed.
# Create a vector of 1000 random numbers with mean=10 and sd=5
set.seed(1)
x <- rnorm(1000, mean=10, sd=5)
# Create a histogram with probability=TRUE in order to add a normal curve or a density line
hist(x, probability=TRUE)
# X-axis grid
x2 <- seq(min(x), max(x), length=50)
fun <- dnorm(x2, mean(x), sd(x))
hist(x, probability=TRUE, ylim = c(0, max(fun)), main="Histogram with normal curve")
lines(x2, fun, col="red", lwd=1.5)
hist(x, probability=TRUE, ylim = c(0, max(fun)), main="Histogram with density curve")
lines(density(x), col="red", lwd=1.5)
The easiest way to simulate a bivariate normal distribution in
R is to use the mvrnorm() function from the
MASS package.
library(MASS)
set.seed(1)
bidata <- as.data.frame(mvrnorm(n=100, mu=c(0, 0), Sigma=matrix(c(2, -1, -1, 1), ncol=2)))
head(bidata)
V1 V2
1 1.0638091 -0.2067474
2 -0.2664476 0.1340747
3 1.4461205 -0.2319283
4 -2.2470623 1.2739463
5 -0.2408411 0.6244316
6 0.5550514 -1.6270500
The easiest way to plot a bivariate normal distribution in R is
to use functions from the mnormt() package. To create a
contour plot, which offers a 2-D visualization of a bivariate normal
distribution, we use the contour() function.
library(mnormt)
set.seed(1)
# Create a bivariate normal distribution
x <- seq(-3, 3, 0.1)
y <- seq(-3, 3, 0.1)
mu <- c(0, 0)
sigma <- matrix(c(2, -1, -1, 2), nrow=2)
f <- function(x, y) dmnorm(cbind(x, y), mu, sigma)
z <- outer(x, y, f)
# Create the contour plot
contour(x, y, z)
We also use the persp() function to create a surface
plot, which offers a 3-D visualization of a bivariate normal
distribution.
persp(x, y, z, theta=-30, phi=20, col="blue", expand=0.7, ticktype="detailed")
# theta, phi: Defines the angles of the viewing direction
# expand: Controls the size of the z-axis
# ticktype: Controls the appearance of the ticks on the axes