Symmetry Tests
Testing the symmetry of a numeric repeated measurements variable in a complete block design.
## S3 method for class 'formula' sign_test(formula, data, subset = NULL, ...) ## S3 method for class 'SymmetryProblem' sign_test(object, ...) ## S3 method for class 'formula' wilcoxsign_test(formula, data, subset = NULL, ...) ## S3 method for class 'SymmetryProblem' wilcoxsign_test(object, zero.method = c("Pratt", "Wilcoxon"), ...) ## S3 method for class 'formula' friedman_test(formula, data, subset = NULL, ...) ## S3 method for class 'SymmetryProblem' friedman_test(object, ...) ## S3 method for class 'formula' quade_test(formula, data, subset = NULL, ...) ## S3 method for class 'SymmetryProblem' quade_test(object, ...)
formula |
a formula of the form |
data |
an optional data frame containing the variables in the model formula. |
subset |
an optional vector specifying a subset of observations to be used. Defaults
to |
object |
an object inheriting from class |
zero.method |
a character, the method used to handle zeros: either |
... |
further arguments to be passed to |
sign_test
, wilcoxsign_test
, friedman_test
and
quade_test
provide the sign test, the Wilcoxon signed-rank test, the
Friedman test, the Page test and the Quade test. A general description of
these methods is given by Hollander and Wolfe (1999).
The null hypothesis of symmetry is tested. The response variable and the
measurement conditions are given by y
and x
, respectively, and
block
is a factor where each level corresponds to exactly one subject
with repeated measurements. For sign_test
and wilcoxsign_test
,
formulae of the form y ~ x | block
and y ~ x
are allowed. The
latter form is interpreted as y
is the first and x
the second
measurement on the same subject.
If x
is an ordered factor, the default scores, 1:nlevels(x)
, can
be altered using the scores
argument (see symmetry_test
);
this argument can also be used to coerce nominal factors to class
"ordered"
. In this case, a linear-by-linear association test is
computed and the direction of the alternative hypothesis can be specified
using the alternative
argument. For the Friedman test, this extension
was given by Page (1963) and is known as the Page test.
For wilcoxsign_test
, the default method of handling zeros
(zero.method = "Pratt"
), due to Pratt (1959), first rank-transforms the
absolute differences (including zeros) and then discards the ranks
corresponding to the zero-differences. The proposal by Wilcoxon (1949, p. 6)
first discards the zero-differences and then rank-transforms the remaining
absolute differences (zero.method = "Wilcoxon"
).
The conditional null distribution of the test statistic is used to obtain
p-values and an asymptotic approximation of the exact distribution is
used by default (distribution = "asymptotic"
). Alternatively, the
distribution can be approximated via Monte Carlo resampling or computed
exactly for univariate two-sample problems by setting distribution
to
"approximate"
or "exact"
respectively. See
asymptotic
, approximate
and exact
for details.
An object inheriting from class "IndependenceTest"
.
Starting with coin version 1.0-16, the zero.method
argument
replaced the (now removed) ties.method
argument. The current default
is zero.method = "Pratt"
whereas earlier versions had
ties.method = "HollanderWolfe"
, which is equivalent to
zero.method = "Wilcoxon"
.
Hollander, M. and Wolfe, D. A. (1999). Nonparametric Statistical Methods, Second Edition. New York: John Wiley & Sons.
Page, E. B. (1963). Ordered hypotheses for multiple treatments: a significance test for linear ranks. Journal of the American Statistical Association 58(301), 216–230. doi: 10.1080/01621459.1963.10500843
Pratt, J. W. (1959). Remarks on zeros and ties in the Wilcoxon signed rank procedures. Journal of the American Statistical Association 54(287), 655–667. doi: 10.1080/01621459.1959.10501526
Quade, D. (1979). Using weighted rankings in the analysis of complete blocks with additive block effects. Journal of the American Statistical Association 74(367), 680–683. doi: 10.1080/01621459.1979.10481670
Wilcoxon, F. (1949). Some Rapid Approximate Statistical Procedures. New York: American Cyanamid Company.
## Example data from ?wilcox.test y1 <- c(1.83, 0.50, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.30) y2 <- c(0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29) ## One-sided exact sign test (st <- sign_test(y1 ~ y2, distribution = "exact", alternative = "greater")) midpvalue(st) # mid-p-value ## One-sided exact Wilcoxon signed-rank test (wt <- wilcoxsign_test(y1 ~ y2, distribution = "exact", alternative = "greater")) statistic(wt, type = "linear") midpvalue(wt) # mid-p-value ## Comparison with R's wilcox.test() function wilcox.test(y1, y2, paired = TRUE, alternative = "greater") ## Data with explicit group and block information dta <- data.frame(y = c(y1, y2), x = gl(2, length(y1)), block = factor(rep(seq_along(y1), 2))) ## For two samples, the sign test is equivalent to the Friedman test... sign_test(y ~ x | block, data = dta, distribution = "exact") friedman_test(y ~ x | block, data = dta, distribution = "exact") ## ...and the signed-rank test is equivalent to the Quade test wilcoxsign_test(y ~ x | block, data = dta, distribution = "exact") quade_test(y ~ x | block, data = dta, distribution = "exact") ## Comparison of three methods ("round out", "narrow angle", and "wide angle") ## for rounding first base. ## Hollander and Wolfe (1999, p. 274, Tab. 7.1) rounding <- data.frame( times = c(5.40, 5.50, 5.55, 5.85, 5.70, 5.75, 5.20, 5.60, 5.50, 5.55, 5.50, 5.40, 5.90, 5.85, 5.70, 5.45, 5.55, 5.60, 5.40, 5.40, 5.35, 5.45, 5.50, 5.35, 5.25, 5.15, 5.00, 5.85, 5.80, 5.70, 5.25, 5.20, 5.10, 5.65, 5.55, 5.45, 5.60, 5.35, 5.45, 5.05, 5.00, 4.95, 5.50, 5.50, 5.40, 5.45, 5.55, 5.50, 5.55, 5.55, 5.35, 5.45, 5.50, 5.55, 5.50, 5.45, 5.25, 5.65, 5.60, 5.40, 5.70, 5.65, 5.55, 6.30, 6.30, 6.25), methods = factor(rep(1:3, 22), labels = c("Round Out", "Narrow Angle", "Wide Angle")), block = gl(22, 3) ) ## Asymptotic Friedman test friedman_test(times ~ methods | block, data = rounding) ## Parallel coordinates plot with(rounding, { matplot(t(matrix(times, ncol = 3, byrow = TRUE)), type = "l", lty = 1, col = 1, ylab = "Time", xlim = c(0.5, 3.5), axes = FALSE) axis(1, at = 1:3, labels = levels(methods)) axis(2) }) ## Where do the differences come from? ## Wilcoxon-Nemenyi-McDonald-Thompson test (Hollander and Wolfe, 1999, p. 295) ## Note: all pairwise comparisons (st <- symmetry_test(times ~ methods | block, data = rounding, ytrafo = function(data) trafo(data, numeric_trafo = rank_trafo, block = rounding$block), xtrafo = mcp_trafo(methods = "Tukey"))) ## Simultaneous test of all pairwise comparisons ## Wide Angle vs. Round Out differ (Hollander and Wolfe, 1999, p. 296) pvalue(st, method = "single-step") # subset pivotality is violated ## Strength Index of Cotton ## Hollander and Wolfe (1999, p. 286, Tab. 7.5) cotton <- data.frame( strength = c(7.46, 7.17, 7.76, 8.14, 7.63, 7.68, 7.57, 7.73, 8.15, 8.00, 7.21, 7.80, 7.74, 7.87, 7.93), potash = ordered(rep(c(144, 108, 72, 54, 36), 3), levels = c(144, 108, 72, 54, 36)), block = gl(3, 5) ) ## One-sided asymptotic Page test friedman_test(strength ~ potash | block, data = cotton, alternative = "greater") ## One-sided approximative (Monte Carlo) Page test friedman_test(strength ~ potash | block, data = cotton, alternative = "greater", distribution = approximate(nresample = 10000)) ## Data from Quade (1979, p. 683) dta <- data.frame( y = c(52, 45, 38, 63, 79, 50, 45, 57, 39, 53, 51, 43, 47, 50, 56, 62, 72, 49, 49, 52, 40), x = factor(rep(LETTERS[1:3], 7)), b = factor(rep(1:7, each = 3)) ) ## Approximative (Monte Carlo) Friedman test ## Quade (1979, p. 683) friedman_test(y ~ x | b, data = dta, distribution = approximate(nresample = 10000)) # chi^2 = 6.000 ## Approximative (Monte Carlo) Quade test ## Quade (1979, p. 683) (qt <- quade_test(y ~ x | b, data = dta, distribution = approximate(nresample = 10000))) # W = 8.157 ## Comparison with R's quade.test() function quade.test(y ~ x | b, data = dta) ## quade.test() uses an F-statistic b <- nlevels(qt@statistic@block) A <- sum(qt@statistic@y^2) B <- sum(statistic(qt, type = "linear")^2) / b (b - 1) * B / (A - B) # F = 8.3765
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.