#' hypothesis_latex
#'
#' Creates a data frame for test hypothesis with various columns:
#' * `h0.left` left value in the null hypothesis, usually `\mu` or `\pi`
#' * `h0.operator` operator in null hypothesis, one of `eq`, `ne`, `lt`, `le`, `gt`, or `ge`
#' * `h0.right` right value in the null hypothesis, usually `\mu_0`, `\pi_0`, or a hypothetical value
#' * `h1.left` left value in the alternative hypothesis, usually `\mu` or `\pi`
#' * `h1.operator` operator in alternative hypothesis, one of `eq`, `ne`, `lt`, `le`, `gt`, or `ge`
#' * `h1.right` right value in the alternative hypothesis, usually `\mu_0`, `\pi_0`, or a hypothetical value
#' * `H0` latex representation of the null hypothesis
#' * `H1` latex representation of the alternative hypothesis
#' * `match.left` do the left value in the null and alternative hypothesis match?
#' * `match.right` do the right value in the null and alternative hypothesis match?
#' * `match.operator` do the operators in the null and alternative hypothesis match cover all real numbers?
#' * `match.right` do the right value in the null and alternative hypothesis match?
#' * `match.type` either `wrong`, `left.sided`, `right.sided`, `two.sided`, `greater`, or `less`
#' If \code{null} is not given then it determined from \code{alternative}. Otherwise hypotheses pairs are generated by
#' all combinations from `alternative` and `null`.
#' Valid values for `alternative`and `null` are `two.sided`, `greater`, `less`, `eq`, `ne`, `lt`, `le`, `gt`, or `ge`.
#'
#' @param left character: symbol, for example \code{"\\mu"} or \code{"\\pi"}
#' @param alternative character: alternative hypotheses
#' @param null character: null hypothese (default: \code{NULL})
#' @param right character: symbol (default: \code{paste0(left, "_0")})
#'
#' @return data frame with hypothesis pairs
#' @export
#'
#' @examples
#' # create one hypotheses pair
#' hypothesis_latex("\\mu")
#' hypothesis_latex("\\pi")
#' hypothesis_latex("\\mu", alternative="two.sided")
#' hypothesis_latex("\\mu", alternative="two.sided", null="lt")
#' hypothesis_latex("\\mu", alternative="ne", null="eq")
# create several hypotheses pairs
#' hypothesis_latex("\\mu", right=c(0,1))
#' hypothesis_latex("\\mu", alternative=c("eq", "ne", "lt", "le", "gt", "ge"))
#' hypothesis_latex("\\mu", alternative=c("eq", "ne", "lt", "le", "gt", "ge"),
#' null=c("eq", "ne", "lt", "le", "gt", "ge"))
hypothesis_latex <- function(left, alternative = NULL, null = NULL, right = paste0(left, "_0")) {
inverse_hypothesis <- function(h) {
ret <- rep(NA_character_, length(h))
ret[h=='ne'] <- 'eq'
ret[h=='eq'] <- 'ne'
ret[h=='le'] <- 'gt'
ret[h=='lt'] <- 'ge'
ret[h=='ge'] <- 'lt'
ret[h=='gt'] <- 'le'
ret
}
#
cond <- c("two.sided", "less", "greater", "lt", "le", "eq", "ne", "gt", "ge")
if (is.null(alternative)) alternative <- 'ne'
pos <- match(alternative, cond)
napos <- which(is.na(pos))
if (any(napos)) stop(paste("Unknown hypothesis:", toString(alternative[napos])))
alternative <- cond[pos]
alternative[alternative=="two.sided"] <- 'ne'
alternative[alternative=="less"] <- 'lt'
alternative[alternative=="greater"] <- 'gt'
if (is.null(null)) { # no null hypothesis given
null <- inverse_hypothesis(alternative)
reti <- gapply(list, h0.left=left, h0.right=right, h1.left=left, h1.right=right)
ret <- NULL
for (i in 1:length(alternative)) {
ret <- rbind(ret, cbind(reti, h0.operator=rep(null[i], nrow(reti)), h1.operator=rep(alternative[i], nrow(reti))))
}
} else {
pos <- match(null, cond)
napos <- which(is.na(pos))
if (length(napos)) stop(paste("Unknown hypothesis:", toString(null[napos])))
null <- cond[pos]
null[null=="two.sided"] <- 'eq'
null[null=="less"] <- 'ge'
null[null=="greater"] <- 'le'
ret <- gapply(list, h0.left=left, h0.operator=null, h0.right=right, h1.left=left, h1.operator=alternative, h1.right=right)
}
latex <- c('eq' = '=', 'ne'= '\\neq', 'gt'='>', 'ge'='\\geq', 'lt'='<', 'le'='\\leq')
ret$H0 <- paste(ret$h0.left, latex[ret$h0.operator], ret$h0.right)
ret$H1 <- paste(ret$h1.left, latex[ret$h1.operator], ret$h1.right)
ret$match.left <- ret$h0.left==ret$h1.left
ret$match.right <- ret$h0.right==ret$h1.right
ret$match.operator <- ret$h0.operator==inverse_hypothesis(ret$h1.operator)
ret$type <- rep("wrong", nrow(ret))
ret$type[ret$match.left & ret$match.right & ret$match.operator & ret$h1.operator=='ne'] <- "two.sided"
ret$type[ret$match.left & ret$match.right & ret$match.operator & ret$h1.operator=='gt'] <- "greater"
ret$type[ret$match.left & ret$match.right & ret$match.operator & ret$h1.operator=='lt'] <- "less"
ret$type[ret$match.left & ret$match.right & ret$h0.operator=='eq' & ret$h1.operator=='lt'] <- "left.sided"
ret$type[ret$match.left & ret$match.right & ret$h0.operator=='eq' & ret$h1.operator=='lt'] <- "right.sided"
unique(ret)
}
#hypothesis_latex <- function (left, alternative=c("two.sided", "less", "greater"), null=NULL,
# right=paste0(left, "_0")) {
# hyp <- list()
# hyp[["two.sided"]] <- c("=", "\\neq")
# hyp[["less"]] <- c("\\geq", "<")
# hyp[["greater"]] <- c("\\leq", ">")
# hyp[["ne"]] <- c("\\neq", "\\neq")
# hyp[["gt"]] <- c(">", ">")
# hyp[["lt"]] <- c("<", "<")
# hyp[["le"]] <- c("\\leq", "\\leq")
# hyp[["ge"]] <- c("\\geq", "\\geq")
# hyp[["eq"]] <- c("=", "=")
# h0 <- sapply(hyp, "[", 1)
# h1 <- sapply(hyp, "[", 2)
# if (is.null(null)) null <- alternative
# h0 <- h0[null]
# h1 <- h1[alternative]
# stopifnot(length(h0)==length(h1))
# less <- (h0=="\\geq") & (h1=="<")
# greater <- (h0=="\\leq") & (h1==">")
# two.sided <- (h0=="=") & (h1=="\\neq")
# ret <- cbind(paste(left, h0, right), paste(left, h1, right))
# colnames(ret) <- c("H0", "H1")
# row.names(ret) <- sprintf("wrong%0.f", 1:nrow(ret))
# if (any(less)) row.names(ret)[which(less)] <- "less"
# if (any(greater)) row.names(ret)[which(greater)] <- "greater"
# if (any(two.sided)) row.names(ret)[which(two.sided)] <- "two.sided"
# if (anyDuplicated(ret)) warning ("duplicate hypothesis pairs")
# as.data.frame(ret)
#}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.