## 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.

Read more about the theory and results of Weibull distribution here.

## 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
```

`[1] 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
```

`[1] 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)
```

`[1] 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)
```

`[1] 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
```

`[1] 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)
```

`[1] 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**

Binomial distribution in R

Poisson distribution in R

Geometric distribution in R

Negative Binomial distribution in R

Hypergeometric distribution in R

**Continuous Distributions Using R**

Uniform distribution in R

Exponential distribution in R

Log-Normal distribution in R

Normal distribution in R

Beta distribution in R

Gamma distribution in R

Cauchy distribution in R

Laplace distribution in R

Logistic distribution in 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.

To learn more about R code for discrete and continuous probability distributions, please refer to the following tutorials:

Probability Distributions using R

Let me know in the comments below, if you have any questions on Weibull Distribution using R and your thought on this article.