2016-06-12 3 views
1

Je veux tester si les coefficients dans une régression linéaire sont différents les uns des autres ou si au moins l'un d'entre eux est significativement différent d'une certaine valeur, disons 0, ceci semble assez intuitif à faire à Stata. Par exempleCode R pour tester la différence entre les coefficients des régresseurs d'une régression

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

Je me demande comment je peux le faire si je veux tester cela en R?

+0

Vous mentionnez que vous voulez vérifier si ces différences sont significatives . Cela suppose que vous avez besoin d'un test statistique? Un test de rapport de vraisemblance est couramment utilisé pour comparer l'ajustement de différents modèles. Le paquet 'lmtest' dans r le fait. – milan

+0

pouvez-vous me donner une démo pour montrer cela? – johnsonzhj

Répondre

0

Vous pouvez comparer la liste des coefficients de chaque modèle respectif (dites MOD1 et MOD2), comme dans:

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

Ce produit une trame de données triées par la valeur absolue de la différence des coefficients, à savoir:

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 

Si les pistes ne sont pas ce que vous recherchez, vous pouvez accéder aux autres coefficients en utilisant la fonction coef():

coef(summary(model)) 

Pour obtenir Pr (> | z |), par exemple, utiliser:

coef(summary(model))[,"Pr(>|z|)"] 
+0

Merci pour votre effort, la réponse que vous avez donnée semble tester si la même variable a la même pente à travers les modèles. Ce que je veux savoir, c'est si les différentes variables disent que a et b ont le même coefficient ou non dans un modèle, et quelle est la valeur de p. – johnsonzhj

+0

OK. Je ne connais pas stata, donc je n'ai pas eu un bon exemple à suivre. Vous pouvez accéder à d'autres paramètres de coefficients à partir d'un modèle glm en utilisant coef(), comme dans ma réponse éditée. Mais il semble que la réponse de Carlos soit plus que ce que vous cherchez. – Teajay

3

Le paquet car a une fonction simple à faire.

D'abord, adapter à votre modèle:

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

Que vous pouvez tester différentes hypothèses linéaire en utilisant la fonction linearHypothesis, par exemple:

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