Nothing
#' Calculate p-value of the two-sample test for the mean
#'
#' @description
#' `TwoSampleCTest` returns the p-value of the two-sample test for the mean using the resampling method.
#'
#' @details
#' The input fuzzy values should be triangular or trapezoidal fuzzy numbers, given as a single vector or a whole matrix.
#' In each row, there should be a single fuzzy number in one of the forms:
#' \enumerate{
#' \item left end of the support, left end of the core, right end of the core, right end of the support, or
#' \item left increment of the support, left end of the core, right end of the core, right increment of the support.
#' }
#' In this second case, the parameter \code{increases=TRUE} has to be used.
#'
#' The procedure uses the resampling method given in the \code{resamplingMethod} parameter to estimate the p-value of the two-sample
#' test for the mean (denoted further as the two-sample C-test, see Lubiano et al. (2016)).
#' This test checks the null hypothesis that the Aumann-type means of two fuzzy samples are equal.
#'
#'
#' @param initialSample1 The first initial sample which consists of triangular or trapezoidal fuzzy numbers.
#' More than one value can be given in the form of matrix.
#'
#' @param initialSample2 The second initial sample which consists of triangular or trapezoidal fuzzy numbers.
#' More than one value can be given in the form of matrix.
#'
#'
#' @param numberOfSamples Number of the bootstrapped samples used to estimate the p-value.
#'
#' @param resamplingMethod Name of the resampling method, which is used to generate the bootstrapped samples.
#' For the possible names check the values of \code{resamplingMethods} vector.
#'
#'
#' @param theta The weighting parameter for the mid/spread distance applied in the C-test.
#'
#'
#' @param increases If \code{TRUE} is used, then the fuzzy numbers should be given in the form:
#' left increment of the support, left end of the core, right end of the core,
#' right increment of the support. Otherwise, the default value \code{FALSE} is used and the fuzzy numbers should be given in the form:
#' left end of the support, left end of the core, right end of the core,
#' right end of the support.
#'
#' @return This function returns double value which is equal to the p-value of the two-sample C-test.
#'
#'
#' @examples
#'
#' # prepare some fuzzy numbers (first type of the initial sample)
#'
#' fuzzyValues <- matrix(c(0.25,0.5,1,1.25,0.75,1,1.5,2.2,-1,0,0,2),ncol = 4,byrow = TRUE)
#'
#' # prepare the slightly shifted second sample
#'
#' fuzzyValuesShift <- fuzzyValues + 0.5
#'
#' # seed PRNG
#'
#' set.seed(1234)
#'
#' # calculate the p-value using the classical (i.e. Efron's) bootstrap
#'
#' TwoSampleCTest(fuzzyValues, fuzzyValuesShift)
#'
#' # calculate the p-value using the VA resampling method
#'
#' TwoSampleCTest(fuzzyValues, fuzzyValuesShift, resamplingMethod = "VAMethod")
#'
#'
#' @references
#'
#' Lubiano, M.A., Montenegro M., Sinova, B., de Saa, S.R., Gil, M.A. (2016)
#' Hypothesis testing for means in connection with fuzzy rating scale-based data: algorithms and applications
#' European Journal of Operational Research, 251, pp. 918-929
#'
#' @export
#'
#' @family bootstrapped version of test
#'
#' @seealso \code{\link{OneSampleCTest}} for the one-sample C-test
# C bootstrapped test for two means
TwoSampleCTest <- function(initialSample1, initialSample2,
numberOfSamples = 100, theta = 1/3, resamplingMethod = "ClassicalBootstrap", increases = FALSE)
{
# changing possible vector to matrix
if(is.vector(initialSample1))
{
initialSample <- matrix(initialSample1,nrow=1)
}
# changing possible vector to matrix
if(is.vector(initialSample2))
{
initialSample <- matrix(initialSample2,nrow=1)
}
# check the initial sample
ParameterCheckForInitialSample(initialSample1)
# check the initial sample
ParameterCheckForInitialSample(initialSample2)
# checking numberOfSamples parameter
if(!IfInteger(numberOfSamples) | numberOfSamples <= 1)
{
stop("Parameter numberOfSamples should be integer value and > 1")
}
# checking theta parameter
if(!is.double(theta) | theta < 0)
{
stop("Parameter theta should be double value and > 0")
}
# checking resamplingMethod parameter
if(!(resamplingMethod %in% resamplingMethods))
{
stop("Parameter resamplingMethod should be a proper name of the resampling method")
}
# checking the validity of increases
if(!is.logical(increases))
{
stop("Parameter increases should have logical value")
}
# if we have increases, then all initial fuzzy numbers have to be changed
if(increases)
{
initialSample1 <- TransformFromIncreases(initialSample1)
initialSample2 <- TransformFromIncreases(initialSample2)
}
# calculation of C test without bootstrap (step 1)
n1 <- nrow(initialSample1)
n2 <- nrow(initialSample2)
standardStatistics <- ValueA(initialSample1, initialSample2, theta) /
(ValueB(initialSample1, theta) / n1 + ValueB(initialSample2, theta) / n2)
# change the initial samples according to H_0
initialSample1Changed <- sweep(initialSample1,2, MeanFuzzyNumber(initialSample2),"+")
initialSample2Changed <- sweep(initialSample2,2, MeanFuzzyNumber(initialSample1),"+")
# prepare vector
bootstrappedStatistics <- rep(0,numberOfSamples)
# pb <- txtProgressBar (1, numberOfSamples, style = 3)
for (i in 1:numberOfSamples) {
# generate bootstrap sample (step 3)
bootstrapSample1 <- get(resamplingMethod)(initialSample1Changed, n1, increases=FALSE)
bootstrapSample2 <- get(resamplingMethod)(initialSample2Changed, n2, increases=FALSE)
# calculate bootstrapped statistics (step 4)
bootstrappedStatistics[i] <- ValueA(bootstrapSample1, bootstrapSample2, theta) /
(ValueB(bootstrapSample1, theta) / n1 + ValueB(bootstrapSample2, theta) / n2)
# setTxtProgressBar(pb, i)
}
# cat("\n")
# calculate p-value
pvalue <- mean(standardStatistics < bootstrappedStatistics)
return(pvalue)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.