# >fit<- lm(swiss.fertility ~ swiss.x[,"Education])
# >plotresiduals(fit)
# The Functions (should I do a mime attachment next time?):
studreshii <- function(fit)
{
if(class(fit) != "lm")
stop("Data must be from lm")
thii <- lm.influence(fit)$hat
ei <- residuals(fit)
s <- sqrt(var(residuals(fit)))
eip <- ei/(s * sqrt(1 - thii))
tstudres <- eip * sqrt((fit$df - 1)/(fit$df - thii^2))
result <- data.frame(hii = thii, studres = tstudres)
class(result) <- "studreshii"
result
}
print.studreshii <- function(x)
{
plot(x$hii, x$studres, main = "Influential Observation Analysis",
xlab =
"Hii", ylab = "Studentized Residuals")
}
plotresiduals <- function(fit)
{
if(class(fit) != "lm")
stop("Data must be from lm") #calculate hii
hii <- lm.influence(fit)$hat
Ei <- residuals(fit) #calculate Studentized Residuals
s <- sqrt(var(Ei))
Eip <- Ei/(s * sqrt(1 - hii))
studres <- Eip * sqrt((fit$df - 1)/(fit$df - hii^2))
old.par <- par(mfrow = c(2, 2))
on.exit(par(old.par)) #scatter plot residuals
plot(predict(fit), Ei, main = "Residuals", xlab = "") #QQnormal plot
qqnorm(Ei)
qqline(Ei)
title("Normal QQ-plot of Residuals")
#distribution of residuals against normal curve
hist(Ei, prob = T, xlab = "residuals", ylab = "")
a <- seq(min(Ei), max(Ei), length = 100)
lines(a, dnorm(a, mean = mean(Ei), sd = s))
title("Residuals and Normal Fit")
#Studentized versus hii scaterplot
plot(hii, studres, main = "Influential Observation Analysis",
xlab = "Hii", ylab = "Studentized Residuals")
}
create.menu.lmfit<- function() {
guiCreate("MenuItem",
Name = "SPlusMenuBar$Zinn",
Type = "Menu",
MenuItemText = "&Zinn",
Index = 12,
OverWrite=F)
guiCreate("MenuItem",
Name="SPlusMenuBar$Zinn$Lmfit" ,
Type="MenuItem",
Action="Function",
Command="plotresiduals",
MenuItemText="&Residual analysis")
invisible()
}
create.menu.lmfit()
create.menu.lmfit()
create.toolbar.zinn <- function(){
guiCreate("Toolbar",Name = "Zinn")
guiCreate("ToolbarButton",
Name = "Zinn$Lmfit",
Type = "Button",
Action = "Function",
Command = "plotresiduals",
TipText = "Plot residuals information", ShowDialogOnRun=T)
invisible()
}
create.toolbar.zinn()
#guiRemove("MenuItem",Name="SPlusMenuBar$Zinn$Lmfit")
#guiRemove("MenuItem",Name="SPlusMenuBar$Zinn")
#guiRemove("ToolbarButton",Name="Zinn$Lmfit")
#guiRemove("Toolbar",Name="Zinn")