Function

interaction.plotcan be used to make spaghetti plots. Let’s use data set tolerance_pp.csv used inApplied Longitudinal Data Analysis: Modeling Change and Event Occurrenceby Judith D. Singer and John B. Willett for our example.

tolerance<-read.table("https://stats.idre.ucla.edu/stat/r/faq/tolpp.csv", sep=",", header=T) head(tolerance, n=10)id age tolerance male exposure time 1 9 11 2.23 0 1.54 0 2 9 12 1.79 0 1.54 1 3 9 13 1.90 0 1.54 2 4 9 14 2.12 0 1.54 3 5 9 15 2.66 0 1.54 4 6 45 11 1.12 1 1.16 0 7 45 12 1.45 1 1.16 1 8 45 13 1.45 1 1.16 2 9 45 14 1.45 1 1.16 3 10 45 15 1.99 1 1.16 4

Each subject has been observed at five time points. We will plot the outcome variable tolerance against time for each subject.

interaction.plot(tolerance$time, tolerance$id, tolerance$tolerance, xlab="time", ylab="Tolerance", legend=F)

We can also use different colors for different lines.

interaction.plot(tolerance$time, tolerance$id, tolerance$tolerance, xlab="time", ylab="Tolerance", col=c(1:10), legend=F)

Here is a more involved example. We will make a spaghetti plot of linear trend for each subject. First we create an object of fitted values for each subject. The function

byis quite handy for this type of task. The first argument is the entire data set, the second argument is the group id variable (the by variable), and the third argument is the function to apply to each group. Here we define the function on-the-fly to be the fitted value from the linear regression of variable tolerance on time. Each value of variable id yields a sub data set for the regression function and this has to be the argument for this function. The functionunlistconverts the list objectfitinto a vector object and we will have to get rid of the names for it by assign NULL to its names.

#fitting the linear model by id fit <- by(tolerance, tolerance$id, function(x) fitted.values(lm(tolerance ~ time, data=x))) fit1 <- unlist(fit) names(fit1) <- NULL #plotting the linear fit by id interaction.plot(tolerance$age, tolerance$id, fit1, xlab="time", ylab="tolerance", legend=F)