# Weibull Distribution probabilities using R

## Weibull Distribution probabilities using R

In this tutorial, you will learn about how to use dweibull(), pweibull(), qweibull() and rweibull() functions in R programming language to compute the individual probabilities, cumulative probabilities, quantiles and to generate random sample for Weibull distribution.

Before we discuss R functions for Weibull distribution, let us see what is Weibull distribution.

## Weibull Distribution

Weibull distribution distribution is a continuous type probability distribution. Weibull distribution has found applications in many fields. For example, Weibull distribution is suitable for describing waiting times between successive occurrences of a random events, survival times, system reliability, etc.

Let $X\sim W(\alpha,\beta)$. Then the probability density function of Weibull random variable $X$ is

 \begin{aligned} f(x;\alpha, \beta)&= \begin{cases} \frac{\alpha}{\beta} \big(\frac{x}{\beta}\big)^{\alpha-1}e^{-\big(\frac{x}{\beta}\big)^\alpha}, & x>0, \alpha, \beta>0; \\ 0, & Otherwise. \end{cases} \end{aligned}

where $\alpha$ is the shape parameter and $\beta$ is the scale parameter of Weibull distribution.

## Weibull probabilities using dweibull() function in R

For continuous probability distribution, density is the value of the probability density function at $x$ (i.e., $f(x)$).

The syntax to compute the probability density function for Weibull distribution using R is

dweibull(x,shape,scale=1)

where

• x : the value(s) of the variable and,
• shape : shape parameter of Weibull distribution,
• scale : scale parameter of Weibull distribution.

The dweibull() function gives the density for given value(s) x, shape and scale.

## Numerical Problem for Weibull Distribution

To understand the four functions dweibull(), pweibull(), qweibull() and rweibull(), let us take the following numerical problem.

### Weibull Distribution Example

The lifetime $X$ (in hundreds of hours) of a certain type of vacuum tube has a Weibull distribution with parameters $\alpha = 2$ and $\beta = 3$. Compute the following:

(a) Find the value of the density function at $x=3.5$.
(b) Plot the graph of Weibull probability distribution.
(c) Find the probability that the lifetime of vacuum tube is at most 6 unit of time.
(d) Find the probability that the lifetime of vacuum tube is at least 3 unit of time.
(e) Find the probability that the lifetime of equipment is less than 6 unit of time but greater than 1.8 unit of time.
(f) Plot the graph of cumulative Weibull probabilities.
(g) What is the value of $c$, if $P(X\leq c) \geq 40$?
(h) Simulate 1000 Weibull distributed random variables with $\alpha= 2$ and $\beta = 3$.

Let $X$ denote the lifetime of vacuum tube (in hundreds of hours). Given that $X\sim Weibull(\alpha=2, \beta=3)$.

### Example 1: How to use  dweibull() function in R?

To find the value of the density function at $x=2$ we need to use  dweibull() function.

Let $X$ denote the lifetime of certain equipment. Here $X\sim Weibull(2,3)$.

First let us define the given parameters as

# shape parameter
alpha <- 2
# scale parameter
beta <- 3

The probability density function of Weibull random variable $X$ is

 \begin{aligned} f(x)&=\frac{2}{3} \big(\dfrac{x}{3}\big)^{1}e^{-\big(\dfrac{x}{3}\big)^2};\; x>0. \end{aligned}

For part (a), we need to find the density function at $x=3.5$. That is $f(3.5)$.

(a) The value of the density function at $x=3.5$ is

 \begin{aligned} f(3.5)&= \frac{2}{3} \big(\dfrac{3.5}{3}\big)^{1}e^{-\big(\dfrac{3.5}{3}\big)^2}\\ &= 0.1994034 \end{aligned}

The above probability can be calculated using dweibull(0.35,shape=2,scale=3) function in R.

# Compute Weibull probability
result1 <- dweibull(3.5,shape=alpha,scale=beta)
result1
 0.1994034

### Example 2 Visualize Weibull probability distribution

Using dweibull() function we can compute Weibull distribution probabilities for given x, shape and scale. To plot the probability density function of Weibull distribution, we need to create a sequence of x values and compute the corresponding probabilities.

