rlmanovar-car

F-score and standardized Beta for heteroscedasticity-corrected covariance matrix (hccm) in R


I have multiple regression models which failed Breusch-Pagan tests, and so I've recalculated the variance using a heteroscedasticity-corrected covariance matrix, like this: coeftest(lm.model,vcov=hccm(lm.model)). coeftest() is from the lmtest package, while hccm() is from the car package.

I'd like to provide F-scores and standardized betas, but am not sure how to do this, because the output looks like this...

t test of coefficients:

                Estimate Std. Error t value Pr(>|t|)  
(Intercept)     0.000261   0.038824    0.01    0.995  
age             0.004410   0.041614    0.11    0.916  
exercise       -0.044727   0.023621   -1.89    0.059 .
tR             -0.038375   0.037531   -1.02    0.307  
allele1_num     0.013671   0.038017    0.36    0.719  
tR:allele1_num -0.010077   0.038926   -0.26    0.796  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Any advice on how to report these so they are as consistent as possible with the standard summary() and Anova() output from R and car, and the function std_beta() from the sjmisc package?


Solution

  • In case anyone else has this question, here was my solution. It is not particularly elegant, but it works.

    I simply used the function for std_beta as a template, and then changed the input for the standard error to that derived from the std_beta() function.

    # This is taken from std_beta function from sj_misc package.
    # =====================================
    
    
    b <-coef(lm.model) # Same Estimate
    b <-b[-1] # Same intercept
    fit.data <- as.data.frame(stats::model.matrix(lm.model)) # Same model.
    
    fit.data <- fit.data[, -1] # Keep intercept
    fit.data <- as.data.frame(sapply(fit.data, function(x) if (is.factor(x)) 
                              to_value(x, keep.labels = F)
                              else x))
    
    sx <- sapply(fit.data, sd, na.rm = T)
    sy <- sapply(as.data.frame(lm.model$model)[1], sd, na.rm = T)
    
    beta <- b * sx/sy
    se <-coeftest(lm.model,vcov=hccm(lm.model))[,2] # ** USE HCCM covariance for SE **
    se <- se[-1]
    beta.se <- se * sx/sy
    
    data.frame(beta = beta, ci.low = (beta - beta.se * 
                1.96), ci.hi = (beta + beta.se * 1.96))
    

    For the F-scores, I just squared the t-values. I hope this saves someone some time.