[R] remove higher order interaction terms

Marc Schwartz marc_schwartz at me.com
Wed Apr 17 14:33:19 CEST 2013


On Apr 17, 2013, at 7:23 AM, Liviu Andronic <landronimirc at gmail.com> wrote:

> Dear all,
> Consider the model below:
> 
>> x <- lm(mpg ~ cyl * disp * hp * drat, mtcars)
>> summary(x)
> 
> Call:
> lm(formula = mpg ~ cyl * disp * hp * drat, data = mtcars)
> 
> Residuals:
>    Min      1Q  Median      3Q     Max
> -3.5725 -0.6603  0.0108  1.1017  2.6956
> 
> Coefficients:
>                   Estimate Std. Error t value Pr(>|t|)
> (Intercept)       1.070e+03  3.856e+02   2.776  0.01350 *
> cyl              -2.084e+02  7.196e+01  -2.896  0.01052 *
> disp             -6.760e+00  3.700e+00  -1.827  0.08642 .
> hp               -9.302e+00  3.295e+00  -2.823  0.01225 *
> drat             -2.824e+02  1.073e+02  -2.633  0.01809 *
> cyl:disp          1.065e+00  5.034e-01   2.116  0.05038 .
> cyl:hp            1.587e+00  5.296e-01   2.996  0.00855 **
> disp:hp           7.422e-02  3.461e-02   2.145  0.04769 *
> cyl:drat          5.652e+01  2.036e+01   2.776  0.01350 *
> disp:drat         1.824e+00  1.011e+00   1.805  0.08990 .
> hp:drat           2.600e+00  9.226e-01   2.819  0.01236 *
> cyl:disp:hp      -1.050e-02  4.518e-03  -2.323  0.03368 *
> cyl:disp:drat    -2.884e-01  1.392e-01  -2.071  0.05484 .
> cyl:hp:drat      -4.428e-01  1.504e-01  -2.945  0.00950 **
> disp:hp:drat     -2.070e-02  9.568e-03  -2.163  0.04600 *
> cyl:disp:hp:drat  2.923e-03  1.254e-03   2.331  0.03317 *
> ---
> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> 
> Residual standard error: 2.245 on 16 degrees of freedom
> Multiple R-squared: 0.9284,	Adjusted R-squared: 0.8612
> F-statistic: 13.83 on 15 and 16 DF,  p-value: 2.007e-06
> 
> 
> Is there a straightforward way to remove the highest order interaction
> terms? Say:
> cyl:disp:hp
> cyl:disp:drat
> cyl:hp:drat
> disp:hp:drat
> cyl:disp:hp:drat
> 
> I know I could do this:
>> x <- lm(mpg ~ cyl * disp * hp * drat - cyl:disp:hp - cyl:disp:drat - cyl:hp:drat - disp:hp:drat - cyl:disp:hp:drat, mtcars)
> 
> But I was hoping for a more elegant solution. Regards,
> Liviu


If you only want up to say second order interactions:

> summary(lm(mpg ~ (cyl + disp + hp + drat) ^ 2, data = mtcars))

Call:
lm(formula = mpg ~ (cyl + disp + hp + drat)^2, data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.5487 -1.6998  0.0894  1.2366  4.6138 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)  
(Intercept)  9.816e+01  4.199e+01   2.338   0.0294 *
cyl         -1.656e+01  1.226e+01  -1.351   0.1910  
disp         1.333e-03  1.634e-01   0.008   0.9936  
hp          -1.936e-01  2.260e-01  -0.857   0.4014  
drat        -8.913e+00  8.745e+00  -1.019   0.3197  
cyl:disp     2.134e-02  1.071e-02   1.992   0.0595 .
cyl:hp       3.074e-02  1.970e-02   1.560   0.1337  
cyl:drat     2.590e+00  2.601e+00   0.996   0.3307  
disp:hp     -3.846e-04  3.906e-04  -0.985   0.3359  
disp:drat   -3.518e-02  3.951e-02  -0.890   0.3834  
hp:drat      1.210e-02  5.432e-02   0.223   0.8259  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.717 on 21 degrees of freedom
Multiple R-squared:  0.8623,	Adjusted R-squared:  0.7967 
F-statistic: 13.15 on 10 and 21 DF,  p-value: 6.237e-07


This is covered in ?formula 

Regards,

Marc Schwartz



More information about the R-help mailing list