I have a multiple regression model (in R) that looks as follows:

enter image description here

The model attempts to find the relationship between TV advertising and Radio advertising (dollars) on sales. I'd like to also create an interaction variable between TV and Radio. I was reading the following article on how to do this, and the author states that the two variables involved in the interaction must be "centered" first (to avoid multicollinearity) before combining them into an interaction variable. Is this always necessary (especially if I already know the two variables have little correlation)? If this is generally necessary, can the R scale() function be used to standardize each variable?


Regarding your first question, whether centering is always necessary with interaction main effects:

Few things are always necessary. Centering can help if there is multicollinearity, which can occur regardless of the initial (lack of) correlation between the interaction terms. The VIF test can tell you if you need to worry about collinearity if it is greater than (depending on source) 2.5 - 5. In R, after you fitted a model with interaction, just do vif(model.fit). If multicollinearity is a problem, it isn't a problem if it occurs on control variables - it only affects the collinear terms, not the others. Last thing, centering also helps comparing the regular and interaction models, since the meaning of the coefficients remain mostly the same, since 0 is the mean. For more information and examples, see this good post on interaction terms and centering.

Regarding your second question, whether scale() could work instead:

Yes... And not exactly. Sure, scaling coefficients also centers them, but it also removes their meaningful units. No longer for each dollar, but for each increase in a standard deviation in the dollar amount. Not very convenient for interpretative purposes. It is better just to center them by removing the mean from the observations, or like so (actually using the scale() function, but without the standardization, which is what the scale=FALSE does):

CaseStudyData$TV_cntrd <- scale(CaseStudyData$TV, scale = FALSE)
| cite | improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.