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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
standardize.default <- function(call, unchanged=NULL,
standardize.y=FALSE, binary.inputs="center"){
form <- call$formula
varnames <- all.vars (form)
n.vars <- length (varnames)
#
# Decide which variables will be unchanged
#
transform <- rep ("leave.alone", n.vars)
if (standardize.y) {
transform[1] <- "full"
}
for (i in 2:n.vars){
v <- varnames[i]
if (is.null(call$data)) {
thedata <- get(v)
}
else {
thedata <- get(as.character(call$data))[[v]]
}
if (is.na(match(v,unchanged))){
num.categories <- length (unique(thedata[!is.na(thedata)]))
if (num.categories==2){
transform[i] <- binary.inputs
}
else if (num.categories>2 & is.numeric(thedata)){
transform[i] <- "full"
}
}
}
#
# New variable names:
# prefix with "c." if centered or "z." if centered and scaled
#
varnames.new <- ifelse (transform=="leave.alone", varnames,
ifelse (transform=="full", paste ("z", varnames, sep="."),
paste ("c", varnames, sep=".")))
transformed.variables <- (1:n.vars)[transform!="leave.alone"]
#Define the new variables
if (is.null(call$data)) {
for (i in transformed.variables) {
assign(varnames.new[i], rescale(get(varnames[i]), binary.inputs))
}
}
else {
newvars <- NULL
for (i in transformed.variables) {
assign(varnames.new[i], rescale(get(as.character(call$data))[[varnames[i]]],
binary.inputs))
newvars <- cbind(newvars, get(varnames.new[i]))
}
assign(as.character(call$data), cbind(get(as.character(call$data)), newvars))
}
# Now call the regression with the new variables
call.new <- call
L <- sapply (as.list (varnames.new), as.name)
names(L) <- varnames
call.new$formula <- do.call (substitute, list (form, L))
formula <- as.character (call.new$formula)
if (length(formula)!=3) stop ("formula does not have three components")
formula <- paste (formula[2],formula[1],formula[3])
formula <- gsub ("factor(z.", "factor(", formula, fixed=TRUE)
formula <- gsub ("factor(c.", "factor(", formula, fixed=TRUE)
call.new$formula <- as.formula (formula)
return (eval (call.new))
}
setMethod("standardize", signature(object = "lm"),
function(object, unchanged=NULL,
standardize.y=FALSE, binary.inputs="center")
{
call <- object$call
out <- standardize.default(call=call, unchanged=unchanged,
standardize.y=standardize.y, binary.inputs=binary.inputs)
return(out)
}
)
setMethod("standardize", signature(object = "glm"),
function(object, unchanged=NULL,
standardize.y=FALSE, binary.inputs="center")
{
call <- object$call
out <- standardize.default(call=call, unchanged=unchanged,
standardize.y=standardize.y, binary.inputs=binary.inputs)
return(out)
}
)
setMethod("standardize", signature(object = "polr"),
function(object, unchanged=NULL,
standardize.y=FALSE, binary.inputs="center")
{
call <- object$call
out <- standardize.default(call=call, unchanged=unchanged,
standardize.y=standardize.y, binary.inputs=binary.inputs)
return(out)
}
)
setMethod("standardize", signature(object = "merMod"),
function(object, unchanged=NULL,
standardize.y=FALSE, binary.inputs="center")
{
call <- object@call
out <- standardize.default(call=call, unchanged=unchanged,
standardize.y=standardize.y, binary.inputs=binary.inputs)
return(out)
}
)
|