# Chapter 14 Model diagnostics

In this chapter, we investigate how ADAMs can be diagnosed and improved. Most topics will build upon the typical model assumptions discussed in Subsection 1.4.1 and in Section 12 of Svetunkov (2022a). Some of the assumptions cannot be diagnosed properly, but there are well-established instruments for others. We will consider the following assumptions and discuss how to check whether they are violated or not:

- Model is correctly specified:

- No omitted variables;
- No redundant variables;
- The necessary transformations of the variables are applied;
- No outliers in the residuals of the model.

- Residuals are i.i.d.:

- They are not autocorrelated;
- They are homoscedastic;
- The expectation of residuals is zero, no matter what;
- The residuals follow the specified distribution;
- The distribution of residuals does not change over time.

- The explanatory variables are not correlated with anything but the response variable (technically speaking, this is not an assumption about the model):

- No multicollinearity;
- No endogeneity (not discussed in the context of ADAM).

All the model diagnostics are aimed at spotting patterns in residuals. If there are patterns, then something is probably missing in the model. In this chapter, we will discuss which instruments can be used to diagnose different types of violations of assumptions.

*Remark*. The analysis carried out in this chapter is based mainly on visual inspection of various plots. While there are statistical tests for some assumptions, we do not discuss them here. This is because human judgment is typically more reliable than automatic procedures (Petropoulos et al., 2018b), and people tend to misuse the latter (Wasserstein and Lazar, 2016).

To make this more actionable, we will consider a conventional regression model on `Seatbelts`

data, discussed in Section 10.6. We start with pure regression, which can be estimated equally well with the `adam()`

function from the `smooth`

package or the `alm()`

from the `greybox`

in R. In general, I recommend using `alm()`

when no dynamic elements are present in the model. Otherwise, use `adam()`

in the following way:

```
<- adam(Seatbelts, "NNN",
adamSeat01 formula=drivers~PetrolPrice+kms)
plot(adamSeat01, 7, main="")
```

This model has several issues, and in this chapter, we will discuss how to diagnose and fix them.