# Violation of multiple linear regression assumptions after adding interactions

I am working with a data set and properly fitted a model that satisfied the assumptions of lienar regression in a multi-variate setting. I have 8 predictors, and proceeded to test for significance of interaction using the anova function(comparing the original model to the one including the interaction term). After doing this I got results that stated, that some interactions are significant and should be included in the model. However now after updating the model I get that the model is no longer normal.

1. Is there a reason that this might be occurring?
2. Is there a method to zero in on what the cause of the problem is (perhaps an unwarranted interaction)?
3. Is there a separate way to test for interaction apart from anova comparison?
#my model
model23<-lm(strength2~blast2+flyash2+water2+superplast2+coarseagg2+fineagg2+age2)


I ran interactions between the predictors and included these interactions in the model and test against my initial model. The interaction models looked as follows:

int1<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+blast2*flyash)
int2<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+blast2*water2)
int3<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+blast2*superplast2)
int4<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+blast2*coarseagg2)
int5<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+blast2*age2)
int6<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+blast2*fineagg2)

int7<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+flyash2*water2)
int8<-lm(strength2 ~blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+flyash2*superplast2)
int9<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+flyash2*coarseagg2)
int10<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+flyash2*age2)
int11<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+flyash2*fineagg2)

int12<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+water2*superplast2)
int13<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+water2*coarseagg2)
int14<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+water2*age2)
int15<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+water2*fineagg2)

int16<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+superplast2*coarseagg2)
int17<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+superplast2*age2)
int18<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+superplast2*fineagg2)

int19<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+coarseagg2*age2)
int20<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+coarseagg2*fineagg2)

int21<- lm(strength2 ~blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+age2*fineagg2)


Then I ran the anova table against the original model letting #y indicate that we should include the interaction

anova(model23,int1) #N
anova(model23,int2) #N
anova(model23,int3) #Y
anova(model23,int4) #Y
anova(model23,int5) #Y
anova(model23,int6) #Y
anova(model23,int7) #y
anova(model23,int8) #Y
anova(model23,int9) #N
anova(model23,int10) #y
anova(model23,int11) #Y
anova(model23,int12) #y
anova(model23,int13) #y
anova(model23,int14) #Y
anova(model23,int15) #N
anova(model23,int16) #N
anova(model23,int17) #Y
anova(model23,int18) #N
anova(model23,int19) #Y
anova(model23,int20) #N
anova(model23,int21) #Y


Now I updated my model with the interaction terms:

model232<-lm(strength2 ~ blast2+flyash2+water2+superplast2+coarseagg2+age2+fineagg2+blast2*superplast2+blast2*coarseagg2+blast2*age2+blast2*fineagg2+flyash2*water2+flyash2*superplast2+flyash2*age2+flyash2*fineagg2+water2*superplast2+water2*coarseagg2+water2*age2+superplast2*age2+coarseagg2*age2+age2*fineagg2)



Before apply the interactions I ran a shapiro test, fitted vs residual plot,q-qplot,etc; and saw that the assumptions of linearity were satisfied. However if I run a shapiro test on the new model I get

shapriro.test(resid(model232)) #running this code

Shapiro-Wilk normality test

data:  resid(model232)
W = 0.99583, p-value = 0.00686


The plots of this model also showcase lack of satisfying assumption of linear regression.

• It's not clear exactly what you mean by "the model is no longer normal." Please provide more details of the results of the full model with the interactions and the reduced model, how you checked for the necessary assumptions in the full model, and how those checks failed in the reduced model. – EdM Jun 11 '20 at 23:28
• I ran a shapiro test on the model and also see that the q-q plot is heavily not linear at all points. – lambdaepsilon Jun 11 '20 at 23:35
• @EdM I update with my code any ideas? – lambdaepsilon Jun 12 '20 at 0:08
• How many rows of data are there? – EdM Jun 12 '20 at 2:56
• @EdM there are about 1020 rows of data – lambdaepsilon Jun 12 '20 at 3:04