Interesting non-linear relationship between TV watching, age and reading comprehension

Some time ago, I stumbled upon this paper:
Searls, D. T., Mead, N. A., & Ward, B. (1985). The relationship of students’ reading skills to TV watching, leisure time reading, and homework. Journal of Reading, 158-162.

Sample is very large:

To enlarge on such information, the National Assessment of Educational Progress (NAEP) gathered data on the TV viewing habits of 9, 13, and 17 year olds across the U.S. during its 1979-80 assessment of reading skills. In this survey, 21,208 9 year olds, 30,488 13 year olds, and 25,551 17 year olds responded to questions about their back- grounds and to a wide range of items probing their reading comprehension skills. These data provide information on the amount of TV watched by different groups of students and allow comparisons of reading skills and TV watching.

The relationship turns out to be interestingly nonlinear:

TV reading compre age

For understanding, it is better to visualize the data anew:


I will just pretend that reading comprehension is cognitive ability, usually a fair approximation.

So, if we follow the smarties: At 9 they watch a fairly amount of TV (3-4 hours per day), then at 13, they watch about half of that (1-2), and then at age 17, they barely watch it (<1).

Developmental hypothesis: TV is interesting but only to persons at a certain cognitive ability level. Young smart children fit in the target group, but as they age and become smarter, they grow out of the target group and stop watching.

Alternatives hypotheses?

R code

The code for the plot above.

d = data.frame(c(1.5, 2.2, 2.3),
               c(3, 3, 1.3),
               c(5.2, .2, -2.2),
               c(-1.7, -6.9, -8.1))

colnames(d) = c("<1 hour", "1-2 hours", "3-4 hours", ">4 hours")
d$age = factor(c("9", "13", "17"), levels = c("9", "13", "17"))

d = melt(d, id.vars = "age")


ggplot(d, aes(age, value)) +
  geom_point(aes(color = variable)) +
  ylab("Relative reading comprehension score") +
  scale_color_discrete(name = "TV watching per day") +
  scale_shape_discrete(guide = F)