Summary: we can derive statistics about individuals.
However, depending on the problem at hand, they may only tell us that we do not have sufficient information (e.g., because the correlation between our independent and dependent variable is too low) to draw meaningful conclusions.
Some sources claim that IQ is correlated with academic and/or professional success. Let's assume there is a correlation of 0.5 between IQ and University GPA, discovered from a study of a very large group of students.
[...]
Is there any truth to the phrase "statistics mean nothing to the individual"?
Any truth, yes: as you already suspected, some statistics such as the population mean do not necessarily say much about the individual.
However, there are statistics that relate to the individual.
In particular, the prediction interval gives a range into which we expect future individuals/observations to fall with the specified probability.
I found a data set with GPR and IQ recorded for 78 people (it has a correlation of 0.63) and below (left) you see a univariate linear model fitted to that data.
The black line gives the regression point estimates: this is our best guess as to what average GPA people with a given IQ have. The confidence interval in blue says how certain we are about these population averages. The more observations we have, the narrower the confidence interval gets. On the right, I calculated the same regression on a data set that is a triplication of the original data, and you can see the confidence interval gets substantially narrower.
We can also calculate what range of GPA we expect a new, unknown person to fall in (again with a specified probability). That is the prediction interval marked in red. Prediction intervals are always wider than confidence intervals because they take the uncertainty in the regression function plus the variation we observe between individuals.
When you compare the fake "large data" model on the right to the original data model on the left, you see hardly any difference in the prediction intervals: already for the original data model, the prediction interval is dominated by the variance between individuals.
Looking at your question about IQ 100: we expect people with IQ 100 to have on average a GPA of 6.5, and we're reasonably certain about this: the 95 % confidence interval is 6.1 - 7.0. We expect a given individual to have a GPA between 3.3 and 9.8 (again with 95 % probability). Unfortunately, the data set has no documentation to speak of, so I can only guess an interpretation. But this looks to me as if we'd expect an individual with IQ 100 to be anywhere between failing and very good.
So we may also say that this quantifies that we cannot really predict anything meaningful about an individual.
This lack of a useful result from the application/problem (predicting GPA) point of view is due to the correlation between IQ and GPA being too low.
R code to generate the plots:
library(openintro)
library(ggplot2)
cor(gpa_iq$gpa, gpa_iq$iq)
model <- lm (gpa ~ iq, data = gpa_iq)
predictions <- data.frame (iq = seq(70, 140))
ci <- predict(model, predictions, interval = "confidence", level = 0.95)
colnames(ci) <- c("fit", "ci.lower", "ci.upper")
pi <- predict(model, predictions, interval = "prediction", level = 0.95)
colnames(pi) <- c("fit", "pi.lower", "pi.upper")
predictions <- cbind (predictions, ci, pi [, -1])
predictions |>
ggplot (aes(x = iq)) +
geom_point(data = gpa_iq, aes(y = gpa)) +
#stat_smooth(method = "lm") +
geom_line(aes (y = fit)) +
geom_ribbon(aes (ymin = ci.lower, ymax = ci.upper), alpha = 0.25, fill = "blue") +
geom_ribbon(aes (ymin = pi.lower, ymax = pi.upper), alpha = 0.1, col = "red", fill = "red")
gpa_iq2 <- rbind(gpa_iq, gpa_iq, gpa_iq)
cor(gpa_iq2$gpa, gpa_iq2$iq)
model2 <- lm (gpa ~ iq, data = gpa_iq2)
predictions2 <- data.frame (iq = seq(70, 140))
ci <- predict(model2, predictions2, interval = "confidence", level = 0.95)
colnames(ci) <- c("fit", "ci.lower", "ci.upper")
pi <- predict(model2, predictions2, interval = "prediction", level = 0.95)
colnames(pi) <- c("fit", "pi.lower", "pi.upper")
predictions2 <- cbind (predictions2, ci, pi [, -1])
predictions2 |>
ggplot (aes(x = iq)) +
geom_point(data = gpa_iq2, aes(y = gpa)) +
#stat_smooth(method = "lm") +
geom_line(aes (y = fit)) +
geom_ribbon(aes (ymin = ci.lower, ymax = ci.upper), alpha = 0.25, fill = "blue") +
geom_ribbon(aes (ymin = pi.lower, ymax = pi.upper), alpha = 0.1, col = "red", fill = "red")