In some occasions, the optimization algorithm of femlm
may fail to converge, or
the variance-covariance matrix may not be available. The most common reason of why
this happens is collinearity among variables. This function helps to find out which
set of variables is problematic.
Details
This function tests: 1) collinearity with the fixed-effect variables, 2) perfect multi-collinearity between the variables, 3) perfect multi-collinearity between several variables and the fixed-effects, and 4) identification issues when there are non-linear in parameters parts.
Examples
# Creating an example data base:
set.seed(1)
fe_1 = sample(3, 100, TRUE)
fe_2 = sample(20, 100, TRUE)
x = rnorm(100, fe_1)**2
y = rnorm(100, fe_2)**2
z = rnorm(100, 3)**2
dep = rpois(100, x*y*z)
base = data.frame(fe_1, fe_2, x, y, z, dep)
# creating collinearity problems:
base$v1 = base$v2 = base$v3 = base$v4 = 0
base$v1[base$fe_1 == 1] = 1
base$v2[base$fe_1 == 2] = 1
base$v3[base$fe_1 == 3] = 1
base$v4[base$fe_2 == 1] = 1
# Estimations:
# Collinearity with the fixed-effects:
res_1 = femlm(dep ~ log(x) + v1 + v2 + v4 | fe_1 + fe_2, base)
#> Warning: [femlm]: The optimization algorithm did not converge, the results are not reliable. The information matrix is singular: presence of collinearity.
collinearity(res_1)
#> Error: in message_magic(..., .sep = .sep, .end = .end, .wid...:
#> In `string_magic`, the operator `width` must take a numeric argument.
#> PROBLEM: `min(100, .sw)` is not numeric.
# => collinearity with the first fixed-effect identified, we drop v1 and v2
res_1bis = femlm(dep ~ log(x) + v4 | fe_1 + fe_2, base)
#> Warning: [femlm]: The information matrix is singular: presence of collinearity.
collinearity(res_1bis)
#> Error: in message_magic(..., .sep = .sep, .end = .end, .wid...:
#> In `string_magic`, the operator `width` must take a numeric argument.
#> PROBLEM: `min(100, .sw)` is not numeric.
# Multi-Collinearity:
res_2 = femlm(dep ~ log(x) + v1 + v2 + v3 + v4, base)
#> Warning: [femlm]: The optimization algorithm did not converge, the results are not reliable. The information matrix is singular: presence of collinearity.
collinearity(res_2)
#> Error: in message_magic(..., .sep = .sep, .end = .end, .wid...:
#> In `string_magic`, the operator `width` must take a numeric argument.
#> PROBLEM: `min(100, .sw)` is not numeric.