# array_bic_aic: Calculate the AIC and BIC. In tensr: Covariance Inference and Decompositions for Tensor Datasets

## Description

Calculate the AIC and BIC for Kronecker structured covariance models, assuming the array normal distribution.

## Usage

 ```1 2``` ```array_bic_aic(sig_squared, p, mode_ident = NULL, mode_diag = NULL, mode_unstructured = NULL) ```

## Arguments

 `sig_squared` A numeric. The MLE of sigma^2 in the array normal model (the 'variance' form of the total variation parameter). `p` A vector of integers. The dimension of the data array (including replication modes). `mode_ident` A vector of integers. The modes assumed to have identity covariances. `mode_diag` A vector of integers. The modes assumed to have diagional covariances. `mode_unstructured` A vector of integers. The modes of assumed to have unstructured covariances.

## Details

The AIC and BIC depend only on the data through the MLE of the total variation parameter. Given this, the dimension of the array, and a specification of which modes are the identity and which are unstructured, this function will calculate the AIC and BIC.

## Value

`AIC` A numeric. The AIC of the model.

`BIC` A numeric. The BIC of the model.

## Author(s)

David Gerard.

`holq` for obtaining `sig_squared`.

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27``` ```# Generate random array data with first mode having unstructured covariance # second having diagonal covariance structure and third mode having identity # covariance structure. set.seed(857) p <- c(4, 4, 4) Z <- array(stats::rnorm(prod(p)), dim = p) Y <- atrans(Z, list(tensr:::rwish(diag(p)), diag(1:p), diag(p))) # Use holq() to fit various models. false_fit1 <- holq(Y, mode_rep = 1:3) ## identity for all modes false_fit2 <- holq(Y, mode_rep = 2:3) ## unstructured first mode true_fit <- holq(Y, mode_rep = 3, mode_diag = 2) ## correct model # Get AIC and BIC values. false_aic1 <- array_bic_aic(false_fit1\$sig ^ 2, p, mode_ident = 1:length(p)) false_aic2 <- array_bic_aic(false_fit2\$sig ^ 2, p, mode_ident = 2:length(p), mode_unstructured = 1) true_aic <- array_bic_aic(true_fit\$sig ^ 2, p, mode_ident = 2:length(p), mode_diag = 1) # Plot the results. plot(c(false_aic1\$AIC, false_aic2\$AIC, true_aic\$AIC), type = "l", xaxt = "n", xlab = "Model", ylab = "AIC", main = "AIC") axis(side = 1, at = 1:3, labels = c("Wrong Model 1", "Wrong Model 2", "Right Model")) plot(c(false_aic1\$BIC, false_aic2\$BIC, true_aic\$BIC), type = "l", xaxt = "n", xlab = "Model", ylab = "BIC", main = "BIC") axis(side = 1, at = 1:3, labels = c("Wrong Model 1", "Wrong Model 2", "Right Model")) ```

### Example output  ```Scale Diff =  0
Scale =  154.2977

Scale Diff =  0.9474794
Scale =  79.22942

Scale Diff =  0
Scale =  79.22942

Scale Diff =  1.399258
Scale =  64.31057

Scale Diff =  0.03221078
Scale =  62.30372

Scale Diff =  0.002281847
Scale =  62.16187

Scale Diff =  0.0003964936
Scale =  62.13723

Scale Diff =  8.992577e-05
Scale =  62.13165

Scale Diff =  2.163337e-05
Scale =  62.1303

Scale Diff =  5.288946e-06
Scale =  62.12997

Scale Diff =  1.299368e-06
Scale =  62.12989

Scale Diff =  3.196904e-07
Scale =  62.12987

Scale Diff =  7.868683e-08
Scale =  62.12987

Scale Diff =  1.936925e-08
Scale =  62.12987

Scale Diff =  4.767876e-09
Scale =  62.12987

Scale Diff =  1.173631e-09
Scale =  62.12987

Scale Diff =  2.888905e-10
Scale =  62.12987
```

tensr documentation built on May 2, 2019, 2:32 p.m.