General function to compute a network's predictive power on new data, following Haslbeck and Waldorp (2018) and Williams and Rodriguez (2022)

This implementation is different from the `predictability`

in the `mgm`

package
(Haslbeck), which is based on (regularized) regression. This implementation uses
the network directly, converting the partial correlations into an implied
precision (inverse covariance) matrix. See **Details** for more information

## Arguments

- network
Matrix or data frame. A partial correlation network

- original.data
Matrix or data frame. Must consist only of variables to be used to estimate the

`network`

. See**Examples**- newdata
Matrix or data frame. Must consist of the same variables in the same order as

`original.data`

. See**Examples**- ordinal.categories
Numeric (length = 1).

*Up to*the number of categories*before*a variable is considered continuous. Defaults to`7`

categories before`8`

is considered continuous

## Value

Returns a list containing:

- predictions
Predicted values of

`newdata`

based on the`network`

- betas
Beta coefficients derived from the

`network`

- results
Performance metrics for each variable in

`newdata`

## Details

This implementation of network predictability proceeds in several steps with important assumptions:

1. Network was estimated using (partial) correlations (not regression like the
`mgm`

package!)

2. Original data that was used to estimate the network in 1. is necessary to apply the original scaling to the new data

3. (Linear) regression-like coefficients are obtained by reserve engineering the
inverse covariance matrix using the network's partial correlations (i.e.,
by setting the diagonal of the network to -1 and computing the inverse
of the opposite signed partial correlation matrix; see `EGAnet:::pcor2inv`

)

4. Predicted values are obtained by matrix multiplying the new data with these coefficients

5. **Dichotomous and polytomous** data are given categorical values based
on the **original data's** thresholds and these thresholds are used to
convert the continuous predicted values into their corresponding categorical values

6. Evaluation metrics:

dichotomous ---

`"Accuracy"`

or the percent correctly predicted for the 0s and 1s and`"Kappa"`

or Cohen's Kappa (see cite)polytomous ---

`"Linear Kappa"`

or linearly weighted Kappa and`"Krippendorff's alpha"`

(see cite)continuous --- R-squared (

`"R2"`

) and root mean square error (`"RMSE"`

)

## References

**Original Implementation of Node Predictability**

Haslbeck, J. M., & Waldorp, L. J. (2018).
How well do network models predict observations? On the importance of predictability in network models.
*Behavior Research Methods*, *50*(2), 853–861.

**Derivation of Regression Coefficients Used (Formula 3)**

Williams, D. R., & Rodriguez, J. E. (2022).
Why overfitting is not (usually) a problem in partial correlation networks.
*Psychological Methods*, *27*(5), 822–840.

**Cohen's Kappa**

Cohen, J. (1960). A coefficient of agreement for nominal scales.
*Educational and Psychological Measurement*, *20*(1), 37-46.

Cohen, J. (1968). Weighted kappa: nominal scale agreement provision for scaled disagreement or partial credit.
*Psychological Bulletin*, *70*(4), 213-220.

**Krippendorff's alpha**

Krippendorff, K. (2013).
Content analysis: An introduction to its methodology (3rd ed.).
Thousand Oaks, CA: Sage.

## Author

Hudson Golino <hfg9s at virginia.edu> and Alexander P. Christensen <alexpaulchristensen@gmail.com>

## Examples

```
# Load data
wmt <- wmt2[,7:24]
# Set seed (to reproduce results)
set.seed(42)
# Split data
training <- sample(
1:nrow(wmt), round(nrow(wmt) * 0.80) # 80/20 split
)
# Set splits
wmt_train <- wmt[training,]
wmt_test <- wmt[-training,]
# EBICglasso (default for EGA functions)
glasso_network <- network.estimation(
data = wmt_train, model = "glasso"
)
# Check predictability
network.predictability(
network = glasso_network, original.data = wmt_train,
newdata = wmt_test
)
#> Dichotomous
#>
#> wmt1 wmt2 wmt3 wmt4 wmt5 wmt6 wmt7 wmt8 wmt9 wmt10 wmt11
#> Accuracy 0.747 0.865 0.802 0.700 0.751 0.738 0.709 0.679 0.768 0.722 0.730
#> Kappa 0.263 0.476 0.386 0.367 0.326 0.409 0.400 0.350 0.533 0.385 0.275
#> wmt12 wmt13 wmt14 wmt15 wmt16 wmt17 wmt18
#> Accuracy 0.713 0.73 0.675 0.709 0.713 0.797 0.764
#> Kappa 0.251 0.44 0.331 0.234 0.307 0.134 0.189
```