R code to test the difference between coefficients of regressors from one regression

后端 未结 2 946
别那么骄傲
别那么骄傲 2021-02-06 14:40

I want to test whether coefficients in one linear regression are different from each other or whether at least one of them is significantly different from one certain value, say

相关标签:
2条回答
  • 2021-02-06 15:17

    The car package has a simple function to do that.

    First, fit your model:

    model <- lm(Sepal.Length ~ Sepal.Width + Petal.Length, data = iris)
    

    Than you may test different linear hypothesis using the linearHypothesis function, for instance:

    library(car)
    
    # tests if the coefficient of Sepal.Width = Petal.Length
    linearHypothesis(model, "Sepal.Width = Petal.Length")
    Linear hypothesis test
    
    Hypothesis:
    Sepal.Width - Petal.Length = 0
    
    Model 1: restricted model
    Model 2: Sepal.Length ~ Sepal.Width + Petal.Length
    
      Res.Df    RSS Df Sum of Sq      F  Pr(>F)  
    1    148 16.744                              
    2    147 16.329  1    0.4157 3.7423 0.05497 .
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    # Other examples:
    # tests if the coefficient of Sepal.Width = 0
    linearHypothesis(model, "Sepal.Width = 0")
    
    # tests if the coefficient of Sepal.Width = 0.5
    linearHypothesis(model, "Sepal.Width = 0.5")
    
    # tests if both are equal to zero
    linearHypothesis(model, c("Sepal.Width = 0", "Petal.Length = 0"))
    
    0 讨论(0)
  • 2021-02-06 15:20

    You can compare the coefficients list from each respective model (say mod1 and mod2), as in:

    diff=merge(mod1$coefficients, mod2$coefficients, by=0, all=TRUE)
    diff[is.na(diff)]=0
    diff$error=abs(diff$x-diff$y)
    diff[order(diff$error, decreasing=TRUE),]
    

    This produces a data frame sorted by the absolute value of the difference in coefficients, i.e.:

        Row.names            x            y        error
    1 (Intercept) -0.264189182 -0.060450853 2.037383e-01
    6          id  0.003402056  0.000000000 3.402056e-03
    3           b -0.001804978 -0.003357193 1.552215e-03
    2           a -0.049900767 -0.049417150 4.836163e-04
    4           c  0.013749907  0.013819799 6.989203e-05
    5           d -0.004097366 -0.004110830 1.346320e-05
    

    If the slopes are not what you are after, you can access the other coefficients using the coef() function:

    coef(summary(model))
    

    To get Pr(>|z|), for example, use:

    coef(summary(model))[,"Pr(>|z|)"]
    
    0 讨论(0)
提交回复
热议问题