A set of visualization tools for the diagnostic of the fitted model in
the partial association analysis. It can provides a plot matrix including Q-Q plots,
residual-vs-fitted plots, residual-vs-covariate plots of all the fitted models.
This function also support the direct diagnostic of the cumulative link regression model
in the class of `clm`

, `glm`

, `lrm`

,
`orm`

, `polr`

. Currently, `vglm`

is not supported.

## Usage

```
diagnostic.plot(object, ...)
# S3 method for default
diagnostic.plot(object, ...)
# S3 method for resid
diagnostic.plot(object, output = c("qq", "fitted", "covariate"), ...)
# S3 method for PAsso
diagnostic.plot(
object,
output = c("qq", "fitted", "covariate"),
model_id = NULL,
x_name = NULL,
...
)
# S3 method for glm
diagnostic.plot(
object,
output = c("qq", "fitted", "covariate"),
x = NULL,
fit = NULL,
distribution = qnorm,
ncol = NULL,
alpha = 1,
xlab = NULL,
color = "#444444",
shape = 19,
size = 2,
qqpoint.color = "#444444",
qqpoint.shape = 19,
qqpoint.size = 2,
qqline.color = "#888888",
qqline.linetype = "dashed",
qqline.size = 1,
smooth = TRUE,
smooth.color = "red",
smooth.linetype = 1,
smooth.size = 1,
fill = NULL,
resp_name = NULL,
...
)
# S3 method for clm
diagnostic.plot(object, output = c("qq", "fitted", "covariate"), ...)
# S3 method for lrm
diagnostic.plot(object, output = c("qq", "fitted", "covariate"), ...)
# S3 method for orm
diagnostic.plot(object, output = c("qq", "fitted", "covariate"), ...)
# S3 method for polr
diagnostic.plot(object, output = c("qq", "fitted", "covariate"), ...)
```

## Arguments

- object
The object in the support classes (This function is mainly designed for

`PAsso`

).- ...
Additional optional arguments can be passed onto

`ggplot`

for drawing various plots.- output
A character string specifying what type of output to plot. Default is

`"qq"`

which produces a plot matrix with quantile-quantile plots of the residuals.`"fitted"`

produces a plot matrix between residuals and all corresponding fitted responses.`"covariates"`

produces a plot matrix between residuals and corresponding covariate.- model_id
A number refers to the index of the model that needs to be diagnosed. If NULL, all models will be diagnosed.

- x_name
A string refers to the covariate name that needs to be diagnosed. If NULL, all adjustments will be diagnosed.

- x
A vector giving the covariate values to use for residual-by- covariate plots (i.e., when

`output = "covariate"`

).- fit
The fitted model from which the residuals were extracted. (Only required if

`output = "fitted"`

and`object`

inherits from class`"resid"`

.)- distribution
Function that computes the quantiles for the reference distribution to use in the quantile-quantile plot. Default is

`qnorm`

which is only appropriate for models using a probit link function. When`jitter.scale = "probability"`

, the reference distribution is always U(-0.5, 0.5). (Only required if`object`

inherits from class`"resid"`

.)- ncol
Integer specifying the number of columns to use for the plot layout (if requesting multiple plots). Default is

`NULL`

.- alpha
A single values in the interval [0, 1] controlling the opacity alpha of the plotted points. Only used when

`nsim`

> 1.- xlab
Character string giving the text to use for the x-axis label in residual-by-covariate plots. Default is

`NULL`

.- color
Character string or integer specifying what color to use for the points in the residual vs fitted value/covariate plot. Default is

`"black"`

.- shape
Integer or single character specifying a symbol to be used for plotting the points in the residual vs fitted value/covariate plot.

- size
Numeric value specifying the size to use for the points in the residual vs fitted value/covariate plot.

- qqpoint.color
Character string or integer specifying what color to use for the points in the quantile-quantile plot.

- qqpoint.shape
Integer or single character specifying a symbol to be used for plotting the points in the quantile-quantile plot.

- qqpoint.size
Numeric value specifying the size to use for the points in the quantile-quantile plot.

- qqline.color
Character string or integer specifying what color to use for the points in the quantile-quantile plot.

- qqline.linetype
Integer or character string (e.g.,

`"dashed"`

) specifying the type of line to use in the quantile-quantile plot.- qqline.size
Numeric value specifying the thickness of the line in the quantile-quantile plot.

- smooth
Logical indicating whether or not too add a nonparametric smooth to certain plots. Default is

`TRUE`

.- smooth.color
Character string or integer specifying what color to use for the nonparametric smooth.

- smooth.linetype
Integer or character string (e.g.,

`"dashed"`

) specifying the type of line to use for the nonparametric smooth.- smooth.size
Numeric value specifying the thickness of the line for the nonparametric smooth.

- fill
Character string or integer specifying the color to use to fill the boxplots for residual-by-covariate plots when

`x`

is of class`"factor"`

. Default is`NULL`

which colors the boxplots according to the factor levels.- resp_name
Character string to specify the response name that will be displayed in the figure.

## Value

A `"ggplot"`

object for supported models. For class "PAsso", it returns a plot in
`"gtable"`

object that combines diagnostic plots of all responses.

A "ggplot" object based on the input residuals.

A "ggplot" object based on the input residuals.

A plot in "gtable" object that combines diagnostic plots of all responses.

A "ggplot" object based on the residuals generated from glm object.

A "ggplot" object based on the residuals generated from clm object.

A "ggplot" object based on the residuals generated from lrm object.

A "ggplot" object based on the residuals generated from orm object.

A "ggplot" object based on the residuals generated from polr object.

## Examples

```
# Import data for partial association analysis
data("ANES2016")
ANES2016$PreVote.num <- as.factor(ANES2016$PreVote.num)
PAsso_3v <- PAsso(responses = c("PreVote.num", "PID", "selfLR"),
adjustments = c("income.num", "age", "edu.year"),
data = ANES2016, uni.model = "probit",
method = c("kendall"),
resids.type = "surrogate", jitter = "latent")
diag_p1 <- diagnostic.plot(object = PAsso_3v, output = "qq")
diag_p2 <- diagnostic.plot(object = PAsso_3v, output = "fitted")
diag_p3 <- diagnostic.plot(object = PAsso_3v, output = "covariate")
#> No covariate is specified, the first covariate(adjustment) is being used.
#> Warning: Computation failed in `stat_smooth()`
#> Caused by error in `smooth.construct.cr.smooth.spec()`:
#> ! x has insufficient unique values to support 10 knots: reduce k.
#> Warning: Computation failed in `stat_smooth()`
#> Caused by error in `smooth.construct.cr.smooth.spec()`:
#> ! x has insufficient unique values to support 10 knots: reduce k.
#> Warning: Computation failed in `stat_smooth()`
#> Caused by error in `smooth.construct.cr.smooth.spec()`:
#> ! x has insufficient unique values to support 10 knots: reduce k.
# Simply diagnose a model
# Fit cumulative link models
fit1 <- ordinal::clm(PreVote.num ~ income.num + age + edu.year, data = ANES2016, link = "logit")
# diagnostic.plot
plot_qq_1 <- diagnostic.plot(object = fit1, output = "qq")
plot_fit_1 <- diagnostic.plot(object = fit1, output = "fitted")
plot_cov_1 <- diagnostic.plot(object = fit1, output = "covariate")
#> No covariate `x` is specified, extract the first covariate from `fit`.
```