#-----------------------------------------#
#--- Testing for Homoscedasticity in R ---#
#-----------------------------------------#
#Importing data: use .csv format if at all possible
Flow_unsorted <- read.csv('Flow Rate Calibration.csv')
str(Flow_unsorted)
# we are going to need the residuals sorted by increasing temperature below
# for the homoscedasticity tests
Flow = Flow_unsorted[order(Flow_unsorted$Temperature),]
str(Flow)
#Step 1: plot the data
plot(Flow$Flow.Difference ~ Flow$Temperature, data = Flow)
#Step 2: OLS using the lm function
model = lm(Flow$Flow.Difference ~ Flow$Temperature, data = Flow)
summary(model)
#Perform the Bartlett test (assumes a normal distribution of residuals)
library(MASS)
esr <- studres(model) #extract the externally studentized residuals
# split the data in half
N = length(esr)
group = rep(2,N)
group[1:N/2] = 1
bartlett.test(esr, as.factor(group))
# If the p-value is less than alpha, we reject the null hypothesis that
# the variances of each group are equal.
#install.packages("lawstat")
library(lawstat)
levene.test(esr, as.factor(group))
# Note that this test is formualted using an F statistic, rather than the
# t-statistic that was discussed in class. They work out the same, giving
# the same p-value.
# Evaluate homoscedasticity using the Breusch-Pagan test
# This test creates a stright-line fit of esr^2 to either the
# fitted values or the explanatory variables, then checks the
# magnitude of R^2 for the fit
#install.packages("car")
#car contains Functions and Datasets to Accompany J. Fox and S. Weisberg, An R Companion to Applied Regression, Second Edition, Sage, 2011.
library(car)
ncvTest(model) #defaults to testing against fitted values
#Here is an alternate package with regression diagnostics: lmtest
#install.packages("lmtest")
library(lmtest)
bptest(model) #defaults to to testing against explanatory variables
#small p-value indicates heteroscedasticity