-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDiagnostics.R
More file actions
58 lines (50 loc) · 1.52 KB
/
Diagnostics.R
File metadata and controls
58 lines (50 loc) · 1.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
## ==================================================
## R Function by Chanseok Park
## (MTHSC 805-Clemson University, IE-68722-PNU)
##
## Collections of Linear Model Diagnostic Tools
## ==================================================
# ---------------------------------------------------
# MSE
# Usage: LM = lm ( y ~ x1 + x2)
# MSE (LM)
MSE =
function (object)
{
deviance(object)/df.residual(object)
}
# ---------------------------------------------------
# Semi-studentized Residuals
# Usage: LM = lm ( y ~ x1 + x2)
# semiresid (LM)
semiresid =
function (object)
{
stddev = sqrt( deviance(object)/df.residual(object) )
resid(object) / stddev
}
# ---------------------------------------------------
PRESS <- function(object ) {
press.resid = resid(object) / (1-hatvalues(object));
sum(press.resid^2);
}
# ---------------------------------------------------
vif <- function(object, ...)
UseMethod("vif")
vif.default <- function(object, ...)
stop("No default method for vif. Sorry.")
vif.lm <- function(object, ...) {
V <- summary(object)$cov.unscaled
Vi <- crossprod(model.matrix(object))
nam <- names(coef(object))
if(k <- match("(Intercept)", nam, nomatch = F)) {
v1 <- diag(V)[-k]
v2 <- (diag(Vi)[-k] - Vi[k, -k]^2/Vi[k,k])
nam <- nam[-k]
} else {
v1 <- diag(V)
v2 <- diag(Vi)
warning("No intercept term detected. Results may surprise.")
}
structure(v1*v2, names = nam)
}