# Introduction

olsrr offers tools for detecting violation of standard regression
assumptions. Here we take a look at residual diagnostics. The standard
regression assumptions include the following about residuals/errors:

- The error has a normal distribution (normality assumption).
- The errors have mean zero.
- The errors have same but unknown variance (homoscedasticity
assumption).
- The error are independent of each other (independent errors
assumption).

## Residual QQ Plot

Graph for detecting violation of normality assumption.

```
model <- lm(mpg ~ disp + hp + wt + qsec, data = mtcars)
ols_plot_resid_qq(model)
```

## Residual Normality Test

Test for detecting violation of normality assumption.

```
model <- lm(mpg ~ disp + hp + wt + qsec, data = mtcars)
ols_test_normality(model)
```

```
## -----------------------------------------------
## Test Statistic pvalue
## -----------------------------------------------
## Shapiro-Wilk 0.9366 0.0600
## Kolmogorov-Smirnov 0.1152 0.7464
## Cramer-von Mises 2.8122 0.0000
## Anderson-Darling 0.5859 0.1188
## -----------------------------------------------
```

Correlation between observed residuals and expected residuals under
normality.

```
model <- lm(mpg ~ disp + hp + wt + qsec, data = mtcars)
ols_test_correlation(model)
```

`## [1] 0.970066`

## Residual vs Fitted Values Plot

It is a scatter plot of residuals on the y axis and fitted values on
the x axis to detect non-linearity, unequal error variances, and
outliers.

**Characteristics of a well behaved residual vs fitted
plot:**

- The residuals spread randomly around the 0 line indicating that the
relationship is linear.
- The residuals form an approximate horizontal band around the 0 line
indicating homogeneity of error variance.
- No one residual is visibly away from the random pattern of the
residuals indicating that there are no outliers.

```
model <- lm(mpg ~ disp + hp + wt + qsec, data = mtcars)
ols_plot_resid_fit(model)
```

## Residual Histogram

Histogram of residuals for detecting violation of normality
assumption.

```
model <- lm(mpg ~ disp + hp + wt + qsec, data = mtcars)
ols_plot_resid_hist(model)
```