This function identifies aliased (linearly dependent) variables in a linear model by fitting a linear model, and then using the stats::alias function to detect aliased variables.
Value
Returns a character vector of aliased variable names if any are
found; otherwise, returns NULL invisibly. If verbose is TRUE, the
function will also print a message to the console.
Examples
load_packages(car)
x1 <- rnorm(100)
x2 <- 2 * x1
x3 <- rnorm(100)
y <- rnorm(100)
model <- lm(y ~ x1 + x2 + x3)
summary(model)
#> 
#> Call:
#> lm(formula = y ~ x1 + x2 + x3)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -3.2003 -0.6900 -0.1024  0.7851  2.2044 
#> 
#> Coefficients: (1 not defined because of singularities)
#>             Estimate Std. Error t value Pr(>|t|)  
#> (Intercept)  0.17508    0.10368   1.689   0.0945 .
#> x1           0.17092    0.10540   1.622   0.1081  
#> x2                NA         NA      NA       NA  
#> x3          -0.09002    0.10109  -0.891   0.3754  
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 
#> Residual standard error: 1.019 on 97 degrees of freedom
#> Multiple R-squared:  0.03508,	Adjusted R-squared:  0.01518 
#> F-statistic: 1.763 on 2 and 97 DF,  p-value: 0.1769
#> 
# there are aliased coefficients in the model
try(car::vif(model))
#> Error in vif.default(model) : there are aliased coefficients in the model
# The function identifies the aliased variables
detect_alias(data = cbind.data.frame(x1, x2, x3))
#> [1] "x2"
detect_alias(data = cbind.data.frame(x1, x2, x3), verbose = TRUE)
#> aliased variables: x2
#> [1] "x2"
# excluding x2 and refit the model
model <- lm(y ~ x1 + x3)
summary(model)
#> 
#> Call:
#> lm(formula = y ~ x1 + x3)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -3.2003 -0.6900 -0.1024  0.7851  2.2044 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)  
#> (Intercept)  0.17508    0.10368   1.689   0.0945 .
#> x1           0.17092    0.10540   1.622   0.1081  
#> x3          -0.09002    0.10109  -0.891   0.3754  
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 
#> Residual standard error: 1.019 on 97 degrees of freedom
#> Multiple R-squared:  0.03508,	Adjusted R-squared:  0.01518 
#> F-statistic: 1.763 on 2 and 97 DF,  p-value: 0.1769
#> 
try(car::vif(model))
#>       x1       x3 
#> 1.001187 1.001187