Search code examples
rp-valuerobust

how are the p-values in lmrob() calculated?


I need to do a robust regression with lmrob(). For that I need to know how the p-value in the summary is calculated. I can not find anything in the documentation. Maybe anybody has an idea.

Thanks


Solution

  • The p value is calculated from a Student's t distribution using the function stats::pt. The relevant code can be found in the body of the function robustbase:::summary.lmrob, which you can look at here

    The line of the function where the coefficient table, including the p values are calculated, is:

    ans$coefficients <- if (ans$converged) 
       cbind(est, se, tval, 2 * pt(abs(tval), df, lower.tail = FALSE))
    

    Here, est is the vector of model estimates, se is the standard error (obtained from the square root of the covariance matrix) and tval is est / se. The variable df is the degrees of freedom.

    Here's a simple example of replicating the p values using this method:

    library(robustbase)
    
    mod <- lmrob(mpg ~ wt, data = mtcars)
    
    calculated_p_values <- 2 * pt(abs(mod$coefficients / sqrt(abs(diag(mod$cov)))), 
                           mod$df.residual, lower.tail = FALSE)
    
    model_p_values <- summary(mod)$coefficients[, 4]
    
    calculated_p_values
    #>  (Intercept)           wt 
    #> 2.588806e-16 1.283359e-08
    
    model_p_values
    #>  (Intercept)           wt 
    #> 2.588806e-16 1.283359e-08
    

    Created on 2022-08-20 with reprex v2.0.2