The answers offered are giving me some ideas about what's going on here. I do believe there may have been some mistakes made by accident. See if the following story makes sense: To start, I think there is probably a strong relationship between X & Y in the data (here's some code and a plot):
set.seed(5)
wage <- rlnorm(1000, meanlog=2.3, sdlog=.5)
something_else <- .7*wage + rnorm(1000, mean=0, sd=1)
plot(wage, something_else, pch=3, col="red", main="Plot X vs. Y")
But by mistake Y was predicted just from the mean. Compounding this, the residuals from the mean only model are plotted against X, even though what was intended was to plot against the fitted values (code & plot):
meanModel <- lm(something_else~1)
windows()
plot(wage, meanModel$residuals, pch=3, col="red",
main="Plot of residuals from Mean only Model against X")
abline(h=0, lty="dotted")
We can fix this by fitting the appropriate model and plotting the residuals from that (code & plot):
appropriateModel <- lm(something_else~wage)
windows()
plot(appropriateModel$fitted.values, appropriateModel$residuals, pch=3, col="red",
main="Plot of residuals from the appropriate\nmodel against fitted values")
lines(lowess(appropriateModel$residuals~appropriateModel$fitted.values))
This seems like just the kinds of goof-ups I made when I was starting.