Permalink
Branch: master
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
97 lines (88 sloc) 2.91 KB
#' @importFrom magrittr %>%
#' @title McNemar Test
#' @description Test if the proportions of two dichotomous variables are
#' equal in the same population.
#' @param data a \code{data.frame} or \code{tibble}
#' @param x factor; column in \code{data}
#' @param y factor; column in \code{data}
#' @return \code{infer_mcnemar_test} returns an object of class \code{"infer_mcnemar_test"}.
#' An object of class \code{"infer_mcnemar_test"} is a list containing the
#' following components:
#'
#' \item{statistic}{chi square statistic}
#' \item{df}{degrees of freedom}
#' \item{pvalue}{p-value}
#' \item{exactp}{exact p-value}
#' \item{cstat}{continuity correction chi square statistic}
#' \item{cpvalue}{continuity correction p-value}
#' \item{kappa}{kappa coefficient; measure of interrater agreement}
#' \item{std_err}{asymptotic standard error}
#' \item{kappa_cil}{95\% kappa lower confidence limit}
#' \item{kappa_ciu}{95\% kappa upper confidence limit}
#' \item{cases}{cases}
#' \item{controls}{controls}
#' \item{ratio}{ratio of proportion with factor}
#' \item{odratio}{odds ratio}
#' \item{tbl}{two way table}
#' @section Deprecated Function:
#' \code{mcnermar_test()} has been deprecated. Instead use
#' \code{infer_mcnemar_test()}.
#' @references Sheskin, D. J. 2007. Handbook of Parametric and Nonparametric
#' Statistical Procedures, 4th edition. : Chapman & Hall/CRC.
#'
#' @seealso \code{\link[stats]{mcnemar.test}}
#' @examples
#' # using variables from data
#' library(dplyr)
#' hb <- mutate(hsb,
#' himath = if_else(math > 60, 1, 0),
#' hiread = if_else(read > 60, 1, 0)
#' )
#' infer_mcnemar_test(hb, himath, hiread)
#'
#' # test if the proportion of students in himath and hiread group is same
#' himath <- ifelse(hsb$math > 60, 1, 0)
#' hiread <- ifelse(hsb$read > 60, 1, 0)
#' infer_mcnemar_test(table(himath, hiread))
#'
#' # using matrix
#' infer_mcnemar_test(matrix(c(135, 18, 21, 26), nrow = 2))
#' @export
#'
infer_mcnemar_test <- function(data, x = NULL, y = NULL) UseMethod("infer_mcnemar_test")
#' @export
#'
infer_mcnemar_test.default <- function(data, x = NULL, y = NULL) {
if (is.matrix(data) | is.table(data)) {
dat <- mcdata(data)
} else {
x1 <- rlang::enquo(x)
y1 <- rlang::enquo(y)
dat <-
data %>%
dplyr::select(!! x1, !! y1) %>%
table()
}
k <- mccomp(dat)
result <- list(
statistic = k$statistic, df = k$df, pvalue = k$pvalue,
exactp = k$exactp, cstat = k$cstat, cpvalue = k$cpvalue, kappa = k$kappa,
std_err = k$std_err, kappa_cil = k$kappa_cil, kappa_ciu = k$kappa_ciu,
cases = k$cases, controls = k$controls, ratio = k$ratio,
odratio = k$odratio, tbl = dat
)
class(result) <- "infer_mcnemar_test"
return(result)
}
#' @export
#' @rdname infer_mcnemar_test
#' @usage NULL
#'
mcnemar_test <- function(x, y = NULL) {
.Deprecated("infer_mcnemar_test()")
}
#' @export
#'
print.infer_mcnemar_test <- function(x, ...) {
print_mcnemar_test(x)
}