From d44dce6cd41ed8d5aa1385d1652355beace9a171 Mon Sep 17 00:00:00 2001 From: Johnny Date: Mon, 2 Nov 2026 21:10:40 +0100 Subject: [PATCH 1/9] feat: add residual plots per dependent variable Adds "Residuals vs. predicted" and "Q-Q plot standardized residuals" to each model in the classical and Bayesian Process analysis, with a "Set for All Models" default under Advanced. The plots are shown for every dependent variable of a model (the outcome and each mediator), so users can check the homoscedasticity and normality assumptions of each regression equation without refitting it in Linear Regression. Predicted values are computed from the parameter table, because lavPredict(type = "yhat") returns the observed values for models without latent variables. Standardized residuals use the estimated residual variance; Bayesian models use the posterior means. Co-Authored-By: Claude Opus 5.5 --- NEWS.md | 3 + R/bayesianProcess.R | 2 + R/classicProcess.R | 141 +++++++++++++ inst/help/BayesianProcess.md | 3 + inst/help/ClassicProcess.md | 3 + inst/qml/BayesianProcess.qml | 23 +++ inst/qml/ClassicProcess.qml | 23 +++ inst/qml/common/ResidualPlots.qml | 43 ++++ .../residuals-qq-plot-contnormal.svg | 174 ++++++++++++++++ .../residuals-vs-predicted-contnormal.svg | 168 ++++++++++++++++ tests/testthat/generate-tests-helper.R | 6 + tests/testthat/helper-process-integration.R | 2 +- .../test-bayesian-process-integration.R | 32 +-- ...ess-hayes-models-with-bad-variable-names.R | 32 +-- ...lassic-process-integration-custom-models.R | 36 ++-- ...test-classic-process-integration-general.R | 29 +++ ...classic-process-integration-hayes-models.R | 188 +++++++++--------- tests/testthat/test-classic-process-unit.R | 22 ++ 18 files changed, 785 insertions(+), 145 deletions(-) create mode 100644 inst/qml/common/ResidualPlots.qml create mode 100644 tests/testthat/_snaps/classic-process-integration-general/residuals-qq-plot-contnormal.svg create mode 100644 tests/testthat/_snaps/classic-process-integration-general/residuals-vs-predicted-contnormal.svg diff --git a/NEWS.md b/NEWS.md index 6e707bfb..3c2b0445 100644 --- a/NEWS.md +++ b/NEWS.md @@ -16,6 +16,9 @@ # jaspProcess (development version) +## Added +* Residual plots for each model (`Residuals vs. predicted` and `Q-Q plot standardized residuals`), shown for every dependent variable (the outcome and each mediator), to check the homoscedasticity and normality assumptions of the regression equations. Available in the classical and Bayesian analysis, per model or for all models at once. + ## Fixed * Process models with a categorical predictor no longer error when a factor level label contains a space or other special character (e.g. "emotion regulation"). Such labels are now coerced to syntactically valid names before being used in mean-centering and lavaan model syntax ([Issue #3597](https://github.com/jasp-stats/jasp-issues/issues/3597)). diff --git a/R/bayesianProcess.R b/R/bayesianProcess.R index a4633ab3..e080671a 100644 --- a/R/bayesianProcess.R +++ b/R/bayesianProcess.R @@ -64,6 +64,8 @@ BayesianProcess <- function(jaspResults, dataset = NULL, options) { .procBayesParameterEstimateTables(parEstContainer, options, modelsContainer) .procBayesMcmcPlots(jaspResults, options, modelsContainer) + # Create residual plots for each dependent variable of each model if requested + .procResidualPlots(jaspResults, options, modelsContainer) # Create html output with lavaan syntax for each model .procPlotSyntax(jaspResults, options, modelsContainer) diff --git a/R/classicProcess.R b/R/classicProcess.R index 3d85954b..b348e3ef 100644 --- a/R/classicProcess.R +++ b/R/classicProcess.R @@ -70,6 +70,8 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { localTestContainer <- .procContainerLocalTests(jaspResults, options) # Create tables with local test results .procLocalTestTables(localTestContainer, dataset, options, modelsContainer) + # Create residual plots for each dependent variable of each model if requested + .procResidualPlots(jaspResults, options, modelsContainer) # Create html output with lavaan syntax for each model .procPlotSyntax(jaspResults, options, modelsContainer) } @@ -2756,6 +2758,145 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { procPathPlot$plotObject <- .procLavToGraph(modelContainer, type = "statistical", estimates = options[["statisticalPathPlotsParameterEstimates"]], options) } +# Residual plots ---- +.procContainerResidualPlots <- function(jaspResults, options) { + if (!is.null(jaspResults[["residualPlotContainer"]])) + return(jaspResults[["residualPlotContainer"]]) + + residualPlotContainer <- createJaspContainer(gettext("Residual plots")) + residualPlotContainer$dependOn(.procGetDependencies()) + + jaspResults[["residualPlotContainer"]] <- residualPlotContainer + + return(residualPlotContainer) +} + +.procResidualPlots <- function(jaspResults, options, modelsContainer) { + showPlots <- sapply(options[["processModels"]], function(mod) mod[["residualVsFittedPlot"]] || mod[["residualQqPlot"]]) + + if (!any(showPlots)) return() + + container <- .procContainerResidualPlots(jaspResults, options) + + for (i in which(showPlots)) { + modelName <- options[["processModels"]][[i]][["name"]] + + # Models that cannot be fitted yet (e.g., incomplete Hayes configurations) have no residuals + if (!.procCheckFitModel(modelsContainer[[modelName]][["graph"]]$object)) next + + if (is.null(container[[modelName]])) { + modelContainer <- createJaspContainer(title = modelName) + modelContainer$dependOn( + nestedOptions = .procGetSingleModelsDependencies(as.character(i)) + ) + container[[modelName]] <- modelContainer + } else { + modelContainer <- container[[modelName]] + } + + fittedModel <- modelsContainer[[modelName]][["fittedModel"]]$object + .procSetContainerError(modelContainer, fittedModel) + + if (modelContainer$getError()) next + + residuals <- try(.procResiduals(fittedModel)) + + if (jaspBase::isTryError(residuals)) { + modelContainer$setError(jaspBase::.extractErrorMessage(residuals)) + next + } + + for (j in seq_along(residuals)) { + .procResidualPlotsSingleVariable(modelContainer, options, residuals[[j]], names(residuals)[j], j, i) + } + } +} + +.procResiduals <- function(fittedModel) { + # Residuals of the regression equation of each dependent variable (outcome and mediators): + # observed values minus the values predicted by the path coefficients + parTbl <- lavaan::parameterTable(fittedModel) + data <- lavaan::lavInspect(fittedModel, "data") + regs <- parTbl[parTbl$op == "~", ] + + residuals <- lapply(unique(regs$lhs), function(dep) { + reg <- regs[regs$lhs == dep, ] + preds <- data[, reg$rhs, drop = FALSE] + intercept <- parTbl$est[parTbl$lhs == dep & parTbl$op == "~1"] + + # Without a mean structure the intercepts are implied by the sample means + if (length(intercept) == 0) + intercept <- mean(data[, dep], na.rm = TRUE) - sum(reg$est * colMeans(preds, na.rm = TRUE)) + + predicted <- drop(intercept + preds %*% reg$est) + residual <- data[, dep] - predicted + resVar <- parTbl$est[parTbl$lhs == dep & parTbl$op == "~~" & parTbl$rhs == dep] + complete <- !is.na(residual) + + return(data.frame( + predicted = predicted[complete], + residual = residual[complete], + standardized = residual[complete] / sqrt(resVar) + )) + }) + names(residuals) <- unique(regs$lhs) + + return(residuals) +} + +.procResidualPlotsSingleVariable <- function(container, options, residuals, varName, varIdx, modelIdx) { + varKey <- paste0("variable", varIdx) + + if (is.null(container[[varKey]])) { + varContainer <- createJaspContainer(title = decodeColNames(varName)) + varContainer$position <- varIdx + container[[varKey]] <- varContainer + } else { + varContainer <- container[[varKey]] + } + + modelOptions <- options[["processModels"]][[modelIdx]] + + if (modelOptions[["residualVsFittedPlot"]] && is.null(varContainer[["residualVsFittedPlot"]])) { + residualPlot <- createJaspPlot(title = gettext("Residuals vs. Predicted"), width = 530, height = 400) + residualPlot$dependOn(nestedOptions = list(c("processModels", as.character(modelIdx), "residualVsFittedPlot"))) + residualPlot$position <- 1 + varContainer[["residualVsFittedPlot"]] <- residualPlot + + residualPlot$plotObject <- .procResidualVsFittedPlot(residuals) + } + + if (modelOptions[["residualQqPlot"]] && is.null(varContainer[["residualQqPlot"]])) { + qqPlot <- createJaspPlot(title = gettext("Q-Q Plot Standardized Residuals"), width = 400, height = 400) + qqPlot$dependOn(nestedOptions = list(c("processModels", as.character(modelIdx), "residualQqPlot"))) + qqPlot$position <- 2 + varContainer[["residualQqPlot"]] <- qqPlot + + qqPlot$plotObject <- jaspGraphs::plotQQnorm( + residuals[["standardized"]], + yName = gettext("Standardized residuals"), + ablineColor = "darkred", + ablineOrigin = TRUE, + identicalAxes = TRUE + ) + } +} + +.procResidualVsFittedPlot <- function(residuals) { + xBreaks <- jaspGraphs::getPrettyAxisBreaks(residuals[["predicted"]]) + yBreaks <- jaspGraphs::getPrettyAxisBreaks(c(residuals[["residual"]], 0)) + + plotObj <- ggplot2::ggplot(residuals, ggplot2::aes(x = predicted, y = residual)) + + ggplot2::geom_hline(yintercept = 0, colour = "darkred") + + jaspGraphs::geom_point() + + ggplot2::scale_x_continuous(name = gettext("Predicted Values"), breaks = xBreaks, limits = range(xBreaks)) + + ggplot2::scale_y_continuous(name = gettext("Residuals"), breaks = yBreaks, limits = range(yBreaks)) + + jaspGraphs::geom_rangeframe() + + jaspGraphs::themeJaspRaw() + + return(plotObj) +} + .procMainGraphLayoutPosHelper <- function(nodes) { # This function positions nodes alternatingly above and below zero with increasing distance nUniqueNodes <- length(unique(nodes)) diff --git a/inst/help/BayesianProcess.md b/inst/help/BayesianProcess.md index 1905c98c..3f100de7 100644 --- a/inst/help/BayesianProcess.md +++ b/inst/help/BayesianProcess.md @@ -64,6 +64,9 @@ This section allows users to specify multiple process models through one of two - Path plots: Displays path plots in the output. - Conceptual: Shows a conceptual path plot. These plots contain no parameter labels or estimates and simplify moderation effects in the model structure by omitting direct effects and interactions. Instead moderators point to the path they are moderating. These plots can be shown even when the model is not complete yet (when `Input type` is `Model number`) and are easier to understand than the statistical path plots. - Statistical: Shows a statistical path plot including parameter labels or estimates for all paths. +- Residual plots: Displays residual plots for each dependent variable in the model (the outcome and each mediator), to check the assumptions of its regression equation. The predicted values are based on the posterior means of the parameters. + - Residuals vs. predicted: Scatterplot of the residuals against the predicted values. If the variance of the residuals is constant (homoscedasticity), the residuals scatter evenly around zero across the predicted values. + - Q-Q plot standardized residuals: Q-Q plot of the residuals divided by their estimated standard deviation. If the residuals are normally distributed, the points lie close to the diagonal. #### Options diff --git a/inst/help/ClassicProcess.md b/inst/help/ClassicProcess.md index df24c125..54d25c3f 100644 --- a/inst/help/ClassicProcess.md +++ b/inst/help/ClassicProcess.md @@ -67,6 +67,9 @@ This section allows users to specify multiple process models through one of two - Path plots: Displays path plots in the output. - Conceptual: Shows a conceptual path plot. These plots contain no parameter labels or estimates and simplify moderation effects in the model structure by omitting direct effects and interactions. Instead moderators point to the path they are moderating. These plots can be shown even when the model is not complete yet (when `Input type` is `Model number`) and are easier to understand than the statistical path plots. - Statistical: Shows a statistical path plot including parameter labels or estimates for all paths. +- Residual plots: Displays residual plots for each dependent variable in the model (the outcome and each mediator), to check the assumptions of its regression equation. + - Residuals vs. predicted: Scatterplot of the residuals against the predicted values. If the variance of the residuals is constant (homoscedasticity), the residuals scatter evenly around zero across the predicted values. + - Q-Q plot standardized residuals: Q-Q plot of the residuals divided by their estimated standard deviation. If the residuals are normally distributed, the points lie close to the diagonal. - Tests: - Local tests: Test the local implications of the specified causal model. Conducts (conditional) independence tests for each implication of the model. Significant independence tests indicate that the model does not correctly account for the local implication (*local misfit*) and is misspecified. - Test type: Type of the local test. For tetrads test types, see Kenny (1979). diff --git a/inst/qml/BayesianProcess.qml b/inst/qml/BayesianProcess.qml index b7dfe8e4..994c17dd 100644 --- a/inst/qml/BayesianProcess.qml +++ b/inst/qml/BayesianProcess.qml @@ -88,6 +88,12 @@ Form conceptualPathPlotsChecked: conceptualPathPlotsForAllModels.checked statisticalPathPlotsChecked: statisticalPathPlotsForAllModels.checked } + + Common.ResidualPlots + { + residualVsFittedPlotChecked: residualVsFittedPlotForAllModels.checked + residualQqPlotChecked: residualQqPlotForAllModels.checked + } } } } @@ -341,6 +347,23 @@ Form label: qsTr("Statistical") } } + + Group + { + title: qsTr("Residual Plots") + CheckBox + { + id: residualVsFittedPlotForAllModels + name: "residualVsFittedPlotForAllModels" + label: qsTr("Residuals vs. predicted") + } + CheckBox + { + id: residualQqPlotForAllModels + name: "residualQqPlotForAllModels" + label: qsTr("Q-Q plot standardized residuals") + } + } } Group diff --git a/inst/qml/ClassicProcess.qml b/inst/qml/ClassicProcess.qml index 5c718983..2dda4fe2 100644 --- a/inst/qml/ClassicProcess.qml +++ b/inst/qml/ClassicProcess.qml @@ -140,6 +140,12 @@ Form conceptualPathPlotsChecked: conceptualPathPlotsForAllModels.checked statisticalPathPlotsChecked: statisticalPathPlotsForAllModels.checked } + + Common.ResidualPlots + { + residualVsFittedPlotChecked: residualVsFittedPlotForAllModels.checked + residualQqPlotChecked: residualQqPlotForAllModels.checked + } } } } @@ -326,6 +332,23 @@ Form } } + Group + { + title: qsTr("Residual Plots") + CheckBox + { + id: residualVsFittedPlotForAllModels + name: "residualVsFittedPlotForAllModels" + label: qsTr("Residuals vs. predicted") + } + CheckBox + { + id: residualQqPlotForAllModels + name: "residualQqPlotForAllModels" + label: qsTr("Q-Q plot standardized residuals") + } + } + Group { title: qsTr("Tests") diff --git a/inst/qml/common/ResidualPlots.qml b/inst/qml/common/ResidualPlots.qml new file mode 100644 index 00000000..4e861a48 --- /dev/null +++ b/inst/qml/common/ResidualPlots.qml @@ -0,0 +1,43 @@ +// +// Copyright (C) 2026 University of Amsterdam +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public +// License along with this program. If not, see +// . +// +import QtQuick +import JASP +import JASP.Controls + +Group +{ + property bool residualVsFittedPlotChecked: false + property bool residualQqPlotChecked: false + + title: qsTr("Residual Plots") + columns: 1 + CheckBox + { + name: "residualVsFittedPlot" + label: qsTr("Residuals vs. predicted") + checked: residualVsFittedPlotChecked + info: qsTr("For each dependent variable (the outcome and each mediator), a scatterplot of the residuals against the predicted values. Under constant residual variance (homoscedasticity), the residuals scatter evenly around zero.") + } + CheckBox + { + name: "residualQqPlot" + label: qsTr("Q-Q plot standardized residuals") + checked: residualQqPlotChecked + info: qsTr("For each dependent variable (the outcome and each mediator), a Q-Q plot of the standardized residuals. If the residuals are normally distributed, the points lie close to the diagonal.") + } +} diff --git a/tests/testthat/_snaps/classic-process-integration-general/residuals-qq-plot-contnormal.svg b/tests/testthat/_snaps/classic-process-integration-general/residuals-qq-plot-contnormal.svg new file mode 100644 index 00000000..1cdc65b5 --- /dev/null +++ b/tests/testthat/_snaps/classic-process-integration-general/residuals-qq-plot-contnormal.svg @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +-3 +-2 +-1 +0 +1 +2 +3 +4 + + + + + + + + + + + + + + + + + +-3 +-2 +-1 +0 +1 +2 +3 +4 +Theoretical quantiles +Standardized residuals +residuals-qq-plot-contNormal + + diff --git a/tests/testthat/_snaps/classic-process-integration-general/residuals-vs-predicted-contnormal.svg b/tests/testthat/_snaps/classic-process-integration-general/residuals-vs-predicted-contnormal.svg new file mode 100644 index 00000000..edcd1efd --- /dev/null +++ b/tests/testthat/_snaps/classic-process-integration-general/residuals-vs-predicted-contnormal.svg @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +-3 +-2 +-1 +0 +1 +2 +3 +4 + + + + + + + + + + + + + + +-0.6 +-0.4 +-0.2 +0.0 +0.2 +Predicted Values +Residuals +residuals-vs-predicted-contNormal + + diff --git a/tests/testthat/generate-tests-helper.R b/tests/testthat/generate-tests-helper.R index 899626b5..ab4e9ec2 100644 --- a/tests/testthat/generate-tests-helper.R +++ b/tests/testthat/generate-tests-helper.R @@ -26,6 +26,8 @@ getOptionsOneModel <- function() { "processRelationships" = list(), "residualCovariances" = TRUE, "statisticalPathPlot" = TRUE, + "residualVsFittedPlot" = FALSE, + "residualQqPlot" = FALSE, "totalEffects" = TRUE, "localTests" = FALSE, "localTestType" = "cis", @@ -191,6 +193,8 @@ getOptionsOneModelBadVarNames <- function(k, parms) { "processRelationships" = list(), "residualCovariances" = TRUE, "statisticalPathPlot" = TRUE, + "residualVsFittedPlot" = FALSE, + "residualQqPlot" = FALSE, "totalEffects" = TRUE, "localTests" = FALSE, "localTestType" = "cis", @@ -266,6 +270,8 @@ getOptionsOneModelBayes <- function() { "processRelationships" = list(), "residualCovariances" = TRUE, "statisticalPathPlot" = TRUE, + "residualVsFittedPlot" = FALSE, + "residualQqPlot" = FALSE, "totalEffects" = TRUE ) ) diff --git a/tests/testthat/helper-process-integration.R b/tests/testthat/helper-process-integration.R index 98c2e1d9..b050e8ef 100644 --- a/tests/testthat/helper-process-integration.R +++ b/tests/testthat/helper-process-integration.R @@ -126,7 +126,7 @@ getProcessModel <- function(processRelationships, name = "Model 1") { modelNumberIndependent = list(value = ""), modelNumberMediators = list(value = c()), modelNumberModeratorW = list(value = ""), modelNumberModeratorZ = list(value = ""), name = name, pathCoefficients = TRUE, intercepts = FALSE, processRelationships = processRelationships, - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) } diff --git a/tests/testthat/test-bayesian-process-integration.R b/tests/testthat/test-bayesian-process-integration.R index 08a33d7e..f6da78e7 100644 --- a/tests/testthat/test-bayesian-process-integration.R +++ b/tests/testthat/test-bayesian-process-integration.R @@ -46,7 +46,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria pathCoefficients = TRUE, intercepts = FALSE, processRelationships = list( list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -176,7 +176,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria pathCoefficients = TRUE, intercepts = FALSE, processRelationships = list( list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -305,7 +305,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -496,7 +496,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -676,7 +676,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contcor1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -909,7 +909,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "facExperim", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -1133,7 +1133,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "mediators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -1264,7 +1264,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "mediators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -1401,7 +1401,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -1672,7 +1672,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -1913,7 +1913,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -2203,7 +2203,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -2466,7 +2466,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "debMiss1", processType = "mediators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -2646,7 +2646,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "debMiss1", processType = "mediators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -2833,7 +2833,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contcor2", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) @@ -3083,7 +3083,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "contcor2", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE)) + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE)) set.seed(1) results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) diff --git a/tests/testthat/test-classic-process-hayes-models-with-bad-variable-names.R b/tests/testthat/test-classic-process-hayes-models-with-bad-variable-names.R index 420b1739..b8199df3 100644 --- a/tests/testthat/test-classic-process-hayes-models-with-bad-variable-names.R +++ b/tests/testthat/test-classic-process-hayes-models-with-bad-variable-names.R @@ -37,7 +37,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria pathCoefficients = TRUE, intercepts = FALSE, processRelationships = list( list(processDependent = "M", processIndependent = "W", processType = "moderators", processVariable = "Y")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -167,7 +167,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria pathCoefficients = TRUE, intercepts = FALSE, processRelationships = list( list(processDependent = "M", processIndependent = "s", processType = "moderators", processVariable = "med")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -295,7 +295,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "Y"), list(processDependent = "M", processIndependent = "W", processType = "moderators", processVariable = "Z")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -482,7 +482,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "med"), list(processDependent = "M", processIndependent = "s", processType = "moderators", processVariable = "Z")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -657,7 +657,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "Y"), list(processDependent = "M", processIndependent = "Y", processType = "moderators", processVariable = "Z")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -873,7 +873,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "med"), list(processDependent = "M", processIndependent = "med", processType = "moderators", processVariable = "Z")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1084,7 +1084,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "jasp"), list(processDependent = "M", processIndependent = "W", processType = "mediators", processVariable = "Z")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1215,7 +1215,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "jasp"), list(processDependent = "M", processIndependent = "s", processType = "mediators", processVariable = "Z")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1353,7 +1353,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "Z"), list(processDependent = "M", processIndependent = "W", processType = "moderators", processVariable = "Z")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1616,7 +1616,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "Z"), list(processDependent = "M", processIndependent = "s", processType = "moderators", processVariable = "Z")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1852,7 +1852,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "Z"), list(processDependent = "M", processIndependent = "W", processType = "moderators", processVariable = "Z")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -2130,7 +2130,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "Z"), list(processDependent = "M", processIndependent = "s", processType = "moderators", processVariable = "Z")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -2383,7 +2383,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "Z"), list(processDependent = "M", processIndependent = "mod", processType = "mediators", processVariable = "Y")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -2560,7 +2560,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "Z"), list(processDependent = "M", processIndependent = "mod", processType = "mediators", processVariable = "Y")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -2743,7 +2743,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "Y"), list(processDependent = "M", processIndependent = "Z", processType = "moderators", processVariable = "Y")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -2982,7 +2982,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "med"), list(processDependent = "M", processIndependent = "Z", processType = "moderators", processVariable = "med")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) diff --git a/tests/testthat/test-classic-process-integration-custom-models.R b/tests/testthat/test-classic-process-integration-custom-models.R index d75abbbd..26cdd1c8 100644 --- a/tests/testthat/test-classic-process-integration-custom-models.R +++ b/tests/testthat/test-classic-process-integration-custom-models.R @@ -36,7 +36,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria pathCoefficients = TRUE, intercepts = FALSE, processRelationships = list( list(processDependent = "contNormal", processIndependent = "contGamma", processType = "confounders", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -151,7 +151,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria pathCoefficients = TRUE, intercepts = FALSE, processRelationships = list( list(processDependent = "contNormal", processIndependent = "contGamma", processType = "confounders", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -270,7 +270,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria pathCoefficients = TRUE, intercepts = FALSE, processRelationships = list( list(processDependent = "contNormal", processIndependent = "contGamma", processType = "directs", processVariable = "")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -371,7 +371,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria pathCoefficients = TRUE, intercepts = FALSE, processRelationships = list( list(processDependent = "contNormal", processIndependent = "contGamma", processType = "directs", processVariable = "")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -474,7 +474,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "confounders", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "confounders", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -613,7 +613,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "confounders", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "confounders", processVariable = "facGender")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -755,7 +755,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "confounders", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -884,7 +884,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "confounders", processVariable = "facGender")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1013,7 +1013,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "debCollin1", processIndependent = "contGamma", processType = "confounders", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1143,7 +1143,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "debCollin1", processIndependent = "contGamma", processType = "confounders", processVariable = "facGender")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1275,7 +1275,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "confounders", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1414,7 +1414,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "confounders", processVariable = "facGender")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1553,7 +1553,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "confounders", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1710,7 +1710,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "confounders", processVariable = "facGender")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1861,7 +1861,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "contcor1", processType = "moderators", processVariable = "debCollin1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -2001,7 +2001,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "facExperim", processType = "moderators", processVariable = "debCollin1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -2145,7 +2145,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -2291,7 +2291,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) diff --git a/tests/testthat/test-classic-process-integration-general.R b/tests/testthat/test-classic-process-integration-general.R index 407c6a1a..038eae37 100644 --- a/tests/testthat/test-classic-process-integration-general.R +++ b/tests/testthat/test-classic-process-integration-general.R @@ -1593,3 +1593,32 @@ test_that("Moderated mediation index works - three-level factor independent", { "contcor1", "contNormal", "", "", 0.862779808586041, 0.0556237127253498, -0.172836674711031)) }) + + +test_that("Residual plots work", { + options <- getOptionsClassical() + options$dependent <- "contNormal" + options$covariates <- list("contGamma", "contcor1") + options$factors <- list() + processModel <- getProcessModel(list( + list(processDependent = "contNormal", processIndependent = "contGamma", + processType = "mediators", processVariable = "contcor1"))) + processModel$residualVsFittedPlot <- TRUE + processModel$residualQqPlot <- TRUE + options$processModels <- list(processModel) + set.seed(1) + results <- jaspTools::runAnalysis("ClassicProcess", "debug.csv", options) + + modelPlots <- results[["results"]][["residualPlotContainer"]][["collection"]][["residualPlotContainer_Model 1"]][["collection"]] + # One container per dependent variable: the outcome and the mediator + expect_setequal(sapply(modelPlots, `[[`, "title"), c("contNormal", "contcor1")) + + outcomePlots <- modelPlots[[which(sapply(modelPlots, `[[`, "title") == "contNormal")]][["collection"]] + plotName <- outcomePlots[[grep("residualVsFittedPlot$", names(outcomePlots))]][["data"]] + testPlot <- results[["state"]][["figures"]][[plotName]][["obj"]] + jaspTools::expect_equal_plots(testPlot, "residuals-vs-predicted-contNormal") + + plotName <- outcomePlots[[grep("residualQqPlot$", names(outcomePlots))]][["data"]] + testPlot <- results[["state"]][["figures"]][[plotName]][["obj"]] + jaspTools::expect_equal_plots(testPlot, "residuals-qq-plot-contNormal") +}) diff --git a/tests/testthat/test-classic-process-integration-hayes-models.R b/tests/testthat/test-classic-process-integration-hayes-models.R index 304cd5bc..ad24e750 100644 --- a/tests/testthat/test-classic-process-integration-hayes-models.R +++ b/tests/testthat/test-classic-process-integration-hayes-models.R @@ -36,7 +36,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria pathCoefficients = TRUE, intercepts = FALSE, processRelationships = list( list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -165,7 +165,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria pathCoefficients = TRUE, intercepts = FALSE, processRelationships = list( list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -293,7 +293,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -484,7 +484,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -664,7 +664,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contcor1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -892,7 +892,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "facExperim", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1112,7 +1112,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "mediators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1242,7 +1242,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "mediators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1375,7 +1375,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1537,7 +1537,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1692,7 +1692,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "debCollin1", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1846,7 +1846,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "debCollin1", processIndependent = "facGender", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -1994,7 +1994,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -2161,7 +2161,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -2319,7 +2319,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "debCollin1", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -2554,7 +2554,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "debCollin1", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -2773,7 +2773,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -3046,7 +3046,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -3286,7 +3286,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "debCollin1", processIndependent = "contcor1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -3558,7 +3558,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "debCollin1", processIndependent = "facExperim", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -3819,7 +3819,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contcor1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -4134,7 +4134,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "facExperim", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -4424,7 +4424,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "debCollin1", processIndependent = "contcor1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -4710,7 +4710,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "debCollin1", processIndependent = "facExperim", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -4972,7 +4972,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -5130,7 +5130,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "debCollin1"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -5286,7 +5286,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -5465,7 +5465,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -5636,7 +5636,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -5883,7 +5883,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -6113,7 +6113,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -6423,7 +6423,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -6705,7 +6705,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contcor1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -6994,7 +6994,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "facExperim", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -7265,7 +7265,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -7508,7 +7508,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -7730,7 +7730,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -7985,7 +7985,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -8216,7 +8216,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -8481,7 +8481,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -8731,7 +8731,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -9022,7 +9022,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -9281,7 +9281,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -9455,7 +9455,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -9627,7 +9627,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -9811,7 +9811,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -9989,7 +9989,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "debCollin1", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -10249,7 +10249,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "debCollin1", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -10492,7 +10492,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "debCollin1", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -10763,7 +10763,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "debCollin1", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -11012,7 +11012,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -11284,7 +11284,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -11540,7 +11540,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -11836,7 +11836,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -12100,7 +12100,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -12366,7 +12366,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -12616,7 +12616,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -12893,7 +12893,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -13149,7 +13149,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -13444,7 +13444,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -13721,7 +13721,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -14037,7 +14037,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -14322,7 +14322,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "debCollin1", processIndependent = "contcor1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -14625,7 +14625,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "debCollin1", processIndependent = "facExperim", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -14915,7 +14915,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contcor1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -15228,7 +15228,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "facExperim", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -15530,7 +15530,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "debCollin1", processIndependent = "contcor1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -15901,7 +15901,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "debCollin1", processIndependent = "facExperim", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -16264,7 +16264,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -16552,7 +16552,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -16825,7 +16825,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -17148,7 +17148,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "contcor2")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -17441,7 +17441,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "debMiss1", processType = "mediators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -17621,7 +17621,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "debMiss1", processType = "mediators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -17798,7 +17798,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "contcor2"), list(processDependent = "debCollin1", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -17980,7 +17980,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "contcor2"), list(processDependent = "debCollin1", processIndependent = "facGender", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -18153,7 +18153,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contcor2", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -18349,7 +18349,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contcor2", processIndependent = "facGender", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -18535,7 +18535,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -18743,7 +18743,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -18936,7 +18936,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -19132,7 +19132,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -19313,7 +19313,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contcor2", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -19499,7 +19499,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "contcor2"), list(processDependent = "contNormal", processIndependent = "contcor2", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -19677,7 +19677,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contcor2", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -19888,7 +19888,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "contcor2", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -20092,7 +20092,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -20328,7 +20328,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -20550,7 +20550,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contGamma", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -20756,7 +20756,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "facGender", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -20948,7 +20948,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "contcor2"), list(processDependent = "contcor2", processIndependent = "debCollin1", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -21128,7 +21128,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "mediators", processVariable = "contcor2"), list(processDependent = "contcor2", processIndependent = "debCollin1", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -21314,7 +21314,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "contcor1"), list(processDependent = "contNormal", processIndependent = "contcor2", processType = "moderators", processVariable = "contcor1")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) @@ -21562,7 +21562,7 @@ options$processModels <- list(list(conceptualPathPlot = TRUE, independentCovaria processType = "moderators", processVariable = "facExperim"), list(processDependent = "contNormal", processIndependent = "contcor2", processType = "moderators", processVariable = "facExperim")), - residualCovariances = TRUE, statisticalPathPlot = TRUE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) set.seed(1) diff --git a/tests/testthat/test-classic-process-unit.R b/tests/testthat/test-classic-process-unit.R index ed5b5be3..a77859c7 100644 --- a/tests/testthat/test-classic-process-unit.R +++ b/tests/testthat/test-classic-process-unit.R @@ -835,3 +835,25 @@ test_that("Test that .procSafeFactorLevels only relabels declared factor columns expect_equal(levels(result[["X"]]), c("a.b", "c.d")) expect_identical(result[["Z"]], c("e f", "g h")) }) + +test_that("Test that .procResiduals works", { + set.seed(1) + dat <- data.frame(x = rnorm(100), w = rnorm(100)) + dat$m <- 0.5 * dat$x + rnorm(100) + dat$y <- 0.3 * dat$x + 0.4 * dat$m + 0.2 * dat$w + 0.3 * dat$x * dat$w + rnorm(100) + lmM <- lm(m ~ x, dat) + lmY <- lm(y ~ x + m + w + x:w, dat) + + # With and without a mean structure (intercepts), and with an interaction term + for (meanstructure in c(TRUE, FALSE)) { + fit <- lavaan::sem("m ~ x\ny ~ x + m + w + x:w", data = dat, fixed.x = TRUE, meanstructure = meanstructure) + res <- jaspProcess:::.procResiduals(fit) + + expect_named(res, c("m", "y")) + expect_equal(res[["m"]][["predicted"]], unname(fitted(lmM))) + expect_equal(res[["y"]][["predicted"]], unname(fitted(lmY))) + expect_equal(res[["y"]][["residual"]], unname(residuals(lmY))) + # Standardized by the ML estimate of the residual variance + expect_equal(res[["y"]][["standardized"]], unname(residuals(lmY)) / sqrt(mean(residuals(lmY)^2))) + } +}) From 50917e1140bbddb6c6ca238a0dca4039bf5d4500 Mon Sep 17 00:00:00 2001 From: Johnny Date: Tue, 3 Nov 2026 12:12:59 +0100 Subject: [PATCH 2/9] chore: update jaspGraphs in renv.lock to jasp-stats/jaspGraphs#170 Picks up the Q-Q plot fixes: the confidence band follows the drawn y = x line (#167), and missing values are dropped before the quantiles are computed (#169). Co-Authored-By: Claude Opus 5.5 --- renv.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renv.lock b/renv.lock index 64498d98..54229d45 100644 --- a/renv.lock +++ b/renv.lock @@ -905,7 +905,7 @@ "RemoteHost": "api.github.com", "RemoteUsername": "jasp-stats", "RemoteRepo": "jaspGraphs", - "RemoteSha": "23cdda0d795329eb99a2659bf6f325a9194ff292" + "RemoteSha": "a1cccd474f9567e07b41f74ba76f371c1023d811" }, "jaspJags": { "Package": "jaspJags", From 2e2ee06807799fbb52c862cc2bbc32ba2e5c452b Mon Sep 17 00:00:00 2001 From: Johnny Date: Tue, 3 Nov 2026 12:13:00 +0100 Subject: [PATCH 3/9] feat: add confidence band option to residual Q-Q plots Adds "Confidence interval" under "Q-Q plot standardized residuals" in the classical analysis, as in Linear Regression, ANOVA and the t-tests: a nested qqPlotCi checkbox with a qqPlotCiLevel field, passed as ciLevel to jaspGraphs::plotQQnorm, plus its "Set for All Models" default under Advanced. The Bayesian analysis hides the option, like the other Bayesian analyses, whose Q-Q plots have no band. Co-Authored-By: Claude Opus 5.5 --- NEWS.md | 2 +- R/classicProcess.R | 11 +- inst/help/ClassicProcess.md | 1 + inst/qml/BayesianProcess.qml | 1 + inst/qml/ClassicProcess.qml | 11 ++ inst/qml/common/ResidualPlots.qml | 13 ++ .../residuals-qq-plot-ci-contnormal.svg | 181 ++++++++++++++++++ tests/testthat/generate-tests-helper.R | 6 + tests/testthat/helper-process-integration.R | 3 +- ...test-classic-process-integration-general.R | 22 +++ 10 files changed, 247 insertions(+), 4 deletions(-) create mode 100644 tests/testthat/_snaps/classic-process-integration-general/residuals-qq-plot-ci-contnormal.svg diff --git a/NEWS.md b/NEWS.md index 3c2b0445..3e7e901d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -17,7 +17,7 @@ # jaspProcess (development version) ## Added -* Residual plots for each model (`Residuals vs. predicted` and `Q-Q plot standardized residuals`), shown for every dependent variable (the outcome and each mediator), to check the homoscedasticity and normality assumptions of the regression equations. Available in the classical and Bayesian analysis, per model or for all models at once. +* Residual plots for each model (`Residuals vs. predicted` and `Q-Q plot standardized residuals`), shown for every dependent variable (the outcome and each mediator), to check the homoscedasticity and normality assumptions of the regression equations. Available in the classical and Bayesian analysis, per model or for all models at once. In the classical analysis, the Q-Q plot can show a confidence band, as in the other JASP analyses. ## Fixed * Process models with a categorical predictor no longer error when a factor level label contains a space or other special character (e.g. "emotion regulation"). Such labels are now coerced to syntactically valid names before being used in mean-centering and lavaan model syntax ([Issue #3597](https://github.com/jasp-stats/jasp-issues/issues/3597)). diff --git a/R/classicProcess.R b/R/classicProcess.R index b348e3ef..a180bfdb 100644 --- a/R/classicProcess.R +++ b/R/classicProcess.R @@ -2868,16 +2868,23 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { if (modelOptions[["residualQqPlot"]] && is.null(varContainer[["residualQqPlot"]])) { qqPlot <- createJaspPlot(title = gettext("Q-Q Plot Standardized Residuals"), width = 400, height = 400) - qqPlot$dependOn(nestedOptions = list(c("processModels", as.character(modelIdx), "residualQqPlot"))) + qqPlot$dependOn(nestedOptions = list( + c("processModels", as.character(modelIdx), "residualQqPlot"), + c("processModels", as.character(modelIdx), "qqPlotCi"), + c("processModels", as.character(modelIdx), "qqPlotCiLevel") + )) qqPlot$position <- 2 varContainer[["residualQqPlot"]] <- qqPlot + ciLevel <- if (modelOptions[["qqPlotCi"]]) modelOptions[["qqPlotCiLevel"]] else NULL + qqPlot$plotObject <- jaspGraphs::plotQQnorm( residuals[["standardized"]], yName = gettext("Standardized residuals"), ablineColor = "darkred", ablineOrigin = TRUE, - identicalAxes = TRUE + identicalAxes = TRUE, + ciLevel = ciLevel ) } } diff --git a/inst/help/ClassicProcess.md b/inst/help/ClassicProcess.md index 54d25c3f..b46e9e5e 100644 --- a/inst/help/ClassicProcess.md +++ b/inst/help/ClassicProcess.md @@ -70,6 +70,7 @@ This section allows users to specify multiple process models through one of two - Residual plots: Displays residual plots for each dependent variable in the model (the outcome and each mediator), to check the assumptions of its regression equation. - Residuals vs. predicted: Scatterplot of the residuals against the predicted values. If the variance of the residuals is constant (homoscedasticity), the residuals scatter evenly around zero across the predicted values. - Q-Q plot standardized residuals: Q-Q plot of the residuals divided by their estimated standard deviation. If the residuals are normally distributed, the points lie close to the diagonal. + - Confidence interval: Adds a confidence band around the diagonal. The band shows the expected range of the standardized residuals under normality; points outside the band suggest deviations from normality. - Tests: - Local tests: Test the local implications of the specified causal model. Conducts (conditional) independence tests for each implication of the model. Significant independence tests indicate that the model does not correctly account for the local implication (*local misfit*) and is misspecified. - Test type: Type of the local test. For tetrads test types, see Kenny (1979). diff --git a/inst/qml/BayesianProcess.qml b/inst/qml/BayesianProcess.qml index 994c17dd..730defb2 100644 --- a/inst/qml/BayesianProcess.qml +++ b/inst/qml/BayesianProcess.qml @@ -93,6 +93,7 @@ Form { residualVsFittedPlotChecked: residualVsFittedPlotForAllModels.checked residualQqPlotChecked: residualQqPlotForAllModels.checked + qqPlotCiVisible: false } } } diff --git a/inst/qml/ClassicProcess.qml b/inst/qml/ClassicProcess.qml index 2dda4fe2..f3512276 100644 --- a/inst/qml/ClassicProcess.qml +++ b/inst/qml/ClassicProcess.qml @@ -145,6 +145,8 @@ Form { residualVsFittedPlotChecked: residualVsFittedPlotForAllModels.checked residualQqPlotChecked: residualQqPlotForAllModels.checked + qqPlotCiChecked: qqPlotCiForAllModels.checked + qqPlotCiLevelValue: qqPlotCiLevelForAllModels.value } } } @@ -346,6 +348,15 @@ Form id: residualQqPlotForAllModels name: "residualQqPlotForAllModels" label: qsTr("Q-Q plot standardized residuals") + + CheckBox + { + id: qqPlotCiForAllModels + name: "qqPlotCiForAllModels" + label: qsTr("Confidence interval") + childrenOnSameRow: true + CIField { id: qqPlotCiLevelForAllModels; name: "qqPlotCiLevelForAllModels" } + } } } diff --git a/inst/qml/common/ResidualPlots.qml b/inst/qml/common/ResidualPlots.qml index 4e861a48..810bd3c5 100644 --- a/inst/qml/common/ResidualPlots.qml +++ b/inst/qml/common/ResidualPlots.qml @@ -23,6 +23,9 @@ Group { property bool residualVsFittedPlotChecked: false property bool residualQqPlotChecked: false + property bool qqPlotCiChecked: false + property real qqPlotCiLevelValue: 95 + property bool qqPlotCiVisible: true title: qsTr("Residual Plots") columns: 1 @@ -39,5 +42,15 @@ Group label: qsTr("Q-Q plot standardized residuals") checked: residualQqPlotChecked info: qsTr("For each dependent variable (the outcome and each mediator), a Q-Q plot of the standardized residuals. If the residuals are normally distributed, the points lie close to the diagonal.") + CheckBox + { + name: "qqPlotCi" + label: qsTr("Confidence interval") + childrenOnSameRow: true + checked: qqPlotCiChecked + visible: qqPlotCiVisible + info: qsTr("Adds a confidence band around the diagonal. The band shows the expected range of the standardized residuals under normality; points outside the band suggest deviations from normality.") + CIField { name: "qqPlotCiLevel"; defaultValue: qqPlotCiLevelValue } + } } } diff --git a/tests/testthat/_snaps/classic-process-integration-general/residuals-qq-plot-ci-contnormal.svg b/tests/testthat/_snaps/classic-process-integration-general/residuals-qq-plot-ci-contnormal.svg new file mode 100644 index 00000000..8ec44627 --- /dev/null +++ b/tests/testthat/_snaps/classic-process-integration-general/residuals-qq-plot-ci-contnormal.svg @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +-4 +-3 +-2 +-1 +0 +1 +2 +3 +4 + + + + + + + + + + + + + + + + + + + +-4 +-3 +-2 +-1 +0 +1 +2 +3 +4 +Theoretical quantiles +Standardized residuals +residuals-qq-plot-ci-contNormal + + diff --git a/tests/testthat/generate-tests-helper.R b/tests/testthat/generate-tests-helper.R index ab4e9ec2..96d11ac3 100644 --- a/tests/testthat/generate-tests-helper.R +++ b/tests/testthat/generate-tests-helper.R @@ -28,6 +28,8 @@ getOptionsOneModel <- function() { "statisticalPathPlot" = TRUE, "residualVsFittedPlot" = FALSE, "residualQqPlot" = FALSE, + "qqPlotCi" = FALSE, + "qqPlotCiLevel" = 0.95, "totalEffects" = TRUE, "localTests" = FALSE, "localTestType" = "cis", @@ -195,6 +197,8 @@ getOptionsOneModelBadVarNames <- function(k, parms) { "statisticalPathPlot" = TRUE, "residualVsFittedPlot" = FALSE, "residualQqPlot" = FALSE, + "qqPlotCi" = FALSE, + "qqPlotCiLevel" = 0.95, "totalEffects" = TRUE, "localTests" = FALSE, "localTestType" = "cis", @@ -272,6 +276,8 @@ getOptionsOneModelBayes <- function() { "statisticalPathPlot" = TRUE, "residualVsFittedPlot" = FALSE, "residualQqPlot" = FALSE, + "qqPlotCi" = FALSE, + "qqPlotCiLevel" = 0.95, "totalEffects" = TRUE ) ) diff --git a/tests/testthat/helper-process-integration.R b/tests/testthat/helper-process-integration.R index b050e8ef..848e01e1 100644 --- a/tests/testthat/helper-process-integration.R +++ b/tests/testthat/helper-process-integration.R @@ -126,7 +126,8 @@ getProcessModel <- function(processRelationships, name = "Model 1") { modelNumberIndependent = list(value = ""), modelNumberMediators = list(value = c()), modelNumberModeratorW = list(value = ""), modelNumberModeratorZ = list(value = ""), name = name, pathCoefficients = TRUE, intercepts = FALSE, processRelationships = processRelationships, - residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, totalEffects = TRUE, + residualCovariances = TRUE, statisticalPathPlot = TRUE, residualVsFittedPlot = FALSE, residualQqPlot = FALSE, + qqPlotCi = FALSE, qqPlotCiLevel = 0.95, totalEffects = TRUE, localTests = FALSE, localTestType = "cis", localTestBootstrap = FALSE, localTestBootstrapSamples = 1000)) } diff --git a/tests/testthat/test-classic-process-integration-general.R b/tests/testthat/test-classic-process-integration-general.R index 038eae37..a324f125 100644 --- a/tests/testthat/test-classic-process-integration-general.R +++ b/tests/testthat/test-classic-process-integration-general.R @@ -1622,3 +1622,25 @@ test_that("Residual plots work", { testPlot <- results[["state"]][["figures"]][[plotName]][["obj"]] jaspTools::expect_equal_plots(testPlot, "residuals-qq-plot-contNormal") }) + +test_that("Residual Q-Q plot with confidence band works", { + options <- getOptionsClassical() + options$dependent <- "contNormal" + options$covariates <- list("contGamma", "contcor1") + options$factors <- list() + processModel <- getProcessModel(list( + list(processDependent = "contNormal", processIndependent = "contGamma", + processType = "mediators", processVariable = "contcor1"))) + processModel$residualQqPlot <- TRUE + processModel$qqPlotCi <- TRUE + processModel$qqPlotCiLevel <- 0.9 + options$processModels <- list(processModel) + set.seed(1) + results <- jaspTools::runAnalysis("ClassicProcess", "debug.csv", options) + + modelPlots <- results[["results"]][["residualPlotContainer"]][["collection"]][["residualPlotContainer_Model 1"]][["collection"]] + outcomePlots <- modelPlots[[which(sapply(modelPlots, `[[`, "title") == "contNormal")]][["collection"]] + plotName <- outcomePlots[[grep("residualQqPlot$", names(outcomePlots))]][["data"]] + testPlot <- results[["state"]][["figures"]][[plotName]][["obj"]] + jaspTools::expect_equal_plots(testPlot, "residuals-qq-plot-ci-contNormal") +}) From 4e811dbfb55c5c38f0d26064c1d74ec2645e38c6 Mon Sep 17 00:00:00 2001 From: Johnny Date: Tue, 3 Nov 2026 12:32:17 +0100 Subject: [PATCH 4/9] feat: add credible intervals to Bayesian residual Q-Q plots Shows the "Credible interval" option under "Q-Q plot standardized residuals" in the Bayesian analysis (the same qqPlotCi/qqPlotCiLevel options as the classical confidence band), plus its "Set for All Models" default. As in Bayesian ANOVA, the standardized residuals are computed for each posterior draw: the points are their posterior means and the error bars their central credible intervals. The points previously used the posterior means of the parameters; the two differ by about 0.02 on the standardized scale. Co-Authored-By: Claude Opus 5.5 --- NEWS.md | 2 +- R/bayesianProcess.R | 52 +++++++++++++++++++ R/classicProcess.R | 39 ++++++++++---- inst/help/BayesianProcess.md | 3 +- inst/qml/BayesianProcess.qml | 13 ++++- inst/qml/common/ResidualPlots.qml | 7 ++- .../testthat/test-bayesian-process-general.R | 31 +++++++++++ tests/testthat/test-bayesian-process-unit.R | 49 +++++++++++++++++ 8 files changed, 179 insertions(+), 17 deletions(-) create mode 100644 tests/testthat/test-bayesian-process-unit.R diff --git a/NEWS.md b/NEWS.md index 3e7e901d..a26eb20c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -17,7 +17,7 @@ # jaspProcess (development version) ## Added -* Residual plots for each model (`Residuals vs. predicted` and `Q-Q plot standardized residuals`), shown for every dependent variable (the outcome and each mediator), to check the homoscedasticity and normality assumptions of the regression equations. Available in the classical and Bayesian analysis, per model or for all models at once. In the classical analysis, the Q-Q plot can show a confidence band, as in the other JASP analyses. +* Residual plots for each model (`Residuals vs. predicted` and `Q-Q plot standardized residuals`), shown for every dependent variable (the outcome and each mediator), to check the homoscedasticity and normality assumptions of the regression equations. Available in the classical and Bayesian analysis, per model or for all models at once. As in the other JASP analyses, the Q-Q plot can show a confidence band (classical) or the credible interval of each residual (Bayesian). ## Fixed * Process models with a categorical predictor no longer error when a factor level label contains a space or other special character (e.g. "emotion regulation"). Such labels are now coerced to syntactically valid names before being used in mean-centering and lavaan model syntax ([Issue #3597](https://github.com/jasp-stats/jasp-issues/issues/3597)). diff --git a/R/bayesianProcess.R b/R/bayesianProcess.R index e080671a..4a144722 100644 --- a/R/bayesianProcess.R +++ b/R/bayesianProcess.R @@ -673,6 +673,58 @@ BayesianProcess <- function(jaspResults, dataset = NULL, options) { } } +.procBayesStandardizedResiduals <- function(fittedModel, dep, ciLevel = NULL) { + parTbl <- lavaan::parameterTable(fittedModel) + # Only extract the draws of the model parameters: the Stan output also contains, e.g., the log-likelihood of each observation + draws <- as.matrix(fittedModel@external$mcmcout, pars = unique(sub("\\[.*$", "", na.omit(parTbl$pxnames)))) + + return(.procBayesStandardizedResidualsFromDraws(parTbl, lavaan::lavInspect(fittedModel, "data"), draws, dep, ciLevel)) +} + +.procBayesStandardizedResidualsFromDraws <- function(parTbl, data, draws, dep, ciLevel = NULL, blockSize = 1000) { + # Posterior mean (and central credible interval) of the standardized residual of each observation in the regression + # equation of dep: for each draw, the observed minus the predicted value, divided by the residual standard deviation + parDraws <- function(rows) { + # Draws x parameters; fixed parameters have the same value in every draw + matrix(vapply(rows, function(r) { + if (is.na(parTbl$pxnames[r])) rep(parTbl$est[r], nrow(draws)) else draws[, parTbl$pxnames[r]] + }, numeric(nrow(draws))), nrow = nrow(draws)) + } + + regRows <- which(parTbl$lhs == dep & parTbl$op == "~") + preds <- data[, parTbl$rhs[regRows], drop = FALSE] + beta <- parDraws(regRows) + intRow <- which(parTbl$lhs == dep & parTbl$op == "~1") + + # Without a mean structure the intercepts are implied by the sample means (as in .procResiduals) + if (length(intRow) == 0) + intercept <- mean(data[, dep], na.rm = TRUE) - drop(beta %*% colMeans(preds, na.rm = TRUE)) + else + intercept <- drop(parDraws(intRow)) + + residualSd <- sqrt(drop(parDraws(which(parTbl$lhs == dep & parTbl$op == "~~" & parTbl$rhs == dep)))) + complete <- which(stats::complete.cases(data[, dep], preds)) + probs <- if (!is.null(ciLevel)) c((1 - ciLevel) / 2, (1 + ciLevel) / 2) + + # Observations x draws matrices, in blocks of observations to limit memory use for large data sets + blocks <- split(complete, ceiling(seq_along(complete) / blockSize)) + blockSummaries <- lapply(blocks, function(obs) { + predicted <- preds[obs, , drop = FALSE] %*% t(beta) + rep(intercept, each = length(obs)) + standardized <- (data[obs, dep] - predicted) / rep(residualSd, each = length(obs)) + blockSummary <- data.frame(mean = rowMeans(standardized)) + + if (!is.null(probs)) { + bounds <- apply(standardized, 1, stats::quantile, probs = probs, names = FALSE) + blockSummary$lower <- bounds[1, ] + blockSummary$upper <- bounds[2, ] + } + + return(blockSummary) + }) + + return(do.call(rbind, unname(blockSummaries))) +} + # Footnotes ---- .procBayesBadWaicFootnote <- function() gettext("Warning: WAIC estimate unreliable -- at least one effective parameter estimate (p_waic) larger than 0.4. We recommend using LOO instead.") diff --git a/R/classicProcess.R b/R/classicProcess.R index a180bfdb..7586af05 100644 --- a/R/classicProcess.R +++ b/R/classicProcess.R @@ -2807,7 +2807,7 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { } for (j in seq_along(residuals)) { - .procResidualPlotsSingleVariable(modelContainer, options, residuals[[j]], names(residuals)[j], j, i) + .procResidualPlotsSingleVariable(modelContainer, options, residuals[[j]], names(residuals)[j], j, i, fittedModel) } } } @@ -2844,7 +2844,7 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { return(residuals) } -.procResidualPlotsSingleVariable <- function(container, options, residuals, varName, varIdx, modelIdx) { +.procResidualPlotsSingleVariable <- function(container, options, residuals, varName, varIdx, modelIdx, fittedModel) { varKey <- paste0("variable", varIdx) if (is.null(container[[varKey]])) { @@ -2878,14 +2878,33 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { ciLevel <- if (modelOptions[["qqPlotCi"]]) modelOptions[["qqPlotCiLevel"]] else NULL - qqPlot$plotObject <- jaspGraphs::plotQQnorm( - residuals[["standardized"]], - yName = gettext("Standardized residuals"), - ablineColor = "darkred", - ablineOrigin = TRUE, - identicalAxes = TRUE, - ciLevel = ciLevel - ) + if (inherits(fittedModel, "blavaan")) { + # Posterior means of the standardized residuals, with the credible interval of each as an error bar + stdResiduals <- try(.procBayesStandardizedResiduals(fittedModel, varName, ciLevel)) + + if (jaspBase::isTryError(stdResiduals)) { + qqPlot$setError(jaspBase::.extractErrorMessage(stdResiduals)) + } else { + qqPlot$plotObject <- jaspGraphs::plotQQnorm( + stdResiduals[["mean"]], + lower = stdResiduals[["lower"]], + upper = stdResiduals[["upper"]], + yName = gettext("Standardized residuals"), + ablineColor = "darkred", + ablineOrigin = TRUE, + identicalAxes = TRUE + ) + } + } else { + qqPlot$plotObject <- jaspGraphs::plotQQnorm( + residuals[["standardized"]], + yName = gettext("Standardized residuals"), + ablineColor = "darkred", + ablineOrigin = TRUE, + identicalAxes = TRUE, + ciLevel = ciLevel + ) + } } } diff --git a/inst/help/BayesianProcess.md b/inst/help/BayesianProcess.md index 3f100de7..23ef8abb 100644 --- a/inst/help/BayesianProcess.md +++ b/inst/help/BayesianProcess.md @@ -66,7 +66,8 @@ This section allows users to specify multiple process models through one of two - Statistical: Shows a statistical path plot including parameter labels or estimates for all paths. - Residual plots: Displays residual plots for each dependent variable in the model (the outcome and each mediator), to check the assumptions of its regression equation. The predicted values are based on the posterior means of the parameters. - Residuals vs. predicted: Scatterplot of the residuals against the predicted values. If the variance of the residuals is constant (homoscedasticity), the residuals scatter evenly around zero across the predicted values. - - Q-Q plot standardized residuals: Q-Q plot of the residuals divided by their estimated standard deviation. If the residuals are normally distributed, the points lie close to the diagonal. + - Q-Q plot standardized residuals: Q-Q plot of the residuals divided by the residual standard deviation. The standardized residuals are computed for each posterior draw, and the points show their posterior means. If the residuals are normally distributed, the points lie close to the diagonal. + - Credible interval: Adds the central credible interval of each standardized residual as an error bar. #### Options diff --git a/inst/qml/BayesianProcess.qml b/inst/qml/BayesianProcess.qml index 730defb2..f98d375c 100644 --- a/inst/qml/BayesianProcess.qml +++ b/inst/qml/BayesianProcess.qml @@ -93,7 +93,9 @@ Form { residualVsFittedPlotChecked: residualVsFittedPlotForAllModels.checked residualQqPlotChecked: residualQqPlotForAllModels.checked - qqPlotCiVisible: false + qqPlotCiChecked: qqPlotCiForAllModels.checked + qqPlotCiLevelValue: qqPlotCiLevelForAllModels.value + bayesian: true } } } @@ -363,6 +365,15 @@ Form id: residualQqPlotForAllModels name: "residualQqPlotForAllModels" label: qsTr("Q-Q plot standardized residuals") + + CheckBox + { + id: qqPlotCiForAllModels + name: "qqPlotCiForAllModels" + label: qsTr("Credible interval") + childrenOnSameRow: true + CIField { id: qqPlotCiLevelForAllModels; name: "qqPlotCiLevelForAllModels" } + } } } } diff --git a/inst/qml/common/ResidualPlots.qml b/inst/qml/common/ResidualPlots.qml index 810bd3c5..aacab873 100644 --- a/inst/qml/common/ResidualPlots.qml +++ b/inst/qml/common/ResidualPlots.qml @@ -25,7 +25,7 @@ Group property bool residualQqPlotChecked: false property bool qqPlotCiChecked: false property real qqPlotCiLevelValue: 95 - property bool qqPlotCiVisible: true + property bool bayesian: false title: qsTr("Residual Plots") columns: 1 @@ -45,11 +45,10 @@ Group CheckBox { name: "qqPlotCi" - label: qsTr("Confidence interval") + label: bayesian ? qsTr("Credible interval") : qsTr("Confidence interval") childrenOnSameRow: true checked: qqPlotCiChecked - visible: qqPlotCiVisible - info: qsTr("Adds a confidence band around the diagonal. The band shows the expected range of the standardized residuals under normality; points outside the band suggest deviations from normality.") + info: bayesian ? qsTr("Adds the central credible interval of each standardized residual as an error bar.") : qsTr("Adds a confidence band around the diagonal. The band shows the expected range of the standardized residuals under normality; points outside the band suggest deviations from normality.") CIField { name: "qqPlotCiLevel"; defaultValue: qqPlotCiLevelValue } } } diff --git a/tests/testthat/test-bayesian-process-general.R b/tests/testthat/test-bayesian-process-general.R index 5c929935..d9651097 100644 --- a/tests/testthat/test-bayesian-process-general.R +++ b/tests/testthat/test-bayesian-process-general.R @@ -105,3 +105,34 @@ test_that("Incomplete Hayes configuration works", { testPlot <- results[["state"]][["figures"]][[plotName]][["obj"]] jaspTools::expect_equal_plots(testPlot, "statistical-path-plot-incomplete") }) + +test_that("Residual Q-Q plot with credible intervals works", { + skip_on_ci() + options <- getOptionsBayesian() + options$dependent <- "contNormal" + options$covariates <- list("contGamma", "contcor1") + options$factors <- list() + processModel <- getProcessModel(list( + list(processDependent = "contNormal", processIndependent = "contGamma", + processType = "mediators", processVariable = "contcor1"))) + processModel$residualQqPlot <- TRUE + processModel$qqPlotCi <- TRUE + options$processModels <- list(processModel) + set.seed(1) + results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) + + modelPlots <- results[["results"]][["residualPlotContainer"]][["collection"]][["residualPlotContainer_Model 1"]][["collection"]] + # One container per dependent variable: the outcome and the mediator + expect_setequal(sapply(modelPlots, `[[`, "title"), c("contNormal", "contcor1")) + + outcomePlots <- modelPlots[[which(sapply(modelPlots, `[[`, "title") == "contNormal")]][["collection"]] + plotName <- outcomePlots[[grep("residualQqPlot$", names(outcomePlots))]][["data"]] + testPlot <- results[["state"]][["figures"]][[plotName]][["obj"]] + + # One credible interval (error bar) per observation, around its posterior mean + isErrorbar <- sapply(testPlot$layers, function(layer) inherits(layer$geom, "GeomErrorbar")) + expect_equal(sum(isErrorbar), 1) + bars <- ggplot2::layer_data(testPlot, which(isErrorbar)) + expect_equal(nrow(bars), 100) + expect_true(all(bars$ymin < bars$y & bars$y < bars$ymax)) +}) diff --git a/tests/testthat/test-bayesian-process-unit.R b/tests/testthat/test-bayesian-process-unit.R new file mode 100644 index 00000000..4f010ddf --- /dev/null +++ b/tests/testthat/test-bayesian-process-unit.R @@ -0,0 +1,49 @@ +# Unit tests for Bayesian Process analysis + +test_that("Test that .procBayesStandardizedResidualsFromDraws works", { + set.seed(1) + dat <- data.frame(x = rnorm(50), w = rnorm(50)) + dat$m <- 0.5 * dat$x + rnorm(50) + dat$y <- 0.3 * dat$x + 0.4 * dat$m + 0.2 * dat$w + rnorm(50) + + # With and without a mean structure (intercepts) + for (meanstructure in c(TRUE, FALSE)) { + fit <- lavaan::sem("m ~ x\ny ~ x + m + w", data = dat, fixed.x = TRUE, meanstructure = meanstructure) + parTbl <- lavaan::parameterTable(fit) + data <- lavaan::lavInspect(fit, "data") + # Free parameters are named as in the Stan output of blavaan + parTbl$pxnames <- ifelse(parTbl$free > 0, paste0("par[", parTbl$free, "]"), NA) + nFree <- max(parTbl$free) + est <- parTbl$est[match(seq_len(nFree), parTbl$free)] + + # Draws that all equal the estimates give the plug-in standardized residuals and zero-width intervals + draws <- matrix(est, nrow = 5, ncol = nFree, byrow = TRUE, dimnames = list(NULL, paste0("par[", seq_len(nFree), "]"))) + res <- jaspProcess:::.procBayesStandardizedResidualsFromDraws(parTbl, data, draws, "y", ciLevel = 0.95) + expect_equal(res[["mean"]], jaspProcess:::.procResiduals(fit)[["y"]][["standardized"]]) + expect_equal(res[["lower"]], res[["mean"]]) + expect_equal(res[["upper"]], res[["mean"]]) + + # Without a credible interval only the posterior means are returned + expect_named(jaspProcess:::.procBayesStandardizedResidualsFromDraws(parTbl, data, draws, "y"), "mean") + + # Varying draws, processed in several blocks of observations: compare with a loop over the draws + draws <- draws + matrix(rnorm(length(draws), sd = 0.05), nrow(draws)) + drawOf <- function(s, lhs, op, rhs) draws[s, parTbl$pxnames[parTbl$lhs == lhs & parTbl$op == op & parTbl$rhs == rhs]] + expected <- sapply(seq_len(nrow(draws)), function(s) { + beta <- c(drawOf(s, "y", "~", "x"), drawOf(s, "y", "~", "m"), drawOf(s, "y", "~", "w")) + intercept <- if (meanstructure) drawOf(s, "y", "~1", "") else mean(dat$y) - sum(beta * colMeans(dat[, c("x", "m", "w")])) + (dat$y - intercept - drop(as.matrix(dat[, c("x", "m", "w")]) %*% beta)) / sqrt(drawOf(s, "y", "~~", "y")) + }) + res <- jaspProcess:::.procBayesStandardizedResidualsFromDraws(parTbl, data, draws, "y", ciLevel = 0.8, blockSize = 7) + expect_equal(res[["mean"]], rowMeans(expected)) + expect_equal(res[["lower"]], apply(expected, 1, quantile, probs = 0.1, names = FALSE)) + expect_equal(res[["upper"]], apply(expected, 1, quantile, probs = 0.9, names = FALSE)) + + # Observations with a missing value are dropped, as in .procResiduals + if (meanstructure) { + data[3, "w"] <- NA + resMissing <- jaspProcess:::.procBayesStandardizedResidualsFromDraws(parTbl, data, draws, "y", ciLevel = 0.8) + expect_equal(resMissing[["mean"]], res[["mean"]][-3]) + } + } +}) From 99e8fc231f3bcf434fcf9296166f4ffd2f0dc247 Mon Sep 17 00:00:00 2001 From: Johnny Date: Tue, 3 Nov 2026 15:28:46 +0100 Subject: [PATCH 5/9] fix: put Bayesian credible interval level on its own row Co-Authored-By: Claude Opus 5.5 --- inst/qml/BayesianProcess.qml | 1 - inst/qml/common/ResidualPlots.qml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/inst/qml/BayesianProcess.qml b/inst/qml/BayesianProcess.qml index f98d375c..4e1dd4f7 100644 --- a/inst/qml/BayesianProcess.qml +++ b/inst/qml/BayesianProcess.qml @@ -371,7 +371,6 @@ Form id: qqPlotCiForAllModels name: "qqPlotCiForAllModels" label: qsTr("Credible interval") - childrenOnSameRow: true CIField { id: qqPlotCiLevelForAllModels; name: "qqPlotCiLevelForAllModels" } } } diff --git a/inst/qml/common/ResidualPlots.qml b/inst/qml/common/ResidualPlots.qml index aacab873..96a9628d 100644 --- a/inst/qml/common/ResidualPlots.qml +++ b/inst/qml/common/ResidualPlots.qml @@ -46,7 +46,7 @@ Group { name: "qqPlotCi" label: bayesian ? qsTr("Credible interval") : qsTr("Confidence interval") - childrenOnSameRow: true + childrenOnSameRow: !bayesian // the Bayesian form has no room for the level next to the label checked: qqPlotCiChecked info: bayesian ? qsTr("Adds the central credible interval of each standardized residual as an error bar.") : qsTr("Adds a confidence band around the diagonal. The band shows the expected range of the standardized residuals under normality; points outside the band suggest deviations from normality.") CIField { name: "qqPlotCiLevel"; defaultValue: qqPlotCiLevelValue } From 7125e315524dc7ccadb33bc3d2a03655a7404db2 Mon Sep 17 00:00:00 2001 From: Johnny Date: Tue, 3 Nov 2026 15:34:36 +0100 Subject: [PATCH 6/9] =?UTF-8?q?fix:=20only=20update=20model=20summary=20an?= =?UTF-8?q?d=20R=C2=B2=20tables=20when=20a=20model=20fit=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- NEWS.md | 1 + R/bayesianProcess.R | 5 ++++- R/classicProcess.R | 22 +++++++++++++++++++--- tests/testthat/test-classic-process-unit.R | 12 ++++++++++++ 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/NEWS.md b/NEWS.md index a26eb20c..14b75296 100644 --- a/NEWS.md +++ b/NEWS.md @@ -20,6 +20,7 @@ * Residual plots for each model (`Residuals vs. predicted` and `Q-Q plot standardized residuals`), shown for every dependent variable (the outcome and each mediator), to check the homoscedasticity and normality assumptions of the regression equations. Available in the classical and Bayesian analysis, per model or for all models at once. As in the other JASP analyses, the Q-Q plot can show a confidence band (classical) or the credible interval of each residual (Bayesian). ## Fixed +* Requesting output for a single model (e.g., a plot or a parameter estimates table) no longer recomputes the model summary and R² tables. In the Bayesian analysis, this avoids recomputing WAIC and LOO for every model. * Process models with a categorical predictor no longer error when a factor level label contains a space or other special character (e.g. "emotion regulation"). Such labels are now coerced to syntactically valid names before being used in mean-centering and lavaan model syntax ([Issue #3597](https://github.com/jasp-stats/jasp-issues/issues/3597)). --- diff --git a/R/bayesianProcess.R b/R/bayesianProcess.R index 4a144722..b4d269bc 100644 --- a/R/bayesianProcess.R +++ b/R/bayesianProcess.R @@ -218,7 +218,10 @@ BayesianProcess <- function(jaspResults, dataset = NULL, options) { tableRowIsValid <- modelNumberIsValid & resultIsValid summaryTable <- createJaspTable(title = gettext("Model summary"), rowNames = modelNames[tableRowIsValid]) - summaryTable$dependOn(c(.procGetDependencies(), "processModels", "bicWeights", "hayesNumber")) + summaryTable$dependOn( + options = c(.procGetDependencies(), "bicWeights", "hayesNumber"), + nestedOptions = .procGetAllModelsDependencies(options) + ) summaryTable$position <- 1 ovtWaic <- gettext("WAIC") diff --git a/R/classicProcess.R b/R/classicProcess.R index 7586af05..962f4738 100644 --- a/R/classicProcess.R +++ b/R/classicProcess.R @@ -140,6 +140,10 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { nestedOptions = .procGetSingleModelsDependencies(as.character(i))[-1] # omit model name ) modelsContainer[[modelName]] <- container + # Tables that combine all models only depend on the options of the models they were created for (see + # .procGetAllModelsDependencies), so a model that was added has to be included by recreating them + jaspResults[["modelSummaryTable"]] <- NULL + jaspResults[["rSquaredTable"]] <- NULL } } @@ -1726,6 +1730,12 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { )) } +# Dependencies of output that combines all models: only the options that change a fitted model, +# so that requesting output for a single model (e.g., a plot) does not update it +.procGetAllModelsDependencies <- function(options) { + return(unlist(lapply(seq_along(options[["processModels"]]), function(i) .procGetSingleModelsDependencies(as.character(i))), recursive = FALSE)) +} + .procComputeResults <- function(jaspResults, dataset, options) { modelsContainer <- jaspResults[["modelsContainer"]] nModels <- length(options[["processModels"]]) @@ -1889,7 +1899,10 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { tableRowIsValid <- modelNumberIsValid & resultIsValid summaryTable <- createJaspTable(title = gettext("Model summary"), rowNames = modelNames[tableRowIsValid]) - summaryTable$dependOn(c(.procGetDependencies(), "processModels", "aicWeights", "bicWeights", "naAction", "hayesNumber")) + summaryTable$dependOn( + options = c(.procGetDependencies(), "aicWeights", "bicWeights", "naAction", "hayesNumber"), + nestedOptions = .procGetAllModelsDependencies(options) + ) summaryTable$position <- 0 if (options[["naAction"]] == "fiml" && !options[["estimator"]] %in% c("default", "ml")) { @@ -1970,7 +1983,7 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { if (any(validModel) && is.null(parEstContainer[["warning"]])) { warningHtml <- createJaspHtml(text = .procCausalAssumptionsMsg()) warningHtml$position <- 0 - warningHtml$dependOn("processModels") + warningHtml$dependOn(nestedOptions = .procGetAllModelsDependencies(options)) parEstContainer[["warning"]] <- warningHtml } @@ -2660,7 +2673,10 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { overtitle = "R\u00B2", type = "number") } - tabr2$dependOn(c(.procGetDependencies(), "rSquared", "processModels")) + tabr2$dependOn( + options = c(.procGetDependencies(), "rSquared"), + nestedOptions = .procGetAllModelsDependencies(options) + ) tabr2$position <- 1 jaspResults[["rSquaredTable"]] <- tabr2 diff --git a/tests/testthat/test-classic-process-unit.R b/tests/testthat/test-classic-process-unit.R index a77859c7..4939537d 100644 --- a/tests/testthat/test-classic-process-unit.R +++ b/tests/testthat/test-classic-process-unit.R @@ -857,3 +857,15 @@ test_that("Test that .procResiduals works", { expect_equal(res[["y"]][["standardized"]], unname(residuals(lmY)) / sqrt(mean(residuals(lmY)^2))) } }) + +test_that("Test that .procGetAllModelsDependencies works", { + options <- list(processModels = list(list(name = "Model 1"), list(name = "Model 2"))) + deps <- jaspProcess:::.procGetAllModelsDependencies(options) + + expect_identical(deps, c(jaspProcess:::.procGetSingleModelsDependencies("1"), jaspProcess:::.procGetSingleModelsDependencies("2"))) + # Requesting output for a single model must not update the output that combines all models + outputOptions <- c("residualVsFittedPlot", "residualQqPlot", "qqPlotCi", "qqPlotCiLevel", "conceptualPathPlot", + "statisticalPathPlot", "pathCoefficients", "mediationEffects", "totalEffects", "residualCovariances", "localTests") + expect_false(any(vapply(deps, function(dep) dep[3] %in% outputOptions, logical(1)))) + expect_length(jaspProcess:::.procGetAllModelsDependencies(list(processModels = list())), 0) +}) From 7aa26e389581c7139f750bfcb9d9fa749c43b822 Mon Sep 17 00:00:00 2001 From: Johnny Date: Tue, 3 Nov 2026 16:56:05 +0100 Subject: [PATCH 7/9] feat: add set seed option to the classical Process analysis Bootstrapped standard errors / confidence intervals and bootstrapped local tests were not reproducible. Adds SetSeed {} under Options and seeds each model's bootstrap and local tests, so results do not depend on which models were refitted in a run. seed/setSeed were already in .procGetDependencies(). Co-Authored-By: Claude Opus 5.5 --- NEWS.md | 1 + R/classicProcess.R | 4 ++ inst/qml/ClassicProcess.qml | 1 + ...test-classic-process-integration-general.R | 37 +++++++++++++++++++ 4 files changed, 43 insertions(+) diff --git a/NEWS.md b/NEWS.md index 14b75296..4a9379b8 100644 --- a/NEWS.md +++ b/NEWS.md @@ -18,6 +18,7 @@ ## Added * Residual plots for each model (`Residuals vs. predicted` and `Q-Q plot standardized residuals`), shown for every dependent variable (the outcome and each mediator), to check the homoscedasticity and normality assumptions of the regression equations. Available in the classical and Bayesian analysis, per model or for all models at once. As in the other JASP analyses, the Q-Q plot can show a confidence band (classical) or the credible interval of each residual (Bayesian). +* `Set seed` option (Options > Repeatability) in the classical analysis, so bootstrapped standard errors and confidence intervals, and bootstrapped local tests, can be reproduced. ## Fixed * Requesting output for a single model (e.g., a plot or a parameter estimates table) no longer recomputes the model summary and R² tables. In the Bayesian analysis, this avoids recomputing WAIC and LOO for every model. diff --git a/R/classicProcess.R b/R/classicProcess.R index 962f4738..65c75c1d 100644 --- a/R/classicProcess.R +++ b/R/classicProcess.R @@ -1706,6 +1706,8 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { if (doFit) { if (options$errorCalculationMethod == "bootstrap") { + # Seed per model, so a model's bootstrap does not depend on which other models were (re)fitted in this run + jaspBase::.setSeedJASP(options) fittedModel <- .procBootstrap(fittedModel, options$bootstrapSamples) } } @@ -2622,6 +2624,8 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { graph <- dagitty::dagitty(paste("dag {", paste(arrows, collapse = "\n")," } ")) + # Bootstrapped local tests (and cis.loess) resample the data + jaspBase::.setSeedJASP(options) localTestResult <- dagitty::localTests( graph, dataset, diff --git a/inst/qml/ClassicProcess.qml b/inst/qml/ClassicProcess.qml index f3512276..208d5f67 100644 --- a/inst/qml/ClassicProcess.qml +++ b/inst/qml/ClassicProcess.qml @@ -214,6 +214,7 @@ Form } } } + SetSeed {} } } diff --git a/tests/testthat/test-classic-process-integration-general.R b/tests/testthat/test-classic-process-integration-general.R index a324f125..311aedaa 100644 --- a/tests/testthat/test-classic-process-integration-general.R +++ b/tests/testthat/test-classic-process-integration-general.R @@ -997,6 +997,43 @@ test_that("Bootstrapping works (percentile interval)", { 0.250253598445243)) }) +test_that("Set seed makes bootstrapped estimates and local tests reproducible", { + options <- getOptionsClassical() + options$errorCalculationMethod <- "bootstrap" + options$bootstrapSamples <- 50 + options$standardizedModelEstimates <- FALSE + options$meanCenteredModeration <- FALSE + options$processModels <- list(getProcessModel(list(list(processDependent = "contNormal", + processIndependent = "contGamma", processType = "mediators", + processVariable = "debCollin1"), list(processDependent = "contNormal", + processIndependent = "contGamma", processType = "moderators", + processVariable = "contcor1")))) + options$processModels[[1]]$localTests <- TRUE + options$processModels[[1]]$localTestBootstrap <- TRUE + options$processModels[[1]]$localTestBootstrapSamples <- 50 + + # Run with a different global RNG state each time; only the analysis seed can make the results agree + getBootstrapTables <- function(globalSeed) { + set.seed(globalSeed) + results <- jaspTools::runAnalysis("ClassicProcess", "debug.csv", options) + list( + pathCoefficients = results[["results"]][["parEstContainer"]][["collection"]][["parEstContainer_Model 1"]][["collection"]][["parEstContainer_Model 1_pathCoefficientsTable"]][["data"]], + localTests = results[["results"]][["localTestContainer"]][["collection"]][["localTestContainer_Model 1"]][["collection"]][["localTestContainer_Model 1_localTestTable"]][["data"]] + ) + } + + # Without the seed option both tables follow the global RNG state (so the check below is not vacuous) + options$setSeed <- FALSE + unseeded1 <- getBootstrapTables(1) + unseeded2 <- getBootstrapTables(2) + expect_false(identical(unseeded1$pathCoefficients, unseeded2$pathCoefficients)) + expect_false(identical(unseeded1$localTests, unseeded2$localTests)) + + options$setSeed <- TRUE + options$seed <- 123 + expect_identical(getBootstrapTables(1), getBootstrapTables(2)) +}) + test_that("Missing values work", { options <- getOptionsClassical() options$dependent <- "contNormal" From b1012547666fb09f4017be82a3b767f41dc9e79f Mon Sep 17 00:00:00 2001 From: Johnny Date: Tue, 3 Nov 2026 17:13:09 +0100 Subject: [PATCH 8/9] fix: refit classical models when the number of bootstrap replications changes bootstrapSamples was in no dependency list, so changing Replications kept the previous bootstrap. Adds it to .procGetDependencies(), next to errorCalculationMethod and bootstrapCiType. Co-Authored-By: Claude Opus 5.5 --- NEWS.md | 1 + R/classicProcess.R | 4 ++-- tests/testthat/test-classic-process-unit.R | 6 ++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/NEWS.md b/NEWS.md index 4a9379b8..c5435b3d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -21,6 +21,7 @@ * `Set seed` option (Options > Repeatability) in the classical analysis, so bootstrapped standard errors and confidence intervals, and bootstrapped local tests, can be reproduced. ## Fixed +* Changing the number of bootstrap replications in the classical analysis now refits the models; before, the results of the previous number of replications were kept. * Requesting output for a single model (e.g., a plot or a parameter estimates table) no longer recomputes the model summary and R² tables. In the Bayesian analysis, this avoids recomputing WAIC and LOO for every model. * Process models with a categorical predictor no longer error when a factor level label contains a space or other special character (e.g. "emotion regulation"). Such labels are now coerced to syntactically valid names before being used in mean-centering and lavaan model syntax ([Issue #3597](https://github.com/jasp-stats/jasp-issues/issues/3597)). diff --git a/R/classicProcess.R b/R/classicProcess.R index 65c75c1d..f2d71a42 100644 --- a/R/classicProcess.R +++ b/R/classicProcess.R @@ -83,8 +83,8 @@ ClassicProcess <- function(jaspResults, dataset = NULL, options) { .procGetDependencies <- function() { return(c( "dependent", "covariates", "factors", "naAction", "emulation", "estimator", - "meanCenteredModeration", "standardizedModelEstimates", "errorCalculationMethod", "bootstrapCiType", - "mcmcBurnin", "mcmcSamples", "mcmcChains", "seed", "setSeed", "nuPriorMu", + "meanCenteredModeration", "standardizedModelEstimates", "errorCalculationMethod", "bootstrapSamples", + "bootstrapCiType", "mcmcBurnin", "mcmcSamples", "mcmcChains", "seed", "setSeed", "nuPriorMu", "nuPriorSigma", "betaPriorMu", "betaPriorSigma", "psiPriorAlpha", "psiPriorBeta", "rhoPriorAlpha", "rhoPriorBeta", "moderationProbes", "moderationProbeType", "moderationProbesMeanSD" diff --git a/tests/testthat/test-classic-process-unit.R b/tests/testthat/test-classic-process-unit.R index 4939537d..95889ae0 100644 --- a/tests/testthat/test-classic-process-unit.R +++ b/tests/testthat/test-classic-process-unit.R @@ -869,3 +869,9 @@ test_that("Test that .procGetAllModelsDependencies works", { expect_false(any(vapply(deps, function(dep) dep[3] %in% outputOptions, logical(1)))) expect_length(jaspProcess:::.procGetAllModelsDependencies(list(processModels = list())), 0) }) + +test_that("Test that .procGetDependencies includes the bootstrap options", { + # The fitted models depend on these, so changing one must refit (e.g., more bootstrap replications) + deps <- jaspProcess:::.procGetDependencies() + expect_true(all(c("errorCalculationMethod", "bootstrapSamples", "bootstrapCiType", "seed", "setSeed") %in% deps)) +}) From 835a5f0b2f1e403f1e5ddc9c49a5276260c7cfaf Mon Sep 17 00:00:00 2001 From: Johnny Date: Thu, 5 Nov 2026 13:35:16 +0100 Subject: [PATCH 9/9] update bayesian tests --- .../test-bayesian-process-integration.R | 647 +++++++++--------- 1 file changed, 324 insertions(+), 323 deletions(-) diff --git a/tests/testthat/test-bayesian-process-integration.R b/tests/testthat/test-bayesian-process-integration.R index f6da78e7..45d7b67f 100644 --- a/tests/testthat/test-bayesian-process-integration.R +++ b/tests/testthat/test-bayesian-process-integration.R @@ -1409,204 +1409,204 @@ results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) table <- results[["results"]][["modelSummaryTable"]][["data"]] jaspTools::expect_equal_tables(table, - list("Model 1", 100, 1693.77119366349, 1630.67600883238, 67.1893733285394, - 0.54, 1632.57087218328, 67.9647998516443)) + list("Model 1", 100, 1693.22472630535, 1629.6116629699, 67.8297490047765, + 0.585, 1629.95348325244, 67.9176133621196)) table <- results[["results"]][["parEstContainer"]][["collection"]][["parEstContainer_Model 1"]][["collection"]][["parEstContainer_Model 1_covariancesTable"]][["data"]] jaspTools::expect_equal_tables(table, - list(140, -1.10578011683896, 0.444468712602288, "contGamma:contcor2", - -0.307051966656027, -0.28702534711593, "", 0.998981966609724, - "contGamma", 0.399137442235672, 154, 199, -0.401030046025362, - 0.187151878691838, "contcor2", -0.0805066064609414, -0.0770481928535948, - "", 0.999400517970576, "contGamma", 0.151330939284352, - 149, 180, -1.45333525707932, 0.187600853714869, "contGamma:contcor1", - -0.539280415697475, -0.532370111719705, "", 0.998043245933613, - "contGamma", 0.412681583536199, 153, 134, -0.563301932192979, - 0.04502582210312, "contcor1", -0.214483989673051, -0.201128159807714, - "", 0.999298858640328, "contGamma", 0.153726525969987, - 129, 298, 1.97992364162951, 3.270821303163, "contGamma", 2.46235818022523, - 2.41426538328823, "", 1.00918250220483, "contGamma", - 0.351581262559393, 177, 114, 0.83530045161455, 1.53879344346493, - "contNormal", 1.15735725107844, 1.14415356383829, "", - 1.01175339093468, "contNormal", 0.175682906350506, 98, 249, - 0.00547417907820498, 0.00883984534436256, "debCollin1", 0.0070029217491707, - 0.00698050587224585, "", 0.998677903548806, "debCollin1", - 0.000861522560272353, 152, 147, 0.935474291294679, 2.09249461412965, - "contGamma:contcor2", 1.43804576683407, 1.40038093705679, "", - 0.99875528086404, "contcor1", 0.304156629007661, 92, 150, 0.421059081418766, - 0.902709667208345, "contcor2", 0.615716215967707, 0.597152597024933, - "", 0.999442635131443, "contcor1", 0.115782936878333, - 92, 166, 1.52037520471415, 2.77395194035311, "contGamma:contcor1", - 1.99927004240244, 1.93424637458086, "", 0.995209319654455, - "contcor1", 0.32339199823998, 132, 132, 0.769988388203535, 1.35159132263985, - "contcor1", 1.00966123801417, 0.989283744054233, "", - 0.99702026605927, "contcor1", 0.145498297877487, 122, 182, 3.86057636043755, - 7.20310020374271, "contGamma:contcor2", 5.29900951886372, 5.19694225463893, - "", 0.999547400038983, "contGamma:contcor1", 0.840072304050717, - 149, 182, 0.977764162203827, 2.15338955878112, "contcor2", 1.45554747440255, - 1.42981219551963, "", 1.0273419724811, "contGamma:contcor1", - 0.290192777143376, 38, 181, 5.07281542482652, 8.28973784364067, - "contGamma:contcor1", 6.35260426086298, 6.26103237807955, "", - 0.995103903690419, "contGamma:contcor1", 0.861855689402656, - 154, 137, 1.556513489695, 2.97434519709331, "contGamma:contcor2", - 2.20638771556626, 2.17527387916513, "", 1.01274570175417, - "contcor2", 0.349694840125612, 113, 109, 0.729530386416436, - 1.24818736522482, "contcor2", 0.973394629860563, 0.961113499162621, - "", 1.01474824301999, "contcor2", 0.135380923702543, - 136, 213, 5.42480809371025, 9.5606175951128, "contGamma:contcor2", - 7.48660598309586, 7.40101696647511, "", 1.00729664081207, - "contGamma:contcor2", 1.05503132350005, 110)) + list(95, -1.08625910496005, 0.364224566826906, "contGamma:contcor2", + -0.334161296185348, -0.326088836217083, "", 0.999730527717789, + "contGamma", 0.358363547667633, 148, 110, -0.321356249283729, + 0.193123856243137, "contcor2", -0.0959840163515112, -0.101836399679445, + "", 1.00287765731788, "contGamma", 0.130665361154654, + 174, 91, -1.24246925762282, 0.120143359453343, "contGamma:contcor1", + -0.5872745765517, -0.589793448746714, "", 1.00467614204713, + "contGamma", 0.340273226704707, 72, 163, -0.540770714231111, + 0.0383752160280799, "contcor1", -0.238429517823631, -0.233616132840792, + "", 0.995485811952666, "contGamma", 0.146680459428312, + 116, 357, 1.86079546052894, 3.18543386777161, "contGamma", 2.46425056446623, + 2.44716148295214, "", 1.00249372247312, "contGamma", + 0.332282563994788, 106, 314, 0.900870556682937, 1.47039439595774, + "contNormal", 1.15509223236395, 1.12943815949248, "", + 1.00560773014887, "contNormal", 0.158561447357742, 133, 272, + 0.00532890621555802, 0.00912979963999324, "debCollin1", 0.0068040157706966, + 0.00663705751347781, "", 1.00164209437002, "debCollin1", + 0.000919371908338539, 133, 96, 0.956379479912261, 2.09470487826306, + "contGamma:contcor2", 1.44340355747535, 1.41298385202905, "", + 1.01092300157764, "contcor1", 0.279656573241294, 87, 126, 0.43359692986016, + 0.820206367085934, "contcor2", 0.607333062788211, 0.601202041353056, + "", 1.01083930719313, "contcor1", 0.101238918662985, + 100, 139, 1.509732464723, 2.57808835066442, "contGamma:contcor1", + 1.97391074703701, 1.9577787716275, "", 1.05600329740023, + "contcor1", 0.286616927524068, 137, 176, 0.77742344395242, 1.25057880837439, + "contcor1", 0.98648736338812, 0.977081303176568, "", + 1.00354395514371, "contcor1", 0.122020563181446, 154, 111, 3.76466455844276, + 7.45906850006956, "contGamma:contcor2", 5.41440929975628, 5.27688267181329, + "", 1.00024869207489, "contGamma:contcor1", 0.914879997555251, + 94, 99, 0.962568404308051, 2.10568612778086, "contcor2", 1.47045509197808, + 1.43448148501398, "", 1.0039222520292, "contGamma:contcor1", + 0.294067414118234, 104, 150, 4.92134590847031, 8.15930508397999, + "contGamma:contcor1", 6.37463595160487, 6.32379710111159, "", + 1.01659679845447, "contGamma:contcor1", 0.895311324195823, 94, + 113, 1.60491749606624, 3.12353246006672, "contGamma:contcor2", + 2.23970871862693, 2.16935011528491, "", 1.00079987367113, + "contcor2", 0.37397955632887, 95, 139, 0.740387851360677, 1.3130870065321, + "contcor2", 0.975718652570714, 0.959737612845886, "", + 1.00175656567369, "contcor2", 0.139052045867448, 120, 115, 5.65005964431794, + 10.1670527370095, "contGamma:contcor2", 7.663781015381, 7.57771601697862, + "", 0.998864398603919, "contGamma:contcor2", 1.16363937233196, + 148)) table <- results[["results"]][["parEstContainer"]][["collection"]][["parEstContainer_Model 1"]][["collection"]][["parEstContainer_Model 1_mediationEffectsTable"]][["data"]] jaspTools::expect_equal_tables(table, - list(180, -0.175164254946154, 0.221510589728766, 16, 16, "contGamma", - "contNormal", "", 0.0238066598912154, 0.0298257664157129, "", - "", 1.00515384098187, 0.103528146469731, 162, 77, -0.235719775386611, - 0.30609707319795, 50, 16, "contGamma", "contNormal", "", 0.0141904000234719, - 0.0078355127449481, "", "", 0.995444549945092, 0.142831422227466, - 102, 70, -0.528954988225345, 0.524258336991064, 84, 16, "contGamma", - "contNormal", "", 0.0037047058890329, -0.00815831234150002, - "", "", 0.996294865301874, 0.264486686164776, 112, - 80, -0.336667310531986, 0.251967024988196, 16, 50, "contGamma", - "contNormal", "", -0.0088577393708124, -0.0110127729650236, - "", "", 1.00918958622424, 0.15088096444417, 122, 136, - -0.158926177956876, 0.104852302465534, 50, 50, "contGamma", - "contNormal", "", -0.018473999238556, -0.0144301936935509, "", - "", 1.01582071465031, 0.0702317568206226, 95, 94, -0.305000702263558, - 0.317092803384613, 84, 50, "contGamma", "contNormal", "", -0.0289596933729949, - -0.0400580494525863, "", "", 0.995373747076925, 0.156466764765576, - 94, 64, -0.510892191153586, 0.498139255435612, 16, 84, "contGamma", - "contNormal", "", -0.0471909968573129, -0.0363487601591132, - "", "", 1.00573610165568, 0.27869798523232, 128, 63, - -0.335922541310565, 0.274330408335954, 50, 84, "contGamma", - "contNormal", "", -0.0568072567250564, -0.0554671557478265, - "", "", 1.00929701726885, 0.165980291169278, 113, 153, - -0.307061661362052, 0.134503782815686, 84, 84, "contGamma", - "contNormal", "", -0.0672929508594954, -0.0695225639217348, - "", "", 1.01189659054095, 0.109035677125006, 159, 101, - -0.0247213330585478, 0.0154949213233161, 16, 16, "contGamma", - "debCollin1", "contNormal", -0.00122921284059313, -0.000176828874751836, - "", "", 1.00745570038162, 0.0098963273558484, - 132, 59, -0.0340580912543412, 0.016073669972779, 50, 16, "contGamma", - "debCollin1", "contNormal", -0.0031684274833913, -0.00080322680021722, - "", "", 1.01161774635345, 0.0134712174774901, - 97, 70, -0.0510292392545626, 0.0349770067879073, 84, 16, "contGamma", - "debCollin1", "contNormal", -0.00528297221128645, -0.00162338048809232, - "", "", 1.00569089037732, 0.0222895173926444, - 55, 186, -0.0354194930861152, 0.0164454359758523, 16, 50, "contGamma", - "debCollin1", "contNormal", -0.000627379744148592, 0.000219287022623011, - "", "", 1.00744702976833, 0.0121939828590878, - 123, 37, -0.0250982780604699, 0.0148949991222565, 50, 50, "contGamma", - "debCollin1", "contNormal", -0.00256659438694676, -0.00118902701094705, - "", "", 1.02306028208841, 0.0100452433144953, - 56, 43, -0.0566416110588716, 0.0193363390113733, 84, 50, "contGamma", - "debCollin1", "contNormal", -0.00468113911484191, -0.00148815533434619, - "", "", 1.01873346490581, 0.0165245216914321, - 70, 217, -0.04842546896881, 0.0347624429394011, 16, 84, "contGamma", - "debCollin1", "contNormal", 7.89005968685916e-05, 0.000796305894329921, - "", "", 1.00119360803618, 0.0208134519440197, - 116, 94, -0.0429364150377641, 0.01953524918184, 50, 84, "contGamma", - "debCollin1", "contNormal", -0.00186031404592958, 0.000282495246880103, - "", "", 1.00346209187446, 0.0152085471015829, - 91, 34, -0.0456903323527392, 0.019478145244326, 84, 84, "contGamma", - "debCollin1", "contNormal", -0.00397485877382473, -0.00142857783888295, - "", "", 1.02926139950434, 0.0153429259420723, - 81)) + list(195, -0.173682351736758, 0.21688178370042, 16, 16, "contGamma", + "contNormal", "", 0.00654278386084343, -0.00370025984405296, + "", "", 0.999797358129797, 0.105027372131217, 184, + 99, -0.2674796636633, 0.280809607610037, 50, 16, "contGamma", + "contNormal", "", -0.00261854685506238, -0.000858511030904891, + "", "", 1.00198603816999, 0.141147063209823, 95, 66, + -0.525504169227738, 0.470559728008329, 84, 16, "contGamma", + "contNormal", "", -0.0126081803583809, -0.00136478581400297, + "", "", 0.99879066362209, 0.251866337299116, 65, 76, + -0.236606941613819, 0.247201256225244, 16, 50, "contGamma", + "contNormal", "", -0.014329012690406, -0.02754699630709, "", + "", 0.996505613405404, 0.137417016178235, 73, 332, -0.162674500338086, + 0.14859489706769, 50, 50, "contGamma", "contNormal", "", -0.0234903434063118, + -0.0194646540238253, "", "", 0.996204102160961, 0.0739879993240351, + 151, 85, -0.33066749107329, 0.239091757019962, 84, 50, "contGamma", + "contNormal", "", -0.0334799769096304, -0.0195912993703959, + "", "", 0.995541080351004, 0.157070464039399, 91, 57, + -0.505677559933045, 0.496577952524493, 16, 84, "contGamma", + "contNormal", "", -0.0388230786913378, -0.0474613918934423, + "", "", 1.0028125315414, 0.249704921094004, 90, 81, + -0.307781740610852, 0.274816111971464, 50, 84, "contGamma", + "contNormal", "", -0.0479844094072436, -0.0496951526931543, + "", "", 1.01431880244713, 0.15090420926089, 130, 154, + -0.262483539384871, 0.185299235231714, 84, 84, "contGamma", + "contNormal", "", -0.0579740429105622, -0.0710193676067323, + "", "", 1.01323423045752, 0.115894400668743, 128, 31, + -0.0134160595884967, 0.024517464548607, 16, 16, "contGamma", + "debCollin1", "contNormal", 0.00154739405223033, 7.58161319496144e-05, + "", "", 1.08025856472927, 0.00930465021913109, + 111, 5, -0.0254529517724318, 0.0349887114151555, 50, 16, "contGamma", + "debCollin1", "contNormal", 0.00278620513879082, 0.000930656147941854, + "", "", 1.16488783606166, 0.015297138872743, + 27, 6, -0.0410299947439532, 0.0658037544332756, 84, 16, "contGamma", + "debCollin1", "contNormal", 0.00413702077009438, 0.00114400056327888, + "", "", 1.14142419483854, 0.0266130218102079, + 26, 55, -0.0288541911118944, 0.02771687590101, 16, 50, "contGamma", + "debCollin1", "contNormal", 0.00153649123390858, 0.000826631551199544, + "", "", 1.03908410541457, 0.0129620449240413, + 74, 3, -0.0208534930495718, 0.0276470995514311, 50, 50, "contGamma", + "debCollin1", "contNormal", 0.00277530232046906, 0.00241038435854837, + "", "", 1.27439210742095, 0.0123060457129706, + 29, 3, -0.0377050555263724, 0.050804906438363, 84, 50, "contGamma", + "debCollin1", "contNormal", 0.00412611795177262, 0.00251964622660125, + "", "", 1.24716869125818, 0.0211390529782518, + 19, 99, -0.0446891579356106, 0.0499017638717733, 16, 84, "contGamma", + "debCollin1", "contNormal", 0.00152369624757793, 0.000455521920940727, + "", "", 1.01037456188511, 0.0222080889157197, + 90, 7, -0.0338702992418698, 0.0378472522660625, 50, 84, "contGamma", + "debCollin1", "contNormal", 0.00276250733413841, 0.0018994484054926, + "", "", 1.12491592304885, 0.016857025479666, + 98, 3, -0.039744161888052, 0.0393368149062943, 84, 84, "contGamma", + "debCollin1", "contNormal", 0.00411332296544198, 0.00565006250516107, + "", "", 1.28466278765983, 0.0192279694689132, + 22)) table <- results[["results"]][["parEstContainer"]][["collection"]][["parEstContainer_Model 1"]][["collection"]][["parEstContainer_Model 1_pathCoefficientsTable"]][["data"]] jaspTools::expect_equal_tables(table, - list(143, -0.162639392447408, 0.107389417152544, "contGamma", -0.0203206715529496, - -0.0144655662699013, "", "Normal(0,10)", 1.01592794311801, - "contNormal", 0.070219981681631, 116, 23, -1.26494735351279, - 2.01635526103746, "debCollin1", 0.286161933245242, 0.325520323743492, - "", "Normal(0,10)", 1.0542689892764, "contNormal", - 0.857544771710748, 26, 79, -0.271438529371976, 0.787252781283628, - "contcor1", 0.283822180183722, 0.25323027220294, "", - "Normal(0,10)", 1.00401820690305, "contNormal", 0.274551612698555, - 128, 76, -0.251212653449895, 0.239634878462375, "contGamma:contcor1", - -0.00990244039516379, -0.0185449119026858, "", "Normal(0,10)", - 1.00822534785385, "contNormal", 0.134686654434048, 128, 61, - -0.665779620609297, 0.52434754553914, "contcor2", -0.0621813482974446, - -0.0681608185827784, "", "Normal(0,10)", 1.00622210629433, - "contNormal", 0.310021333744703, 87, 60, -0.281469062750617, - 0.233586733047642, "contGamma:contcor2", -0.0342322356550281, - -0.0372427431450717, "", "Normal(0,10)", 1.00092829052877, - "contNormal", 0.132493494930469, 105, 221, -0.020249713008892, - 0.0022252885334867, "contGamma", -0.00939497676200258, -0.00955823647285957, - "", "Normal(0,10)", 1.00764908537541, "debCollin1", - 0.0056404890101736, 66, 329, -0.0358913433220594, 0.041332843681485, - "contcor1", 0.00394389617969163, 0.00212618575055752, "", - "Normal(0,10)", 1.01476481886041, "debCollin1", 0.01993524984759, - 182, 261, -0.0230017591417102, 0.0146217435005917, "contGamma:contcor1", - -0.00453338865104486, -0.00447576570400419, "", "Normal(0,10)", - 1.00644841606524, "debCollin1", 0.00953284286150826, 115, 314, - -0.0324406706385607, 0.0487541880527463, "contcor2", 0.00803101458014618, - 0.0086018084768232, "", "Normal(0,10)", 1.00604268940606, - "debCollin1", 0.0214783501568858, 142, 241, -0.0179102696154205, - 0.0176796862557574, "contGamma:contcor2", 0.000227409936800691, - 0.00036716668540366, "", "Normal(0,10)", 1.01140380265589, - "debCollin1", 0.00945779581816946, 182)) + list(326, -0.162516367287395, 0.144363298863632, "contGamma", -0.024822234252587, + -0.020753266944737, "", "Normal(0,10)", 0.996343282437141, + "contNormal", 0.0742813171760249, 151, 2, -2.06960288953075, + 1.78247132301171, "debCollin1", -0.29715100689637, -0.476600482668766, + "", "Normal(0,10)", 1.38041537562313, "contNormal", + 1.15279754041933, 31, 48, -0.164856045858433, 0.749213163301185, + "contcor1", 0.265717879509864, 0.246538855113319, "", + "Normal(0,10)", 1.00051251468716, "contNormal", 0.236719100533818, + 68, 54, -0.270990436154854, 0.225320879828928, "contGamma:contcor1", + -0.0094339725217854, -0.00417484126874283, "", "Normal(0,10)", + 0.996083448010397, "contNormal", 0.125430046104704, 53, 49, + -0.580811665350709, 0.453985026146509, "contcor2", -0.0919715489202572, + -0.100205346011289, "", "Normal(0,10)", 1.03062934134982, + "contNormal", 0.248021172201841, 76, 69, -0.291505742484325, + 0.218522687927275, "contGamma:contcor2", -0.021873607787937, + -0.0196152650436904, "", "Normal(0,10)", 1.00870493352782, + "contNormal", 0.121444685104788, 70, 278, -0.0193438375502631, + 0.00067238631299476, "contGamma", -0.0096689638568205, -0.00974100278413923, + "", "Normal(0,10)", 0.995027816556879, "debCollin1", + 0.00515378302173381, 152, 186, -0.0292766983881246, 0.0426504387939506, + "contcor1", 0.00565346362160643, 0.00429115434636951, "", + "Normal(0,10)", 1.00870620518226, "debCollin1", 0.0191982138203322, + 134, 229, -0.0255376091953851, 0.0137761952854534, "contGamma:contcor1", + -0.00534418361971656, -0.00644083023743031, "", "Normal(0,10)", + 1.0046117043977, "debCollin1", 0.0101567509428574, 155, 227, + -0.0366436080226745, 0.0461010911816976, "contcor2", 0.0087378821078791, + 0.0112298549478987, "", "Normal(0,10)", 0.998733410298939, + "debCollin1", 0.0213729075296855, 160, 249, -0.0188805663160768, + 0.0192080602583633, "contGamma:contcor2", 6.2588997002551e-07, + 0.000210817741350628, "", "Normal(0,10)", 1.00290870865997, + "debCollin1", 0.0100096833575728, 151)) table <- results[["results"]][["parEstContainer"]][["collection"]][["parEstContainer_Model 1"]][["collection"]][["parEstContainer_Model 1_totalEffectsTable"]][["data"]] jaspTools::expect_equal_tables(table, - list(192, -0.176419062955223, 0.216052226831667, 16, 16, "Total", "contGamma", - "contNormal", 0.0225774470506223, 0.0281889011290565, "", - 1.00119452892422, 0.104096522822997, 162, 78, -0.243957506204456, - 0.315941666546356, 50, 16, "Total", "contGamma", "contNormal", - 0.0110219725400806, 0.00555282442552389, "", 0.995784304278338, - 0.142983541194368, 117, 70, -0.528787429420716, 0.54175865672131, - 84, 16, "Total", "contGamma", "contNormal", -0.00157826632225353, - -0.00133534104455207, "", 0.996680498623672, 0.26616108584909, - 79, 81, -0.336702321352876, 0.256553376203225, 16, 50, "Total", - "contGamma", "contNormal", -0.009485119114961, -0.00867206300349724, - "", 1.00658743690464, 0.152441301182198, 119, 176, - -0.157391653643486, 0.106341782529723, 50, 50, "Total", "contGamma", - "contNormal", -0.0210405936255027, -0.015263636283122, "", - 1.01675119758771, 0.0701404999219642, 95, 93, -0.324037635081689, - 0.291889915486827, 84, 50, "Total", "contGamma", "contNormal", - -0.0336408324878368, -0.0399445777532911, "", 0.995013437661159, - 0.157687357463014, 77, 64, -0.522567803811216, 0.496702420072045, - 16, 84, "Total", "contGamma", "contNormal", -0.0471120962604443, - -0.0329316312015037, "", 1.00643168673991, 0.280805634975281, - 112, 65, -0.339959879796358, 0.279917456306998, 50, 84, "Total", - "contGamma", "contNormal", -0.058667570770986, -0.0508767763341862, - "", 1.00931117394339, 0.166612154096011, 113, 172, - -0.30684777763108, 0.130602674635308, 84, 84, "Total", "contGamma", - "contNormal", -0.0712678096333201, -0.0767781684524591, "", - 1.00597201389188, 0.109400810453912, 159, 101, -0.0247213330585478, - 0.0154949213233161, 16, 16, "Total indirect", "contGamma", "contNormal", - -0.00122921284059313, -0.000176828874751836, "", 1.00745570038162, - 0.0098963273558484, 132, 59, -0.0340580912543412, 0.016073669972779, - 50, 16, "Total indirect", "contGamma", "contNormal", -0.0031684274833913, - -0.00080322680021722, "", 1.01161774635345, 0.0134712174774901, - 97, 70, -0.0510292392545626, 0.0349770067879073, 84, 16, "Total indirect", - "contGamma", "contNormal", -0.00528297221128645, -0.00162338048809232, - "", 1.00569089037732, 0.0222895173926444, 55, 186, - -0.0354194930861152, 0.0164454359758523, 16, 50, "Total indirect", - "contGamma", "contNormal", -0.000627379744148592, 0.000219287022623011, - "", 1.00744702976833, 0.0121939828590878, 123, 37, - -0.0250982780604699, 0.0148949991222565, 50, 50, "Total indirect", - "contGamma", "contNormal", -0.00256659438694676, -0.00118902701094705, - "", 1.02306028208841, 0.0100452433144953, 56, 43, -0.0566416110588716, - 0.0193363390113733, 84, 50, "Total indirect", "contGamma", "contNormal", - -0.00468113911484191, -0.00148815533434619, "", 1.01873346490581, - 0.0165245216914321, 70, 217, -0.04842546896881, 0.0347624429394011, - 16, 84, "Total indirect", "contGamma", "contNormal", 7.89005968685916e-05, - 0.000796305894329921, "", 1.00119360803618, 0.0208134519440197, - 116, 94, -0.0429364150377641, 0.01953524918184, 50, 84, "Total indirect", - "contGamma", "contNormal", -0.00186031404592958, 0.000282495246880103, - "", 1.00346209187446, 0.0152085471015829, 91, 34, -0.0456903323527392, - 0.019478145244326, 84, 84, "Total indirect", "contGamma", "contNormal", - -0.00397485877382473, -0.00142857783888295, "", 1.02926139950434, - 0.0153429259420723, 81)) + list(195, -0.172175298688778, 0.21679931120771, 16, 16, "Total", "contGamma", + "contNormal", 0.00809017791307376, 0.00344165826021509, "", + 1.00374607043212, 0.10508581356254, 182, 94, -0.264869546987337, + 0.278118297746762, 50, 16, "Total", "contGamma", "contNormal", + 0.000167658283728438, 0.00311873347797014, "", 1.01101260264568, + 0.142125657896208, 119, 58, -0.482445986575387, 0.47125381344271, + 84, 16, "Total", "contGamma", "contNormal", -0.00847115958828657, + 0.00229743974147677, "", 1.00426866614326, 0.254957332334752, + 65, 77, -0.244039804354894, 0.270146277950821, 16, 50, "Total", + "contGamma", "contNormal", -0.0127925214564974, -0.0264306440598269, + "", 0.995674450224942, 0.139755302874533, 57, 351, + -0.163025117052484, 0.140492715378662, 50, 50, "Total", "contGamma", + "contNormal", -0.0207150410858428, -0.0219741119450304, "", + 0.996731479200166, 0.074801921527064, 182, 69, -0.337118802669377, + 0.272963859572018, 84, 50, "Total", "contGamma", "contNormal", + -0.0293538589578578, -0.024146514787919, "", 0.999847209956037, + 0.158802010134141, 76, 61, -0.508983704220075, 0.540242206785745, + 16, 84, "Total", "contGamma", "contNormal", -0.0372993824437599, + -0.0457338030515361, "", 1.00096922902921, 0.254543291651079, + 61, 96, -0.303738509209623, 0.275072348346696, 50, 84, "Total", + "contGamma", "contNormal", -0.0452219020731052, -0.0483166779019381, + "", 1.01717670180275, 0.154128002807842, 130, 184, + -0.256985980253621, 0.181399338451299, 84, 84, "Total", "contGamma", + "contNormal", -0.0538607199451202, -0.0620530010700475, "", + 0.997649231190117, 0.117589608333143, 106, 31, -0.0134160595884967, + 0.024517464548607, 16, 16, "Total indirect", "contGamma", "contNormal", + 0.00154739405223033, 7.58161319496144e-05, "", 1.08025856472927, + 0.00930465021913109, 111, 5, -0.0254529517724318, 0.0349887114151555, + 50, 16, "Total indirect", "contGamma", "contNormal", 0.00278620513879082, + 0.000930656147941854, "", 1.16488783606166, 0.015297138872743, + 27, 6, -0.0410299947439532, 0.0658037544332756, 84, 16, "Total indirect", + "contGamma", "contNormal", 0.00413702077009438, 0.00114400056327888, + "", 1.14142419483854, 0.0266130218102079, 26, 55, -0.0288541911118944, + 0.02771687590101, 16, 50, "Total indirect", "contGamma", "contNormal", + 0.00153649123390858, 0.000826631551199544, "", 1.03908410541457, + 0.0129620449240413, 74, 3, -0.0208534930495718, 0.0276470995514311, + 50, 50, "Total indirect", "contGamma", "contNormal", 0.00277530232046906, + 0.00241038435854837, "", 1.27439210742095, 0.0123060457129706, + 29, 3, -0.0377050555263724, 0.050804906438363, 84, 50, "Total indirect", + "contGamma", "contNormal", 0.00412611795177262, 0.00251964622660125, + "", 1.24716869125818, 0.0211390529782518, 19, 99, -0.0446891579356106, + 0.0499017638717733, 16, 84, "Total indirect", "contGamma", "contNormal", + 0.00152369624757793, 0.000455521920940727, "", 1.01037456188511, + 0.0222080889157197, 90, 7, -0.0338702992418698, 0.0378472522660625, + 50, 84, "Total indirect", "contGamma", "contNormal", 0.00276250733413841, + 0.0018994484054926, "", 1.12491592304885, 0.016857025479666, + 98, 3, -0.039744161888052, 0.0393368149062943, 84, 84, "Total indirect", + "contGamma", "contNormal", 0.00411332296544198, 0.00565006250516107, + "", 1.28466278765983, 0.0192279694689132, 22)) @@ -1687,166 +1687,167 @@ results <- jaspTools::runAnalysis("BayesianProcess", "debug.csv", options) table <- results[["results"]][["parEstContainer"]][["collection"]][["parEstContainer_Model 1"]][["collection"]][["parEstContainer_Model 1_covariancesTable"]][["data"]] jaspTools::expect_equal_tables(table, - list(174, -0.0844251089712655, 0.0638737416165507, "facGenderm:contcor2", - -0.0101476117170482, -0.0101764923414383, "", 0.998940411612732, - "facGenderm", 0.0349420167987609, 92, 189, -0.156785472896874, - 0.0449794109330763, "contcor2", -0.0608084695441341, -0.0615866038220158, - "", 1.00758779962043, "facGenderm", 0.0509331658124856, - 150, 139, 0.098016715240886, 0.209082470035926, "facGenderm:facExperimexperimental", - 0.146175971834894, 0.145711631818078, "", 1.02688738211913, - "facGenderm", 0.0299788389292739, 153, 135, -0.0134674486663281, - 0.0889030234672452, "facExperimexperimental", 0.0349725024260161, - 0.0347050588586803, "", 1.01153255470051, "facGenderm", - 0.0265445955739178, 131, 102, 0.195324238720501, 0.345908289019366, - "facGenderm", 0.263020264742172, 0.260857186208784, "", - 1.02462758226954, "facGenderm", 0.0399208405525256, 154, 347, - 0.840057141070582, 1.53392200271342, "contNormal", 1.1279926868422, - 1.12302749057377, "", 1.00082803994315, "contNormal", - 0.167965476844233, 116, 220, 0.00547357892766102, 0.00954777268630914, - "debCollin1", 0.00713219359636282, 0.0069741601221662, "", - 0.995067957245349, "debCollin1", 0.00111021280423279, 106, 247, - -0.138084915446199, 0.00352269141417142, "facGenderm:contcor2", - -0.060007589799769, -0.0598806497745945, "", 1.00257919225315, - "facExperimexperimental", 0.0365270015368796, 184, 185, -0.162917631560786, - 0.0412097511608624, "contcor2", -0.0604085679743879, -0.0549177153287991, - "", 1.00199576088392, "facExperimexperimental", 0.0534790203516274, - 142, 191, 0.0988198351223463, 0.21037315885912, "facGenderm:facExperimexperimental", - 0.14393502925008, 0.14281717889876, "", 0.997691993833799, - "facExperimexperimental", 0.0279875747238634, 145, 225, 0.191262996107586, - 0.36235140311183, "facExperimexperimental", 0.259732176562213, - 0.254772199459658, "", 0.997116746809252, "facExperimexperimental", - 0.0401634129899251, 153, 168, -0.127909118364966, -0.00871403334336523, - "facGenderm:contcor2", -0.0681398584425141, -0.0669122149648511, - "", 1.03524342962459, "facGenderm:facExperimexperimental", - 0.0317647248998065, 116, 166, -0.188905436732074, -0.0107112049712024, - "contcor2", -0.0943660312846713, -0.091424739412201, "", - 1.03685436704423, "facGenderm:facExperimexperimental", 0.0458284335786479, - 147, 217, 0.159122911215857, 0.279960507516104, "facGenderm:facExperimexperimental", - 0.20871618496456, 0.20689948932886, "", 1.00640177151173, - "facGenderm:facExperimexperimental", 0.0323688619402047, 131, - 279, 0.311799179398307, 0.639270252214261, "facGenderm:contcor2", - 0.44342670050049, 0.438891883267607, "", 0.99726558269231, - "contcor2", 0.0802339382909809, 120, 291, 0.806583734964407, - 1.36891985939496, "contcor2", 1.02609969353655, 0.992970630710759, - "", 0.997992049342911, "contcor2", 0.147762977262825, - 179, 395, 0.349660849377926, 0.603739240664339, "facGenderm:contcor2", - 0.460111606600185, 0.451427345191205, "", 0.996071584978056, - "facGenderm:contcor2", 0.0670810473609467, 217)) + list(174, -0.0844236355139998, 0.0638749598900535, "facGenderm:contcor2", + -0.0101472059891128, -0.0101744872630842, "", 0.998895597560712, + "facGenderm", 0.0349408568796145, 92, 189, -0.156788243268401, + 0.0449801752643136, "contcor2", -0.0608082012127363, -0.061583632338628, + "", 1.00678056564402, "facGenderm", 0.0509326616868028, + 150, 139, 0.0980248150491693, 0.209081197915647, "facGenderm:facExperimexperimental", + 0.146175795039892, 0.145706016890601, "", 1.02692477712257, + "facGenderm", 0.0299792179773541, 153, 135, -0.0134673528848354, + 0.088906696953491, "facExperimexperimental", 0.0349726155632284, + 0.0347094595027335, "", 1.01153255470051, "facGenderm", + 0.0265450348385468, 131, 102, 0.195319018906227, 0.345908541266477, + "facGenderm", 0.263020327387673, 0.260854515091559, "", + 1.02462758226954, "facGenderm", 0.039921659844121, 154, 347, + 0.840056936874269, 1.53382949624726, "contNormal", 1.12799112923929, + 1.12303675246392, "", 1.00111581443711, "contNormal", + 0.167961674107186, 116, 220, 0.00547385454821578, 0.00954786037073813, + "debCollin1", 0.00713219598167237, 0.00697403117942412, "", + 0.995067957245349, "debCollin1", 0.00111022897716757, 106, 247, + -0.13807967205083, 0.00351917265515121, "facGenderm:contcor2", + -0.060007961409022, -0.059881014067051, "", 1.00325068617582, + "facExperimexperimental", 0.0365266777600382, 184, 184, -0.162913795980379, + 0.0412121242603446, "contcor2", -0.0604095694024072, -0.0549172317252299, + "", 1.00199576088392, "facExperimexperimental", 0.0534793173620919, + 142, 191, 0.0988191079585608, 0.210370833782717, "facGenderm:facExperimexperimental", + 0.14393556660926, 0.142812027779419, "", 0.997678072775379, + "facExperimexperimental", 0.0279886581004617, 145, 225, 0.191258064263059, + 0.362369656531212, "facExperimexperimental", 0.259733112732179, + 0.254768718031403, "", 0.997116746809252, "facExperimexperimental", + 0.0401640187385519, 153, 171, -0.127914793886895, -0.00871348831250935, + "facGenderm:contcor2", -0.068139955703562, -0.0669183027923071, + "", 1.03469374408089, "facGenderm:facExperimexperimental", + 0.0317637310119703, 116, 166, -0.188909526006136, -0.0107024955524541, + "contcor2", -0.0943659575669936, -0.0914276651987763, "", + 1.03657773111155, "facGenderm:facExperimexperimental", 0.0458288243245446, + 147, 216, 0.159120636630008, 0.279959744514357, "facGenderm:facExperimexperimental", + 0.208716339291203, 0.206897305510754, "", 1.00642930848339, + "facGenderm:facExperimexperimental", 0.0323700902596528, 131, + 279, 0.311808370189961, 0.639269978437555, "facGenderm:contcor2", + 0.443427282706811, 0.43890928681234, "", 0.997442099771186, + "contcor2", 0.0802348887339926, 120, 291, 0.806586052566888, + 1.36891463069141, "contcor2", 1.02610167523013, 0.992983931164982, + "", 0.998019909001967, "contcor2", 0.147758551974158, + 179, 395, 0.349660525071563, 0.603728944560356, "facGenderm:contcor2", + 0.460111189902261, 0.451422215260858, "", 0.996071584978056, + "facGenderm:contcor2", 0.0670810579692373, 217)) table <- results[["results"]][["parEstContainer"]][["collection"]][["parEstContainer_Model 1"]][["collection"]][["parEstContainer_Model 1_mediationEffectsTable"]][["data"]] jaspTools::expect_equal_tables(table, - list(82, -0.191836125702442, 1.31951490045017, 16, 0, "m", "facGender", - "contNormal", "", 0.661129746218312, 0.74598490864103, "", - "", 0.999379590166104, 0.397608627962179, 108, 82, -0.613745810348523, - 1.13756628363991, 16, 1, "m", "facGender", "contNormal", "", - 0.357047863774022, 0.409525666882302, "", "", 1.01790895890798, - 0.430614590721088, 93, 68, 0.104520045593472, 1.18214495302642, - 50, 0, "m", "facGender", "contNormal", "", 0.654934676882882, - 0.651507492414831, "", "", 1.00073147515725, 0.306386527082308, - 81, 56, -0.312870269016481, 0.930269997361262, 50, 1, "m", "facGender", - "contNormal", "", 0.350852794438591, 0.35963786533413, "", - "", 1.0295821860891, 0.316432847153676, 59, 90, -0.145085319879829, - 1.36648244092637, 84, 0, "m", "facGender", "contNormal", "", - 0.647664462418602, 0.661647805531622, "", "", 1.00405579454645, - 0.387840630327321, 102, 75, -0.320494717591706, 1.10518419990617, - 84, 1, "m", "facGender", "contNormal", "", 0.343582579974312, - 0.337399494104808, "", "", 1.01366577418057, 0.363235268966721, - 117, 190, -0.100902195386793, 0.0917273447998423, 16, 0, "m", - "facGender", "debCollin1", "contNormal", 0.00247852066106476, - 0.000461474422860513, "", "", 1.00026753369468, - 0.0422701843525073, 145, 103, -0.0734561675777281, 0.0564178659853693, - 16, 1, "m", "facGender", "debCollin1", "contNormal", -0.00160124181811128, - 1.03694380666496e-05, "", "", 1.00876392994231, - 0.0340394917246542, 118, 155, -0.0636113280841656, 0.0568520924972602, - 50, 0, "m", "facGender", "debCollin1", "contNormal", 0.00209727580305588, - 0.000549597896622437, "", "", 1.00567411894243, - 0.0330735749449848, 94, 41, -0.0657159093276131, 0.0661405975998291, - 50, 1, "m", "facGender", "debCollin1", "contNormal", -0.00198248667612016, - -0.00116715289576816, "", "", 1.01840640417775, - 0.030053236012331, 105, 145, -0.060057750909041, 0.0724825398666654, - 84, 0, "m", "facGender", "debCollin1", "contNormal", 0.00164986646329655, - 0.00048152542233328, "", "", 1.0175038857377, - 0.0359073032827735, 101, 45, -0.0814934104513791, 0.0868307230719548, - 84, 1, "m", "facGender", "debCollin1", "contNormal", -0.00242989601587949, - -0.0017083505464987, "", "", 1.00657567880362, - 0.0401497233256559, 97)) + list(82, -0.191878509430502, 1.31950241083847, 16, 0, "m", "facGender", + "contNormal", "", 0.661129000597408, 0.745963207692577, "", + "", 0.999644808365157, 0.397608139135071, 108, 82, -0.6137955935246, + 1.13756509890899, 16, 1, "m", "facGender", "contNormal", "", + 0.35704471235644, 0.409527460839267, "", "", 1.01727448178858, + 0.430615482316083, 93, 68, 0.104571490792747, 1.18212502295418, + 50, 0, "m", "facGender", "contNormal", "", 0.654936068206708, + 0.651499411693291, "", "", 1.00073147515725, 0.306386402756289, + 81, 56, -0.312852470648349, 0.930260090415481, 50, 1, "m", "facGender", + "contNormal", "", 0.35085177996574, 0.359622278835557, "", + "", 1.0295821860891, 0.316432667623736, 59, 90, -0.14505066809368, + 1.36648323814686, 84, 0, "m", "facGender", "contNormal", "", + 0.647668361550759, 0.66165011356623, "", "", 1.00405579454645, + 0.387842007986826, 102, 75, -0.320513621313083, 1.10517781655838, + 84, 1, "m", "facGender", "contNormal", "", 0.343584073309791, + 0.337412126092534, "", "", 1.01357643247615, 0.363234759577075, + 117, 190, -0.100973511231866, 0.0917749263102377, 16, 0, "m", + "facGender", "debCollin1", "contNormal", 0.0024809976757283, + 0.000461914745579604, "", "", 1.00007594448556, + 0.0422727972660215, 145, 103, -0.0735002446589368, 0.056454930949015, + 16, 1, "m", "facGender", "debCollin1", "contNormal", -0.00159999841398309, + 1.03669785213736e-05, "", "", 1.00880353525171, + 0.0340419468435645, 118, 155, -0.063663485763366, 0.0568838351629101, + 50, 0, "m", "facGender", "debCollin1", "contNormal", 0.00209908132496837, + 0.00054942066906401, "", "", 1.00564647863681, + 0.0330779069551802, 94, 41, -0.0657439165053475, 0.0661674542041897, + 50, 1, "m", "facGender", "debCollin1", "contNormal", -0.00198191476474302, + -0.0011645355185909, "", "", 1.01840509246632, + 0.0300532978225451, 105, 145, -0.0600653355047617, 0.0724974662861756, + 84, 0, "m", "facGender", "debCollin1", "contNormal", 0.00165088395588331, + 0.000481938396550926, "", "", 1.01861561732013, + 0.0359171495750646, 101, 45, -0.0816038804878075, 0.0867858935498839, + 84, 1, "m", "facGender", "debCollin1", "contNormal", -0.00243011213382809, + -0.00170736500312087, "", "", 1.00662460700973, + 0.0401516596930216, 97)) table <- results[["results"]][["parEstContainer"]][["collection"]][["parEstContainer_Model 1"]][["collection"]][["parEstContainer_Model 1_pathCoefficientsTable"]][["data"]] jaspTools::expect_equal_tables(table, - list(68, 0.0922513675649501, 1.18070824597082, "facGenderm", 0.65467627847631, - 0.647038377575234, "", "Normal(0,10)", 1.00083991268707, - "contNormal", 0.305681356575256, 81, 20, -1.927376244171, 2.676207875817, - "debCollin1", 0.197915193159127, 0.0900959335674483, "", - "Normal(0,10)", 1.03093346778237, "contNormal", 1.18103112672184, - 31, 62, -0.398775481981878, 0.784099684360749, "facExperimexperimental", - 0.199476584204629, 0.202190793857861, "", "Normal(0,10)", - 1.04710226686027, "contNormal", 0.287020467556949, 23, 43, -1.13738555797337, - 0.617487815337192, "facGenderm:facExperimexperimental", -0.30408188244429, - -0.311119008544788, "", "Normal(0,10)", 1.0290949412596, - "contNormal", 0.434588939654575, 67, 114, -0.233737465506069, - 0.40065215335306, "contcor2", 0.073710398751098, 0.0764923088233239, - "", "Normal(0,10)", 0.998924286573345, "contNormal", - 0.148065686967297, 104, 144, -0.474944752512803, 0.445426983443596, - "facGenderm:contcor2", -0.0064924222756559, -0.0292401623094652, - "", "Normal(0,10)", 1.00556342316609, "contNormal", - 0.238324629494883, 119, 186, -0.0447366513330847, 0.0539675369854098, - "facGenderm", 0.00602750096722916, 0.00740713060813046, "", - "Normal(0,10)", 0.999723913542977, "debCollin1", 0.0247685759104635, - 154, 192, -0.0498776185641672, 0.0470204079493371, "facExperimexperimental", - -0.00374255540720738, -0.00503306827464118, "", "Normal(0,10)", - 0.99588845831576, "debCollin1", 0.0249627400236845, 148, 202, - -0.0918377222228258, 0.0398309215289809, "facGenderm:facExperimexperimental", - -0.0226274551589106, -0.0214300684154702, "", "Normal(0,10)", - 1.01968183524231, "debCollin1", 0.0362530026521001, 135, 198, - -0.0160248863645047, 0.0223105168550628, "contcor2", 0.00383641507990415, - 0.00423837674507292, "", "Normal(0,10)", 1.0970573759656, - "debCollin1", 0.0109507948855639, 134, 223, -0.0397499158127657, - 0.0258598454170336, "facGenderm:contcor2", -0.00522222294465848, - -0.00510111391162145, "", "Normal(0,10)", 1.01065364347226, - "debCollin1", 0.0166459636232476, 172)) + list(68, 0.0923020191473048, 1.18068736559089, "facGenderm", 0.654677758932814, + 0.647037071780223, "", "Normal(0,10)", 1.00083991268707, + "contNormal", 0.305681274963444, 81, 20, -1.92741865532647, + 2.67623412817762, "debCollin1", 0.197912736730353, 0.0901154589433409, + "", "Normal(0,10)", 1.03093346778237, "contNormal", + 1.18104236201294, 31, 62, -0.398775131331559, 0.784115799044069, + "facExperimexperimental", 0.199476169129923, 0.202198624183788, + "", "Normal(0,10)", 1.04710226686027, "contNormal", + 0.287022741864475, 23, 43, -1.13738573224891, 0.617511080349004, + "facGenderm:facExperimexperimental", -0.304084288240968, -0.311144280061046, + "", "Normal(0,10)", 1.0290949412596, "contNormal", + 0.434590440653995, 67, 114, -0.233742269780831, 0.400651078863377, + "contcor2", 0.0737078857468107, 0.0764875502930769, "", + "Normal(0,10)", 0.998940240164328, "contNormal", 0.148065767032666, + 104, 144, -0.474958784498514, 0.445435146821907, "facGenderm:contcor2", + -0.00649018276116166, -0.0292368182303984, "", "Normal(0,10)", + 1.00550056967693, "contNormal", 0.238325332319973, 119, 186, + -0.0447484282553966, 0.0539926383669284, "facGenderm", 0.0060289240378107, + 0.00741865475570109, "", "Normal(0,10)", 0.999723913542977, + "debCollin1", 0.0247701780708921, 154, 192, -0.049878535458753, + 0.0470214713170861, "facExperimexperimental", -0.00374506456681068, + -0.00501383395028876, "", "Normal(0,10)", 0.996031939252042, + "debCollin1", 0.0249634692847362, 148, 203, -0.0918437859807034, + 0.0398462503468324, "facGenderm:facExperimexperimental", -0.0226288864610864, + -0.021419694548727, "", "Normal(0,10)", 1.0197400944043, + "debCollin1", 0.036251674320413, 135, 198, -0.0160124617640794, + 0.0223499710819246, "contcor2", 0.0038352197128212, 0.00428687041551302, + "", "Normal(0,10)", 1.09755280371502, "debCollin1", + 0.0109552647186332, 148, 222, -0.0397434047589209, 0.0258656567895738, + "facGenderm:contcor2", -0.00522520234609658, -0.00509339508179825, + "", "Normal(0,10)", 1.01019531575242, "debCollin1", + 0.0166477626895952, 172)) table <- results[["results"]][["parEstContainer"]][["collection"]][["parEstContainer_Model 1"]][["collection"]][["parEstContainer_Model 1_totalEffectsTable"]][["data"]] jaspTools::expect_equal_tables(table, - list(82, -0.178381582075549, 1.31990254479899, 16, 0, "m", "Total", - "facGender", "contNormal", 0.663608266879377, 0.738494269200506, - "", 0.997258046082294, 0.398232598315837, 120, 74, - -0.618480493481946, 1.14953102693075, 16, 1, "m", "Total", "facGender", - "contNormal", 0.355446621955911, 0.399579679773466, "", - 1.01878778975416, 0.432947372874716, 93, 67, 0.0649759824159949, - 1.17002261235334, 50, 0, "m", "Total", "facGender", "contNormal", - 0.657031952685938, 0.664768471517875, "", 0.999824941393204, - 0.308376545357745, 104, 47, -0.314206608739156, 0.918435296158521, - 50, 1, "m", "Total", "facGender", "contNormal", 0.348870307762471, - 0.356866141566677, "", 1.03428268925937, 0.315857621327769, - 59, 87, -0.200224719373597, 1.36823944581218, 84, 0, "m", "Total", - "facGender", "contNormal", 0.649314328881899, 0.649643899794557, - "", 1.00279229154323, 0.392300264719387, 103, 78, -0.332832051730568, - 1.12407108537852, 84, 1, "m", "Total", "facGender", "contNormal", - 0.341152683958433, 0.314974650752946, "", 1.01611703985661, - 0.360815759645416, 126, 190, -0.100902195386793, 0.0917273447998423, - 16, 0, "m", "Total indirect", "facGender", "contNormal", 0.00247852066106476, - 0.000461474422860513, "", 1.00026753369468, 0.0422701843525073, - 145, 103, -0.0734561675777281, 0.0564178659853693, 16, 1, "m", - "Total indirect", "facGender", "contNormal", -0.00160124181811128, - 1.03694380666496e-05, "", 1.00876392994231, 0.0340394917246542, - 118, 155, -0.0636113280841656, 0.0568520924972602, 50, 0, "m", - "Total indirect", "facGender", "contNormal", 0.00209727580305588, - 0.000549597896622437, "", 1.00567411894243, 0.0330735749449848, - 94, 41, -0.0657159093276131, 0.0661405975998291, 50, 1, "m", - "Total indirect", "facGender", "contNormal", -0.00198248667612016, - -0.00116715289576816, "", 1.01840640417775, 0.030053236012331, - 105, 145, -0.060057750909041, 0.0724825398666654, 84, 0, "m", - "Total indirect", "facGender", "contNormal", 0.00164986646329655, - 0.00048152542233328, "", 1.0175038857377, 0.0359073032827735, - 101, 45, -0.0814934104513791, 0.0868307230719548, 84, 1, "m", - "Total indirect", "facGender", "contNormal", -0.00242989601587949, - -0.0017083505464987, "", 1.00657567880362, 0.0401497233256559, + list(82, -0.178476523387352, 1.31988973454839, 16, 0, "m", "Total", + "facGender", "contNormal", 0.663609998273136, 0.738456550933998, + "", 0.997258046082294, 0.39823270604726, 120, 74, -0.618545693759456, + 1.14952357705646, 16, 1, "m", "Total", "facGender", "contNormal", + 0.355444713942457, 0.399578237337209, "", 1.01897077469534, + 0.432945114136515, 93, 67, 0.0651103869588595, 1.17010501923259, + 50, 0, "m", "Total", "facGender", "contNormal", 0.657035149531676, + 0.664759169534624, "", 0.999824941393204, 0.308377217311972, + 104, 47, -0.314186463842191, 0.918437278136057, 50, 1, "m", + "Total", "facGender", "contNormal", 0.348869865200997, 0.356861175622985, + "", 1.03428268925937, 0.315854821655784, 59, 87, -0.200211312005056, + 1.36825527421257, 84, 0, "m", "Total", "facGender", "contNormal", + 0.649319245506642, 0.649658360958646, "", 1.00279229154323, + 0.392298808425743, 103, 78, -0.332833255500162, 1.12396184375591, + 84, 1, "m", "Total", "facGender", "contNormal", 0.341153961175963, + 0.315017308049394, "", 1.01611703985661, 0.360810921199598, + 126, 190, -0.100973511231866, 0.0917749263102377, 16, 0, "m", + "Total indirect", "facGender", "contNormal", 0.0024809976757283, + 0.000461914745579604, "", 1.00007594448556, 0.0422727972660215, + 145, 103, -0.0735002446589368, 0.056454930949015, 16, 1, "m", + "Total indirect", "facGender", "contNormal", -0.00159999841398309, + 1.03669785213736e-05, "", 1.00880353525171, 0.0340419468435645, + 118, 155, -0.063663485763366, 0.0568838351629101, 50, 0, "m", + "Total indirect", "facGender", "contNormal", 0.00209908132496837, + 0.00054942066906401, "", 1.00564647863681, 0.0330779069551802, + 94, 41, -0.0657439165053475, 0.0661674542041897, 50, 1, "m", + "Total indirect", "facGender", "contNormal", -0.00198191476474302, + -0.0011645355185909, "", 1.01840509246632, 0.0300532978225451, + 105, 145, -0.0600653355047617, 0.0724974662861756, 84, 0, "m", + "Total indirect", "facGender", "contNormal", 0.00165088395588331, + 0.000481938396550926, "", 1.01861561732013, 0.0359171495750646, + 101, 45, -0.0816038804878075, 0.0867858935498839, 84, 1, "m", + "Total indirect", "facGender", "contNormal", -0.00243011213382809, + -0.00170736500312087, "", 1.00662460700973, 0.0401516596930216, 97))