# This file is automatically generated, you probably don't want to edit this
sdtOptions <- if (requireNamespace('jmvcore')) R6::R6Class(
"sdtOptions",
inherit = jmvcore::Options,
public = list(
initialize = function(
stim = NULL,
sig = NULL,
res = NULL,
subj = NULL,
group = NULL,
ci = FALSE,
ciWidth = 95,
summary = FALSE,
nSamples = 1000,
nChains = 1,
nBurnin = 0,
nThin = 1, ...) {
super$initialize(
package='resWagner',
name='sdt',
requiresData=TRUE,
...)
private$..stim <- jmvcore::OptionVariable$new(
"stim",
stim,
suggested=list(
"nominal"),
permitted=list(
"factor"))
private$..sig <- jmvcore::OptionLevel$new(
"sig",
sig,
variable="(stim)")
private$..res <- jmvcore::OptionVariable$new(
"res",
res,
suggested=list(
"nominal"),
permitted=list(
"factor"))
private$..subj <- jmvcore::OptionVariable$new(
"subj",
subj,
default=NULL,
suggested=list(
"nominal"),
permitted=list(
"factor"))
private$..group <- jmvcore::OptionVariable$new(
"group",
group,
default=NULL,
suggested=list(
"nominal"),
permitted=list(
"factor"))
private$..ci <- jmvcore::OptionBool$new(
"ci",
ci,
default=FALSE)
private$..ciWidth <- jmvcore::OptionNumber$new(
"ciWidth",
ciWidth,
min=50,
max=99.9,
default=95)
private$..summary <- jmvcore::OptionBool$new(
"summary",
summary,
default=FALSE)
private$..nSamples <- jmvcore::OptionNumber$new(
"nSamples",
nSamples,
min=1,
max=1000000,
default=1000)
private$..nChains <- jmvcore::OptionNumber$new(
"nChains",
nChains,
min=1,
max=10,
default=1)
private$..nBurnin <- jmvcore::OptionNumber$new(
"nBurnin",
nBurnin,
min=0,
max=1000000,
default=0)
private$..nThin <- jmvcore::OptionNumber$new(
"nThin",
nThin,
min=1,
max=100,
default=1)
self$.addOption(private$..stim)
self$.addOption(private$..sig)
self$.addOption(private$..res)
self$.addOption(private$..subj)
self$.addOption(private$..group)
self$.addOption(private$..ci)
self$.addOption(private$..ciWidth)
self$.addOption(private$..summary)
self$.addOption(private$..nSamples)
self$.addOption(private$..nChains)
self$.addOption(private$..nBurnin)
self$.addOption(private$..nThin)
}),
active = list(
stim = function() private$..stim$value,
sig = function() private$..sig$value,
res = function() private$..res$value,
subj = function() private$..subj$value,
group = function() private$..group$value,
ci = function() private$..ci$value,
ciWidth = function() private$..ciWidth$value,
summary = function() private$..summary$value,
nSamples = function() private$..nSamples$value,
nChains = function() private$..nChains$value,
nBurnin = function() private$..nBurnin$value,
nThin = function() private$..nThin$value),
private = list(
..stim = NA,
..sig = NA,
..res = NA,
..subj = NA,
..group = NA,
..ci = NA,
..ciWidth = NA,
..summary = NA,
..nSamples = NA,
..nChains = NA,
..nBurnin = NA,
..nThin = NA)
)
sdtResults <- if (requireNamespace('jmvcore')) R6::R6Class(
inherit = jmvcore::Group,
active = list(
sdtGroup = function() private$.items[["sdtGroup"]],
sdtSubj = function() private$.items[["sdtSubj"]],
dPrimePlot = function() private$.items[["dPrimePlot"]],
cPlot = function() private$.items[["cPlot"]]),
private = list(),
public=list(
initialize=function(options) {
super$initialize(
options=options,
name="",
title="Signal Detection Theory")
self$add(jmvcore::Table$new(
options=options,
name="sdtGroup",
title="SDT Group Parameters",
rows="(levels(group))",
clearWith=list(
"stim",
"sig",
"res",
"subj",
"group",
"nSamples",
"nChains",
"nBurnin",
"nThin"),
columns=list(
list(
`name`="group",
`title`="Group",
`type`="text",
`content`="($key)"),
list(
`name`="dPrime",
`title`="d'",
`type`="number"),
list(
`name`="dPrimeLower",
`title`="Lower",
`type`="number",
`visible`="(ci)"),
list(
`name`="dPrimeUpper",
`title`="Upper",
`type`="number",
`visible`="(ci)"),
list(
`name`="c",
`title`="Criterion",
`type`="number"),
list(
`name`="cLower",
`title`="Lower",
`type`="number",
`visible`="(ci)"),
list(
`name`="cUpper",
`title`="Upper",
`type`="number",
`visible`="(ci)"))))
self$add(jmvcore::Table$new(
options=options,
name="sdtSubj",
title="SDT Subject Parameters",
clearWith=list(
"stim",
"sig",
"res",
"subj",
"group",
"nSamples",
"nChains",
"nBurnin",
"nThin"),
rows="(levels(subj))",
columns=list(
list(
`name`="group",
`title`="Group",
`type`="text",
`visible`="(group)",
`combineBelow`=TRUE),
list(
`name`="subj",
`title`="Subject",
`type`="text",
`visible`="(subj)",
`content`="($key)"),
list(
`name`="dPrime",
`title`="d'",
`type`="number"),
list(
`name`="dPrimeLower",
`title`="Lower",
`type`="number",
`visible`="(ci)"),
list(
`name`="dPrimeUpper",
`title`="Upper",
`type`="number",
`visible`="(ci)"),
list(
`name`="c",
`title`="Criterion",
`type`="number"),
list(
`name`="cLower",
`title`="Lower",
`type`="number",
`visible`="(ci)"),
list(
`name`="cUpper",
`title`="Upper",
`type`="number",
`visible`="(ci)"),
list(
`name`="h",
`title`="Hit",
`type`="integer",
`visible`="(summary)"),
list(
`name`="m",
`title`="Miss",
`type`="integer",
`visible`="(summary)"),
list(
`name`="cr",
`title`="Correct Rejection",
`type`="integer",
`visible`="(summary)"),
list(
`name`="fa",
`title`="False Alarm",
`type`="integer",
`visible`="(summary)"))))
self$add(jmvcore::Image$new(
options=options,
name="dPrimePlot",
title="dPrime",
renderFun=".dPrimePlot",
clearWith=list(
"stim",
"sig",
"res",
"subj",
"group",
"nSamples",
"nChains",
"nBurnin",
"nThin")))
self$add(jmvcore::Image$new(
options=options,
name="cPlot",
title="Criterion",
renderFun=".cPlot",
clearWith=list(
"stim",
"sig",
"res",
"subj",
"group",
"nSamples",
"nChains",
"nBurnin",
"nThin")))}))
sdtBase <- if (requireNamespace('jmvcore')) R6::R6Class(
"sdtBase",
inherit = jmvcore::Analysis,
public = list(
initialize = function(options, data=NULL, datasetId="", analysisId="", revision=0) {
super$initialize(
package = 'resWagner',
name = 'sdt',
version = c(1,0,0),
options = options,
results = sdtResults$new(options=options),
data = data,
datasetId = datasetId,
analysisId = analysisId,
revision = revision,
pause = NULL,
completeWhenFilled = FALSE)
}))
#' Signal Detection Theory
#'
#'
#' @param data .
#' @param stim .
#' @param sig .
#' @param res .
#' @param subj .
#' @param group .
#' @param ci \code{TRUE} or \code{FALSE} (default), provide a credible
#' interval for the model parameters
#' @param ciWidth a number between 50 and 99.9 (default: 95) specifying the
#' credible interval width that is used as \code{'ci'}
#' @param summary .
#' @param nSamples a number between 1 and 1000000 (default: 1000) specifying
#' the number of samples that need to be drawn from the posterior distribution
#' @param nChains a number between 1 and 10 (default: 3) specifying the number
#' of MCMC chains that need to be drawn from the posterior distribution
#' @param nBurnin a number between 1 and 1000000 (default: 1000) specifying
#' the number of burn-in samples that need to be drawn
#' @param nThin a number between 1 and 100 (default: 1) save the nth number of
#' each chain
#' @return A results object containing:
#' \tabular{llllll}{
#' \code{results$sdtGroup} \tab \tab \tab \tab \tab a table \cr
#' \code{results$sdtSubj} \tab \tab \tab \tab \tab a table \cr
#' \code{results$dPrimePlot} \tab \tab \tab \tab \tab plot of the d' parameter \cr
#' \code{results$cPlot} \tab \tab \tab \tab \tab plot of the criterion parameter \cr
#' }
#'
#' Tables can be converted to data frames with \code{asDF} or \code{\link{as.data.frame}}. For example:
#'
#' \code{results$sdtGroup$asDF}
#'
#' \code{as.data.frame(results$sdtGroup)}
#'
#' @export
sdt <- function(
data,
stim,
sig,
res,
subj = NULL,
group = NULL,
ci = FALSE,
ciWidth = 95,
summary = FALSE,
nSamples = 1000,
nChains = 1,
nBurnin = 0,
nThin = 1) {
if ( ! requireNamespace('jmvcore'))
stop('sdt requires jmvcore to be installed (restart may be required)')
options <- sdtOptions$new(
stim = stim,
sig = sig,
res = res,
subj = subj,
group = group,
ci = ci,
ciWidth = ciWidth,
summary = summary,
nSamples = nSamples,
nChains = nChains,
nBurnin = nBurnin,
nThin = nThin)
results <- sdtResults$new(
options = options)
analysis <- sdtClass$new(
options = options,
data = data)
analysis$run()
analysis$results
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.