# dodPwr: Power of the Degree-of-Difference (DOD) method In sensR: Thurstonian Models for Sensory Discrimination

## Description

Computes the power of the Degree-of-Difference (DOD) method by simulation

## Usage

 ```1 2 3 4 5 6 7``` ```dodPwr(d.primeA, d.prime0=0, ncat = 4, sample.size, nsim = 1e3, alpha = 0.05, method.tau=c("LR.max", "equi.prob", "se.min", "user.defined"), statistic=c("likelihood", "Wilcoxon", "Pearson", "Wald"), alternative = c("difference", "similarity", "two.sided", "less", "greater"), tau=NULL, ...) ```

## Arguments

 `d.primeA` the value of d-prime under the alternative hypothesis; non-negative numerical scalar. `d.prime0` the value of d-prime under the null hypothesis. `ncat` the number of response categories in the DOD model `sample.size` the sample size in each simulation for each of the same-pairs and different pairs. Can be a single scalar value or a 2-vector. `nsim` the number of simulations. `alpha` the significance level. `method.tau` the method with which to choose the boundary parameters - see `dodSim` for details on the methods. `statistic` the statistic to be used for hypothesis testing. `alternative` the nature of the alternative hypothesis in the hypothesis/significance test for d-prime. Note that `"greater"` is an alias for `"difference"` and `"less"` is an alias for `"similarity"`. `tau` if `method.tau = "user.defined"` a vector of boundary parameters in the DOD model, otherwise not used. `...` parsed on to `wilcox.test` when appropriate.

## Value

The simulation based estimate of the power with the following attributes:

 `se(power)` the estimated standard error of the estimated power. This is based on the formula `sqrt(pow * (1 - pow) / n)`, where `pow` is the estimated power and `n` is the number of simulations used to estimate the power. `n.used` the number of simulations used to estimate the power. This is usually equal to nsim, but can sometimes be smaller than nsim due to non-convergences to which the Wald test is especially prone.

## Author(s)

Rune Haubo B Christensen

## References

Ennis, J.M. and R.H.B. Christensen (2014) A Thurstonian comparison of the tetrad and degree of difference tests. Food Quality and Preference, in press.

`dod`, `dod_fit`, `dodSim`, `optimal_tau`, `dodControl`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71``` ```## NOTE: The number of simulations (nsim) is set unrealistically low in ## the examples below to reduce the computation time for automatic ## package checks. nsim between 1e3 and 1e4 is usually sufficient and ## the latter often on the safe side. The standard error of the ## estimated power ('se(power)') reported by dodPwr() measures the ## accuracy of the estimated power and indicates if nsim needs to be ## increased. ## Estimate power of the conventional difference test (no-difference ## under the null hypothesis): set.seed(125) dodPwr(d.primeA=1, d.prime0=0, ncat=4, sample.size=100, nsim=50, alpha=.05, method.tau="LR.max", statistic="likelihood") ##  0.62 ## attr(,"se(power)") ##  0.1825346 ## attr(,"n.used") ##  50 ## Here the boundary parameters are chosen automatically so as to ## maximize the likelihood ratio test statistic, and so this setting ## amounts to a highest achievable power scenario given d-prime = 1. ## Using another (and faster) statistic: dodPwr(d.primeA=1, d.prime0=0, ncat=4, sample.size=100, nsim=1e3, alpha=.05, method.tau="LR.max", statistic="Wilcox") ## Not run: ## Not automatically run to reduce computation time. ## Power of a similarity test: set.seed(127) dodPwr(d.primeA=0, d.prime0=1, ncat=4, sample.size=100, nsim=1e2, alpha=.05, method.tau="LR.max", statistic="Pearson", alternative="similarity") ##  0.71 ## attr(,"se(power)") ##  0.1434922 ## attr(,"n.used") ##  100 ## Same as above, but with a given set of boundary parameters: dodPwr(d.primeA=0, d.prime0=1, sample.size=100, nsim=1e2, alpha=.05, method.tau="user.defined", statistic="Pearson", alternative="similarity", tau=1:3) ## Using parallel computing to speed up computations: if(require(parallel)) { ## Use detectCores() to get an appropriate number of cores for ## practical use - for the example here we fix it at 2: ## cl <- makeCluster(detectCores()) cl <- makeCluster(getOption("cl.cores", 2)) dvec <- c(0, .2, .5, .7, 1, 1.2, 1.5, 1.75) system.time( res <- parLapply(cl, dvec, fun=function(dp) { library(sensR) x <- dodPwr(dp, 0, sample.size=100, nsim=1e4, stat="Wil") c("power"=x, "se"=attr(x, "se(power)")) }) ) stopCluster(cl) names(res) <- dvec mat <- do.call(cbind, res) round(mat[1:2, ], 3) ## Example output: ## 0 0.2 0.5 0.7 1 1.5 1.75 2 ## power 0.051 0.058 0.123 0.238 0.578 0.983 1.000 1.000 ## se 0.022 0.023 0.033 0.043 0.049 0.013 0.002 0.001 } ## End(Not run) ## Realistically one should use more simulations, e.g. nsim=1e4. ```