2016-06-12 4 views
1

Я хочу проверить, отличаются ли коэффициенты в одной линейной регрессии друг от друга или по крайней мере один из них существенно отличается от одного определенного значения, скажем 0, это кажется довольно интуитивным в Stata. НапримерR-код для проверки разницы между коэффициентами регрессоров от одной регрессии

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

Интересно, как я могу это сделать, если я хочу, чтобы проверить это в R?

+0

Вы сказали, что вы хотите проверить, являются ли эти различия существенны , Это предполагает, что вам нужен статистический тест? Тест коэффициента правдоподобия обычно используется для сравнения подгонки разных моделей. Пакет 'lmtest' в r делает это. – milan

+0

Можете ли вы дать мне демоверсию, чтобы показать это? – johnsonzhj

ответ

0

Вы можете сравнить список коэффициентов от каждой соответствующей модели (скажем, mod1 и mod 2), как в:

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

Это создает кадр данных, отсортированный по абсолютной величине разности коэффициентов, а именно:

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 

Если склоны не то, что вы после этого, вы можете получить доступ к другим коэффициентов с помощью функции коэф():

coef(summary(model)) 

Чтобы получить Pr (> | г |), к примеру, использовать:

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

Спасибо за ваши усилия, ответ, который вы дали, по-видимому, проверяет, имеет ли одна и та же переменная одинаковая наклонность к моделям. То, что я хочу получить, состоит в том, говорят ли разные переменные a и b, имеет один и тот же коэффициент или нет в одной модели и значение p. – johnsonzhj

+0

ОК. Я не знаком со статами, поэтому у меня не было хорошего примера. Вы можете получить доступ к другим параметрам коэффициента из модели glm, используя coef(), как в моем отредактированном ответе. Но похоже, что ответ Карлоса может быть больше того, что вы ищете. – Teajay

3

Пакет car имеет простую функцию, чтобы сделать это.

Во-первых, подходит модель:

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

Чем вы можете проверить различную линейную гипотезу, используя функцию linearHypothesis, например:

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