library(knitr)
library(abd)Exercise 1 Solution
Includes:
- Lion noses linear regression
- Data generation consistent with model
- Linear regression of this first dataset
- In-class Sampling Distribution Simulation Assignment
Document Preamble
Load libraries
Settings for Knitr (optional)
opts_chunk$set(fig.width = 8, fig.height = 6)1. Lion noses linear regression:
Data entry
data(LionNoses)
head(LionNoses) age proportion.black
1 1.1 0.21
2 1.5 0.14
3 1.9 0.11
4 2.2 0.13
5 2.6 0.12
6 3.2 0.13
Fit linear model
lm.nose<-lm(age~proportion.black, data=LionNoses)Parameters:
Coefficients and residual variation are stored in lmfit:
coef(lm.nose) (Intercept) proportion.black
0.8790062 10.6471194
summary(lm.nose)$sigma # residual variation[1] 1.668764
What else is stored in lmfit? (residuals, variance covariance matrix, etc)
names(lm.nose) [1] "coefficients" "residuals" "effects" "rank"
[5] "fitted.values" "assign" "qr" "df.residual"
[9] "xlevels" "call" "terms" "model"
names(summary(lm.nose)) [1] "call" "terms" "residuals" "coefficients"
[5] "aliased" "sigma" "df" "r.squared"
[9] "adj.r.squared" "fstatistic" "cov.unscaled"
2. Data generation consistent with fitted model
## Use the same sampmle size Sample size - use length so it matches sample size of original data
n <- length(LionNoses$age)
## Predictor - copy of original proporation black data, now in vector
p.black <- LionNoses$proportion.black
## Parameters
sigma <- summary(lm.nose)$sigma # residual variation
betas <- coef(lm.nose)# regression coefficients
## Errors and response
# Residual errors are modeled as ~ N(0, sigma)
epsilon <- rnorm(n, 0, sigma)
# Response is modeled as linear function plus residual errors
y <- betas[1] + betas[2]*p.black + epsilon3. Linear regression of this generated dataset
# Fit of model to simulated data:
lmfit.generated <- lm(y ~ p.black)
summary(lmfit.generated)
Call:
lm(formula = y ~ p.black)
Residuals:
Min 1Q Median 3Q Max
-2.8741 -0.7826 -0.3292 0.7713 3.2279
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.8138 0.5025 1.620 0.116
p.black 10.8301 1.3335 8.121 4.58e-09 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.474 on 30 degrees of freedom
Multiple R-squared: 0.6874, Adjusted R-squared: 0.6769
F-statistic: 65.96 on 1 and 30 DF, p-value: 4.579e-09
In-Class Sampling Distribution Simulation Assignment
Exercise 1:
- Generate 5000 datasets using the same code
- Fit a linear regression model to each dataset “lm.temp”
- Store the estimates of \(\beta_1\)
Hint: if you get stuck, try starting with a small number of simulations (less than 5000) until you get the code right.
# set up a matrix of size 5000 by 1 to store our estimates of beta_1
nsims <- 5000 # number of simulations
beta.hat<- matrix(NA, nrow = nsims, ncol = 1)
# Simulation
for(i in 1:nsims){
epsilon <- rnorm(n, 0, sigma) # random errors
y <- betas[1] + betas[2]*p.black + epsilon # response
lm.temp <- lm(y ~ p.black)
## extract beta-hat
beta.hat[i] <- coef(lm.temp)[2]
}Plot results
hist(beta.hat, col="gray",xlab="", main=expression(paste("Sampling Distribution of ", hat(beta)[1])))
abline(v=betas[2]) # add population parameter