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

不羁岁月 提交于 2020-08-21 06:52:45

问题


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 0, this seems quite intuitive to do in Stata. For example

webuse iris reg iris seplen sepwid petlen seplen==sepwid==petlen seplen==sepwid==petlen==0

I wonder how I can do this if I want to test this in R?


回答1:


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"))



回答2:


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|)"]


来源:https://stackoverflow.com/questions/37774582/r-code-to-test-the-difference-between-coefficients-of-regressors-from-one-regres

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!