# Using the data from the built-in data frame Air.df,
# fit the cube-root of ozone as a function of temperature,
# then compute predicted values for ozone at 70 and 90 degrees F,
# along with the standard errors of these predicted values.
# First look at the data
#-----------------------
attach(Air.df)
plot(temperature, ozone, xlab = "Temperature (degrees F)",
ylab = "Cube-Root Ozone (ppb)")
# Now create the lm object
#-------------------------
ozone.fit <- lm(ozone ~ temperature, data = Air.df)
# Now get predicted values and CIs at 70 and 90 degrees.
# Note the presence of the last component called n.coefs.
#--------------------------------------------------------
predict.list <- predict(ozone.fit,
newdata = data.frame(temperature = c(70, 90)), se.fit = TRUE)
predict.list
#$fit
# 1 2
#2.697810 4.101808
#
#$se.fit
# 1 2
#0.07134554 0.08921071
#
#$df
#[1] 114
#
#$residual.scale
#[1] 0.5903046
#
#$n.coefs
#[1] 2
#----------
#Continuing with the above example, create a scatterplot of
# cube-root ozone vs. temperature, and add the fitted line
# along with simultaneous 95\% confidence bands.
plot(temperature, ozone, xlab = "Temperature (degrees F)",
ylab = "Cube-Root Ozone (ppb)")
abline(ozone.fit, lwd = 3, col = "blue")
new.temp <- seq(min(temperature), max(temperature), length = 100)
predict.list <- predict(ozone.fit,
newdata = data.frame(temperature = new.temp),
se.fit = TRUE)
ci.ozone <- pointwise(predict.list, coverage = 0.95,
simultaneous = TRUE)
lines(new.temp, ci.ozone$lower, lty = 2, lwd = 3, col = "magenta")
lines(new.temp, ci.ozone$upper, lty = 2, lwd = 3, col = "magenta")
title(main=paste("Scatterplot of Cube-Root Ozone vs. Temperature",
"with Fitted Line and Simultaneous 95% Confidence Bands",
sep=""))
#----------
# Clean up
rm(ozone.fit, predict.list, new.temp, ci.ozone)
detach("Air.df")
#----------------------------------------------------------------
# Examples from the R help file for predict.lm:
require(graphics)
## Predictions
x <- rnorm(15)
y <- x + rnorm(15)
predict(lm(y ~ x))
new <- data.frame(x = seq(-3, 3, 0.5))
predict(lm(y ~ x), new, se.fit = TRUE)
pred.w.plim <- predict(lm(y ~ x), new, interval="prediction")
pred.w.clim <- predict(lm(y ~ x), new, interval="confidence")
matplot(new$x,cbind(pred.w.clim, pred.w.plim[,-1]),
lty=c(1,2,2,3,3), type="l", ylab="predicted y")
## Prediction intervals, special cases
## The first three of these throw warnings
w <- 1 + x^2
fit <- lm(y ~ x)
wfit <- lm(y ~ x, weights = w)
predict(fit, interval = "prediction")
predict(wfit, interval = "prediction")
predict(wfit, new, interval = "prediction")
predict(wfit, new, interval = "prediction", weights = (new$x)^2)
predict(wfit, new, interval = "prediction", weights = ~x^2)Run the code above in your browser using DataLab