# R/partition.R In ScottKnottESD: The Scott-Knott Effect Size Difference (ESD) Test

#### Defines functions Partition

```# This is a modified version of https://github.com/jcfaria/ScottKnott/blob/master/R/MaxValue.R which is originally written by Jose Claudio Faria
# Change Notes:
# - Add an 'av' argument into the Partition() function
# - Remove the calculation of a lamdaa and a Chi-square distribution
# - Use Cohen d to check the effect size difference with the diff() function

#' @import effsize
Partition <- function(g,
means,
mMSE,
dfr,
sig.level,
av,
k,
group,
ngroup,
markg,
g1=g,
sqsum=rep(0, g1))
{
for(k1 in k:(g-1)) {
t1 <- sum(means[k:k1])

k2 <- g-k1

t2 <- sum(means[(k1+1):g])

# SK between groups sum of squares
sqsum[k1] <- t1^2/(k1-k+1) + t2^2/k2 - (t1+t2)^2/(g-k+1)
}

# the first element of this vector is the value of k1 which maximizes sqsum (SKBSQS)
ord1 <- order(sqsum, decreasing=TRUE)[1]

############################################################
# Compute the magnitude of the difference of all treatments in a group
# Use effect size test to identify whether to split metrics into two groups of {k:i} and {j:g}.
# The split is accepted if effect.size({k}, {g}) != negligible
diff <- function(k, g, av, means) {
if(k==g){ # if k and g are the same treatment
return(TRUE)
}

a <- av\$model[av\$model[,2] == names(means[k]),1]
b <- av\$model[av\$model[,2] == names(means[g]),1]

magnitude <- as.character(cohen.d(a,b)\$magnitude)
return(magnitude == "negligible")
}
############################################################

# if true it returns one node to the right if false it goes forward one node to the left
if(diff(k, g, av, means) |
(ord1 == k)) {
# In the case of a single average left (maximum)
if(!diff(k, g, av, means)) {
# it marks the group to the left consisting of a single mean
ngroup <- ngroup + 1

# it forms a group of just one mean (the maximum of the group)
group[k] <- ngroup

# lower limit on returning to the right
k <- ord1 + 1
}
if(diff(k, g, av, means)) {
# it marks the groups
ngroup <- ngroup + 1

# it forms a group of means
group[k:g] <- ngroup

# if this group is the last one
if (prod(group) > 0)
# If the upper limit of the latter group formed is equal to the total
# number of treatments than  the grouping algorithm is ended
return (group)

# it marks the lower limit of the group of means to be used in the
# calculation of the maximum sqsum on returning one node to the right
k <- g + 1

# it marks the upper limit of the group of means to be used in the
# calculation of the maximum sqsum on returning one node to the right
g <- markg[g]
}
while(k == g) {
# there was just one mean left to the right, so it becomes a group
ngroup   <- ngroup + 1

group[g] <- ngroup

if(prod(group) > 0)
# If the upper limit of the latter group formed is equal to the total
# number of treatments than  the grouping algorithm is ended
return(group)

# the group of just one mean group had already been formed, a further
# jump to the right and another check whether there was just one mean
# left to the right
k <- g + 1

g <- markg[g]
}
} else {
# it marks the upper limit of the group split into two to be used on
# returning to the right later
markg[ord1] <- g

g <- ord1
}

Partition(g,
means,
mMSE,
dfr,
sig.level,
av,
k,
group,
ngroup,
markg)
}
```

## Try the ScottKnottESD package in your browser

Any scripts or data that you put into this service are public.

ScottKnottESD documentation built on May 2, 2019, 4:01 a.m.