Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generating interaction variables in R dataframes

Tags:

Is there a way - other than a for loop - to generate new variables in an R dataframe, which will be all the possible 2-way interactions between the existing ones? i.e. supposing a dataframe with three numeric variables V1, V2, V3, I would like to generate the following new variables:

Inter.V1V2 (= V1 * V2)  Inter.V1V3 (= V1 * V3) Inter.V2V3 (= V2 * V3) 

Example using for loop :

x <- read.table(textConnection('    V1 V2 V3 V4 1  9   25   18 2  5   20   10 3  4   30   12 4  4   34   16' ), header=TRUE)  dim.init <- dim(x)[2] for (i in 1: (dim.init - 1) ) {         for (j in (i + 1) : (dim.init) ) {                 x[dim(x)[2] + 1]    <- x[i] * x[j]                 names(x)[dim(x)[2]] <- paste("Inter.V",i,"V",j,sep="")          } } 
like image 274
George Dontas Avatar asked Jan 17 '10 11:01

George Dontas


People also ask

How do I create an interaction variable in R?

A two step process can be followed to create an interaction variable in R. First, the input variables must be centered to mitigate multicollinearity. Second, these variables must be multiplied to create the interaction variable.

How do I check interactions in R?

By far the easiest way to detect and interpret the interaction between two-factor variables is by drawing an interaction plot in R. It displays the fitted values of the response variable on the Y-axis and the values of the first factor on the X-axis.


1 Answers

Here is a one liner for you that also works if you have factors:

> model.matrix(~(V1+V2+V3+V4)^2,x)   (Intercept) V1 V2 V3 V4 V1:V2 V1:V3 V1:V4 V2:V3 V2:V4 V3:V4 1           1  1  9 25 18     9    25    18   225   162   450 2           1  2  5 20 10    10    40    20   100    50   200 3           1  3  4 30 12    12    90    36   120    48   360 4           1  4  4 34 16    16   136    64   136    64   544 attr(,"assign")  [1]  0  1  2  3  4  5  6  7  8  9 10 
like image 94
Ian Fellows Avatar answered Sep 28 '22 04:09

Ian Fellows