0

I want to draw an interaction.plot for my data.

with(data, interaction.plot(biofeedback, diet, as.numeric(drug),
xlab="Biofeedback", ylab="Drug", ylim = c(0, 4), col = 2:3))

Result:

interaction.plot result

But clearly that's not correct because my data is:

##    biofeedback    diet drug pressure
## 1      present  absent    1      170
## 2      present  absent    1      175
## 3      present  absent    1      165
...
## 7      present present    1      161
## 8      present present    1      173
## 9      present present    1      157
...
## 19     present present    2      164
## 20     present present    2      166
## 21     present present    2      159
...

This data has different drugs for absent and present Biofeedback for present diet. And it has some drugs for absent diet. None of this shows on the plot. Why?

dput(data) 



## structure(list(biofeedback = structure(c(2L, 2L, 2L, 2L, 2L, 
## 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
## 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 
## 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
## 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
## 1L, 1L, 1L), .Label = c("absent", "present"), class = "factor"), 
##     diet = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
##     2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 
##     1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 
##     1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
##     2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
##     2L, 2L), .Label = c("absent", "present"), class = "factor"), 
##     drug = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
##     1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
##     3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 
##     1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
##     2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
##     3L, 3L), .Label = c("1", "2", "3"), class = "factor"), pressure = c(170L, 
##     175L, 165L, 180L, 160L, 158L, 161L, 173L, 157L, 152L, 181L, 
##     190L, 186L, 194L, 201L, 215L, 219L, 209L, 164L, 166L, 159L, 
##     182L, 187L, 174L, 180L, 187L, 199L, 170L, 204L, 194L, 162L, 
##     184L, 183L, 156L, 180L, 173L, 173L, 194L, 197L, 190L, 176L, 
##     198L, 164L, 190L, 169L, 164L, 176L, 175L, 189L, 194L, 217L, 
##     206L, 199L, 195L, 171L, 173L, 196L, 199L, 180L, 203L, 202L, 
##     228L, 190L, 206L, 224L, 204L, 205L, 199L, 170L, 160L, 179L, 
##     179L)), .Names = c("biofeedback", "diet", "drug", "pressure"
## ), row.names = c(NA, -72L), class = "data.frame")
Alexandra
  • 19
  • 2
  • 7
  • I haven't tested this, but the issue might be in `as.numeric(drug)`. If `data$drug` is a `factor`, you cannot convert to to `numeric` using your method. You will have to use `as.numeric(levels(drug))[drug]`. See this [previous SO question](http://stackoverflow.com/questions/3418128/how-to-convert-a-factor-to-an-integer-numeric-without-a-loss-of-information) – jkr Nov 08 '16 at 19:24
  • @Jakub It didn't change anything. – Alexandra Nov 08 '16 at 19:30
  • Hmm can you post the output of `dput(data)` in your question? That will allow people to reconstruct your data and better answer your question – jkr Nov 08 '16 at 19:35

1 Answers1

1

It looks like there is no error. The average for each group is 2.0, which is what the plot shows.

> df$drug <- as.numeric(levels(df$drug))[df$drug]
> library(plyr)
> ddply(df, .(biofeedback, diet), summarise, val = mean(drug))
  biofeedback    diet val
1      absent  absent   2
2      absent present   2
3     present  absent   2
4     present present   2
jkr
  • 17,119
  • 2
  • 42
  • 68