0 | 0 |
# plot, summary, and print methods for effects package
|
1 | 1 |
# John Fox and Jangman Hong
|
2 | |
# last modified 2012-11-06 by J. Fox
|
|
2 |
# last modified 2012-11-30 by J. Fox
|
3 | 3 |
# 29 June 2011 added grid, rotx and roty arguments to the two plot methods
|
4 | 4 |
# by S. Weisberg
|
5 | 5 |
|
|
93 | 93 |
invisible(NULL)
|
94 | 94 |
}
|
95 | 95 |
|
96 | |
# the following function isn't exported
|
|
96 |
# the following two functions aren't exported
|
97 | 97 |
|
98 | 98 |
make.ticks <- function(range, link, inverse, at, n) {
|
|
99 |
warn <- options(warn=-1)
|
|
100 |
on.exit(warn)
|
99 | 101 |
link <- if (is.null(link))
|
100 | 102 |
function(x) nlm(function(y) (inverse(y) - x)^2,
|
101 | 103 |
mean(range))$estimate
|
|
106 | 108 |
}
|
107 | 109 |
else at
|
108 | 110 |
ticks <- sapply(labels, link)
|
109 | |
list(at=ticks, labels=as.character(labels))
|
|
111 |
list(at=ticks, labels=format(labels))
|
|
112 |
}
|
|
113 |
|
|
114 |
range.adj <- function(x){
|
|
115 |
range <- range(x)
|
|
116 |
c(range[1] - .025*(range[2] - range[1]),
|
|
117 |
range[2] + .025*(range[2] - range[1]))
|
110 | 118 |
}
|
111 | 119 |
|
112 | 120 |
# modified by Michael Friendly: added key.args:
|
|
120 | 128 |
transform.x=NULL, ticks.x=NULL,
|
121 | 129 |
key.args=NULL,
|
122 | 130 |
row=1, col=1, nrow=1, ncol=1, more=FALSE, ...){
|
123 | |
make.ticks <- function(range, link, inverse, at, n) {
|
124 | |
link <- if (is.null(link))
|
125 | |
function(x) nlm(function(y) (inverse(y) - x)^2,
|
126 | |
mean(range))$estimate
|
127 | |
else link
|
128 | |
if (is.null(n)) n <- 5
|
129 | |
labels <- if (is.null(at)){
|
130 | |
labels <- pretty(sapply(range, inverse), n=n+1)
|
131 | |
}
|
132 | |
else at
|
133 | |
ticks <- sapply(labels, link)
|
134 | |
list(at=ticks, labels=as.character(labels))
|
135 | |
}
|
|
131 |
# make.ticks <- function(range, link, inverse, at, n) {
|
|
132 |
# link <- if (is.null(link))
|
|
133 |
# function(x) nlm(function(y) (inverse(y) - x)^2,
|
|
134 |
# mean(range))$estimate
|
|
135 |
# else link
|
|
136 |
# if (is.null(n)) n <- 5
|
|
137 |
# labels <- if (is.null(at)){
|
|
138 |
# labels <- pretty(sapply(range, inverse), n=n+1)
|
|
139 |
# }
|
|
140 |
# else at
|
|
141 |
# ticks <- sapply(labels, link)
|
|
142 |
# list(at=ticks, labels=format(labels))
|
|
143 |
# }
|
136 | 144 |
type <- match.arg(type)
|
137 | 145 |
thresholds <- x$thresholds
|
138 | 146 |
has.thresholds <- !is.null(thresholds)
|
|
160 | 168 |
x.data <- x$data
|
161 | 169 |
effect <- paste(sapply(x$variables, "[[", "name"), collapse="*")
|
162 | 170 |
vars <- x$variables
|
163 | |
x <- as.data.frame(x)
|
|
171 |
x <- as.data.frame(x, transform=I)
|
164 | 172 |
for (i in 1:length(vars)){
|
165 | 173 |
if (!(vars[[i]]$is.factor)) next
|
166 | 174 |
x[,i] <- factor(x[,i], levels=vars[[i]]$levels)
|
|
210 | 218 |
else {
|
211 | 219 |
nm <- names(x)[1]
|
212 | 220 |
x.vals <- x.data[, nm]
|
213 | |
if (nm %in% ticks.x){
|
|
221 |
if (nm %in% names(ticks.x)){
|
214 | 222 |
at <- ticks.x[[nm]]$at
|
215 | 223 |
n <- ticks.x[[nm]]$n
|
216 | 224 |
}
|
|
218 | 226 |
at <- NULL
|
219 | 227 |
n <- 5
|
220 | 228 |
}
|
221 | |
xlm <- if (nm %in% xlim){
|
|
229 |
xlm <- if (nm %in% names(xlim)){
|
222 | 230 |
xlim[[nm]]
|
223 | 231 |
}
|
224 | |
else range(x.vals)
|
|
232 |
else range.adj(x[nm]) # range(x.vals)
|
225 | 233 |
tickmarks.x <- if ((nm %in% names(transform.x)) && !(is.null(transform.x))){
|
226 | 234 |
trans <- transform.x[[nm]]$trans
|
227 | 235 |
make.ticks(trans(xlm), link=transform.x[[nm]]$trans, inverse=transform.x[[nm]]$inverse, at=ticks.x$at, n=ticks.x$n)
|
|
250 | 258 |
}
|
251 | 259 |
},
|
252 | 260 |
ylim=ylim,
|
|
261 |
xlim=trans(xlm),
|
253 | 262 |
ylab=ylab,
|
254 | 263 |
xlab=if (missing(xlab)) names(x)[1] else xlab,
|
255 | 264 |
x.vals=x.vals, rug=rug,
|
|
334 | 343 |
else{
|
335 | 344 |
nm <- names(x)[x.var]
|
336 | 345 |
x.vals <- x.data[, nm]
|
337 | |
if (nm %in% ticks.x){
|
|
346 |
if (nm %in% names(ticks.x)){
|
338 | 347 |
at <- ticks.x[[nm]]$at
|
339 | 348 |
n <- ticks.x[[nm]]$n
|
340 | 349 |
}
|
|
342 | 351 |
at <- NULL
|
343 | 352 |
n <- 5
|
344 | 353 |
}
|
345 | |
xlm <- if (nm %in% xlim){
|
|
354 |
xlm <- if (nm %in% names(xlim)){
|
346 | 355 |
xlim[[nm]]
|
347 | 356 |
}
|
348 | |
else range(x.vals)
|
|
357 |
else range.adj(x[nm]) # range(x.vals)
|
349 | 358 |
tickmarks.x <- if ((nm %in% names(transform.x)) && !(is.null(transform.x))){
|
350 | 359 |
trans <- transform.x[[nm]]$trans
|
351 | 360 |
make.ticks(trans(xlm), link=transform.x[[nm]]$trans, inverse=transform.x[[nm]]$inverse, at=ticks.x$at, n=ticks.x$n)
|
|
379 | 388 |
}
|
380 | 389 |
},
|
381 | 390 |
ylim=ylim,
|
|
391 |
xlim=trans(xlm),
|
382 | 392 |
ylab=ylab,
|
383 | 393 |
xlab=if (missing(xlab)) predictors[x.var] else xlab,
|
384 | 394 |
x.vals=x.vals, rug=rug,
|
|
434 | 444 |
else{
|
435 | 445 |
nm <- names(x)[x.var]
|
436 | 446 |
x.vals <- x.data[, nm]
|
437 | |
if (nm %in% ticks.x){
|
|
447 |
if (nm %in% names(ticks.x)){
|
438 | 448 |
at <- ticks.x[[nm]]$at
|
439 | 449 |
n <- ticks.x[[nm]]$n
|
440 | 450 |
}
|
|
442 | 452 |
at <- NULL
|
443 | 453 |
n <- 5
|
444 | 454 |
}
|
445 | |
xlm <- if (nm %in% xlim){
|
|
455 |
xlm <- if (nm %in% names(xlim)){
|
446 | 456 |
xlim[[nm]]
|
447 | 457 |
}
|
448 | |
else range(x.vals)
|
|
458 |
else range.adj(x[nm]) # range(x.vals)
|
449 | 459 |
tickmarks.x <- if ((nm %in% names(transform.x)) && !(is.null(transform.x))){
|
450 | 460 |
trans <- transform.x[[nm]]$trans
|
451 | 461 |
make.ticks(trans(xlm), link=transform.x[[nm]]$trans, inverse=transform.x[[nm]]$inverse, at=ticks.x$at, n=ticks.x$n)
|
|
475 | 485 |
}
|
476 | 486 |
},
|
477 | 487 |
ylim=ylim,
|
|
488 |
xlim=trans(xlm),
|
478 | 489 |
ylab=ylab,
|
479 | 490 |
xlab=if (missing(xlab)) predictors[x.var] else xlab,
|
480 | 491 |
x.vals=x.vals, rug=rug,
|
|
741 | 752 |
else { # x-variable numeric
|
742 | 753 |
nm <- predictors[x.var]
|
743 | 754 |
x.vals <- x$data[[nm]]
|
744 | |
if (nm %in% ticks.x){
|
|
755 |
if (nm %in% names(ticks.x)){
|
745 | 756 |
at <- ticks.x[[nm]]$at
|
746 | 757 |
n <- ticks.x[[nm]]$n
|
747 | 758 |
}
|
|
749 | 760 |
at <- NULL
|
750 | 761 |
n <- 5
|
751 | 762 |
}
|
752 | |
xlm <- if (nm %in% xlim){
|
|
763 |
xlm <- if (nm %in% names(xlim)){
|
753 | 764 |
xlim[[nm]]
|
754 | 765 |
}
|
755 | |
else range(x.vals)
|
|
766 |
else range.adj(data[nm]) # range(x.vals)
|
756 | 767 |
tickmarks.x <- if ((nm %in% names(transform.x)) && !(is.null(transform.x))){
|
757 | 768 |
trans <- transform.x[[nm]]$trans
|
758 | 769 |
make.ticks(trans(xlm), link=transform.x[[nm]]$trans, inverse=transform.x[[nm]]$inverse, at=ticks.x$at, n=ticks.x$n)
|
|
830 | 841 |
else { # x-variable numeric
|
831 | 842 |
nm <- predictors[x.var]
|
832 | 843 |
x.vals <- x$data[[nm]]
|
833 | |
if (nm %in% ticks.x){
|
|
844 |
if (nm %in% names(ticks.x)){
|
834 | 845 |
at <- ticks.x[[nm]]$at
|
835 | 846 |
n <- ticks.x[[nm]]$n
|
836 | 847 |
}
|
|
838 | 849 |
at <- NULL
|
839 | 850 |
n <- 5
|
840 | 851 |
}
|
841 | |
xlm <- if (nm %in% xlim){
|
|
852 |
xlm <- if (nm %in% names(xlim)){
|
842 | 853 |
xlim[[nm]]
|
843 | 854 |
}
|
844 | |
else range(x.vals)
|
|
855 |
else range.adj(data[nm]) # range(x.vals)
|
845 | 856 |
tickmarks.x <- if ((nm %in% names(transform.x)) && !(is.null(transform.x))){
|
846 | 857 |
trans <- transform.x[[nm]]$trans
|
847 | 858 |
make.ticks(trans(xlm), link=transform.x[[nm]]$trans, inverse=transform.x[[nm]]$inverse, at=ticks.x$at, n=ticks.x$n)
|
|
939 | 950 |
else { # x-variable numeric
|
940 | 951 |
nm <- predictors[x.var]
|
941 | 952 |
x.vals <- x$data[[nm]]
|
942 | |
if (nm %in% ticks.x){
|
|
953 |
if (nm %in% names(ticks.x)){
|
943 | 954 |
at <- ticks.x[[nm]]$at
|
944 | 955 |
n <- ticks.x[[nm]]$n
|
945 | 956 |
}
|
|
947 | 958 |
at <- NULL
|
948 | 959 |
n <- 5
|
949 | 960 |
}
|
950 | |
xlm <- if (nm %in% xlim){
|
|
961 |
xlm <- if (nm %in% names(xlim)){
|
951 | 962 |
xlim[[nm]]
|
952 | 963 |
}
|
953 | |
else range(x.vals)
|
|
964 |
else range.adj(data[nm]) # range(x.vals)
|
954 | 965 |
tickmarks.x <- if ((nm %in% names(transform.x)) && !(is.null(transform.x))){
|
955 | 966 |
trans <- transform.x[[nm]]$trans
|
956 | 967 |
make.ticks(trans(xlm), link=transform.x[[nm]]$trans, inverse=transform.x[[nm]]$inverse, at=ticks.x$at, n=ticks.x$n)
|