# create a sequence of x values
x <- seq(0,10, by=0.02)
## Compute the Weibull pdf for each x
px<- dweibull(x,shape=alpha,scale=beta)

(b) Visualizing Weibull Distribution with dweibull() function and plot() function in R:

The probability density function of Weibull distribution with given 2 and 3 can be visualized using plot() function as follows:

## Plot the Weibull probability dist
plot(x,px,type="l",xlim=c(0,10),ylim=c(0,max(px)),
lwd=3, col="darkred",ylab="f(x)")
title("PDF of Weibull (alpha = 2, beta= 3)")

## Weibull cumulative probability using pweibull() function in R

The syntax to compute the cumulative probability distribution function (CDF) for Weibull distribution using R is

pweibull(q,shape,scale=1)

where

• q : the value(s) of the variable,
• shape : shape parameter of Weibull distribution,
• scale : scale parameter of Weibull distribution.

Using this function one can calculate the cumulative distribution function of Weibull distribution for given value(s) of q (value of the variable x), shape and scale.

### Example 3: How to use pweibull() function in R?

In the above example, for part (c), we need to find the probability $P(X\leq 6)$.

(c) The probability that the lifetime of vaccum tube is at most 6 unit of time is

 \begin{aligned} P(X\leq 6) &=\int_0^{6} f(x)\; dx. \end{aligned}

## Compute cumulative Weibull probability
result2 <- pweibull(6,shape=alpha,scale=beta)
result2
 0.9816844

### Example 4: How to use pweibull() function in R?

In the above example, for part (d), we need to find the probability $P(X \geq 3)$.

To calculate the probability that a random variable $X$ is greater than a given number, one can use the option lower.tail=FALSE in pweibull() function.

Above probability can be calculated easily using pweibull() function with argument lower.tail=FALSE as

$P(X \geq 3) =\int_{3}^\infty f(x)\; dx$= pweibull(3,shape=alpha,scale=beta,lower.tail=FALSE)

or by using complementary event as

$P(X \geq 3) = 1- P(X\leq 3)$= 1- pweibull(3,shape=alpha,scale=beta)

# compute cumulative Weibull probabilities
# with lower.tail False
pweibull(3,shape=alpha,scale=beta,lower.tail=FALSE)
 0.3678794

(d) The probability that the lifetime of vacuum tube is at least 3 unit of time is

 \begin{aligned} P(X\geq 3) &=\int_{3}^\infty f(x)\; dx\\ &=0.3678794. \end{aligned}

# Using complementary event
1-pweibull(3,shape=alpha,scale=beta)
 0.3678794

### Example 5: How to use pweibull() function in R?

One can also use pweibull() function to calculate the probability that the random variable $X$ is between two values.

(e) The probability that the lifetime of equipment is less than 6 unit of time but greater than 1.8 unit of time can be written as $P(1.8 < X < 6)$.

 \begin{aligned} P(1.8 < X < 6) &= P(X< 6) -P(X < 1.8)\\ &= 0.9816844 - 0.3023237\\ &= 0.6793607 \end{aligned}

The above probability can be calculated using pweibull() function as follows:

a <- pweibull(6,shape=alpha,scale=beta)
b <- pweibull(1.8,shape=alpha,scale=beta)
result3 <- a - b
result3
 0.6793607

### Example 6: Visualize the cumulative Weibull probability distribution

Using pweibull() function we can compute Weibull cumulative probabilities (CDF) for given x, shape1 and shape2. To plot the CDF of Weibull distribution, we need to create a sequence of x values and compute the corresponding cumulative probabilities.

# create a sequence of x values
x <- seq(0,10, by=0.02)
## Compute the Weibull pdf for each x
Fx <- pweibull(x,shape=alpha,scale=beta)

(f) Visualizing Weibull Distribution with pweibull() function and plot() function in R:

The cumulative probability distribution of Weibull distribution with given x, shape1 and shape2 can be visualized using plot() function as follows:

## Plot the Weibull  probability dist
plot(x,Fx,type="l",xlim=c(0,10),ylim=c(0,1),
lwd=3, col="darkred",ylab="F(x)")
title("CDF of Weibull (alpha = 2, beta= 3)")

## Weibull Distribution Quantiles using qweibull() in R

