Validity / identification diagnostics for a fitted panel copula model
Source:R/copreg-panel.R
validity.copregpanel.RdWalks the identification requirements that carry over to the panel estimator from the cross-sectional ones – nonnormality of the (transformed) endogenous regressors, and the standard-error inflation relative to the uncorrected within estimator – plus a check that is specific to this estimator: normality of the error of the FOD-transformed model, which Equation 12 of Haschka (2022) assumes directly rather than as a matter of interpretation.
Arguments
- object
A fitted
"copregpanel"object.- level
Significance level used for the nonnormality thresholds.
- power
Target power used for the nonnormality thresholds of Becker, Proksch and Ringle (2022).
- ...
Currently unused.
- x
An object of class
"copregpanel.validity", as returned byvalidity.copregpanel.- digits
Number of significant digits to print.
Value
An object of class "copregpanel.validity", a list
including
- step1
the nonnormality table for the transformed endogenous regressors, with the Becker-Proksch-Ringle thresholds
- error
skewness, excess kurtosis, and Anderson-Darling and Kolmogorov-Smirnov tests of normality for the residuals of the transformed model
- inflation
a data frame comparing the copula-MLE and within bootstrap standard errors, with their ratio
- ratio.max
the largest such ratio
x, invisibly.
References
Haschka, R. E. (2022). Handling endogenous regressors using copulas: A generalization to linear panel models with fixed effects and correlated regressors. Journal of Marketing Research 59(4), 861-880.
Becker, J.-M., D. Proksch, and C. M. Ringle (2022). Revisiting Gaussian copulas to handle endogenous regressors. Journal of the Academy of Marketing Science 50, 46-66.
Examples
# \donttest{
set.seed(1)
N <- 30L; Time <- 6L
d <- data.frame(id = rep(seq_len(N), each = Time),
year = rep(seq_len(Time), times = N))
alpha <- rep(rnorm(N), each = Time)
e <- rnorm(N * Time)
d$x <- exp(rnorm(N * Time) + 0.5 * e) # endogenous: correlated with e
d$z <- rnorm(N * Time) # exogenous
d$y <- alpha + 0.5 * d$x + d$z + e
fit <- CopRegPANEL(y ~ x | z, data = d, index = c("id", "year"),
nboots = 15, verbose = FALSE)
validity(fit)
#>
#> Validity check for Panel copula MLE (Haschka 2022)
#> n = 180 observations in 30 panels, target power 80%
#> Sources: Becker, Proksch & Ringle (2022); Haschka (2022)
#>
#> [1] Nonnormality of the endogenous regressors, after the transformation
#> skewness ex.kurtosis AD CvM KS p Yang ok Becker ok
#> x 1.987 9.611 7.074 1.295 0.000826 TRUE FALSE
#> Becker et al. at n = 180: |skewness| >= not attainable, or AD > 18.964, or CvM > 3.488
#> Their Study 3 covers fixed-effects panels and finds the cross-sectional
#> thresholds carry over once total n is the reference.
#>
#> [2] Error of the transformed model, which Equation 12 assumes normal
#> skewness = 0.1376, excess kurtosis = 0.1579, AD = 0.5967 (p = 0.117)
#> Unlike in the cross-sectional estimators this is a stated assumption of the
#> likelihood rather than a matter of interpretation, so a small p is a real
#> warning sign.
#>
#> [3] Standard errors against the uncorrected within estimator, on the
#> same bootstrap resamples
#> SE (copula MLE) SE (within) ratio
#> x 0.07064 0.05349 1.321
#> z 0.12728 0.11718 1.086
#> => largest ratio = 1.321.
#> Haschka (2022) reads a factor of five to ten as a sign that the model
#> is not identified; this is below that.
#>
# }