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="") } }
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.
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With