The syntax to compute the quantiles of Weibull distribution using R is

qweibull(p,shape,scale=1)

where

• p : the value(s) of the probabilities,
• shape : shape parameter of Weibull distribution,
• scale : scale parameter of Weibull distribution.

The function qweibull(p,shape,scale) gives $100*p^{th}$ quantile of Weibull distribution for given value of p, shape and scale.

The $p^{th}$ quantile is the smallest value of Weibull random variable $X$ such that $P(X\leq x) \geq p$.

It is the inverse of pweibull() function. That is, inverse cumulative probability distribution function for Weibull distribution.

### Example 7: How to use qweibull() function in R?

In part (g), we need to find the value of $c$ such a that $P(X\leq c) \geq 0.40$. That is we need to find the $40^{th}$ quantile of given Weibull distribution.

alpha <- 2
beta <- 3
prob <- 0.40
# compute the quantile for Weibull  dist
qweibull(0.40,shape=alpha, scale=beta)
 2.144162

The $40^{th}$ percentile of given Weibull distribution is 2.144162.

### Visualize the quantiles of Weibull Distribution

The quantiles of Weibull distribution with given p, shape=alpha and scale=beta can be visualized using plot() function as follows:

p <- seq(0,1,by=0.02)
qx <- qweibull(p,shape=alpha,scale=beta)
# Plot the Quantiles of Weibull  dist
plot(p,qx,type="l",lwd=2,col="darkred",
ylab="quantiles",
main="Quantiles of Weibull(alpha= 2,beta = 3)")

## Simulating Weibull random variable using rweibull() function in R

The general R function to generate random numbers from Weibull distribution is

rweibull(n,shape,scale=1)

where,

• n : the sample observations,
• shape : shape parameter of Weibull distribution,
• scale : scale parameter of Weibull distribution.

The function rweibull(n,shape,scale) generates n random numbers from Weibull distribution with given shape and scale.

### Example 8: How to use rweibull() function in R?

In part (h), we need to generate 1000 random numbers from Weibull distribution with given $shape = 2$ and $scale=3$.

(h) We can use rweibull(1000,shape,scale) function to generate random numbers from Weibull distribution.

## initialize sample size to generate
n <- 1000
# Simulate 1000 values From Weibull  dist
x_sim <- rweibull(n,shape=alpha,scale=beta)

The below graphs shows the density of the simulated random variables from Weibull Distribution.

## Plot the simulated data
plot(density(x_sim),xlab="Simulated x",ylab="density",
lwd=5,col="darkred",
main="Simulated data from Weibull(2,3) dist")

If you use same function again, R will generate another set of random numbers from $Weibull(2,3)$.

# Simulate 1000 values From Weibull  dist
x_sim_2 <- rweibull(n,shape=alpha,scale=beta)
## Plot the simulated data
plot(density(x_sim_2),xlab="Simulated x",ylab="density",
lwd=5,col="blue",
main="Simulated data from Weibull(2,3) dist")

For the simulation purpose to reproduce same set of random numbers, one can use set.seed() function.

# set seed for reproducibility
set.seed(1457)
# Simulate 1000 values From Weibull  dist
x_sim_3 <- rweibull(n,shape=alpha,scale=beta)
## Plot the simulated data
plot(density(x_sim_3),xlab="Simulated x",ylab="density",
lwd=5,col="darkred",
main="Simulated data from Weibull(2,3) dist")
set.seed(1457)
# Simulate 1000 values From Weibull  dist
x_sim_4 <- rweibull(n,shape=alpha,scale=beta)
## Plot the simulated data
plot(density(x_sim_4),xlab="Simulated x",ylab="density",
lwd=5,col="darkred",
main="Simulated data from Weibull(2,3) dist")

Since we have used set.seed(1457) function, R will generate the same set of Weibull distributed random numbers.

hist(x_sim_4,breaks = 30)

To learn more about other discrete and continuous probability distributions using R, go through the following tutorials:

Discrete Distributions Using R

Continuous Distributions Using R

## Endnote

In this tutorial, you learned about how to compute the probabilities, cumulative probabilities and quantiles of Weibull distribution in R programming. You also learned about how to simulate a Weibull distribution using R programming. 