Search code examples
rregressionquantilequantile-regression

How to determine degrees of freedom for t stat with quantile regression and bootstrapped standard errors in R


I am using R to conduct a quantile regression with bootstrapped standard errors to test if one variable is higher than a second variable at the 5th, 50th, and 95th percentiles of the distributions. The output does not include degrees of freedom for the t stat. How can I calculate this?

summary(rq(data$var1~data$var2, tau=.05), se="boot")
summary(rq(data$var1~data$var2, tau=.5), se="boot")

Solution

  • Assuming you used the library quantreg, if you were to call rq() by itself, you get the degrees of freedom.

    It looks like you're fairly new to SO; welcome to the community! If you want great answers quickly, it's best to make your question reproducible. This includes the libraries you used or sample data like the output from dput(head(dataObject))). Check it out: making R reproducible questions.

    Capturing the degrees of freedom, in this case, should be relatively easy.

    In truth, the number of observations and subtract the number of observations is total degrees of freedom. The residual degrees of freedom are the number of observations minus the number of variables in the formula.

    The degrees of freedom for each t-statistic is the number of variables that are represented for that t-statistic (typically one).

    If you call the regression directly (instead of nested in the summary function), it gives you information about the degrees of freedom, as well. That being said, if you don't run the model independently, it is more difficult to test the assumptions that the data must meet for the analysis. Lastly, in this form, you can't test the model for overfitting, either.

    library(quantreg)
    
    data(mtcars)
    
    (fit <- rq(mpg ~ wt, data = mtcars, tau = .05))
    # Call:
    # rq(formula = mpg ~ wt, tau = 0.05, data = mtcars)
    # 
    # Coefficients:
    # (Intercept)          wt 
    #   37.561538   -6.515837 
    # 
    # Degrees of freedom: 32 total; 30 residual 
    
    (fit2 <- rq(mpg ~ wt, data = mtcars, tau = .5))
    # Call:
    # rq(formula = mpg ~ wt, tau = 0.5, data = mtcars)
    # 
    # Coefficients:
    # (Intercept)          wt 
    #   34.232237   -4.539474 
    # 
    # Degrees of freedom: 32 total; 30 residual 
    
    
    summary(fit, se = "boot")
    # 
    # Call: rq(formula = mpg ~ wt, tau = 0.05, data = mtcars)
    # 
    # tau: [1] 0.05
    # 
    # Coefficients:
    #             Value    Std. Error t value  Pr(>|t|)
    # (Intercept) 37.56154  5.30762    7.07690  0.00000
    # wt          -6.51584  1.58456   -4.11208  0.00028 
    
    summary(fit2, se = "boot")
    # 
    # Call: rq(formula = mpg ~ wt, tau = 0.5, data = mtcars)
    # 
    # tau: [1] 0.5
    # 
    # Coefficients:
    #             Value    Std. Error t value  Pr(>|t|)
    # (Intercept) 34.23224  3.20718   10.67362  0.00000
    # wt          -4.53947  1.04645   -4.33798  0.00015 
    

    I would like to point out that se = "boot" doesn't appear to be doing anything. Additionally, you can run both tau settings in the same model. The Quantreg package has several tools for comparing the models when ran as together.