From 0f7d4c1d6ee22b781548ef6d3c3f806d6f30de5b Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 6 Jun 2024 21:31:15 +0200 Subject: [PATCH 001/127] effect sizes draft --- NAMESPACE | 1 + R/effectsizecomputation.R | 295 ++++++++++ inst/Description.qml | 15 + inst/help/EffectSizeComputation.md | 301 ++++++++++ inst/qml/EffectSizeComputation.qml | 890 +++++++++++++++++++++++++++++ 5 files changed, 1502 insertions(+) create mode 100644 R/effectsizecomputation.R create mode 100644 inst/help/EffectSizeComputation.md create mode 100644 inst/qml/EffectSizeComputation.qml diff --git a/NAMESPACE b/NAMESPACE index 0aa4b33d..8f769b6d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -11,3 +11,4 @@ export(.ClassicalMetaAnalysisCommon) export(.BayesianMetaAnalysisCommon) export(PenalizedMetaAnalysis) export(BayesianBinomialMetaAnalysis) +export(EffectSizeComputation) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R new file mode 100644 index 00000000..25feec5f --- /dev/null +++ b/R/effectsizecomputation.R @@ -0,0 +1,295 @@ + +EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { + + + return() +} + + +getEscalcDataOptions <- function(design, measurement, effectSizeValue, options, dataset) { + + if (design == "independentGroups") { + if (measurement == "quantitative") { + inputs <- list( + n1i = dataset[[options[["nGroup1"]]]], + n2i = dataset[[options[["nGroup2"]]]], + m1i = dataset[[options[["meanGroup1"]]]], + m2i = dataset[[options[["meanGroup2"]]]], + sd1i = dataset[[options[["sdGroup1"]]]], + sd2i = dataset[[options[["sdGroup2"]]]] + ) + } else if (measurement == "binary") { + inputs <- list( + ai = dataset[[options[["nGroup1Outcome1"]]]], + bi = dataset[[options[["nGroup1Outcome2"]]]], + ci = dataset[[options[["nGroup2Outcome1"]]]], + di = dataset[[options[["nGroup2Outcome2"]]]], + n1i = dataset[[options[["nGroup1"]]]], + n2i = dataset[[options[["nGroup2"]]]], + x1i = dataset[[options[["eventsGroup1"]]]], + x2i = dataset[[options[["eventsGroup2"]]]] + ) + } else if (measurement == "countsPerTime") { + inputs <- list( + t1i = dataset[[options[["personTimeGroup1"]]]], + t2i = dataset[[options[["personTimeGroup2"]]]], + x1i = dataset[[options[["eventsGroup1"]]]], + x2i = dataset[[options[["eventsGroup2"]]]] + ) + } else if (measurement == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) { + inputs <- list( + ai = dataset[[options[["nGroup1Outcome1"]]]], + bi = dataset[[options[["nGroup1Outcome2"]]]], + ci = dataset[[options[["nGroup2Outcome1"]]]], + di = dataset[[options[["nGroup2Outcome2"]]]], + n1i = dataset[[options[["nGroup1"]]]], + n2i = dataset[[options[["nGroup2"]]]] + ) + } else if (measurement == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) { + inputs <- list( + n1i = dataset[[options[["nGroup1"]]]], + n2i = dataset[[options[["nGroup2"]]]], + m1i = dataset[[options[["meanGroup1"]]]], + m2i = dataset[[options[["meanGroup2"]]]], + sd1i = dataset[[options[["sdGroup1"]]]], + sd2i = dataset[[options[["sdGroup2"]]]] + ) + } + } else if (design == "variableAssociation") { + if (measurement == "quantitative") { + inputs <- list( + ri = dataset[[options[["rawCorrelations"]]]], + ni = dataset[[options[["sampleSizes"]]]], + ti = dataset[[options[["tStatistics"]]]], + pi = dataset[[options[["pValues"]]]], + fi = dataset[[options[["fStatistics"]]]] + ) + } else if (measurement == "binary") { + inputs <- list( + ai = dataset[[options[["nVariable1Outcome+"]]]], + bi = dataset[[options[["nVariable1Outcome-"]]]], + ci = dataset[[options[["nVariable2Outcome+"]]]], + di = dataset[[options[["nVariable2Outcome-"]]]], + n1i = dataset[[options[["nRow1"]]]], + n2i = dataset[[options[["nRow2"]]]] + ) + } else if (measurement == "mixed") { + inputs <- list( + ri = dataset[[options[["rawCorrelations"]]]], + ni = dataset[[options[["sampleSizes"]]]], + ti = dataset[[options[["tStatistics"]]]], + pi = dataset[[options[["pValues"]]]], + fi = dataset[[options[["fStatistics"]]]], + ai = dataset[[options[["nVariable1Outcome+"]]]], + bi = dataset[[options[["nVariable1Outcome-"]]]], + ci = dataset[[options[["nVariable2Outcome+"]]]], + di = dataset[[options[["nVariable2Outcome-"]]]] + ) + } + } else if (design == "singleGroup") { + if (measurement == "quantitative") { + inputs <- list( + mi = dataset[[options[["complementFrequencies"]]]], + sdi = dataset[[options[["standardDeviations"]]]], + ni = dataset[[options[["sampleSizes"]]]], + yi = dataset[[options[["observedEffectSizes"]]]], + vi = dataset[[options[["samplingVariances"]]]], + sei = dataset[[options[["standardErrors"]]]], + m1i = dataset[[options[["meanSample1"]]]] + ) + } else if (measurement == "binary") { + inputs <- list( + xi = dataset[[options[["eventFrequencies"]]]], + mi = dataset[[options[["complementFrequencies"]]]], + ni = dataset[[options[["sampleSizes"]]]], + yi = dataset[[options[["observedEffectSizes"]]]], + vi = dataset[[options[["samplingVariances"]]]], + sei = dataset[[options[["standardErrors"]]]] + ) + } else if (measurement == "countsPerTime") { + inputs <- list( + x1i = dataset[[options[["eventsSample1"]]]], + t1i = dataset[[options[["totalPersonTimes"]]]], + ni = dataset[[options[["sampleSizes"]]]], + yi = dataset[[options[["observedEffectSizes"]]]], + vi = dataset[[options[["samplingVariances"]]]], + sei = dataset[[options[["standardErrors"]]]] + ) + } + } else if (design == "repeatedMeasuresOrMatchedGroups") { + if (measurement == "quantitative") { + inputs <- list( + n1i = dataset[[options[["nTimePoint1"]]]], + n2i = dataset[[options[["nTimePoint2"]]]], + m1i = dataset[[options[["meanTimePoint1"]]]], + m2i = dataset[[options[["meanTimePoint2"]]]], + sd1i = dataset[[options[["sdTimePoint1"]]]], + sd2i = dataset[[options[["sdTimePoint2"]]]] + ) + } else if (measurement == "binary") { + inputs <- list( + ai = dataset[[options[["nTreatment1Outcome1Treatment2Outcome2+"]]]], + bi = dataset[[options[["nTreatment1Outcome2Treatment2Outcome1+"]]]], + ci = dataset[[options[["nTreatment2Outcome1Treatment1Outcome2+"]]]], + di = dataset[[options[["nTreatment2Outcome2Treatment1Outcome1+"]]]], + n1i = dataset[[options[["nTimePoint1"]]]], + n2i = dataset[[options[["nTimePoint2"]]]], + x1i = dataset[[options[["eventsTimePoint1"]]]], + x2i = dataset[[options[["eventsTimePoint2"]]]] + ) + } + } else if (design == "other") { + if (effectSizeValue == "ARAW" || effectSizeValue == "AHW" || effectSizeValue == "ABT") { + inputs <- list( + ai = dataset[[options[["alpha"]]]], + bi = dataset[[options[["beta"]]]], + ci = dataset[[options[["gamma"]]]], + di = dataset[[options[["delta"]]]] + ) + } else if (effectSizeValue == "REH") { + inputs <- list( + ai = dataset[[options[["nHomozygousDominantAlleles"]]]], + bi = dataset[[options[["nHomozygousRecessiveAlleles"]]]], + ci = dataset[[options[["nHeterozygousAlleles"]]]] + ) + } else if (effectSizeValue == "R2" || effectSizeValue == "ZR2") { + inputs <- list( + r2i = dataset[[options[["rSquared"]]]], + ni = dataset[[options[["sampleSizes"]]]] + ) + } + } + + return(inputs) +} +getEscalcAddOption <- function(design, measurement, effectSizeValue, options) { + + # Conditions for when add is appropriate + if ((design == "independentGroups" && measurement == "binary" && (effectSize %in% c("RR", "OR", "RD", "AS", "PETO"))) || + (design == "independentGroups" && measurement == "countsPerTime") || + (design == "repeatedMeasuresOrMatchedGroups" && measurement == "binary") || + (design == "singleGroup" && measurement == "binary") || + (design == "singleGroup" && measurement == "countsPerTime") || + (design == "variableAssociation" && measurement == "binary") || + (design == "independentGroups" && measurement == "mixed" && effectSize %in% c("D2ORN", "D2ORL"))) { + return(options[["add"]]) + } else { + return(NULL) + } +} +getEscalcToOption <- function(design, measurement, effectSizeValue, options) { + + # Conditions for when to is appropriate + if ((design == "independentGroups" && measurement == "binary") || + (design == "independentGroups" && measurement == "countsPerTime") || + (design == "repeatedMeasuresOrMatchedGroups" && measurement == "binary") || + (design == "singleGroup" && measurement == "binary") || + (design == "singleGroup" && measurement == "countsPerTime") || + (design == "variableAssociation" && measurement == "binary") || + (design == "independentGroups" && measurement == "mixed" && effectSize %in% c("D2ORN", "D2ORL"))) { + return(options[["to"]]) + } else { + return(NULL) # Return NULL if 'to' is not appropriate for the given conditions + } +} +getEscalcDrop00Option <- function(design, measurement, effectSizeValue, options) { + + # Conditions for when drop00 is appropriate + if ((design == "independentGroups" && measurement == "binary") || + (design == "independentGroups" && measurement == "countsPerTime") || + (design == "repeatedMeasuresOrMatchedGroups" && measurement == "binary") || + (design == "singleGroup" && measurement == "binary") || + (design == "singleGroup" && measurement == "countsPerTime") || + (design == "variableAssociation" && measurement == "binary") || + (design == "independentGroups" && measurement == "mixed" && effectSize %in% c("D2ORN", "D2ORL"))) { + return(options[["dropStudiesWithNoCasesOrEvents"]]) + } else { + return(NULL) + } +} +getEscalcVtypeOption <- function(design, measurement, effectSizeValue, options) { + + # Conditions for when vtype is appropriate + if ((design == "independentGroups" && measurement == "quantitative") || + (design == "independentGroups" && measurement == "binary") || + (design == "independentGroups" && measurement == "countsPerTime") || + (design == "independentGroups" && measurement == "mixed" && (effectSize %in% c("PBIT", "OR2DN", "OR2DL"))) || + (design == "variableAssociation" && measurement == "quantitative") || + (design == "variableAssociation" && measurement == "binary") || + (design == "variableAssociation" && measurement == "mixed") || + (design == "singleGroup" && measurement == "quantitative") || + (design == "singleGroup" && measurement == "binary") || + (design == "singleGroup" && measurement == "countsPerTime") || + (design == "repeatedMeasuresOrMatchedGroups" && measurement == "quantitative") || + (design == "repeatedMeasuresOrMatchedGroups" && measurement == "binary")) { + return(options[["samplingVarianceType"]]) + } else { + return(NULL) + } +} + +inputs <- c( + "nGroup1Outcome1", + "nVariable1Outcome+", + "nTreatment1Outcome1Treatment2Outcome2+", + "alpha", + "nHomozygousDominantAlleles", + "nGroup1Outcome2", + "nVariable1Outcome-", + "nTreatment1Outcome2Treatment2Outcome1+", + "beta", + "nHomozygousRecessiveAlleles", + "nGroup2Outcome1", + "nVariable2Outcome+", + "nTreatment2Outcome1Treatment1Outcome2+", + "gamma", + "nHeterozygousAlleles", + "nGroup2Outcome2", + "nVariable2Outcome-", + "nTreatment2Outcome2Treatment1Outcome1+", + "delta", + "nNonEvents", + "nGroup1", + "nRow1", + "nSample1", + "nTimePoint1", + "nGroup2", + "nRow2", + "nSample2", + "nTimePoint2", + "eventsGroup1", + "eventsSample1", + "eventsTimePoint1", + "eventsGroup2", + "eventsSample2", + "eventsTimePoint2", + "personTimeGroup1", + "personTimeSample1", + "personTimeGroup2", + "personTimeSample2", + "meanGroup1", + "meanSample1", + "meanTimePoint1", + "meanGroup2", + "meanSample2", + "meanTimePoint2", + "sdGroup1", + "sdSample1", + "sdTimePoint1", + "sdGroup2", + "sdSample2", + "sdTimePoint2", + "eventFrequencies", + "complementFrequencies", + "rawCorrelations", + "tStatistics", + "totalPersonTimes", + "fStatistics", + "pValues", + "standardDeviations", + "rSquared", + "sampleSizes", + "observedEffectSizes", + "samplingVariances", + "standardErrors" +) diff --git a/inst/Description.qml b/inst/Description.qml index 494f3d71..d2f42a82 100644 --- a/inst/Description.qml +++ b/inst/Description.qml @@ -14,6 +14,21 @@ Description website: "jasp-stats.org" license: "GPL (>= 2)" + + GroupTitle + { + title: qsTr("Miscellaneous") + icon: "meta-analysis.svg" + } + + Analysis + { + menu: qsTr("Effect Size Computation") + title: qsTr("Effect Size Computation") + func: "EffectSizeComputation" + requiresData: false + } + GroupTitle { title: qsTr("Classical") diff --git a/inst/help/EffectSizeComputation.md b/inst/help/EffectSizeComputation.md new file mode 100644 index 00000000..feebbba2 --- /dev/null +++ b/inst/help/EffectSizeComputation.md @@ -0,0 +1,301 @@ +Effect Size Computation +========================== +-------------------------- +This analysis allows users to compute effect sizes based on the design and measurement of their experiment. In case multiple types of designs and measurements are included in the data set, the user can specify the order in which the effect sizes are calculated (the effect size from the following option is filled in only if it was computed in the previous step). + +See [metafor's documentation](https://wviechtb.github.io/metafor/reference/escalc.html) for more detail about the effect sizes. + + +#### Design + +The design dropdown allows users to select the type of effect size based on the design of the original studies. + +- Independent groups: This option is for analyzing data comparing two independent groups. The groups may be experimentally defined or naturally occurring. +- Variable association: This option is for examining the direction and strength of the association between two variables measured concurrently and/or without manipulation by experimenters. +- Single group: This option is for summarizing characteristics of individual groups based on either quantitative or dichotomous variables. +- Repeated measures/matched groups: This option is for assessing change within a single group over time or comparing two matched/paired samples. +- Other: This option includes specific effect sizes that do not fit into the other categories, such as reliability or partial correlations. + +#### Measurement + +The measurement dropdown allows users to select the type effect size based on the measurement in the original studies. + +- Quantitative: This option is for analyzing data where the measurement is on a continuous scale (e.g., means and standard deviations). +- Binary: This option is for analyzing data where the measurement is dichotomous (e.g., success/failure, yes/no). +- Counts per time: This option is for analyzing data where the measurement is an event count over a specific time period (e.g., number of incidents per year). +- Mixed: This option is for analyzing data that combines different types of measurements (e.g., a mix of continuous and dichotomous variables). + +The available measurement options depend on the selected design type: +- Independent groups: Quantitative / Binary / Counts per time / Mixed +- Variable association: Quantitative / Binary / Mixed +- Single group: Quantitative / Binary / Counts per time +- Repeated measures/matched groups: Quantitative / Binary + +The measurement dropdown is enabled only when a design type other than "Other" is selected. + + +#### Effect size +The Effect size dropdown allows users to select the specific effect size or outcome measure to be calculated based on the chosen design and measurement type. The available options are dynamically adjusted according to the selected design and measurement type. + +##### Independent groups +- Quantitative: + - MD: Mean Difference + - SMD: Standardized Mean Difference + - SMDH: Standardized Mean Difference with heteroscedastic variances + - SMD1: Standardized Mean Difference using standard deviation of second group + - SMD1H: Standardized Mean Difference using standard deviation of second group with heteroscedastic variances + - ROM: Ratio of Means + - CVR: Coefficient of Variation Ratio + - VR: Variability Ratio +- Binary: + - RR: Risk Ratio + - OR: Odds Ratio + - RD: Risk Difference + - AS: Arcsine Square Root Transformed Risk Difference + - PETO: Log Odds Ratio estimated with Peto's method +- Counts per time: + - IRR: Incidence Rate Ratio + - IRD: Incidence Rate Difference + - IRSD: Square Root Transformed Incidence Rate Difference +- Mixed: + - D2ORN: Transformed Standardized Mean Difference assuming normal distributions + - D2ORL: Transformed Standardized Mean Difference assuming logistic distributions + - PBIT: Probit Transformed Risk Difference + - OR2DN: Transformed Odds Ratio assuming normal distributions + - OR2DL: Transformed Odds Ratio assuming logistic distributions + +##### Variable association +- Quantitative: + - COR: Raw Correlation Coefficient + - UCOR: Bias-Corrected Correlation Coefficient + - ZCOR: Fisher's r-to-z Transformed Correlation Coefficient +- Binary: + - OR: Log Odds Ratio + - PHI: Phi Coefficient + - YUQ: Yule's Q + - YUY: Yule's Y + - RTET: Tetrachoric Correlation Coefficient +- Mixed: + - RPB: Point-Biserial Correlation Coefficient + - RBIS: Biserial Correlation Coefficient + - ZPB: Fisher's r-to-z Transformed Point-Biserial Correlation Coefficient + - ZBIS: Fisher's r-to-z Transformed Biserial Correlation Coefficient + +##### Single group +- Quantitative: + - MN: Raw Mean + - SMN: Single-Group Standardized Mean + - MNLN: Log Transformed Mean + - CVLN: Log Transformed Coefficient of Variation + - SDLN: Log Transformed Standard Deviation +- Binary: + - PR: Raw Proportion + - PLN: Log Transformed Proportion + - PLO: Logit Transformed Proportion + - PAS: Arcsine Square Root Transformed Proportion + - PFT: Freeman-Tukey Double Arcsine Transformed Proportion +- Counts per time: + - IR: Raw Incidence Rate + - IRLN: Log Transformed Incidence Rate + - IRS: Square Root Transformed Incidence Rate + - IRFT: Freeman-Tukey Transformed Incidence Rate + +##### Repeated measures/matched groups +- Quantitative: + - MC: Mean Change + - SMCC: Standardized Mean Change using Change Score Standardization + - SMCR: Standardized Mean Change using Raw Score Standardization + - SMCRH: Standardized Mean Change using Raw Score Standardization with heteroscedastic variances + - SMCRP: Standardized Mean Change using Raw Score Standardization with pooled standard deviations + - SMCRPH: Standardized Mean Change using Raw Score Standardization with pooled standard deviations and heteroscedastic variances + - ROMC: Log Transformed Ratio of Means + - CVRC: Log Transformed Coefficient of Variation Ratio + - VRC: Log Transformed Variability Ratio +- Binary: + - MPRR: Matched Pairs Marginal Log Risk Ratio + - MPOR: Matched Pairs Marginal Log Odds Ratio + - MPRD: Matched Pairs Marginal Risk Difference + - MPORC: Conditional Log Odds Ratio + - MPPETO: Conditional Log Odds Ratio estimated with Peto's method + - MPORM: Marginal Log Odds Ratio using known/guestimated correlations + +##### Other +- ARAW: Raw Cronbach's Alpha +- AHW: Transformed Cronbach's Alpha (Hakstian & Whalen) +- ABT: Transformed Cronbach's Alpha (Bonett) +- PCOR: Partial Correlation Coefficient +- ZPCOR: Fisher's r-to-z Transformed Partial Correlation Coefficient +- SPCOR: Semi-Partial Correlation Coefficient +- ZSPCOR: Fisher's r-to-z Transformed Semi-Partial Correlation Coefficient +- R2: Raw Coefficient of Determination +- ZR2: r-to-z Transformed Coefficient of Determination +- REH: Relative Excess Heterozygosity + + +-------------------------- + +### Variable Inputs + +#### Independent Groups + +- Quantitative Measurement + - N: Group 1: Total sample size of Group 1. + - N: Group 2: Total sample size of Group 2. + - Mean: Group 1: Mean value for Group 1. + - Mean: Group 2: Mean value for Group 2. + - SD: Group 1: Standard deviation for Group 1. + - SD: Group 2: Standard deviation for Group 2. + +- Binary Measurement + - N: Group 1/Outcome 1: Number of individuals in Group 1 with Outcome 1. + - N: Group 1/Outcome 2: Number of individuals in Group 1 with Outcome 2. + - N: Group 2/Outcome 1: Number of individuals in Group 2 with Outcome 1. + - N: Group 2/Outcome 2: Number of individuals in Group 2 with Outcome 2. + - Events: Group 1: Number of events in Group 1. + - Events: Group 2: Number of events in Group 2. + +- Counts Per Time Measurement + - Total Person-Time: Group 1: Total person-time for Group 1. + - Total Person-Time: Group 2: Total person-time for Group 2. + - Events: Group 1: Number of events in Group 1. + - Events: Group 2: Number of events in Group 2. + +- Mixed Measurement + - For Effect Sizes D2ORN, D2ORL: + - N: Group 1/Outcome 1: Number of individuals in Group 1 with Outcome 1. + - N: Group 1/Outcome 2: Number of individuals in Group 1 with Outcome 2. + - N: Group 2/Outcome 1: Number of individuals in Group 2 with Outcome 1. + - N: Group 2/Outcome 2: Number of individuals in Group 2 with Outcome 2. + - N: Group 1: Total sample size of Group 1. + - N: Group 2: Total sample size of Group 2. + - For Effect Sizes PBIT, OR2DN, OR2DL: + - Mean: Group 1: Mean value for Group 1. + - Mean: Group 2: Mean value for Group 2. + - SD: Group 1: Standard deviation for Group 1. + - SD: Group 2: Standard deviation for Group 2. + - N: Group 1: Total sample size of Group 1. + - N: Group 2: Total sample size of Group 2. + +#### Variable Association + +- Quantitative Measurement + - Raw Correlation Coefficients: Correlation coefficients between two variables. + - Sample/Group Sizes: Total sample sizes. + - T-Test Statistics: T-test statistics for the variables. + - P-Values: P-values for the correlation coefficients. + - F-Test Statistics: F-test statistics for the variables. + +- Binary Measurement + - N: Variable 1/Outcome +: Number of individuals with Outcome + for Variable 1. + - N: Variable 1/Outcome -: Number of individuals with Outcome - for Variable 1. + - N: Variable 2/Outcome +: Number of individuals with Outcome + for Variable 2. + - N: Variable 2/Outcome -: Number of individuals with Outcome - for Variable 2. + +#### Single Group + +- Quantitative Measurement + - Mean: Sample 1: Mean value for Sample 1. + - Standard Deviations: Standard deviations for the samples. + - Sample/Group Sizes: Total sample sizes. + - Observed Effect Sizes/Outcomes: Observed effect sizes or outcomes. + - Sampling Variances: Sampling variances for the effect sizes. + - Standard Errors: Standard errors for the effect sizes. + +- Binary Measurement + - Event Frequencies: Frequencies of the event of interest. + - Complement Frequencies / Group Means: Frequencies of the complement event or group means. + - Sample/Group Sizes: Total sample sizes. + - Observed Effect Sizes/Outcomes: Observed effect sizes or outcomes. + - Sampling Variances: Sampling variances for the effect sizes. + - Standard Errors: Standard errors for the effect sizes. + +- Counts Per Time Measurement + - Events: Sample 1: Number of events in Sample 1. + - Total Person-Times: Total person-times for the samples. + +#### Repeated Measures/Matched Groups + +- Quantitative Measurement + - N: Time Point 1: Total sample size at Time Point 1. + - N: Time Point 2: Total sample size at Time Point 2. + - Mean: Time Point 1: Mean value at Time Point 1. + - Mean: Time Point 2: Mean value at Time Point 2. + - SD: Time Point 1: Standard deviation at Time Point 1. + - SD: Time Point 2: Standard deviation at Time Point 2. + +- Binary Measurement + - N: Treatment 1 + Outcome 1 / Treatment 2 + Outcome 1: Number of individuals with Treatment 1 + Outcome 1 and Treatment 2 + Outcome 1. + - N: Treatment 1 + Outcome 2 / Treatment 2 + Outcome 1: Number of individuals with Treatment 1 + Outcome 2 and Treatment 2 + Outcome 1. + - N: Treatment 2 + Outcome 1 / Treatment 1 + Outcome 2: Number of individuals with Treatment 2 + Outcome 1 and Treatment 1 + Outcome 2. + - N: Treatment 2 + Outcome 2 / Treatment 1 + Outcome 1: Number of individuals with Treatment 2 + Outcome 2 and Treatment 1 + Outcome 1. + - Events: Time Point 1: Number of events at Time Point 1. + - Events: Time Point 2: Number of events at Time Point 2. + +#### Other + +- Reliability (ARAW, AHW, ABT) + - Alpha: Reliability (Cronbach's alpha) value. + - Beta: Beta value. + - Gamma: Gamma value. + - Delta: Delta value. + +- Relative Excess Heterozygosity (REH) + - N: Homozygous Dominant Alleles: Number of individuals with homozygous dominant alleles. + - N: Homozygous Recessive Alleles: Number of individuals with homozygous recessive alleles. + - N: Heterozygous Alleles: Number of individuals with heterozygous alleles. + - N: Non-Events: Number of non-events. + +- R-Squared Values (R2, ZR2) + - R-Squared Values: R-squared values. + - Sample/Group Sizes: Total sample sizes. + +-------------------------- + +#### Frequency/event cell adjustment + +##### Add +The Add field allows you to specify the amount to add to zero cells, counts, or frequencies when calculating effect sizes or outcomes. + +Default Values: +- 0.5 for: + - Independent groups with binary measurement (RR, OR). + - Independent groups with counts per time measurement (IRR, IRD, IRSD). + - Repeated measures/matched groups with binary measurement (MPRR, MPOR, MPRD, MPORC, MPPETO, MPORM). + - Single group with binary measurement (PR, PFT). + - Single group with counts per time measurement (IR, IRLN, IRS, IRFT). + - Variable association with binary measurement (OR, PHI, YUQ, YUY, RTET). + - Independent groups with mixed measurement (D2ORN, D2ORL). +- 0 for: + - Independent groups with binary measurement (RD, AS, PETO). + - Single group with binary measurement (PLN, PLO, PAS). + +##### To +The To dropdown allows you to specify when the values under the Add option should be added to + +Options +- All: The value of Add is added to each cell of all tables. +- Only zero: The value of Add is added only to cells of tables with at least one cell equal to 0. +- If any zero: The value of Add is added to each cell of all tables, but only when there is at least one table with a zero cell. +- None: No adjustment to the observed table frequencies is made. + +#### Drop studies with no cases/events +The `Drop Studies with No Cases/Events` radio button group allows you to specify whether studies with no cases or events should be dropped when calculating the effect sizes. + +Options: +- Yes: Drop studies with no cases/events. +- No: Do not drop studies with no cases/events. + +#### Sampling variance type +The Sampling variance type dropdown allows you to specify the type of sampling variances for the effect size. The options available depend on the design, measurement, and effect size values. + +Options: +- LS: Large-sample approximation. +- LS2: Alternative large-sample approximation. +- UB: Unbiased estimates of the sampling variances. +- AV: Sampling variances with the sample-size weighted average. +- HO*: Homoscedastic variances assumption. + + +### R Packages +--- +- metafor diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml new file mode 100644 index 00000000..c40881f3 --- /dev/null +++ b/inst/qml/EffectSizeComputation.qml @@ -0,0 +1,890 @@ +// +// Copyright (C) 2013-2018 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 2.8 +import QtQuick.Layouts 1.3 +import JASP.Controls 1.0 +import JASP.Widgets 1.0 +import JASP 1.0 +import "../qml/qml_components" as MA + +Form +{ + + ComponentsList + { + id: effectSizeType + name: "effectSizeType" + + rowComponent: RowLayout + { + + property string designValue: design.value + property string measurementValue: measurement.value + property string effectSizeValue: effectSize.value + property string designLabel: design.label + property string measurementLabel: measurement.label + property string effectSizeLabel: effectSize.label + + DropDown + { + id: design + name: "design" + values: [ + { label: qsTr("Independent groups"), value: "independentGroups"}, + { label: qsTr("Variable association"), value: "variableAssociation"}, + { label: qsTr("Single group"), value: "singleGroup"}, + { label: qsTr("Repeated measures/matched groups"), value: "repeatedMeasuresOrMatchedGroups"}, + { label: qsTr("Other"), value: "other"} + ] + } + + DropDown + { + id: measurement + name: "measurement" + enabled: design.value != "other" + values: (function() { + if (design.value == "independentGroups") { + return [ + { label: qsTr("Quantitative"), value: "quantitative"}, + { label: qsTr("Binary"), value: "binary"}, + { label: qsTr("Counts per time"), value: "countsPerTime"}, + { label: qsTr("Mixed"), value: "mixed"} + ]; + } else if (design.value == "variableAssociation") { + return [ + { label: qsTr("Quantitative"), value: "quantitative"}, + { label: qsTr("Binary"), value: "binary"}, + { label: qsTr("Mixed"), value: "mixed"} + ]; + } else if (design.value == "singleGroup") { + return [ + { label: qsTr("Quantitative"), value: "quantitative"}, + { label: qsTr("Binary"), value: "binary"}, + { label: qsTr("Counts per time"), value: "countsPerTime"} + ]; + } else if (design.value == "repeatedMeasuresOrMatchedGroups") { + return [ + { label: qsTr("Quantitative"), value: "quantitative"}, + { label: qsTr("Binary"), value: "binary"} + ]; + } else { + return []; + } + })() + } + + DropDown + { + id: effectSize + name: "effectSize" + values: (function() { + if (design.value == "independentGroups" && measurement.value == "quantitative") { + return [ + { label: qsTr("MD"), value: "MD"}, + { label: qsTr("SMD"), value: "SMD"}, + { label: qsTr("SMDH"), value: "SMDH"}, + { label: qsTr("SMD1"), value: "SMD1"}, + { label: qsTr("SMD1H"), value: "SMD1H"}, + { label: qsTr("ROM"), value: "ROM"}, + { label: qsTr("CVR"), value: "CVR"}, + { label: qsTr("VR"), value: "VR"} + ]; + } else if (design.value == "independentGroups" && measurement.value == "binary") { + return [ + { label: qsTr("RR"), value: "RR"}, + { label: qsTr("OR"), value: "OR"}, + { label: qsTr("RD"), value: "RD"}, + { label: qsTr("AS"), value: "AS"}, + { label: qsTr("PETO"), value: "PETO"} + ]; + } else if (design.value == "independentGroups" && measurement.value == "countsPerTime") { + return [ + { label: qsTr("IRR"), value: "IRR"}, + { label: qsTr("IRD"), value: "IRD"}, + { label: qsTr("IRSD"), value: "IRSD"} + ]; + } else if (design.value == "independentGroups" && measurement.value == "mixed") { + return [ + { label: qsTr("D2ORN"), value: "D2ORN"}, + { label: qsTr("D2ORL"), value: "D2ORL"}, + { label: qsTr("PBIT"), value: "PBIT"}, + { label: qsTr("OR2DN"), value: "OR2DN"}, + { label: qsTr("OR2DL"), value: "OR2DL"} + ]; + } else if (design.value == "variableAssociation" && measurement.value == "quantitative") { + return [ + { label: qsTr("COR"), value: "COR"}, + { label: qsTr("UCOR"), value: "UCOR"}, + { label: qsTr("ZCOR"), value: "ZCOR"} + ]; + } else if (design.value == "variableAssociation" && measurement.value == "binary") { + return [ + { label: qsTr("OR"), value: "OR"}, + { label: qsTr("PHI"), value: "PHI"}, + { label: qsTr("YUQ"), value: "YUQ"}, + { label: qsTr("YUY"), value: "YUY"}, + { label: qsTr("RTET"), value: "RTET"} + ]; + } else if (design.value == "variableAssociation" && measurement.value == "mixed") { + return [ + { label: qsTr("RPB"), value: "RPB"}, + { label: qsTr("RBIS"), value: "RBIS"}, + { label: qsTr("ZPB"), value: "ZPB"}, + { label: qsTr("ZBIS"), value: "ZBIS"} + ]; + } else if (design.value == "singleGroup" && measurement.value == "quantitative") { + return [ + { label: qsTr("MN"), value: "MN"}, + { label: qsTr("SMN"), value: "SMN"}, + { label: qsTr("MNLN"), value: "MNLN"}, + { label: qsTr("CVLN"), value: "CVLN"}, + { label: qsTr("SDLN"), value: "SDLN"} + ]; + } else if (design.value == "singleGroup" && measurement.value == "binary") { + return [ + { label: qsTr("PR"), value: "PR"}, + { label: qsTr("PLN"), value: "PLN"}, + { label: qsTr("PLO"), value: "PLO"}, + { label: qsTr("PAS"), value: "PAS"}, + { label: qsTr("PFT"), value: "PFT"} + ]; + } else if (design.value == "singleGroup" && measurement.value == "countsPerTime") { + return [ + { label: qsTr("IR"), value: "IR"}, + { label: qsTr("IRLN"), value: "IRLN"}, + { label: qsTr("IRS"), value: "IRS"}, + { label: qsTr("IRFT"), value: "IRFT"} + ]; + } else if (design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "quantitative") { + return [ + { label: qsTr("MC"), value: "MC"}, + { label: qsTr("SMCC"), value: "SMCC"}, + { label: qsTr("SMCR"), value: "SMCR"}, + { label: qsTr("SMCRH"), value: "SMCRH"}, + { label: qsTr("SMCRP"), value: "SMCRP"}, + { label: qsTr("SMCRPH"), value: "SMCRPH"}, + { label: qsTr("ROMC"), value: "ROMC"}, + { label: qsTr("CVRC"), value: "CVRC"}, + { label: qsTr("VRC"), value: "VRC"} + ]; + } else if (design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "binary") { + return [ + { label: qsTr("MPRR"), value: "MPRR"}, + { label: qsTr("MPOR"), value: "MPOR"}, + { label: qsTr("MPRD"), value: "MPRD"}, + { label: qsTr("MPORC"), value: "MPORC"}, + { label: qsTr("MPPETO"), value: "MPPETO"}, + { label: qsTr("MPORM"), value: "MPORM"} + ]; + } else if (design.value == "other") { + return [ + { label: qsTr("ARAW"), value: "ARAW"}, + { label: qsTr("AHW"), value: "AHW"}, + { label: qsTr("ABT"), value: "ABT"}, + { label: qsTr("PCOR"), value: "PCOR"}, + { label: qsTr("ZPCOR"), value: "ZPCOR"}, + { label: qsTr("SPCOR"), value: "SPCOR"}, + { label: qsTr("ZSPCOR"), value: "ZSPCOR"}, + { label: qsTr("R2"), value: "R2"}, + { label: qsTr("ZR2"), value: "ZR2"}, + { label: qsTr("REH"), value: "REH"} + ]; + } else { + return []; + } + })(); + } + + } + } + + + ComponentsList + { + name: "vars" + source: "effectSizeType" + + rowComponent: VariablesForm + { + property var designValue: effectSizeType.rowAt(rowIndex).designValue + property var measurementValue: effectSizeType.rowAt(rowIndex).measurementValue + property var effectSizeValue: effectSizeType.rowAt(rowIndex).effectSizeValue + property var designLabel: effectSizeType.rowAt(rowIndex).designLabel + property var measurementLabel: effectSizeType.rowAt(rowIndex).measurementLabel + property var effectSizeLabel: effectSizeType.rowAt(rowIndex).effectSizeLabel + + AvailableVariablesList + { + name: "allVars" + title: "" + effectSizeValue + " (" + designValue + "/" + measurementValue + ")" + } + + AssignedVariablesList + { // metafor: ai + name: "nGroup1Outcome1" + title: qsTr("N: Group 1/Outcome 1") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "binary") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) + } + + AssignedVariablesList + { // metafor: ai + name: "nVariable1Outcome+" + title: qsTr("N: Variable 1/Outcome +") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "binary") + } + + AssignedVariablesList + { // metafor: ai + name: "nTreatment1Outcome1Treatment2Outcome2+" + title: qsTr("N: Treatment 1 + Outcome 1 / Treatment 2 + Outcome 1") + singleVariable: true + visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") + } + + AssignedVariablesList + { // metafor: ai + name: "alpha" + title: qsTr("Alpha") + singleVariable: true + visible: (designValue == "other" && (effectSizeValue == "ARAW" || effectSizeValue == "AHW" || effectSizeValue == "ABT")) + } + + AssignedVariablesList + { // metafor: ai + name: "nHomozygousDominantAlleles" + title: qsTr("N: Homozygous Dominant Alleles") + singleVariable: true + visible: (designValue == "other" && effectSizeValue == "REH") + } + + AssignedVariablesList + { // metafor: bi + name: "nGroup1Outcome2" + title: qsTr("N: Group 1/Outcome 2") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "binary") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) + } + + AssignedVariablesList + { // metafor: bi + name: "nVariable1Outcome-" + title: qsTr("N: Variable 1/Outcome -") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "binary") + } + + AssignedVariablesList + { // metafor: bi + name: "nTreatment1Outcome2Treatment2Outcome1+" + title: qsTr("N: Treatment 1 + Outcome 2 / Treatment 2 + Outcome 1") + singleVariable: true + visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") + } + + AssignedVariablesList + { // metafor: bi + name: "beta" + title: qsTr("Beta") + singleVariable: true + visible: (designValue == "other" && (effectSizeValue == "ARAW" || effectSizeValue == "AHW" || effectSizeValue == "ABT")) + } + + AssignedVariablesList + { // metafor: bi + name: "nHomozygousRecessiveAlleles" + title: qsTr("N: Homozygous Recessive Alleles") + singleVariable: true + visible: (designValue == "other" && effectSizeValue == "REH") + } + + AssignedVariablesList + { // metafor: ci + name: "nGroup2Outcome1" + title: qsTr("N: Group 2/Outcome 1") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "binary") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) + } + + AssignedVariablesList + { // metafor: ci + name: "nVariable2Outcome+" + title: qsTr("N: Variable 2/Outcome +") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "binary") + } + + AssignedVariablesList + { // metafor: ci + name: "nTreatment2Outcome1Treatment1Outcome2+" + title: qsTr("N: Treatment 2 + Outcome 1 / Treatment 1 + Outcome 2") + singleVariable: true + visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") + } + + AssignedVariablesList + { // metafor: ci + name: "gamma" + title: qsTr("Gamma") + singleVariable: true + visible: (designValue == "other" && (effectSizeValue == "ARAW" || effectSizeValue == "AHW" || effectSizeValue == "ABT")) + } + + AssignedVariablesList + { // metafor: ci + name: "nHeterozygousAlleles" + title: qsTr("N: Heterozygous Alleles") + singleVariable: true + visible: (designValue == "other" && effectSizeValue == "REH") + } + + AssignedVariablesList + { // metafor: di + name: "nGroup2Outcome2" + title: qsTr("N: Group 2/Outcome 2") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "binary") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) + } + + AssignedVariablesList + { // metafor: di + name: "nVariable2Outcome-" + title: qsTr("N: Variable 2/Outcome -") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "binary") + } + + AssignedVariablesList + { // metafor: di + name: "nTreatment2Outcome2Treatment1Outcome1+" + title: qsTr("N: Treatment 2 + Outcome 2 / Treatment 1 + Outcome 1") + singleVariable: true + visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") + } + + AssignedVariablesList + { // metafor: di + name: "delta" + title: qsTr("Delta") + singleVariable: true + visible: (designValue == "other" && (effectSizeValue == "ARAW" || effectSizeValue == "AHW" || effectSizeValue == "ABT")) + } + + AssignedVariablesList + { // metafor: n1i + name: "nGroup1" + title: qsTr("N: Group 1") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "quantitative") || + (designValue == "independentGroups" && measurementValue == "binary") || + (designValue == "independentGroups" && measurementValue == "countsPerTime") || + (designValue == "independentGroups" && measurementValue == "mixed") + } + + AssignedVariablesList + { // metafor: n1i + name: "nRow1" + title: qsTr("N: Row 1") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "binary") + } + + AssignedVariablesList + { // metafor: n1i + name: "nSample1" + title: qsTr("N: Sample 1") + singleVariable: true + visible: (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary" || measurementValue == "countsPerTime")) + } + + AssignedVariablesList + { // metafor: n1i + name: "nTimePoint1" + title: qsTr("N: Time Point 1") + singleVariable: true + visible: (designValue == "repeatedMeasuresOrMatchedGroups" && (measurementValue == "quantitative" || measurementValue == "binary")) + } + + AssignedVariablesList + { // metafor: n2i + name: "nGroup2" + title: qsTr("N: Group 2") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "quantitative") || + (designValue == "independentGroups" && measurementValue == "binary") || + (designValue == "independentGroups" && measurementValue == "countsPerTime") || + (designValue == "independentGroups" && measurementValue == "mixed") + } + + AssignedVariablesList + { // metafor: n2i + name: "nRow2" + title: qsTr("N: Row 2") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "binary") + } + + AssignedVariablesList + { // metafor: n2i + name: "nSample2" + title: qsTr("N: Sample 2") + singleVariable: true + visible: (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary" || measurementValue == "countsPerTime")) + } + + AssignedVariablesList + { // metafor: n2i + name: "nTimePoint2" + title: qsTr("N: Time Point 2") + singleVariable: true + visible: (designValue == "repeatedMeasuresOrMatchedGroups" && (measurementValue == "quantitative" || measurementValue == "binary")) + } + + AssignedVariablesList + { // metafor: x1i + name: "eventsGroup1" + title: qsTr("Events: Group 1") + singleVariable: true + visible: (designValue == "independentGroups" && (measurementValue == "binary" || measurementValue == "countsPerTime" || measurementValue == "mixed")) + } + + AssignedVariablesList + { // metafor: x1i + name: "eventsSample1" + title: qsTr("Events: Sample 1") + singleVariable: true + visible: (designValue == "singleGroup" && (measurementValue == "binary" || measurementValue == "countsPerTime")) + } + + AssignedVariablesList + { // metafor: x1i + name: "eventsTimePoint1" + title: qsTr("Events: Time Point 1") + singleVariable: true + visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") + } + + AssignedVariablesList + { // metafor: x2i + name: "eventsGroup2" + title: qsTr("Events: Group 2") + singleVariable: true + visible: (designValue == "independentGroups" && (measurementValue == "binary" || measurementValue == "countsPerTime" || measurementValue == "mixed")) + } + + AssignedVariablesList + { // metafor: x2i + name: "eventsSample2" + title: qsTr("Events: Sample 2") + singleVariable: true + visible: (designValue == "singleGroup" && (measurementValue == "binary" || measurementValue == "countsPerTime")) + } + + AssignedVariablesList + { // metafor: x2i + name: "eventsTimePoint2" + title: qsTr("Events: Time Point 2") + singleVariable: true + visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") + } + + AssignedVariablesList + { // metafor: t1i + name: "personTimeGroup1" + title: qsTr("Total Person-Time: Group 1") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "countsPerTime") + } + + AssignedVariablesList + { // metafor: t1i + name: "personTimeSample1" + title: qsTr("Total Person-Time: Sample 1") + singleVariable: true + visible: (designValue == "singleGroup" && measurementValue == "countsPerTime") + } + + AssignedVariablesList + { // metafor: t2i + name: "personTimeGroup2" + title: qsTr("Total Person-Time: Group 2") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "countsPerTime") + } + + AssignedVariablesList + { // metafor: t2i + name: "personTimeSample2" + title: qsTr("Total Person-Time: Sample 2") + singleVariable: true + visible: (designValue == "singleGroup" && measurementValue == "countsPerTime") + } + + AssignedVariablesList + { // metafor: m1i + name: "meanGroup1" + title: qsTr("Mean: Group 1") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "quantitative") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) + } + + AssignedVariablesList + { // metafor: m1i + name: "meanSample1" + title: qsTr("Mean: Sample 1") + singleVariable: true + visible: (designValue == "singleGroup" && measurementValue == "quantitative") + } + + AssignedVariablesList + { // metafor: m1i + name: "meanTimePoint1" + title: qsTr("Mean: Time Point 1") + singleVariable: true + visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "quantitative") + } + + AssignedVariablesList + { // metafor: m2i + name: "meanGroup2" + title: qsTr("Mean: Group 2") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "quantitative") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) + } + + AssignedVariablesList + { // metafor: m2i + name: "meanSample2" + title: qsTr("Mean: Sample 2") + singleVariable: true + visible: (designValue == "singleGroup" && measurementValue == "quantitative") + } + + AssignedVariablesList + { // metafor: m2i + name: "meanTimePoint2" + title: qsTr("Mean: Time Point 2") + singleVariable: true + visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "quantitative") + } + + AssignedVariablesList + { // metafor: sd1i + name: "sdGroup1" + title: qsTr("SD: Group 1") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "quantitative") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) + } + + AssignedVariablesList + { // metafor: sd1i + name: "sdSample1" + title: qsTr("SD: Sample 1") + singleVariable: true + visible: (designValue == "singleGroup" && measurementValue == "quantitative") + } + + AssignedVariablesList + { // metafor: sd1i + name: "sdTimePoint1" + title: qsTr("SD: Time Point 1") + singleVariable: true + visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "quantitative") + } + + AssignedVariablesList + { // metafor: sd2i + name: "sdGroup2" + title: qsTr("SD: Group 2") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "quantitative") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) + } + + AssignedVariablesList + { // metafor: sd2i + name: "sdSample2" + title: qsTr("SD: Sample 2") + singleVariable: true + visible: (designValue == "singleGroup" && measurementValue == "quantitative") + } + + AssignedVariablesList + { // metafor: sd2i + name: "sdTimePoint2" + title: qsTr("SD: Time Point 2") + singleVariable: true + visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "quantitative") + } + + AssignedVariablesList + { // metafor: xi + name: "eventFrequencies" + title: qsTr("Event Frequencies") + singleVariable: true + visible: (designValue == "singleGroup" && measurementValue == "binary") + } + + AssignedVariablesList + { // metafor: mi + name: "complementFrequencies" + title: qsTr("Complement Frequencies / Group Means") + singleVariable: true + visible: (designValue == "singleGroup" && (measurementValue == "binary" || measurementValue == "quantitative")) + } + + AssignedVariablesList + { // metafor: ri + name: "rawCorrelations" + title: qsTr("Raw Correlation Coefficients") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "quantitative") + } + + AssignedVariablesList + { // metafor: ti + name: "tStatistics" + title: qsTr("T-Test Statistics") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "quantitative") + } + + AssignedVariablesList + { // metafor: ti + name: "totalPersonTimes" + title: qsTr("Total Person-Times") + singleVariable: true + visible: (designValue == "singleGroup" && measurementValue == "countsPerTime") + } + + AssignedVariablesList + { // metafor: fi + name: "fStatistics" + title: qsTr("F-Test Statistics") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "quantitative") + } + + AssignedVariablesList + { // metafor: pi + name: "pValues" + title: qsTr("P-Values") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "quantitative") + } + + AssignedVariablesList + { // metafor: sdi + name: "standardDeviations" + title: qsTr("Standard Deviations") + singleVariable: true + visible: (designValue == "singleGroup" && measurementValue == "quantitative") + } + + AssignedVariablesList + { // metafor: r2i + name: "rSquared" + title: qsTr("R-Squared Values") + singleVariable: true + visible: (designValue == "other" && (effectSizeValue == "R2" || effectSizeValue == "ZR2")) + } + + AssignedVariablesList + { // metafor: ni + name: "sampleSizes" + title: qsTr("Sample/Group Sizes") + singleVariable: true + visible: (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary")) + } + + AssignedVariablesList + { // metafor: yi + name: "observedEffectSizes" + title: qsTr("Observed Effect Sizes/Outcomes") + singleVariable: true + visible: (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary")) + } + + AssignedVariablesList + { // metafor: vi + name: "samplingVariances" + title: qsTr("Sampling Variances") + singleVariable: true + visible: (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary")) + } + + AssignedVariablesList + { // metafor: sei + name: "standardErrors" + title: qsTr("Standard Errors") + singleVariable: true + visible: (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary")) + } + + Group + { + title: qsTr("Frequency/event cell adjustment") + + DoubleField + { + label: qsTr("Add") + name: "add" + visible: (designValue == "independentGroups" && measurementValue == "binary") || + (designValue == "independentGroups" && measurementValue == "countsPerTime") || + (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") || + (designValue == "singleGroup" && measurementValue == "binary") || + (designValue == "singleGroup" && measurementValue == "countsPerTime") || + (designValue == "variableAssociation" && measurementValue == "binary") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) + + defaultValue: (designValue == "independentGroups" && measurementValue == "binary" && effectSizeValue == "RR") ? 0.5 : + (designValue == "independentGroups" && measurementValue == "binary" && effectSizeValue == "OR") ? 0.5 : + (designValue == "independentGroups" && measurementValue == "binary" && effectSizeValue == "RD") ? 0 : + (designValue == "independentGroups" && measurementValue == "binary" && effectSizeValue == "AS") ? 0 : + (designValue == "independentGroups" && measurementValue == "binary" && effectSizeValue == "PETO") ? 0.5 : + (designValue == "independentGroups" && measurementValue == "countsPerTime") ? 0.5 : + (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") ? 0.5 : + (designValue == "singleGroup" && measurementValue == "binary" && effectSizeValue == "PR") ? 0.5 : + (designValue == "singleGroup" && measurementValue == "binary" && effectSizeValue == "PLN") ? 0 : + (designValue == "singleGroup" && measurementValue == "binary" && effectSizeValue == "PLO") ? 0 : + (designValue == "singleGroup" && measurementValue == "binary" && effectSizeValue == "PAS") ? 0 : + (designValue == "singleGroup" && measurementValue == "binary" && effectSizeValue == "PFT") ? 0.5 : + (designValue == "singleGroup" && measurementValue == "countsPerTime") ? 0.5 : + (designValue == "variableAssociation" && measurementValue == "binary") ? 0.5 : + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) ? 0.5 : + 0 + } + + DropDown + { + name: "to" + label: qsTr("To") + values: [ + { label: qsTr("All"), value: "all" }, + { label: qsTr("Only zero"), value: "onlyZero" }, + { label: qsTr("If any zero"), value: "ifAnyZero" }, + { label: qsTr("None"), value: "none" } + ] + visible: (design.value == "independentGroups" && measurement.value == "binary") || + (design.value == "independentGroups" && measurement.value == "countsPerTime") || + (design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "binary") || + (design.value == "singleGroup" && measurement.value == "binary") || + (design.value == "singleGroup" && measurement.value == "countsPerTime") || + (design.value == "variableAssociation" && measurement.value == "binary") || + (design.value == "independentGroups" && measurement.value == "mixed" && (effectSize.value == "D2ORN" || effectSize.value == "D2ORL")) + //defaultValue: "onlyZero" + } + + RadioButtonGroup + { + name: "dropStudiesWithNoCasesOrEvents" + title: qsTr("Drop studies with no cases/events") + columns: 1 + visible: (design.value == "independentGroups" && measurement.value == "binary") || + (design.value == "independentGroups" && measurement.value == "countsPerTime") || + (design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "binary") || + (design.value == "singleGroup" && measurement.value == "binary") || + (design.value == "singleGroup" && measurement.value == "countsPerTime") || + (design.value == "variableAssociation" && measurement.value == "binary") || + (design.value == "independentGroups" && measurement.value == "mixed" && (effectSize.value == "D2ORN" || effectSize.value == "D2ORL")) + + RadioButton + { + value: "true" + label: qsTr("Yes") + checked: true + } + + RadioButton + { + value: "false" + label: qsTr("No") + } + } + } + + DropDown + { + name: "samplingVarianceType" + label: qsTr("Sampling variance type") + values: (function() { + if ((design.value == "independentGroups" && measurement.value == "quantitative") || + (design.value == "independentGroups" && measurement.value == "mixed" && (effectSize.value == "PBIT" || effectSize.value == "OR2DN" || effectSize.value == "OR2DL")) || + (design.value == "independentGroups" && measurement.value == "binary" && effectSize.value == "RR") || + (design.value == "independentGroups" && measurement.value == "binary" && effectSize.value == "OR") || + (design.value == "independentGroups" && measurement.value == "countsPerTime")) { + return [ + { label: qsTr("LS"), value: "LS" }, + { label: qsTr("LS2"), value: "LS2" }, + { label: qsTr("UB"), value: "UB" }, + { label: qsTr("AV"), value: "AV" }, + { label: qsTr("HO"), value: "HO" } + ]; + } else if ((design.value == "variableAssociation" && measurement.value == "quantitative") || + (design.value == "variableAssociation" && measurement.value == "binary") || + (design.value == "variableAssociation" && measurement.value == "mixed") || + (design.value == "singleGroup" && measurement.value == "quantitative") || + (design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "quantitative") || + (design.value == "singleGroup" && measurement.value == "binary") || + (design.value == "singleGroup" && measurement.value == "countsPerTime") || + (design.value == "independentGroups" && measurement.value == "mixed" && (effectSize.value == "D2ORN" || effectSize.value == "D2ORL"))) { + return [ + { label: qsTr("LS"), value: "LS" }, + { label: qsTr("AV"), value: "AV" } + ]; + } else if ((design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "binary") || + (design.value == "singleGroup" && measurement.value == "binary" && effectSize.value == "PLN") || + (design.value == "singleGroup" && measurement.value == "binary" && effectSize.value == "PLO")) { + return [ + { label: qsTr("LS"), value: "LS" }, + { label: qsTr("AV"), value: "AV" }, + { label: qsTr("HO"), value: "HO" } + ]; + } else { + return []; + } + })() + visible: (design.value == "independentGroups" && measurement.value == "quantitative") || + (design.value == "independentGroups" && measurement.value == "binary") || + (design.value == "independentGroups" && measurement.value == "countsPerTime") || + (design.value == "independentGroups" && measurement.value == "mixed") || + (design.value == "variableAssociation" && measurement.value == "quantitative") || + (design.value == "variableAssociation" && measurement.value == "binary") || + (design.value == "variableAssociation" && measurement.value == "mixed") || + (design.value == "singleGroup" && measurement.value == "quantitative") || + (design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "quantitative") || + (design.value == "singleGroup" && measurement.value == "binary") || + (design.value == "singleGroup" && measurement.value == "countsPerTime") + } + + + + } + + } + +} \ No newline at end of file From d975d7b05b7ee00cbd909eb061b33180b24b953f Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 6 Jun 2024 21:31:20 +0200 Subject: [PATCH 002/127] Update ClassicalMetaAnalysis.qml --- inst/qml/ClassicalMetaAnalysis.qml | 266 +++++++++++++++++++++++++++-- 1 file changed, 252 insertions(+), 14 deletions(-) diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 2925aa1f..1d286440 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -27,28 +27,266 @@ Form VariablesForm { preferredHeight: 400 * preferencesModel.uiScale - AvailableVariablesList { name: "allVariables" } - AssignedVariablesList { name: "effectSize"; title: qsTr("Effect Size"); singleVariable: true; allowedColumns: ["scale"] } - AssignedVariablesList { name: "effectSizeSe"; title: qsTr("Effect Size Standard Error"); singleVariable: true; allowedColumns: ["scale"] } - MA.ClassicalMetaAnalysisMethod{ visible: true} - AssignedVariablesList { name: "studyLabel"; title: qsTr("Study Labels"); singleVariable: true; allowedColumns: ["nominal"] } - AssignedVariablesList { name: "covariates"; title: qsTr("Covariates"); allowedColumns: ["scale"] } - AssignedVariablesList { name: "factors"; title: qsTr("Factors"); allowedColumns: ["nominal"] } + + AvailableVariablesList + { + name: "allVariables" + } + + AssignedVariablesList + { + name: "effectSize" + title: qsTr("Effect Size") + singleVariable: true + suggestedColumns: ["scale"] + } + AssignedVariablesList + { + name: "effectSizeStandardError" + title: qsTr("Effect Size Standard Error") + singleVariable: true + suggestedColumns: ["scale"] + } + + MA.ClassicalMetaAnalysisMethod{visible: true} + + AssignedVariablesList + { + name: "covariates" + title: qsTr("Covariates") + suggestedColumns: ["scale"] + } + AssignedVariablesList + { + name: "factors" + title: qsTr("Factors") + suggestedColumns: ["nominal"] + } + + AssignedVariablesList + { + name: "clusters" + title: qsTr("Clusters") + singleVariable: true + suggestedColumns: ["nominal"] + } + + AssignedVariablesList + { + name: "studyLabel" + title: qsTr("Study Label") + singleVariable: true + suggestedColumns: ["nominal"] + } } Section { - title: qsTr("Model") - VariablesForm + title: qsTr("Model") + + Group { - preferredHeight: 150 * preferencesModel.uiScale - AvailableVariablesList { name: "modelComponents"; title: qsTr("Components"); source: ["covariates","factors"]} - AssignedVariablesList { name: "modelTerms"; title: qsTr("Model Terms"); listViewType: JASP.Interaction } + title: qsTr("Effect size model") + + VariablesForm + { + preferredHeight: 150 * preferencesModel.uiScale + + AvailableVariablesList + { + name: "effectSizeModelComponents" + title: qsTr("Components") + source: ["covariates","factors"] + } + + AssignedVariablesList + { + name: "effectSizeModelTerms"; + title: qsTr("Model Terms") + listViewType: JASP.Interaction + } + } + + CheckBox + { + name: "effectSizeModelIncludeIntercept"; + label: qsTr("Include intercept") + checked: true + } + } + + Group + { + title: qsTr("Heterogeneity model") + + VariablesForm + { + preferredHeight: 150 * preferencesModel.uiScale + + AvailableVariablesList + { + name: "heterogeneityModelComponents" + title: qsTr("Components") + source: ["covariates","factors"] + } + + AssignedVariablesList + { + name: "heterogeneityModelTerms"; + title: qsTr("Model Terms") + listViewType: JASP.Interaction + } + } + + CheckBox + { + name: "heterogeneityModelIncludeIntercept"; + label: qsTr("Include intercept") + checked: true + } } - CheckBox { name: "interceptTerm"; label: qsTr("Include intercept"); checked: true } } - MA.ClassicalMetaAnalysisStatistics{} + Section + { + title: qsTr("Statistics") + + Group + { + title: qsTr("Meta-Regression") + + CheckBox + { + name: "metaregressionTermsTests" + text: qsTr("Terms tests") + checked: true + } + + CheckBox + { + name: "metaregressionCoefficientsEstimates" + text: qsTr("Coefficients estimates") + checked: true + } + + DropDown + { + name: "metaregressionCoefficientsTest" + label: qsTr("Coefficients test") + values: [ "z", "t", "knha"] + } + + CheckBox + { + name: "metaregressionCoefficientsCovarianceMatrix" + text: qsTr("Coefficients covariance matrix") + checked: false + } + } + + Group + { + title: qsTr("Hetereogeneity") + + CheckBox + { + name: "𝜏" + text: qsTr("heterogeneityTau") + checked: true + } + + CheckBox + { + name: "𝜏²" + text: qsTr("heterogeneityTau2") + checked: false + } + + CheckBox + { + name: "IΒ²" + text: qsTr("heterogeneityI2") + checked: false + } + + CheckBox + { + name: "HΒ²" + text: qsTr("heterogeneityH2") + checked: false + } + + CheckBox + { + name: "Prediction Interval" + text: qsTr("heterogeneityPredictionInterval") + checked: false + } + } + + CheckBox + { + name: "cconfidenceIntervals" + text: qsTr("Confidence intervals") + childrenOnSameRow: true + + CIField + { + name: "confidenceIntervalsLevel" + } + } + + CheckBox + { + name: "modelFit" + text: qsTr("Pooled estimate") + checked: true + } + + + Group + { + title: qsTr("Model Fit") + + CheckBox + { + name: "fitMeasure" + text: qsTr("Fit measures") + } + } + } + + Section + { + title: qsTr("Plots") + + CheckBox + { + id: forestPlot + name: "forestPlot" + text: qsTr("Forest plot") + + CheckBox + { + name: "forestPlotLabel" + text: qsTr("Show labels") + } + + DropDown + { + name: "forestPlotOrder" + label: qsTr("Ordering") + currentIndex: 1 + values: [ + { label: qsTr("Year (ascending)") , value: "yearAscending" }, + { label: qsTr("Year (descending)") , value: "yearDescending" }, + { label: qsTr("Effect size (ascending)") , value: "effectSizeAscending" }, + { label: qsTr("Effect size (descending)") , value: "effectSizeDescending" } + ] + } + + } + } MA.ClassicalMetaAnalysisDiagnostics{} } \ No newline at end of file From ab148e6d1fa749fe75ef5bd959f032aedaeeec43 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sat, 8 Jun 2024 17:14:14 +0200 Subject: [PATCH 003/127] update effect size calculation qml --- R/effectsizecomputation.R | 458 ++++++----- inst/help/EffectSizeComputation.md | 299 ++++--- inst/qml/EffectSizeComputation.qml | 1200 +++++++++++++++------------- 3 files changed, 1056 insertions(+), 901 deletions(-) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index 25feec5f..1c0914e9 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -5,29 +5,60 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { return() } +# functions for transforming input into metafor::escalc settings +getEscalcDataOptions <- function(options, dataset) { -getEscalcDataOptions <- function(design, measurement, effectSizeValue, options, dataset) { + design <- options[["design"]] + measurement <- options[["measurement"]] + effectSize <- options[["effectSize"]] if (design == "independentGroups") { if (measurement == "quantitative") { - inputs <- list( - n1i = dataset[[options[["nGroup1"]]]], - n2i = dataset[[options[["nGroup2"]]]], - m1i = dataset[[options[["meanGroup1"]]]], - m2i = dataset[[options[["meanGroup2"]]]], - sd1i = dataset[[options[["sdGroup1"]]]], - sd2i = dataset[[options[["sdGroup2"]]]] - ) + if (effectSize == "SMD") { + inputs <- list( + m1i = dataset[[options[["meanGroup1"]]]], + m2i = dataset[[options[["meanGroup2"]]]], + sd1i = dataset[[options[["sdGroup1"]]]], + sd2i = dataset[[options[["sdGroup2"]]]], + n1i = dataset[[options[["sampleSizeGroup1"]]]], + n2i = dataset[[options[["sampleSizeGroup2"]]]], + ti = dataset[[options[["tStatistic"]]]], + pi = dataset[[options[["pValue"]]]], + di = dataset[[options[["cohensD"]]]] + ) + } else if (effectSize %in% c("SMD1", "SMDH1")) { + inputs <- list( + m1i = dataset[[options[["meanGroup1"]]]], + m2i = dataset[[options[["meanGroup2"]]]], + sd2i = dataset[[options[["sdGroup2"]]]], + n1i = dataset[[options[["sampleSizeGroup1"]]]], + n2i = dataset[[options[["sampleSizeGroup2"]]]] + ) + } else if (effectSize %in% c("CVR", "VR")) { + inputs <- list( + sd1i = dataset[[options[["sdGroup1"]]]], + sd2i = dataset[[options[["sdGroup2"]]]], + n1i = dataset[[options[["sampleSizeGroup1"]]]], + n2i = dataset[[options[["sampleSizeGroup2"]]]] + ) + } else { + inputs <- list( + m1i = dataset[[options[["meanGroup1"]]]], + m2i = dataset[[options[["meanGroup2"]]]], + sd1i = dataset[[options[["sdGroup1"]]]], + sd2i = dataset[[options[["sdGroup2"]]]], + n1i = dataset[[options[["sampleSizeGroup1"]]]], + n2i = dataset[[options[["sampleSizeGroup2"]]]] + ) + } } else if (measurement == "binary") { inputs <- list( - ai = dataset[[options[["nGroup1Outcome1"]]]], - bi = dataset[[options[["nGroup1Outcome2"]]]], - ci = dataset[[options[["nGroup2Outcome1"]]]], - di = dataset[[options[["nGroup2Outcome2"]]]], - n1i = dataset[[options[["nGroup1"]]]], - n2i = dataset[[options[["nGroup2"]]]], - x1i = dataset[[options[["eventsGroup1"]]]], - x2i = dataset[[options[["eventsGroup2"]]]] + ai = dataset[[options[["group1OutcomePlus"]]]], + bi = dataset[[options[["group1OutcomeMinus"]]]], + ci = dataset[[options[["group2OutcomePlus"]]]], + di = dataset[[options[["group2OutcomeMinus"]]]], + n1i = dataset[[options[["sampleSizeGroup1"]]]], + n2i = dataset[[options[["sampleSizeGroup2"]]]] ) } else if (measurement == "countsPerTime") { inputs <- list( @@ -36,260 +67,251 @@ getEscalcDataOptions <- function(design, measurement, effectSizeValue, options, x1i = dataset[[options[["eventsGroup1"]]]], x2i = dataset[[options[["eventsGroup2"]]]] ) - } else if (measurement == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) { - inputs <- list( - ai = dataset[[options[["nGroup1Outcome1"]]]], - bi = dataset[[options[["nGroup1Outcome2"]]]], - ci = dataset[[options[["nGroup2Outcome1"]]]], - di = dataset[[options[["nGroup2Outcome2"]]]], - n1i = dataset[[options[["nGroup1"]]]], - n2i = dataset[[options[["nGroup2"]]]] - ) - } else if (measurement == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) { - inputs <- list( - n1i = dataset[[options[["nGroup1"]]]], - n2i = dataset[[options[["nGroup2"]]]], - m1i = dataset[[options[["meanGroup1"]]]], - m2i = dataset[[options[["meanGroup2"]]]], - sd1i = dataset[[options[["sdGroup1"]]]], - sd2i = dataset[[options[["sdGroup2"]]]] - ) + } else if (measurement == "mixed") { + if (effectSize %in% c("D2ORN", "D2ORL")) { + inputs <- list( + m1i = dataset[[options[["meanGroup1"]]]], + m2i = dataset[[options[["meanGroup2"]]]], + sd1i = dataset[[options[["sdGroup1"]]]], + sd2i = dataset[[options[["sdGroup2"]]]], + n1i = dataset[[options[["sampleSizeGroup1"]]]], + n2i = dataset[[options[["sampleSizeGroup2"]]]], + ti = dataset[[options[["tStatistic"]]]], + pi = dataset[[options[["pValue"]]]], + di = dataset[[options[["cohensD"]]]] + ) + } else if (effectSize %in% c("PBIT", "OR2DN", "OR2DL")) { + inputs <- list( + ai = dataset[[options[["group1OutcomePlus"]]]], + bi = dataset[[options[["group1OutcomeMinus"]]]], + ci = dataset[[options[["group2OutcomePlus"]]]], + di = dataset[[options[["group2OutcomeMinus"]]]], + n1i = dataset[[options[["sampleSizeGroup1"]]]], + n2i = dataset[[options[["sampleSizeGroup2"]]]] + ) + } } } else if (design == "variableAssociation") { if (measurement == "quantitative") { inputs <- list( - ri = dataset[[options[["rawCorrelations"]]]], - ni = dataset[[options[["sampleSizes"]]]], - ti = dataset[[options[["tStatistics"]]]], - pi = dataset[[options[["pValues"]]]], - fi = dataset[[options[["fStatistics"]]]] + ri = dataset[[options[["correlation"]]]], + ni = dataset[[options[["sampleSize"]]]], + ti = dataset[[options[["tStatistic"]]]], + pi = dataset[[options[["pValue"]]]] ) } else if (measurement == "binary") { - inputs <- list( - ai = dataset[[options[["nVariable1Outcome+"]]]], - bi = dataset[[options[["nVariable1Outcome-"]]]], - ci = dataset[[options[["nVariable2Outcome+"]]]], - di = dataset[[options[["nVariable2Outcome-"]]]], - n1i = dataset[[options[["nRow1"]]]], - n2i = dataset[[options[["nRow2"]]]] - ) + if (effectSize %in% c("OR", "YUQ", "YUY", "RTET")) { + inputs <- list( + ai = dataset[[options[["outcomePlusPlus"]]]], + bi = dataset[[options[["outcomePlusMinus"]]]], + ci = dataset[[options[["outcomeMinusPlus"]]]], + di = dataset[[options[["outcomeMinusMinus"]]]], + n1i = dataset[[options[["outcomePlusPlusAndPlusMinus"]]]], + n2i = dataset[[options[["outcomeMinusPlusAndMinusMinus"]]]] + ) + } else if (effectSize %in% c("PHI", "ZPHI")) { + inputs <- list( + ai = dataset[[options[["outcomePlusPlus"]]]], + bi = dataset[[options[["outcomePlusMinus"]]]], + ci = dataset[[options[["outcomeMinusPlus"]]]], + di = dataset[[options[["outcomeMinusMinus"]]]], + n1i = dataset[[options[["outcomePlusPlusAndPlusMinus"]]]], + n2i = dataset[[options[["outcomeMinusPlusAndMinusMinus"]]]], + vtype = if(length(options[["samplingVarianceTypeMixed"]]) != 0) dataset[[options[["samplingVarianceTypeMixed"]]]] else NULL + ) + } } else if (measurement == "mixed") { - inputs <- list( - ri = dataset[[options[["rawCorrelations"]]]], - ni = dataset[[options[["sampleSizes"]]]], - ti = dataset[[options[["tStatistics"]]]], - pi = dataset[[options[["pValues"]]]], - fi = dataset[[options[["fStatistics"]]]], - ai = dataset[[options[["nVariable1Outcome+"]]]], - bi = dataset[[options[["nVariable1Outcome-"]]]], - ci = dataset[[options[["nVariable2Outcome+"]]]], - di = dataset[[options[["nVariable2Outcome-"]]]] - ) + if (effectSize %in% c("RBIS", "ZBIS")) { + inputs <- list( + m1i = dataset[[options[["meanGroup1"]]]], + m2i = dataset[[options[["meanGroup2"]]]], + sd1i = dataset[[options[["sdGroup1"]]]], + sd2i = dataset[[options[["sdGroup2"]]]], + n1i = dataset[[options[["sampleSizeGroup1"]]]], + n2i = dataset[[options[["sampleSizeGroup2"]]]], + ti = dataset[[options[["tStatistic"]]]], + pi = dataset[[options[["pValue"]]]], + di = dataset[[options[["cohensD"]]]] + ) + } else if (effectSize %in% c("RPB", "ZPB")) { + inputs <- list( + m1i = dataset[[options[["meanGroup1"]]]], + m2i = dataset[[options[["meanGroup2"]]]], + sd1i = dataset[[options[["sdGroup1"]]]], + sd2i = dataset[[options[["sdGroup2"]]]], + n1i = dataset[[options[["sampleSizeGroup1"]]]], + n2i = dataset[[options[["sampleSizeGroup2"]]]], + ti = dataset[[options[["tStatistic"]]]], + pi = dataset[[options[["pValue"]]]], + di = dataset[[options[["cohensD"]]]], + vtype = if(length(options[["samplingVarianceTypeMixed"]]) != 0) dataset[[options[["samplingVarianceTypeMixed"]]]] else NULL + ) + } } } else if (design == "singleGroup") { if (measurement == "quantitative") { - inputs <- list( - mi = dataset[[options[["complementFrequencies"]]]], - sdi = dataset[[options[["standardDeviations"]]]], - ni = dataset[[options[["sampleSizes"]]]], - yi = dataset[[options[["observedEffectSizes"]]]], - vi = dataset[[options[["samplingVariances"]]]], - sei = dataset[[options[["standardErrors"]]]], - m1i = dataset[[options[["meanSample1"]]]] - ) + if (effectSize %in% c("MN", "SMN", "MNLN", "CVLN")) { + inputs <- list( + mi = dataset[[options[["mean"]]]], + sdi = dataset[[options[["sd"]]]], + ni = dataset[[options[["sampleSize"]]]] + ) + } else if (effectSize == "SDLN") { + inputs <- list( + sdi = dataset[[options[["sd"]]]], + ni = dataset[[options[["sampleSize"]]]] + ) + } } else if (measurement == "binary") { inputs <- list( - xi = dataset[[options[["eventFrequencies"]]]], - mi = dataset[[options[["complementFrequencies"]]]], - ni = dataset[[options[["sampleSizes"]]]], - yi = dataset[[options[["observedEffectSizes"]]]], - vi = dataset[[options[["samplingVariances"]]]], - sei = dataset[[options[["standardErrors"]]]] + xi = dataset[[options[["events"]]]], + mi = dataset[[options[["nonEvents"]]]], + ni = dataset[[options[["sampleSize"]]]] ) } else if (measurement == "countsPerTime") { inputs <- list( - x1i = dataset[[options[["eventsSample1"]]]], - t1i = dataset[[options[["totalPersonTimes"]]]], - ni = dataset[[options[["sampleSizes"]]]], - yi = dataset[[options[["observedEffectSizes"]]]], - vi = dataset[[options[["samplingVariances"]]]], - sei = dataset[[options[["standardErrors"]]]] + xi = dataset[[options[["events"]]]], + ti = dataset[[options[["personTime"]]]], + ni = dataset[[options[["sampleSize"]]]] ) } - } else if (design == "repeatedMeasuresOrMatchedGroups") { + } else if (design == "repeatedMeasures") { if (measurement == "quantitative") { + if (effectSize %in% c("MC", "SMCR", "SMCRH", "SMCRP", "SMCRPH", "ROMC")) { + input <- list( + m1i = dataset[[options[["meanTime1"]]]], + m2i = dataset[[options[["meanTime2"]]]], + sd1i = dataset[[options[["sdTime1"]]]], + sd2i = dataset[[options[["sdTime2"]]]], + ni = dataset[[options[["sampleSize"]]]], + ri = dataset[[options[["correlation"]]]] + ) + } else if (effectSize == "SMCC") { + input <- list( + m1i = dataset[[options[["meanTime1"]]]], + m2i = dataset[[options[["meanTime2"]]]], + sd1i = dataset[[options[["sdTime1"]]]], + sd2i = dataset[[options[["sdTime2"]]]], + ni = dataset[[options[["sampleSize"]]]], + ri = dataset[[options[["correlation"]]]], + ti = dataset[[options[["tStatistic"]]]], + pi = dataset[[options[["pValue"]]]], + di = dataset[[options[["cohensD"]]]] + ) + } else if (effectSize %in% c("CVRC", "VRC")) { + input <- list( + sd1i = dataset[[options[["sdTime1"]]]], + sd2i = dataset[[options[["sdTime2"]]]], + ni = dataset[[options[["sampleSize"]]]], + ri = dataset[[options[["correlation"]]]] + ) + } + } else if (measurement == "binary") { inputs <- list( - n1i = dataset[[options[["nTimePoint1"]]]], - n2i = dataset[[options[["nTimePoint2"]]]], - m1i = dataset[[options[["meanTimePoint1"]]]], - m2i = dataset[[options[["meanTimePoint2"]]]], - sd1i = dataset[[options[["sdTimePoint1"]]]], - sd2i = dataset[[options[["sdTimePoint2"]]]] + ai = dataset[[options[["outcomePlusPlus"]]]], + bi = dataset[[options[["outcomePlusMinus"]]]], + ci = dataset[[options[["outcomeMinusPlus"]]]], + di = dataset[[options[["outcomeMinusMinus"]]]] ) - } else if (measurement == "binary") { + } else if (measurement == "binaryMarginal") { inputs <- list( - ai = dataset[[options[["nTreatment1Outcome1Treatment2Outcome2+"]]]], - bi = dataset[[options[["nTreatment1Outcome2Treatment2Outcome1+"]]]], - ci = dataset[[options[["nTreatment2Outcome1Treatment1Outcome2+"]]]], - di = dataset[[options[["nTreatment2Outcome2Treatment1Outcome1+"]]]], - n1i = dataset[[options[["nTimePoint1"]]]], - n2i = dataset[[options[["nTimePoint2"]]]], - x1i = dataset[[options[["eventsTimePoint1"]]]], - x2i = dataset[[options[["eventsTimePoint2"]]]] + ai = dataset[[options[["time1OutcomePlus"]]]], + bi = dataset[[options[["time1OutcomeMinus"]]]], + ci = dataset[[options[["time2OutcomePlus"]]]], + di = dataset[[options[["time2OutcomeMinus"]]]], + ri = dataset[[options[["correlation"]]]], + pi = dataset[[options[["proportionPlusPlus"]]]] ) } } else if (design == "other") { - if (effectSizeValue == "ARAW" || effectSizeValue == "AHW" || effectSizeValue == "ABT") { + if (measurement == "reliability") { inputs <- list( - ai = dataset[[options[["alpha"]]]], - bi = dataset[[options[["beta"]]]], - ci = dataset[[options[["gamma"]]]], - di = dataset[[options[["delta"]]]] + ai = dataset[[options[["cronbachsAlpha"]]]], + mi = dataset[[options[["items"]]]], + ni = dataset[[options[["sampleSize"]]]] ) - } else if (effectSizeValue == "REH") { + } else if (measurement == "partialCorrelation") { + if (effectSize %in% c("PCOR", "ZPCOR")) { + inputs <- list( + ti = dataset[[options[["tStatistic"]]]], + mi = dataset[[options[["predictors"]]]], + ni = dataset[[options[["sampleSize"]]]], + ti = dataset[[options[["tStatistic"]]]], + ri = dataset[[options[["semipartialCorrelation"]]]], + pi = dataset[[options[["pValue"]]]] + ) + } else if (effectSize %in% c("SPCOR", "ZSPCOR")) { + inputs <- list( + ti = dataset[[options[["tStatistic"]]]], + mi = dataset[[options[["predictors"]]]], + ni = dataset[[options[["sampleSize"]]]], + r2i = dataset[[options[["rSquared"]]]], + ti = dataset[[options[["tStatistic"]]]], + ri = dataset[[options[["semipartialCorrelation"]]]], + pi = dataset[[options[["pValue"]]]] + ) + } + } else if (measurement == "modelFit") { inputs <- list( - ai = dataset[[options[["nHomozygousDominantAlleles"]]]], - bi = dataset[[options[["nHomozygousRecessiveAlleles"]]]], - ci = dataset[[options[["nHeterozygousAlleles"]]]] + mi = dataset[[options[["predictors"]]]], + ni = dataset[[options[["sampleSize"]]]], + r2i = dataset[[options[["rSquared"]]]], + fi = dataset[[options[["fStatistic"]]]], + pi = dataset[[options[["pValue"]]]] ) - } else if (effectSizeValue == "R2" || effectSizeValue == "ZR2") { + } else if (measurement == "heterozygosity") { inputs <- list( - r2i = dataset[[options[["rSquared"]]]], - ni = dataset[[options[["sampleSizes"]]]] + ai = dataset[[options[["homozygousDominantAlleles"]]]], + bi = dataset[[options[["heterozygousAlleles"]]]], + ci = dataset[[options[["homozygousRecessiveAlleles"]]]] ) } + } else if (design == "reportedEffectSizes") { + inputs <- list( + yi = dataset[[options[["effectSize"]]]], + sei = dataset[[options[["standardError"]]]], + vi = dataset[[options[["samplingVariance"]]]] + ) } + if (length(options[["subset"]]) == 1) + inputs[["subset"]] <- dataset[[options[["subset"]]]] + return(inputs) } -getEscalcAddOption <- function(design, measurement, effectSizeValue, options) { +getEscalcAdjustFrequenciesOptions <- function(design, measurement, effectSize, options) { # Conditions for when add is appropriate - if ((design == "independentGroups" && measurement == "binary" && (effectSize %in% c("RR", "OR", "RD", "AS", "PETO"))) || - (design == "independentGroups" && measurement == "countsPerTime") || - (design == "repeatedMeasuresOrMatchedGroups" && measurement == "binary") || - (design == "singleGroup" && measurement == "binary") || - (design == "singleGroup" && measurement == "countsPerTime") || - (design == "variableAssociation" && measurement == "binary") || - (design == "independentGroups" && measurement == "mixed" && effectSize %in% c("D2ORN", "D2ORL"))) { - return(options[["add"]]) - } else { - return(NULL) - } -} -getEscalcToOption <- function(design, measurement, effectSizeValue, options) { - - # Conditions for when to is appropriate if ((design == "independentGroups" && measurement == "binary") || (design == "independentGroups" && measurement == "countsPerTime") || - (design == "repeatedMeasuresOrMatchedGroups" && measurement == "binary") || - (design == "singleGroup" && measurement == "binary") || - (design == "singleGroup" && measurement == "countsPerTime") || + (design == "independentGroups" && measurement == "mixed" && effectSize %in% c("PBIT", "OR2DN", "OR2DL")) || (design == "variableAssociation" && measurement == "binary") || - (design == "independentGroups" && measurement == "mixed" && effectSize %in% c("D2ORN", "D2ORL"))) { - return(options[["to"]]) - } else { - return(NULL) # Return NULL if 'to' is not appropriate for the given conditions - } -} -getEscalcDrop00Option <- function(design, measurement, effectSizeValue, options) { - - # Conditions for when drop00 is appropriate - if ((design == "independentGroups" && measurement == "binary") || - (design == "independentGroups" && measurement == "countsPerTime") || - (design == "repeatedMeasuresOrMatchedGroups" && measurement == "binary") || (design == "singleGroup" && measurement == "binary") || - (design == "singleGroup" && measurement == "countsPerTime") || - (design == "variableAssociation" && measurement == "binary") || - (design == "independentGroups" && measurement == "mixed" && effectSize %in% c("D2ORN", "D2ORL"))) { - return(options[["dropStudiesWithNoCasesOrEvents"]]) + (design == "singleGroup" && measurement == "countsPerTime")) { + return(list( + add = options[["add"]], + to = options[["to"]], + drop00 = switch( + options[["dropStudiesWithNoCasesOrEvents"]], + "yes" = TRUE, + "no" = FALSE + ) + )) } else { return(NULL) } } -getEscalcVtypeOption <- function(design, measurement, effectSizeValue, options) { +getEscalcVtypeOption <- function(design, measurement, effectSize, options) { # Conditions for when vtype is appropriate - if ((design == "independentGroups" && measurement == "quantitative") || - (design == "independentGroups" && measurement == "binary") || - (design == "independentGroups" && measurement == "countsPerTime") || - (design == "independentGroups" && measurement == "mixed" && (effectSize %in% c("PBIT", "OR2DN", "OR2DL"))) || + if ((design == "independentGroups" && measurement == "quantitative" && effectSize %in% c("MD", "SMD", "SMD1", "ROM")) || (design == "variableAssociation" && measurement == "quantitative") || (design == "variableAssociation" && measurement == "binary") || (design == "variableAssociation" && measurement == "mixed") || - (design == "singleGroup" && measurement == "quantitative") || - (design == "singleGroup" && measurement == "binary") || - (design == "singleGroup" && measurement == "countsPerTime") || - (design == "repeatedMeasuresOrMatchedGroups" && measurement == "quantitative") || - (design == "repeatedMeasuresOrMatchedGroups" && measurement == "binary")) { + (design == "other" && measurement == "modelFit")) { return(options[["samplingVarianceType"]]) } else { return(NULL) } } -inputs <- c( - "nGroup1Outcome1", - "nVariable1Outcome+", - "nTreatment1Outcome1Treatment2Outcome2+", - "alpha", - "nHomozygousDominantAlleles", - "nGroup1Outcome2", - "nVariable1Outcome-", - "nTreatment1Outcome2Treatment2Outcome1+", - "beta", - "nHomozygousRecessiveAlleles", - "nGroup2Outcome1", - "nVariable2Outcome+", - "nTreatment2Outcome1Treatment1Outcome2+", - "gamma", - "nHeterozygousAlleles", - "nGroup2Outcome2", - "nVariable2Outcome-", - "nTreatment2Outcome2Treatment1Outcome1+", - "delta", - "nNonEvents", - "nGroup1", - "nRow1", - "nSample1", - "nTimePoint1", - "nGroup2", - "nRow2", - "nSample2", - "nTimePoint2", - "eventsGroup1", - "eventsSample1", - "eventsTimePoint1", - "eventsGroup2", - "eventsSample2", - "eventsTimePoint2", - "personTimeGroup1", - "personTimeSample1", - "personTimeGroup2", - "personTimeSample2", - "meanGroup1", - "meanSample1", - "meanTimePoint1", - "meanGroup2", - "meanSample2", - "meanTimePoint2", - "sdGroup1", - "sdSample1", - "sdTimePoint1", - "sdGroup2", - "sdSample2", - "sdTimePoint2", - "eventFrequencies", - "complementFrequencies", - "rawCorrelations", - "tStatistics", - "totalPersonTimes", - "fStatistics", - "pValues", - "standardDeviations", - "rSquared", - "sampleSizes", - "observedEffectSizes", - "samplingVariances", - "standardErrors" -) diff --git a/inst/help/EffectSizeComputation.md b/inst/help/EffectSizeComputation.md index feebbba2..e0388bd1 100644 --- a/inst/help/EffectSizeComputation.md +++ b/inst/help/EffectSizeComputation.md @@ -1,7 +1,11 @@ Effect Size Computation ========================== -------------------------- -This analysis allows users to compute effect sizes based on the design and measurement of their experiment. In case multiple types of designs and measurements are included in the data set, the user can specify the order in which the effect sizes are calculated (the effect size from the following option is filled in only if it was computed in the previous step). +This analysis allows users to compute effect sizes based on the design and measurement of their experiment. In case multiple types of designs and measurements are included in the data set, the user can specify the order in which the effect sizes are calculated (the effect size from the following option is filled in only if it was computed in the previous step). + +Already included effect sizes can be passed forward using the Reported effect sizes option. + +The selected effect size can be computed only for a subset of the dataset using the Subset indicator variable.. See [metafor's documentation](https://wviechtb.github.io/metafor/reference/escalc.html) for more detail about the effect sizes. @@ -13,8 +17,9 @@ The design dropdown allows users to select the type of effect size based on the - Independent groups: This option is for analyzing data comparing two independent groups. The groups may be experimentally defined or naturally occurring. - Variable association: This option is for examining the direction and strength of the association between two variables measured concurrently and/or without manipulation by experimenters. - Single group: This option is for summarizing characteristics of individual groups based on either quantitative or dichotomous variables. -- Repeated measures/matched groups: This option is for assessing change within a single group over time or comparing two matched/paired samples. +- Repeated measures (or matched groups): This option is for assessing change within a single group over time or comparing two matched samples. - Other: This option includes specific effect sizes that do not fit into the other categories, such as reliability or partial correlations. +- Reported effect sizes: This option allows to directly pass effect sizes and their standard errors or condifidence interval if they were already reported in the original studies. (When condifence interval is passed, normal approximation is used to compute the standard error.) #### Measurement @@ -37,34 +42,45 @@ The measurement dropdown is enabled only when a design type other than "Other" i #### Effect size The Effect size dropdown allows users to select the specific effect size or outcome measure to be calculated based on the chosen design and measurement type. The available options are dynamically adjusted according to the selected design and measurement type. -##### Independent groups +#### Independent groups - Quantitative: - MD: Mean Difference - - SMD: Standardized Mean Difference - - SMDH: Standardized Mean Difference with heteroscedastic variances - - SMD1: Standardized Mean Difference using standard deviation of second group - - SMD1H: Standardized Mean Difference using standard deviation of second group with heteroscedastic variances + - SMD: Standardized Mean Difference (bias corrected, i.e., Hedges' g) + - SMDH: Standardized Mean Difference with heteroscedastic variances (bias corrected) + - SMD1: Standardized Mean Difference using standard deviation of second group (bias corrected) + - SMD1H: Standardized Mean Difference using standard deviation of second group with heteroscedastic variances (bias corrected) - ROM: Ratio of Means - CVR: Coefficient of Variation Ratio - VR: Variability Ratio - Binary: - - RR: Risk Ratio - - OR: Odds Ratio + - RR: Log Risk Ratio + - OR: Log Odds Ratio - RD: Risk Difference - AS: Arcsine Square Root Transformed Risk Difference - PETO: Log Odds Ratio estimated with Peto's method - Counts per time: - - IRR: Incidence Rate Ratio + - IRR: Log Incidence Rate Ratio - IRD: Incidence Rate Difference - IRSD: Square Root Transformed Incidence Rate Difference - Mixed: - - D2ORN: Transformed Standardized Mean Difference assuming normal distributions - - D2ORL: Transformed Standardized Mean Difference assuming logistic distributions + - D2ORN: transformed Standardized Mean Difference to Log Odds Ratio assuming normal distributions + - D2ORL: transformed Standardized Mean Difference to Log Odds Ratio assuming logistic distributions - PBIT: Probit Transformed Risk Difference - - OR2DN: Transformed Odds Ratio assuming normal distributions - - OR2DL: Transformed Odds Ratio assuming logistic distributions + - OR2DN: Transformed Log Odds Ratio to Standardized Mean Difference assuming normal distributions + - OR2DL: Transformed Log Odds Ratio to Standardized Mean Difference assuming logistic distributions + +For SMD (including D2ORN, D2ORL) the Cohen's d, T-Statistics from an independent samples t-test, or (signed) P-Values together with the group sizes are sufficient statistics. + +For Binary designs (and the corresponding Mixed designs) the table frequencies (Group 1/Outcome +, Group 1/Outcome -, Group 2/Outcome +, and Group 2/Outcome -) or the first column (Group 1/Outcome + and Group 2/Outcome +) with sample sizes (Sample Size Group 1 and Sample Size Group 2) are sufficient statistics. + +The Binary design uses the corresponding table: +| | **Outcome +** | **Outcome -** | **Sample Size** | +| :--- | :----: | :----: | ---: | +| **Group 1** | Group 1/Outcome + | Group 1/Outcome - | Sample Size Group 1 | +| **Group 2** | Group 2/Outcome + | Group 2/Outcome - | Sample Size Group 2 | + -##### Variable association +#### Variable association - Quantitative: - COR: Raw Correlation Coefficient - UCOR: Bias-Corrected Correlation Coefficient @@ -75,13 +91,28 @@ The Effect size dropdown allows users to select the specific effect size or outc - YUQ: Yule's Q - YUY: Yule's Y - RTET: Tetrachoric Correlation Coefficient + - ZPHI: Fisher's r-to-z Phi Coefficient + - ZTET: Fisher's r-to-z Tetrachoric Correlation Coefficient - Mixed: - RPB: Point-Biserial Correlation Coefficient - RBIS: Biserial Correlation Coefficient - ZPB: Fisher's r-to-z Transformed Point-Biserial Correlation Coefficient - ZBIS: Fisher's r-to-z Transformed Biserial Correlation Coefficient -##### Single group +For PHI, ZPHI, RPB, and ZPB the Sampling Variance Type specifies ST = stratified vs CS = cross-sectional design, the Mixed option allows passing of character vector specifying ST/CS for each study. + +For Binary designs the table frequencies (Outcome +/+, Outcome +/-, Outcome -/+, and Outcome -/-) or the first column (Outcome +/+ and Outcome -/+) with the total +/. and -/. outcomes (Outcome +/+ and Outcome +/-, and Outcome -/+ and Outcome -/-) are sufficient statistics. + +For RPB, RBIS, ZPB, and ZBIS the Cohen's d, T-Statistics from an independent samples t-test, or (signed) P-Values together with the group sizes are sufficient statistics. + +The Binary design uses the corresponding table: +| | **Variable 2, Outcome +** | **Variable 2, Outcome +** | **Sample Size** | +| :--- | :----: | :----: | ---: | +| **Variable 1, Outcome +** | Outcome +/+ | Outcome +/- | Outcome +/+ and +/- | +| **Variable 1, Outcome -** | Outcome -/+ | Outcome -/- | Outcome -/+ and -/- | + + +#### Single group - Quantitative: - MN: Raw Mean - SMN: Single-Group Standardized Mean @@ -100,7 +131,10 @@ The Effect size dropdown allows users to select the specific effect size or outc - IRS: Square Root Transformed Incidence Rate - IRFT: Freeman-Tukey Transformed Incidence Rate -##### Repeated measures/matched groups +For Binary designs the Events and Sample Size or the Events and Non-Events are sufficient statistics. + + +#### Repeated measures (matched groups) - Quantitative: - MC: Mean Change - SMCC: Standardized Mean Change using Change Score Standardization @@ -118,142 +152,189 @@ The Effect size dropdown allows users to select the specific effect size or outc - MPORC: Conditional Log Odds Ratio - MPPETO: Conditional Log Odds Ratio estimated with Peto's method - MPORM: Marginal Log Odds Ratio using known/guestimated correlations +- Binary (marginal): + - MPORM: Matched Pairs Marginal Log Odds Ratio estimated from marginal table -##### Other -- ARAW: Raw Cronbach's Alpha -- AHW: Transformed Cronbach's Alpha (Hakstian & Whalen) -- ABT: Transformed Cronbach's Alpha (Bonett) -- PCOR: Partial Correlation Coefficient -- ZPCOR: Fisher's r-to-z Transformed Partial Correlation Coefficient -- SPCOR: Semi-Partial Correlation Coefficient -- ZSPCOR: Fisher's r-to-z Transformed Semi-Partial Correlation Coefficient -- R2: Raw Coefficient of Determination -- ZR2: r-to-z Transformed Coefficient of Determination -- REH: Relative Excess Heterozygosity +Correlation refers to between measures or between groups correlation. +For SMCC the Cohen's d, T-Statistics from paired-samples t-test, or (signed) P-Values together with the group sizes and correlation are sufficient statistics. + +The Binary design uses the corresponding table (Time can reffer to different treatments or matched groups): +| | **Time 2, Outcome +** | **Time 2, Outcome +** | +| :--- | :----: | ---: | +| **Time 1, Outcome +** | Outcome +/+ | Outcome +/- | +| **Time 1, Outcome -** | Outcome -/+ | Outcome -/- | + +The Binary design can be also reported marginally which results in the following table: +| | **Outcome +** | **Outcome -** | +| :--- | :----: | ---: | +| **Time 1** | Time 1/Outcome + | Time 1/Outcome - | +| **Time 2** | Time 2/Outcome + | Time 2/Outcome - | + +In the Binary Marginal design the user also has to supply either the Correlation or Proportion of +/+ outcomes in the binary design. If an impossible value is supplied (the correlation/proportion is restricted by the possible binary tables) the effect size is not calculated. + + +#### Other +- Reliability + - ARAW: Raw Cronbach's Alpha + - AHW: Transformed Cronbach's Alpha (Hakstian & Whalen) + - ABT: Transformed Cronbach's Alpha (Bonett) +- Partial and Semi-Partial Correlations + - PCOR: Partial Correlation Coefficient + - ZPCOR: Fisher's r-to-z Transformed Partial Correlation Coefficient + - SPCOR: Semi-Partial Correlation Coefficient + - ZSPCOR: Fisher's r-to-z Transformed Semi-Partial Correlation Coefficient +- Model fit + - R2: Raw Coefficient of Determination + - ZR2: r-to-z Transformed Coefficient of Determination +- Heterozygosity + - REH: Relative Excess Heterozygosity + +Note that (Semi)Partial Correlation in the input does NOT correspond to the raw correlation between the variables. The input can be used when e.g., the partial eta2 is known. + +For Partial and Semi-Partial Correlations the P-Value can be supplied instead of the T-Statistic. + +For Model fit only one of the R-Squared, F-Statistic, and P-Value is required. -------------------------- ### Variable Inputs +The specific variable inputs are based on selected effect sizes. + +Note that users can supply "signed" P-Value (e.g., p = -0.01, 0.95) where the sign determines the sign of the resulting effect size (p = -0.01 leads to a negative effect size and p = 0.95 leads to a positive effect size). Sign of T-Statistics is used in the same manner. #### Independent Groups - Quantitative Measurement - - N: Group 1: Total sample size of Group 1. - - N: Group 2: Total sample size of Group 2. - - Mean: Group 1: Mean value for Group 1. - - Mean: Group 2: Mean value for Group 2. - - SD: Group 1: Standard deviation for Group 1. - - SD: Group 2: Standard deviation for Group 2. + - Mean Group 1: Means for group 1. + - Mean Group 2: Means for group 2. + - SD Group 1: Standard deviations for group 1. + - SD Group 2: Standard deviations for group 2. + - Sample Size Group 1: Total sample sizes of group 1. + - Sample Size Group 2: Total sample sizes of group 2. + - T-Statistic: T-test statistics for the variables (for SMD only). + - P-Value: P-values from a t-test (for SMD only). + - Cohen's d: Already reported Cohen's d (for SMD only). - Binary Measurement - - N: Group 1/Outcome 1: Number of individuals in Group 1 with Outcome 1. - - N: Group 1/Outcome 2: Number of individuals in Group 1 with Outcome 2. - - N: Group 2/Outcome 1: Number of individuals in Group 2 with Outcome 1. - - N: Group 2/Outcome 2: Number of individuals in Group 2 with Outcome 2. - - Events: Group 1: Number of events in Group 1. - - Events: Group 2: Number of events in Group 2. + - Group 1/Outcome +: Number of individuals in Group 1 with Outcome +. + - Group 1/Outcome -: Number of individuals in Group 1 with Outcome -. + - Group 2/Outcome +: Number of individuals in Group 2 with Outcome +. + - Group 2/Outcome -: Number of individuals in Group 2 with Outcome -. + - Sample Size Group 1: Total sample size of Group 1. + - Sample Size Group 2: Total sample size of Group 2. - Counts Per Time Measurement - - Total Person-Time: Group 1: Total person-time for Group 1. - - Total Person-Time: Group 2: Total person-time for Group 2. - - Events: Group 1: Number of events in Group 1. - - Events: Group 2: Number of events in Group 2. + - Person-Time Group 1: Total person-time for Group 1. + - Person-Time Group 2: Total person-time for Group 2. + - Events Group 1: Number of events in Group 1. + - Events Group 2: Number of events in Group 2. - Mixed Measurement - - For Effect Sizes D2ORN, D2ORL: - - N: Group 1/Outcome 1: Number of individuals in Group 1 with Outcome 1. - - N: Group 1/Outcome 2: Number of individuals in Group 1 with Outcome 2. - - N: Group 2/Outcome 1: Number of individuals in Group 2 with Outcome 1. - - N: Group 2/Outcome 2: Number of individuals in Group 2 with Outcome 2. - - N: Group 1: Total sample size of Group 1. - - N: Group 2: Total sample size of Group 2. - For Effect Sizes PBIT, OR2DN, OR2DL: - - Mean: Group 1: Mean value for Group 1. - - Mean: Group 2: Mean value for Group 2. - - SD: Group 1: Standard deviation for Group 1. - - SD: Group 2: Standard deviation for Group 2. - - N: Group 1: Total sample size of Group 1. - - N: Group 2: Total sample size of Group 2. + - Group 1/Outcome +: Number of individuals in group 1 with outcome +. + - Group 1/Outcome -: Number of individuals in group 1 with outcome -. + - Group 2/Outcome +: Number of individuals in group 2 with outcome +. + - Group 2/Outcome -: Number of individuals in group 2 with outcome -. + - Group 1: Total sample size of group 1. + - Group 2: Total sample size of group 2. + - For Effect Sizes D2ORN, D2ORL: + - Mean Group 1: Means for group 1. + - Mean Group 2: Means for group 2. + - SD Group 1: Standard deviations for group 1. + - SD Group 2: Standard deviations for group 2. + - Sample Size Group 1: Total sample sizes of group 1. + - Sample Size Group 2: Total sample sizes of group 2. + - T-Statistic: T-test statistics for the variables. + - P-Value: P-values from a t-test. + - Cohen's d: Already reported Cohen's d. #### Variable Association - Quantitative Measurement - - Raw Correlation Coefficients: Correlation coefficients between two variables. - - Sample/Group Sizes: Total sample sizes. - - T-Test Statistics: T-test statistics for the variables. - - P-Values: P-values for the correlation coefficients. - - F-Test Statistics: F-test statistics for the variables. + - Correlation Coefficient: Correlation coefficients between the two variables. + - Sample Size: Total sample sizes. + - T-Statistic: T-test statistics for the variables. + - P-Value: P-values for the correlation coefficients. - Binary Measurement - - N: Variable 1/Outcome +: Number of individuals with Outcome + for Variable 1. - - N: Variable 1/Outcome -: Number of individuals with Outcome - for Variable 1. - - N: Variable 2/Outcome +: Number of individuals with Outcome + for Variable 2. - - N: Variable 2/Outcome -: Number of individuals with Outcome - for Variable 2. + - Variable 1/Outcome +: Number of individuals with outcome + for variable 1. + - Variable 1/Outcome -: Number of individuals with outcome - for variable 1. + - Variable 2/Outcome +: Number of individuals with outcome + for variable 2. + - Variable 2/Outcome -: Number of individuals with outcome - for variable 2. #### Single Group - Quantitative Measurement - - Mean: Sample 1: Mean value for Sample 1. - - Standard Deviations: Standard deviations for the samples. - - Sample/Group Sizes: Total sample sizes. - - Observed Effect Sizes/Outcomes: Observed effect sizes or outcomes. - - Sampling Variances: Sampling variances for the effect sizes. - - Standard Errors: Standard errors for the effect sizes. + - Mean: Means. + - Standard Deviation: Standard deviations. + - Sample Size: Total sample sizes. - Binary Measurement - - Event Frequencies: Frequencies of the event of interest. - - Complement Frequencies / Group Means: Frequencies of the complement event or group means. - - Sample/Group Sizes: Total sample sizes. - - Observed Effect Sizes/Outcomes: Observed effect sizes or outcomes. - - Sampling Variances: Sampling variances for the effect sizes. - - Standard Errors: Standard errors for the effect sizes. + - Events: Frequencies of the event of interest. + - Non-Events: Frequencies of the complement event or group means. + - Sample Size: Total sample sizes. - Counts Per Time Measurement - - Events: Sample 1: Number of events in Sample 1. - - Total Person-Times: Total person-times for the samples. + - Events: Number of events. + - Person-Time: Total person-times. #### Repeated Measures/Matched Groups - Quantitative Measurement - - N: Time Point 1: Total sample size at Time Point 1. - - N: Time Point 2: Total sample size at Time Point 2. - - Mean: Time Point 1: Mean value at Time Point 1. - - Mean: Time Point 2: Mean value at Time Point 2. - - SD: Time Point 1: Standard deviation at Time Point 1. - - SD: Time Point 2: Standard deviation at Time Point 2. + - Mean Time 1: Means at time point 1. + - Mean Time 2: Means at time point 2. + - SD Time 1: Standard deviations at time point 1. + - SD Time 2: Standard deviations at time point 2. + - Sample Size: Total sample sizes. - Binary Measurement - - N: Treatment 1 + Outcome 1 / Treatment 2 + Outcome 1: Number of individuals with Treatment 1 + Outcome 1 and Treatment 2 + Outcome 1. - - N: Treatment 1 + Outcome 2 / Treatment 2 + Outcome 1: Number of individuals with Treatment 1 + Outcome 2 and Treatment 2 + Outcome 1. - - N: Treatment 2 + Outcome 1 / Treatment 1 + Outcome 2: Number of individuals with Treatment 2 + Outcome 1 and Treatment 1 + Outcome 2. - - N: Treatment 2 + Outcome 2 / Treatment 1 + Outcome 1: Number of individuals with Treatment 2 + Outcome 2 and Treatment 1 + Outcome 1. - - Events: Time Point 1: Number of events at Time Point 1. - - Events: Time Point 2: Number of events at Time Point 2. + - Time 1/Outcome +: Number of individuals with outcome + at time point 1. + - Time 1/Outcome -: Number of individuals with outcome - at time point 1. + - Time 2/Outcome +: Number of individuals with outcome + at time point 2. + - Time 2/Outcome -: Number of individuals with outcome - at time point 2. + #### Other -- Reliability (ARAW, AHW, ABT) - - Alpha: Reliability (Cronbach's alpha) value. - - Beta: Beta value. - - Gamma: Gamma value. - - Delta: Delta value. +- Reliability + - Cronbach's alpha: Cronbach's alpha. + - Items: Items or replications or parts of the measurement instrument. + - Sample Size: Total sample sizes. + +- Partial and Semi-Partial Correlations + - Predictors: Number of regression predictors. + - Sample Size: Total sample sizes. + - R-Squared: R-squared values (for semi-partial correlation only). + - T-Statistic: T-test statistics for the regression coefficient. + - P-Value: P-values for the regression coefficient. + - (Semi)Partial Correlation: Semi(partial) correlations of the regression coefficient. + +- Model fit + - Predictors: Number of regression predictors. + - Sample Size: Total sample sizes. + - R-Squared: R-squared values. + - F-Statistic: F-test statistics for the regression coefficients. + - P-Value: P-values for the F-test of regression coefficients. - Relative Excess Heterozygosity (REH) - - N: Homozygous Dominant Alleles: Number of individuals with homozygous dominant alleles. - - N: Homozygous Recessive Alleles: Number of individuals with homozygous recessive alleles. - - N: Heterozygous Alleles: Number of individuals with heterozygous alleles. - - N: Non-Events: Number of non-events. + - Homozygous Dominant Alleles: Number of individuals with homozygous dominant alleles. + - Heterozygous Alleles: Number of individuals with heterozygous alleles. + - Homozygous Recessive Alleles: Number of individuals with homozygous recessive alleles. + + +#### Reported effect sizes +- Effect size: The reported effect sizes. +- Standard error: Standard errors of the reported effect sizes. +- Sampling Variance: Sampling variances of the reported effect sizes. +- 95% Confidence Interval: Lower and upper bound of the 95% CI of the reported effect sizes. -- R-Squared Values (R2, ZR2) - - R-Squared Values: R-squared values. - - Sample/Group Sizes: Total sample sizes. -------------------------- #### Frequency/event cell adjustment -##### Add +#### Add The Add field allows you to specify the amount to add to zero cells, counts, or frequencies when calculating effect sizes or outcomes. Default Values: @@ -269,7 +350,7 @@ Default Values: - Independent groups with binary measurement (RD, AS, PETO). - Single group with binary measurement (PLN, PLO, PAS). -##### To +#### To The To dropdown allows you to specify when the values under the Add option should be added to Options @@ -293,9 +374,9 @@ Options: - LS2: Alternative large-sample approximation. - UB: Unbiased estimates of the sampling variances. - AV: Sampling variances with the sample-size weighted average. -- HO*: Homoscedastic variances assumption. - +- HO: Homoscedastic variances assumption. +- AVHO: Homoscedasticity variances assumption for both groups across studies. ### R Packages --- -- metafor +- metafor \ No newline at end of file diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index c40881f3..750dfa08 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -44,12 +44,14 @@ Form { id: design name: "design" + label: qsTr("Design") values: [ - { label: qsTr("Independent groups"), value: "independentGroups"}, - { label: qsTr("Variable association"), value: "variableAssociation"}, - { label: qsTr("Single group"), value: "singleGroup"}, - { label: qsTr("Repeated measures/matched groups"), value: "repeatedMeasuresOrMatchedGroups"}, - { label: qsTr("Other"), value: "other"} + { label: qsTr("Independent groups"), value: "independentGroups"}, + { label: qsTr("Variable association"), value: "variableAssociation"}, + { label: qsTr("Single group"), value: "singleGroup"}, + { label: qsTr("Repeated measures"), value: "repeatedMeasures"}, + { label: qsTr("Other"), value: "other"}, + { label: qsTr("Reported effect sizes"), value: "reportedEffectSizes"} ] } @@ -57,7 +59,8 @@ Form { id: measurement name: "measurement" - enabled: design.value != "other" + label: qsTr("Measurement") + visible: design.value != "reportedEffectSizes" values: (function() { if (design.value == "independentGroups") { return [ @@ -78,10 +81,18 @@ Form { label: qsTr("Binary"), value: "binary"}, { label: qsTr("Counts per time"), value: "countsPerTime"} ]; - } else if (design.value == "repeatedMeasuresOrMatchedGroups") { + } else if (design.value == "repeatedMeasures") { return [ { label: qsTr("Quantitative"), value: "quantitative"}, - { label: qsTr("Binary"), value: "binary"} + { label: qsTr("Binary"), value: "binary"}, + { label: qsTr("Binary (marginal)"), value: "binaryMarginal"} + ]; + } else if (design.value == "other") { + return [ + { label: qsTr("Reliability"), value: "reliability"}, + { label: qsTr("Partial correlation"), value: "partialCorrelation"}, + { label: qsTr("Model fit"), value: "modelFit"}, + { label: qsTr("Heterozygosity"), value: "heterozygosity"} ]; } else { return []; @@ -91,13 +102,15 @@ Form DropDown { - id: effectSize - name: "effectSize" + id: effectSize + name: "effectSize" + label: qsTr("Effect size") + visible: design.value != "reportedEffectSizes" values: (function() { if (design.value == "independentGroups" && measurement.value == "quantitative") { return [ { label: qsTr("MD"), value: "MD"}, - { label: qsTr("SMD"), value: "SMD"}, + { label: qsTr("SMD"), value: "SMD"}, // TODO: make default { label: qsTr("SMDH"), value: "SMDH"}, { label: qsTr("SMD1"), value: "SMD1"}, { label: qsTr("SMD1H"), value: "SMD1H"}, @@ -108,7 +121,7 @@ Form } else if (design.value == "independentGroups" && measurement.value == "binary") { return [ { label: qsTr("RR"), value: "RR"}, - { label: qsTr("OR"), value: "OR"}, + { label: qsTr("OR"), value: "OR"}, // TODO: make default { label: qsTr("RD"), value: "RD"}, { label: qsTr("AS"), value: "AS"}, { label: qsTr("PETO"), value: "PETO"} @@ -131,7 +144,7 @@ Form return [ { label: qsTr("COR"), value: "COR"}, { label: qsTr("UCOR"), value: "UCOR"}, - { label: qsTr("ZCOR"), value: "ZCOR"} + { label: qsTr("ZCOR"), value: "ZCOR"} // TODO: make default ]; } else if (design.value == "variableAssociation" && measurement.value == "binary") { return [ @@ -139,13 +152,15 @@ Form { label: qsTr("PHI"), value: "PHI"}, { label: qsTr("YUQ"), value: "YUQ"}, { label: qsTr("YUY"), value: "YUY"}, - { label: qsTr("RTET"), value: "RTET"} + { label: qsTr("RTET"), value: "RTET"}, + { label: qsTr("ZPHI"), value: "ZPHI"}, + { label: qsTr("ZTET"), value: "ZTET"} ]; } else if (design.value == "variableAssociation" && measurement.value == "mixed") { return [ { label: qsTr("RPB"), value: "RPB"}, { label: qsTr("RBIS"), value: "RBIS"}, - { label: qsTr("ZPB"), value: "ZPB"}, + { label: qsTr("ZPB"), value: "ZPB"}, // TODO: make default { label: qsTr("ZBIS"), value: "ZBIS"} ]; } else if (design.value == "singleGroup" && measurement.value == "quantitative") { @@ -171,10 +186,10 @@ Form { label: qsTr("IRS"), value: "IRS"}, { label: qsTr("IRFT"), value: "IRFT"} ]; - } else if (design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "quantitative") { + } else if (design.value == "repeatedMeasures" && measurement.value == "quantitative") { return [ { label: qsTr("MC"), value: "MC"}, - { label: qsTr("SMCC"), value: "SMCC"}, + { label: qsTr("SMCC"), value: "SMCC"}, // TODO: make default { label: qsTr("SMCR"), value: "SMCR"}, { label: qsTr("SMCRH"), value: "SMCRH"}, { label: qsTr("SMCRP"), value: "SMCRP"}, @@ -183,29 +198,41 @@ Form { label: qsTr("CVRC"), value: "CVRC"}, { label: qsTr("VRC"), value: "VRC"} ]; - } else if (design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "binary") { + } else if (design.value == "repeatedMeasures" && measurement.value == "binary") { return [ { label: qsTr("MPRR"), value: "MPRR"}, { label: qsTr("MPOR"), value: "MPOR"}, { label: qsTr("MPRD"), value: "MPRD"}, { label: qsTr("MPORC"), value: "MPORC"}, - { label: qsTr("MPPETO"), value: "MPPETO"}, + { label: qsTr("MPPETO"), value: "MPPETO"} + ]; + } else if (design.value == "repeatedMeasures" && measurement.value == "binaryMarginal") { + return [ { label: qsTr("MPORM"), value: "MPORM"} ]; - } else if (design.value == "other") { + }else if (design.value == "other" && measurement.value == "reliability") { return [ { label: qsTr("ARAW"), value: "ARAW"}, { label: qsTr("AHW"), value: "AHW"}, - { label: qsTr("ABT"), value: "ABT"}, + { label: qsTr("ABT"), value: "ABT"} + ]; + } else if (design.value == "other" && measurement.value == "partialCorrelation") { + return [ { label: qsTr("PCOR"), value: "PCOR"}, - { label: qsTr("ZPCOR"), value: "ZPCOR"}, + { label: qsTr("ZPCOR"), value: "ZPCOR"}, // TODO: make default { label: qsTr("SPCOR"), value: "SPCOR"}, - { label: qsTr("ZSPCOR"), value: "ZSPCOR"}, + { label: qsTr("ZSPCOR"), value: "ZSPCOR"} + ]; + } else if (design.value == "other" && measurement.value == "modelFit") { + return [ { label: qsTr("R2"), value: "R2"}, - { label: qsTr("ZR2"), value: "ZR2"}, + { label: qsTr("ZR2"), value: "ZR2"} // TODO: make default + ]; + } else if (design.value == "other" && measurement.value == "heterozygosity") { + return [ { label: qsTr("REH"), value: "REH"} ]; - } else { + } else { return []; } })(); @@ -219,8 +246,9 @@ Form { name: "vars" source: "effectSizeType" + rowSpacing: 20 - rowComponent: VariablesForm + rowComponent: ColumnLayout { property var designValue: effectSizeType.rowAt(rowIndex).designValue property var measurementValue: effectSizeType.rowAt(rowIndex).measurementValue @@ -228,660 +256,684 @@ Form property var designLabel: effectSizeType.rowAt(rowIndex).designLabel property var measurementLabel: effectSizeType.rowAt(rowIndex).measurementLabel property var effectSizeLabel: effectSizeType.rowAt(rowIndex).effectSizeLabel - - AvailableVariablesList + + VariablesForm { - name: "allVars" - title: "" + effectSizeValue + " (" + designValue + "/" + measurementValue + ")" - } + removeInvisibles: true + // TODO: dynamically set proper height - AssignedVariablesList - { // metafor: ai - name: "nGroup1Outcome1" - title: qsTr("N: Group 1/Outcome 1") - singleVariable: true - visible: (designValue == "independentGroups" && measurementValue == "binary") || - (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) - } - - AssignedVariablesList - { // metafor: ai - name: "nVariable1Outcome+" - title: qsTr("N: Variable 1/Outcome +") - singleVariable: true - visible: (designValue == "variableAssociation" && measurementValue == "binary") - } - - AssignedVariablesList - { // metafor: ai - name: "nTreatment1Outcome1Treatment2Outcome2+" - title: qsTr("N: Treatment 1 + Outcome 1 / Treatment 2 + Outcome 1") - singleVariable: true - visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") - } - - AssignedVariablesList - { // metafor: ai - name: "alpha" - title: qsTr("Alpha") - singleVariable: true - visible: (designValue == "other" && (effectSizeValue == "ARAW" || effectSizeValue == "AHW" || effectSizeValue == "ABT")) - } - - AssignedVariablesList - { // metafor: ai - name: "nHomozygousDominantAlleles" - title: qsTr("N: Homozygous Dominant Alleles") - singleVariable: true - visible: (designValue == "other" && effectSizeValue == "REH") - } - - AssignedVariablesList - { // metafor: bi - name: "nGroup1Outcome2" - title: qsTr("N: Group 1/Outcome 2") - singleVariable: true - visible: (designValue == "independentGroups" && measurementValue == "binary") || - (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) - } - - AssignedVariablesList - { // metafor: bi - name: "nVariable1Outcome-" - title: qsTr("N: Variable 1/Outcome -") - singleVariable: true - visible: (designValue == "variableAssociation" && measurementValue == "binary") - } - - AssignedVariablesList - { // metafor: bi - name: "nTreatment1Outcome2Treatment2Outcome1+" - title: qsTr("N: Treatment 1 + Outcome 2 / Treatment 2 + Outcome 1") - singleVariable: true - visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") - } - - AssignedVariablesList - { // metafor: bi - name: "beta" - title: qsTr("Beta") - singleVariable: true - visible: (designValue == "other" && (effectSizeValue == "ARAW" || effectSizeValue == "AHW" || effectSizeValue == "ABT")) - } + AvailableVariablesList + { + name: "allVars" + title: "" + effectSizeValue + " (" + designValue + "/" + measurementValue + ")" + } - AssignedVariablesList - { // metafor: bi - name: "nHomozygousRecessiveAlleles" - title: qsTr("N: Homozygous Recessive Alleles") - singleVariable: true - visible: (designValue == "other" && effectSizeValue == "REH") - } + AssignedVariablesList + { // metafor: ai + name: "group1OutcomePlus" + title: qsTr("Group 1/Outcome +") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "binary") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) + } - AssignedVariablesList - { // metafor: ci - name: "nGroup2Outcome1" - title: qsTr("N: Group 2/Outcome 1") - singleVariable: true - visible: (designValue == "independentGroups" && measurementValue == "binary") || - (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) - } + AssignedVariablesList + { // metafor: ai + name: "time1OutcomePlus" + title: qsTr("Time 1/Outcome +") + singleVariable: true + visible: (designValue == "repeatedMeasures" && measurementValue == "binaryMarginal") + } - AssignedVariablesList - { // metafor: ci - name: "nVariable2Outcome+" - title: qsTr("N: Variable 2/Outcome +") - singleVariable: true - visible: (designValue == "variableAssociation" && measurementValue == "binary") - } + AssignedVariablesList + { // metafor: ai + name: "outcomePlusPlus" + title: qsTr("Outcome +/+") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "binary") || + (designValue == "repeatedMeasures" && measurementValue == "binary") + } - AssignedVariablesList - { // metafor: ci - name: "nTreatment2Outcome1Treatment1Outcome2+" - title: qsTr("N: Treatment 2 + Outcome 1 / Treatment 1 + Outcome 2") - singleVariable: true - visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") - } + AssignedVariablesList + { // metafor: ai + name: "cronbachsAlpha" + title: qsTr("Cronbach's alpha") + singleVariable: true + visible: (designValue == "other" && measurementValue == "reliability") + } - AssignedVariablesList - { // metafor: ci - name: "gamma" - title: qsTr("Gamma") - singleVariable: true - visible: (designValue == "other" && (effectSizeValue == "ARAW" || effectSizeValue == "AHW" || effectSizeValue == "ABT")) - } + AssignedVariablesList + { // metafor: ai + name: "homozygousDominantAlleles" + title: qsTr("Homozygous Dominant Alleles") + singleVariable: true + visible: (designValue == "other" && measurementValue == "heterozygosity") + } - AssignedVariablesList - { // metafor: ci - name: "nHeterozygousAlleles" - title: qsTr("N: Heterozygous Alleles") - singleVariable: true - visible: (designValue == "other" && effectSizeValue == "REH") - } + AssignedVariablesList + { // metafor: bi + name: "group1OutcomeMinus" + title: qsTr("Group 1/Outcome -") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "binary") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) + } - AssignedVariablesList - { // metafor: di - name: "nGroup2Outcome2" - title: qsTr("N: Group 2/Outcome 2") - singleVariable: true - visible: (designValue == "independentGroups" && measurementValue == "binary") || - (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) - } + AssignedVariablesList + { // metafor: bi + name: "time1OutcomeMinus" + title: qsTr("Time 1/Outcome -") + singleVariable: true + visible: (designValue == "repeatedMeasures" && measurementValue == "binaryMarginal") + } - AssignedVariablesList - { // metafor: di - name: "nVariable2Outcome-" - title: qsTr("N: Variable 2/Outcome -") - singleVariable: true - visible: (designValue == "variableAssociation" && measurementValue == "binary") - } + AssignedVariablesList + { // metafor: bi + name: "outcomePlusMinus" + title: qsTr("Outcome +/-") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "binary") || + (designValue == "repeatedMeasures" && measurementValue == "binary") + } - AssignedVariablesList - { // metafor: di - name: "nTreatment2Outcome2Treatment1Outcome1+" - title: qsTr("N: Treatment 2 + Outcome 2 / Treatment 1 + Outcome 1") - singleVariable: true - visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") - } + AssignedVariablesList + { // metafor: bi + name: "heterozygousAlleles" + title: qsTr("Heterozygous Alleles") + singleVariable: true + visible: (designValue == "other" && measurementValue == "heterozygosity") + } - AssignedVariablesList - { // metafor: di - name: "delta" - title: qsTr("Delta") - singleVariable: true - visible: (designValue == "other" && (effectSizeValue == "ARAW" || effectSizeValue == "AHW" || effectSizeValue == "ABT")) - } + AssignedVariablesList + { // metafor: ci + name: "group2OutcomePlus" + title: qsTr("Group 2/Outcome +") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "binary") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) + } - AssignedVariablesList - { // metafor: n1i - name: "nGroup1" - title: qsTr("N: Group 1") - singleVariable: true - visible: (designValue == "independentGroups" && measurementValue == "quantitative") || - (designValue == "independentGroups" && measurementValue == "binary") || - (designValue == "independentGroups" && measurementValue == "countsPerTime") || - (designValue == "independentGroups" && measurementValue == "mixed") - } + AssignedVariablesList + { // metafor: ci + name: "time2OutcomePlus" + title: qsTr("Time 2/Outcome +") + singleVariable: true + visible: (designValue == "repeatedMeasures" && measurementValue == "binaryMarginal") + } - AssignedVariablesList - { // metafor: n1i - name: "nRow1" - title: qsTr("N: Row 1") - singleVariable: true - visible: (designValue == "variableAssociation" && measurementValue == "binary") - } + AssignedVariablesList + { // metafor: ci + name: "outcomeMinusPlus" + title: qsTr("Outcome -/+") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "binary") || + (designValue == "repeatedMeasures" && measurementValue == "binary") + } - AssignedVariablesList - { // metafor: n1i - name: "nSample1" - title: qsTr("N: Sample 1") - singleVariable: true - visible: (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary" || measurementValue == "countsPerTime")) - } + AssignedVariablesList + { // metafor: ci + name: "homozygousRecessiveAlleles" + title: qsTr("Homozygous Recessive Alleles") + singleVariable: true + visible: (designValue == "other" && measurementValue == "heterozygosity") + } - AssignedVariablesList - { // metafor: n1i - name: "nTimePoint1" - title: qsTr("N: Time Point 1") - singleVariable: true - visible: (designValue == "repeatedMeasuresOrMatchedGroups" && (measurementValue == "quantitative" || measurementValue == "binary")) - } + AssignedVariablesList + { // metafor: di + name: "group2Outcome2" + title: qsTr("Group 2/Outcome Minus") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "binary") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) + } - AssignedVariablesList - { // metafor: n2i - name: "nGroup2" - title: qsTr("N: Group 2") - singleVariable: true - visible: (designValue == "independentGroups" && measurementValue == "quantitative") || - (designValue == "independentGroups" && measurementValue == "binary") || - (designValue == "independentGroups" && measurementValue == "countsPerTime") || - (designValue == "independentGroups" && measurementValue == "mixed") - } + AssignedVariablesList + { // metafor: di + name: "time2OutcomeMinus" + title: qsTr("Time 2/Outcome -") + singleVariable: true + visible: (designValue == "repeatedMeasures" && measurementValue == "binaryMarginal") + } - AssignedVariablesList - { // metafor: n2i - name: "nRow2" - title: qsTr("N: Row 2") - singleVariable: true - visible: (designValue == "variableAssociation" && measurementValue == "binary") - } + AssignedVariablesList + { // metafor: di + name: "outcomeMinusMinus" + title: qsTr("Outcome -/-") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "binary") || + (designValue == "repeatedMeasures" && measurementValue == "binary") + } - AssignedVariablesList - { // metafor: n2i - name: "nSample2" - title: qsTr("N: Sample 2") - singleVariable: true - visible: (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary" || measurementValue == "countsPerTime")) - } + AssignedVariablesList + { // metafor: n1i + name: "outcomePlusPlusAndPlusMinus" + title: qsTr("Outcome +/+ and +/-") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "binary") + } - AssignedVariablesList - { // metafor: n2i - name: "nTimePoint2" - title: qsTr("N: Time Point 2") - singleVariable: true - visible: (designValue == "repeatedMeasuresOrMatchedGroups" && (measurementValue == "quantitative" || measurementValue == "binary")) - } + AssignedVariablesList + { // metafor: n2i + name: "outcomeMinusPlusAndMinusMinus" + title: qsTr("Outcome -/+ and -/-") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "binary") + } - AssignedVariablesList - { // metafor: x1i - name: "eventsGroup1" - title: qsTr("Events: Group 1") - singleVariable: true - visible: (designValue == "independentGroups" && (measurementValue == "binary" || measurementValue == "countsPerTime" || measurementValue == "mixed")) - } + AssignedVariablesList + { // metafor: x1i + name: "eventsGroup1" + title: qsTr("Events Group 1") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "countsPerTime") + } - AssignedVariablesList - { // metafor: x1i - name: "eventsSample1" - title: qsTr("Events: Sample 1") - singleVariable: true - visible: (designValue == "singleGroup" && (measurementValue == "binary" || measurementValue == "countsPerTime")) - } + AssignedVariablesList + { // metafor: xi + name: "events" + title: qsTr("Events") + singleVariable: true + visible: (designValue == "singleGroup" && (measurementValue == "binary" || measurementValue == "countsPerTime")) + } - AssignedVariablesList - { // metafor: x1i - name: "eventsTimePoint1" - title: qsTr("Events: Time Point 1") - singleVariable: true - visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") - } + AssignedVariablesList + { // metafor: mi + name: "nonEvents" + title: qsTr("Non-Events") + singleVariable: true + visible: (designValue == "singleGroup" && measurementValue == "binary") + } - AssignedVariablesList - { // metafor: x2i - name: "eventsGroup2" - title: qsTr("Events: Group 2") - singleVariable: true - visible: (designValue == "independentGroups" && (measurementValue == "binary" || measurementValue == "countsPerTime" || measurementValue == "mixed")) - } + AssignedVariablesList + { // metafor: mi + name: "items" + title: qsTr("Items") + singleVariable: true + visible: (designValue == "other" && measurementValue == "reliability") + } - AssignedVariablesList - { // metafor: x2i - name: "eventsSample2" - title: qsTr("Events: Sample 2") - singleVariable: true - visible: (designValue == "singleGroup" && (measurementValue == "binary" || measurementValue == "countsPerTime")) - } + AssignedVariablesList + { // metafor: mi + name: "predictors" + title: qsTr("Predictors") + singleVariable: true + visible: (designValue == "other" && measurementValue == "partialCorrelation") || + (designValue == "other" && measurementValue == "modelFit") + } - AssignedVariablesList - { // metafor: x2i - name: "eventsTimePoint2" - title: qsTr("Events: Time Point 2") - singleVariable: true - visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") - } + AssignedVariablesList + { // metafor: x2i + name: "eventsGroup2" + title: qsTr("Events Group 2") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "countsPerTime") + } - AssignedVariablesList - { // metafor: t1i - name: "personTimeGroup1" - title: qsTr("Total Person-Time: Group 1") - singleVariable: true - visible: (designValue == "independentGroups" && measurementValue == "countsPerTime") - } + AssignedVariablesList + { // metafor: t1i + name: "personTimeGroup1" + title: qsTr("Person-Time Group 1") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "countsPerTime") + } - AssignedVariablesList - { // metafor: t1i - name: "personTimeSample1" - title: qsTr("Total Person-Time: Sample 1") - singleVariable: true - visible: (designValue == "singleGroup" && measurementValue == "countsPerTime") - } + AssignedVariablesList + { // metafor: ti + name: "personTime" + title: qsTr("Person-Time") + singleVariable: true + visible: (designValue == "singleGroup" && measurementValue == "countsPerTime") + } - AssignedVariablesList - { // metafor: t2i - name: "personTimeGroup2" - title: qsTr("Total Person-Time: Group 2") - singleVariable: true - visible: (designValue == "independentGroups" && measurementValue == "countsPerTime") - } + AssignedVariablesList + { // metafor: t2i + name: "personTimeGroup2" + title: qsTr("Person-Time Group 2") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "countsPerTime") + } - AssignedVariablesList - { // metafor: t2i - name: "personTimeSample2" - title: qsTr("Total Person-Time: Sample 2") - singleVariable: true - visible: (designValue == "singleGroup" && measurementValue == "countsPerTime") - } + AssignedVariablesList + { // metafor: m1i + name: "meanGroup1" + title: qsTr("Mean Group 1") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "quantitative" && (effectSizeValue != "CVR" && effectSizeValue != "VR")) || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || + (designValue == "variableAssociation" && measurementValue == "mixed") + } - AssignedVariablesList - { // metafor: m1i - name: "meanGroup1" - title: qsTr("Mean: Group 1") - singleVariable: true - visible: (designValue == "independentGroups" && measurementValue == "quantitative") || - (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) - } + AssignedVariablesList + { // metafor: m1i + name: "meanTime1" + title: qsTr("Mean Time 1 (or Group 1)") + singleVariable: true + visible: (designValue == "repeatedMeasures" && measurementValue == "quantitative" && (effectSizeValue != "CVRC" && effectSizeValue != "VRC")) + } - AssignedVariablesList - { // metafor: m1i - name: "meanSample1" - title: qsTr("Mean: Sample 1") - singleVariable: true - visible: (designValue == "singleGroup" && measurementValue == "quantitative") - } + AssignedVariablesList + { // metafor: m2i + name: "meanGroup2" + title: qsTr("Mean Group 2") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "quantitative" && (effectSizeValue != "CVR" && effectSizeValue != "VR")) || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || + (designValue == "variableAssociation" && measurementValue == "mixed") + } - AssignedVariablesList - { // metafor: m1i - name: "meanTimePoint1" - title: qsTr("Mean: Time Point 1") - singleVariable: true - visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "quantitative") - } + AssignedVariablesList + { // metafor: m2i + name: "meanTime2" + title: qsTr("Mean Time 2 (or Group 2)") + singleVariable: true + visible: (designValue == "repeatedMeasures" && measurementValue == "quantitative" && (effectSizeValue != "CVRC" && effectSizeValue != "VRC")) + } - AssignedVariablesList - { // metafor: m2i - name: "meanGroup2" - title: qsTr("Mean: Group 2") - singleVariable: true - visible: (designValue == "independentGroups" && measurementValue == "quantitative") || - (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) - } + AssignedVariablesList + { // metafor: mi + name: "mean" + title: qsTr("Mean") + singleVariable: true + visible: (designValue == "singleGroup" && measurementValue == "quantitative" && effectSizeValue != "SDLN") + } - AssignedVariablesList - { // metafor: m2i - name: "meanSample2" - title: qsTr("Mean: Sample 2") - singleVariable: true - visible: (designValue == "singleGroup" && measurementValue == "quantitative") - } + AssignedVariablesList + { // metafor: sd1i + name: "sdGroup1" + title: qsTr("SD Group 1") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "quantitative" && (effectSizeValue != "SMD1" && effectSizeValue != "SMDH1")) || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || + (designValue == "variableAssociation" && measurementValue == "mixed") + } - AssignedVariablesList - { // metafor: m2i - name: "meanTimePoint2" - title: qsTr("Mean: Time Point 2") - singleVariable: true - visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "quantitative") - } + AssignedVariablesList + { // metafor: sd1i + name: "sdTime1" + title: qsTr("SD Time 1 (or Group 1)") + singleVariable: true + visible: (designValue == "repeatedMeasures" && measurementValue == "quantitative") + } - AssignedVariablesList - { // metafor: sd1i - name: "sdGroup1" - title: qsTr("SD: Group 1") - singleVariable: true - visible: (designValue == "independentGroups" && measurementValue == "quantitative") || - (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) - } + AssignedVariablesList + { // metafor: sd2i + name: "sdGroup2" + title: qsTr("SD Group 2") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "quantitative") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || + (designValue == "variableAssociation" && measurementValue == "mixed") + } - AssignedVariablesList - { // metafor: sd1i - name: "sdSample1" - title: qsTr("SD: Sample 1") - singleVariable: true - visible: (designValue == "singleGroup" && measurementValue == "quantitative") - } + AssignedVariablesList + { // metafor: sd2i + name: "sdTime2" + title: qsTr("SD Time 2 (or Group 2)") + singleVariable: true + visible: (designValue == "repeatedMeasures" && measurementValue == "quantitative" && effectSizeValue != "SMCR") + } - AssignedVariablesList - { // metafor: sd1i - name: "sdTimePoint1" - title: qsTr("SD: Time Point 1") - singleVariable: true - visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "quantitative") - } + AssignedVariablesList + { // metafor: sdi + name: "sd" + title: qsTr("SD") + singleVariable: true + visible: (designValue == "singleGroup" && measurementValue == "quantitative") + } + AssignedVariablesList + { // metafor: n1i + name: "sampleSizeGroup1" + title: qsTr("Sample Size Group 1") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue != "countsPerTime") || + (designValue == "variableAssociation" && measurementValue == "mixed") + } + + AssignedVariablesList + { // metafor: n2i + name: "sampleSizeGroup2" + title: qsTr("Sample Size Group 2") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue != "countsPerTime") || + (designValue == "variableAssociation" && measurementValue == "mixed") + } + + AssignedVariablesList + { // metafor: ri + name: "correlation" + title: qsTr("Correlation") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "quantitative") || + (designValue == "repeatedMeasures" && measurementValue == "quantitative") || + (designValue == "repeatedMeasures" && measurementValue == "binaryMarginal") + } - AssignedVariablesList - { // metafor: sd2i - name: "sdGroup2" - title: qsTr("SD: Group 2") - singleVariable: true - visible: (designValue == "independentGroups" && measurementValue == "quantitative") || - (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) - } + AssignedVariablesList + { // metafor: pi + name: "proportionPlusPlus" + title: qsTr("Proportion +/+") + singleVariable: true + visible: (designValue == "repeatedMeasures" && measurementValue == "binaryMarginal") + } - AssignedVariablesList - { // metafor: sd2i - name: "sdSample2" - title: qsTr("SD: Sample 2") - singleVariable: true - visible: (designValue == "singleGroup" && measurementValue == "quantitative") - } + AssignedVariablesList + { // metafor: ni + name: "sampleSize" + title: qsTr("Sample Size") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "quantitative") || + (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary")) || + (designValue == "repeatedMeasures" && measurementValue == "quantitative") || + (designValue == "other" && measurementValue == "reliability") || + (designValue == "other" && measurementValue == "partialCorrelation") || + (designValue == "other" && measurementValue == "modelFit") - AssignedVariablesList - { // metafor: sd2i - name: "sdTimePoint2" - title: qsTr("SD: Time Point 2") - singleVariable: true - visible: (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "quantitative") - } + } - AssignedVariablesList - { // metafor: xi - name: "eventFrequencies" - title: qsTr("Event Frequencies") - singleVariable: true - visible: (designValue == "singleGroup" && measurementValue == "binary") - } + AssignedVariablesList + { // metafor: di + name: "cohensD" + title: qsTr("Cohen's d") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "quantitative" && effectSizeValue == "SMD") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || + (designValue == "variableAssociation" && measurementValue == "mixed") || + (designValue == "repeatedMeasures" && measurementValue == "quantitative" && effectSizeValue == "SMCC") + } - AssignedVariablesList - { // metafor: mi - name: "complementFrequencies" - title: qsTr("Complement Frequencies / Group Means") - singleVariable: true - visible: (designValue == "singleGroup" && (measurementValue == "binary" || measurementValue == "quantitative")) - } + AssignedVariablesList + { // metafor: r2i + name: "rSquared" + title: qsTr("R-Squared") + singleVariable: true + visible: (designValue == "other" && measurementValue == "partialCorrelation" && (effectSizeValue == "SPCOR" || effectSizeValue == "ZSPCOR")) || + (designValue == "other" && measurementValue == "modelFit") + } - AssignedVariablesList - { // metafor: ri - name: "rawCorrelations" - title: qsTr("Raw Correlation Coefficients") - singleVariable: true - visible: (designValue == "variableAssociation" && measurementValue == "quantitative") - } + AssignedVariablesList + { // metafor: ti + name: "tStatistic" + title: qsTr("T-Statistic") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "quantitative" && effectSizeValue == "SMD") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || + (designValue == "variableAssociation" && measurementValue == "quantitative") || + (designValue == "variableAssociation" && measurementValue == "mixed") || + (designValue == "repeatedMeasures" && measurementValue == "quantitative" && effectSizeValue == "SMCC") || + (designValue == "other" && measurementValue == "partialCorrelation") + } - AssignedVariablesList - { // metafor: ti - name: "tStatistics" - title: qsTr("T-Test Statistics") - singleVariable: true - visible: (designValue == "variableAssociation" && measurementValue == "quantitative") - } + AssignedVariablesList + { // metafor: fi + name: "fStatistic" + title: qsTr("F-Statistic") + singleVariable: true + visible: (designValue == "other" && measurementValue == "modelFit") + } - AssignedVariablesList - { // metafor: ti - name: "totalPersonTimes" - title: qsTr("Total Person-Times") - singleVariable: true - visible: (designValue == "singleGroup" && measurementValue == "countsPerTime") - } + AssignedVariablesList + { // metafor: ri + name: "semipartialCorrelation" + title: qsTr("(Semi)Partial Correlation") + singleVariable: true + visible: (designValue == "other" && measurementValue == "partialCorrelation") + } - AssignedVariablesList - { // metafor: fi - name: "fStatistics" - title: qsTr("F-Test Statistics") - singleVariable: true - visible: (designValue == "variableAssociation" && measurementValue == "quantitative") - } + AssignedVariablesList + { // metafor: pi + name: "pValue" + title: qsTr("P-Value") + singleVariable: true + visible: (designValue == "independentGroups" && measurementValue == "quantitative" && effectSizeValue == "SMD") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || + (designValue == "variableAssociation" && measurementValue == "quantitative") || + (designValue == "variableAssociation" && measurementValue == "mixed") || + (designValue == "repeatedMeasures" && measurementValue == "quantitative" && effectSizeValue == "SMCC") || + (designValue == "other" && measurementValue == "partialCorrelation") || + (designValue == "other" && measurementValue == "modelFit") + } - AssignedVariablesList - { // metafor: pi - name: "pValues" - title: qsTr("P-Values") - singleVariable: true - visible: (designValue == "variableAssociation" && measurementValue == "quantitative") - } - AssignedVariablesList - { // metafor: sdi - name: "standardDeviations" - title: qsTr("Standard Deviations") - singleVariable: true - visible: (designValue == "singleGroup" && measurementValue == "quantitative") - } + AssignedVariablesList + { // metafor: yi + name: "effectSize" + title: qsTr("Effect Size") + singleVariable: true + visible: designValue == "reportedEffectSizes" + } - AssignedVariablesList - { // metafor: r2i - name: "rSquared" - title: qsTr("R-Squared Values") - singleVariable: true - visible: (designValue == "other" && (effectSizeValue == "R2" || effectSizeValue == "ZR2")) - } + AssignedVariablesList + { // metafor: sei + name: "standardError" + title: qsTr("Standard Error") + singleVariable: true + visible: designValue == "reportedEffectSizes" + } - AssignedVariablesList - { // metafor: ni - name: "sampleSizes" - title: qsTr("Sample/Group Sizes") - singleVariable: true - visible: (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary")) - } + AssignedVariablesList + { // metafor: vi + name: "samplingVariance" + title: qsTr("Sampling Variance") + singleVariable: true + visible: designValue == "reportedEffectSizes" + } - AssignedVariablesList - { // metafor: yi - name: "observedEffectSizes" - title: qsTr("Observed Effect Sizes/Outcomes") - singleVariable: true - visible: (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary")) - } + AssignedPairsVariablesList + { + name: "95ConfidenceInterval" + title: qsTr("95% Confidence Interval") + singleVariable: true + visible: designValue == "reportedEffectSizes" + } - AssignedVariablesList - { // metafor: vi - name: "samplingVariances" - title: qsTr("Sampling Variances") - singleVariable: true - visible: (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary")) - } + AssignedVariablesList + { // metafor: vtype for mixed designs with PHI or ZPHI + name: "samplingVarianceTypeMixed" + title: qsTr("Sampling Variance Type Mixed") + singleVariable: true + visible: (designValue == "variableAssociation" && measurementValue == "binary" && (effectSizeValue == "PHI" || effectSizeValue == "ZPHI") && samplingVarianceType.value == "mixed") || + (designValue == "variableAssociation" && measurementValue == "mixed" && (effectSizeValue == "RPB" || effectSizeValue == "ZPB") && samplingVarianceType.value == "mixed") + } - AssignedVariablesList - { // metafor: sei - name: "standardErrors" - title: qsTr("Standard Errors") - singleVariable: true - visible: (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary")) + AssignedVariablesList + { + name: "selected" + title: qsTr("Subset") + singleVariable: true + } } Group { title: qsTr("Frequency/event cell adjustment") + columns: 3 + visible: (designValue == "independentGroups" && measurementValue == "binary") || + (designValue == "independentGroups" && measurementValue == "countsPerTime") || + (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) || + (designValue == "variableAssociation" && measurementValue == "binary") || + (designValue == "singleGroup" && measurementValue == "binary") || + (designValue == "singleGroup" && measurementValue == "countsPerTime") DoubleField { label: qsTr("Add") name: "add" - visible: (designValue == "independentGroups" && measurementValue == "binary") || - (designValue == "independentGroups" && measurementValue == "countsPerTime") || - (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") || - (designValue == "singleGroup" && measurementValue == "binary") || - (designValue == "singleGroup" && measurementValue == "countsPerTime") || - (designValue == "variableAssociation" && measurementValue == "binary") || - (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) - - defaultValue: (designValue == "independentGroups" && measurementValue == "binary" && effectSizeValue == "RR") ? 0.5 : - (designValue == "independentGroups" && measurementValue == "binary" && effectSizeValue == "OR") ? 0.5 : - (designValue == "independentGroups" && measurementValue == "binary" && effectSizeValue == "RD") ? 0 : - (designValue == "independentGroups" && measurementValue == "binary" && effectSizeValue == "AS") ? 0 : - (designValue == "independentGroups" && measurementValue == "binary" && effectSizeValue == "PETO") ? 0.5 : - (designValue == "independentGroups" && measurementValue == "countsPerTime") ? 0.5 : - (designValue == "repeatedMeasuresOrMatchedGroups" && measurementValue == "binary") ? 0.5 : - (designValue == "singleGroup" && measurementValue == "binary" && effectSizeValue == "PR") ? 0.5 : - (designValue == "singleGroup" && measurementValue == "binary" && effectSizeValue == "PLN") ? 0 : - (designValue == "singleGroup" && measurementValue == "binary" && effectSizeValue == "PLO") ? 0 : - (designValue == "singleGroup" && measurementValue == "binary" && effectSizeValue == "PAS") ? 0 : - (designValue == "singleGroup" && measurementValue == "binary" && effectSizeValue == "PFT") ? 0.5 : - (designValue == "singleGroup" && measurementValue == "countsPerTime") ? 0.5 : - (designValue == "variableAssociation" && measurementValue == "binary") ? 0.5 : - (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) ? 0.5 : - 0 - } + enabled: to.value != "none" + defaultValue: (effectSizeValue == "AS" || effectSizeValue == "PHI" || effectSizeValue == "ZPHI" || + effectSizeValue == "RTET" || effectSizeValue == "ZTET" || effectSizeValue == "IRSD" || + effectSizeValue == "PAS" || effectSizeValue == "PFT" || effectSizeValue == "IRS" || effectSizeValue == "IRFT" ) ? 0 : 0.5 + } DropDown { name: "to" + id: to label: qsTr("To") + startValue: "onlyZero" values: [ { label: qsTr("All"), value: "all" }, { label: qsTr("Only zero"), value: "onlyZero" }, { label: qsTr("If any zero"), value: "ifAnyZero" }, { label: qsTr("None"), value: "none" } ] - visible: (design.value == "independentGroups" && measurement.value == "binary") || - (design.value == "independentGroups" && measurement.value == "countsPerTime") || - (design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "binary") || - (design.value == "singleGroup" && measurement.value == "binary") || - (design.value == "singleGroup" && measurement.value == "countsPerTime") || - (design.value == "variableAssociation" && measurement.value == "binary") || - (design.value == "independentGroups" && measurement.value == "mixed" && (effectSize.value == "D2ORN" || effectSize.value == "D2ORL")) - //defaultValue: "onlyZero" + //TODO: defaultValue: "onlyZero" } RadioButtonGroup { name: "dropStudiesWithNoCasesOrEvents" title: qsTr("Drop studies with no cases/events") - columns: 1 - visible: (design.value == "independentGroups" && measurement.value == "binary") || - (design.value == "independentGroups" && measurement.value == "countsPerTime") || - (design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "binary") || - (design.value == "singleGroup" && measurement.value == "binary") || - (design.value == "singleGroup" && measurement.value == "countsPerTime") || - (design.value == "variableAssociation" && measurement.value == "binary") || - (design.value == "independentGroups" && measurement.value == "mixed" && (effectSize.value == "D2ORN" || effectSize.value == "D2ORL")) + columns: 2 + radioButtonsOnSameRow: true RadioButton { - value: "true" + value: "yes" label: qsTr("Yes") - checked: true } RadioButton { - value: "false" + value: "no" label: qsTr("No") + checked: true } } } DropDown { - name: "samplingVarianceType" - label: qsTr("Sampling variance type") + name: "samplingVarianceType" + id: samplingVarianceType + label: qsTr("Sampling variance type") values: (function() { - if ((design.value == "independentGroups" && measurement.value == "quantitative") || - (design.value == "independentGroups" && measurement.value == "mixed" && (effectSize.value == "PBIT" || effectSize.value == "OR2DN" || effectSize.value == "OR2DL")) || - (design.value == "independentGroups" && measurement.value == "binary" && effectSize.value == "RR") || - (design.value == "independentGroups" && measurement.value == "binary" && effectSize.value == "OR") || - (design.value == "independentGroups" && measurement.value == "countsPerTime")) { - return [ - { label: qsTr("LS"), value: "LS" }, - { label: qsTr("LS2"), value: "LS2" }, - { label: qsTr("UB"), value: "UB" }, - { label: qsTr("AV"), value: "AV" }, - { label: qsTr("HO"), value: "HO" } - ]; - } else if ((design.value == "variableAssociation" && measurement.value == "quantitative") || - (design.value == "variableAssociation" && measurement.value == "binary") || - (design.value == "variableAssociation" && measurement.value == "mixed") || - (design.value == "singleGroup" && measurement.value == "quantitative") || - (design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "quantitative") || - (design.value == "singleGroup" && measurement.value == "binary") || - (design.value == "singleGroup" && measurement.value == "countsPerTime") || - (design.value == "independentGroups" && measurement.value == "mixed" && (effectSize.value == "D2ORN" || effectSize.value == "D2ORL"))) { - return [ - { label: qsTr("LS"), value: "LS" }, - { label: qsTr("AV"), value: "AV" } - ]; - } else if ((design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "binary") || - (design.value == "singleGroup" && measurement.value == "binary" && effectSize.value == "PLN") || - (design.value == "singleGroup" && measurement.value == "binary" && effectSize.value == "PLO")) { + if (designValue == "independentGroups" && measurementValue == "quantitative") { + if (effectSizeValue == "MD") { + return [ + { label: qsTr("LS"), value: "LS" }, + { label: qsTr("HO"), value: "HO" } + ]; + } else if (effectSizeValue == "SMD" || effectSizeValue == "SMD1") { + return [ + { label: qsTr("LS"), value: "LS" }, + { label: qsTr("LS2"), value: "LS2" }, + { label: qsTr("UB"), value: "UB" }, + { label: qsTr("AV"), value: "AV" } + ]; + } else if (effectSizeValue == "ROM") { + return [ + { label: qsTr("LS"), value: "LS" }, + { label: qsTr("HO"), value: "HO" }, + { label: qsTr("AV"), value: "AV" }, + { label: qsTr("AVHO"), value: "AVHO" } + ]; + } else { + return []; + } + } else if (designValue == "variableAssociation" && measurementValue == "quantitative") { + if (effectSizeValue == "COR" || effectSizeValue == "ZCOR") { + return [ + { label: qsTr("LS"), value: "LS" }, + { label: qsTr("AV"), value: "AV" } + ]; + } else if (effectSizeValue == "UCOR") { + return [ + { label: qsTr("LS"), value: "LS" }, + { label: qsTr("UB"), value: "UB" }, + { label: qsTr("AV"), value: "AV" } + ]; + } else { + return []; + } + } else if (designValue == "variableAssociation" && measurementValue == "binary") { + if (effectSizeValue == "PHI" || effectSizeValue == "ZPHI") { + return [ + { label: qsTr("ST"), value: "ST" }, + { label: qsTr("CS"), value: "CS" }, + { label: qsTr("mixed"), value: "mixed" } + ]; + } else { + return []; + } + } else if (designValue == "variableAssociation" && measurementValue == "mixed") { + if (effectSizeValue == "RPB" || effectSizeValue == "ZPB") { + return [ + { label: qsTr("ST"), value: "ST" }, + { label: qsTr("CS"), value: "CS" }, + { label: qsTr("mixed"), value: "mixed" } + ]; + } else { + return []; + } + } else if (designValue == "other" && measurementValue == "modelFit") { return [ - { label: qsTr("LS"), value: "LS" }, - { label: qsTr("AV"), value: "AV" }, - { label: qsTr("HO"), value: "HO" } - ]; + { label: qsTr("LS"), value: "LS" }, + { label: qsTr("LS2"), value: "LS2" }, + { label: qsTr("AV"), value: "AV" }, + { label: qsTr("A2"), value: "AV2" } + ]; } else { return []; } })() - visible: (design.value == "independentGroups" && measurement.value == "quantitative") || - (design.value == "independentGroups" && measurement.value == "binary") || - (design.value == "independentGroups" && measurement.value == "countsPerTime") || - (design.value == "independentGroups" && measurement.value == "mixed") || - (design.value == "variableAssociation" && measurement.value == "quantitative") || - (design.value == "variableAssociation" && measurement.value == "binary") || - (design.value == "variableAssociation" && measurement.value == "mixed") || - (design.value == "singleGroup" && measurement.value == "quantitative") || - (design.value == "repeatedMeasuresOrMatchedGroups" && measurement.value == "quantitative") || - (design.value == "singleGroup" && measurement.value == "binary") || - (design.value == "singleGroup" && measurement.value == "countsPerTime") + visible: (designValue == "independentGroups" && measurementValue == "quantitative" && (effectSizeValue == "MD" || effectSizeValue == "SMD" || effectSizeValue == "SMD1" || effectSizeValue == "ROM")) || + (designValue == "variableAssociation" && measurementValue == "quantitative" && (effectSizeValue == "COR" || effectSizeValue == "ZCOR" || effectSizeValue == "UCOR")) || + (designValue == "variableAssociation" && measurementValue == "binary" && (effectSizeValue == "PHI" || effectSizeValue == "ZPHI")) || + (designValue == "variableAssociation" && measurementValue == "mixed" && (effectSizeValue == "RPB" || effectSizeValue == "ZPB")) || + (designValue == "other" && measurementValue == "modelFit") } + Divider { } + + } + + } + + Section + { + title: qsTr("Options") + + CheckBox + { + id: computeSamplingVariance + name: "computeSamplingVariance" + text: qsTr("Compute sampling variance") + checked: false + } + + Group + { + title: qsTr("Computed Columns Names") + TextField + { + name: "computedcolumnsNamesEffectSize" + label: qsTr("Effect size") + defaultValue: "computed effect size" + } + + TextField + { + name: "computedcolumnsNamesStandardError" + label: qsTr("Standard error") + defaultValue: "computed standard error" + visible: !computeSamplingVariance.checked + } + + TextField + { + name: "computedcolumnsNamesSamplingVariance" + label: qsTr("Sampling variance") + defaultValue: "computed sampling variance" + visible: computeSamplingVariance.checked + } + + TextField + { + name: "computedcolumnsNamesEffectSizeType" + label: qsTr("Effect size type") + defaultValue: "computed effect size type" + } } From d946820e420a34519d5ab83d85accf4619be9d34 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sat, 8 Jun 2024 17:58:05 +0200 Subject: [PATCH 004/127] Update EffectSizeComputation.qml --- inst/qml/EffectSizeComputation.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index 750dfa08..949b2feb 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -720,7 +720,7 @@ Form AssignedPairsVariablesList { - name: "95ConfidenceInterval" + name: "confidenceInterval" title: qsTr("95% Confidence Interval") singleVariable: true visible: designValue == "reportedEffectSizes" From b1fcfa60b643646d9688bf9eafaa09b0ead3e0c3 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 9 Jun 2024 15:54:52 +0200 Subject: [PATCH 005/127] update --- R/effectsizecomputation.R | 834 +++++++++++++++++++++++------ gibson2002.csv | 16 + inst/help/EffectSizeComputation.md | 36 +- inst/qml/ClassicalMetaAnalysis.qml | 208 ++++++- inst/qml/EffectSizeComputation.qml | 4 +- 5 files changed, 910 insertions(+), 188 deletions(-) create mode 100644 gibson2002.csv diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index 1c0914e9..31d8fd70 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -1,150 +1,323 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { + saveRDS(options, file = "C:/JASP/options.RDS") + saveRDS(dataset, file = "C:/JASP/dataset.RDS") + + return(NULL) + + dataset <- .escReadDataset(dataset, options) + dataOutput <- .escComputeEffectSizes(dataset, options) + + .escComputeSummaryTable(jaspResults, dataset, options, dataOutput) + .escExportData(jaspResults, options, dataOutput) + + return() +} + +.escCheckReady <- function(options, type = "readData") { + + + return(TRUE) +} +.escReadDataset <- function(dataset, options) { + + if (!is.null(dataset)) { + return(dataset) + } else { + + # collect all selected variables + selectedVariables <- lapply(seq_along(options[["variables"]]), function(i) { + + # all possible variables + selectedVariables <- options[["variables"]][[i]] + + # remove auxiliary objects + selectedVariables <- selectedVariables[!names(selectedVariables) %in% c("value")] + + # remove Frequency/event cell adjustment + selectedVariables <- selectedVariables[!names(selectedVariables) %in% c("add", "to", "dropStudiesWithNoCasesOrEvents", "samplingVarianceType")] + + # remove empty variables + selectedVariables <- selectedVariables[!(selectedVariables == "" | lengths(selectedVariables) == 0)] + + # unlist + selectedVariables <- unname(unlist(selectedVariables)) + + return(selectedVariables) + }) + selectedVariables <- do.call(c, selectedVariables) + selectedVariables <- unique(selectedVariables) + + return(.readDataSetToEnd(columns.as.numeric = selectedVariables)) + } +} +.escComputeEffectSizes <- function(dataset, options) { + + # proceed with the escal in order + dataOutput <- NULL + errors <- list() + for (i in seq_along(options[["variables"]])) { + + # subset the relevant options (need to be passed separately as there are names overlap in "effectSize") + effectSizeType <- options[["effectSizeType"]][[i]] + variables <- options[["variables"]][[i]] + + # set escalc input + escalcInput <- c( + .escGetEscalcDataOptions(dataset, effectSizeType, variables), + .escGetEscalcAdjustFrequenciesOptions(effectSizeType, variables), + .escGetEscalcVtypeOption(effectSizeType, variables), + measure = if (effectSizeType[["effectSize"]] == "reportedEffectSizes") "GEN" else effectSizeType[["effectSize"]], + replace = i == 1, + add.measure = TRUE, + data = if (!is.null(dataOutput)) list(dataOutput) + ) + + newDataOutput <- try(do.call(metafor::escalc, escalcInput)) + + if (inherits(newDataOutput, "try-error")) { + errors[[paste0("i",i)]] <- list( + step = i, + error = .escCleanErrorMessage(attr(newDataOutput, "condition")$message, effectSizeType) + ) + } else { + + # keep track of computation steps + # (needs to be done manually as the same effect size can be specified multiple times...) + newDataOutput$step <- NA + newDataOutput[["step"]][!is.na(newDataOutput[["yi"]])] <- i + + if (is.null(dataOutput)) { + dataOutput <- newDataOutput + } else { + dataOutput[is.na(dataOutput[["yi"]]),] <- newDataOutput[is.na(dataOutput[["yi"]]),] + } + } + } + + # create an empty list if nothing was computed + if (is.null(dataOutput)) + dataOutput <- list() + + attr(dataOutput, "errors") <- errors + return(dataOutput) +} +.escComputeSummaryTable <- function(jaspResults, dataset, options, dataOutput) { + + # create summary table + computeSummary <- createJaspTable(title = gettext("Summary")) + computeSummary$dependOn(c("effectSizeType", "variables")) + computeSummary$position <- 1 + + jaspResults[["computeSummary"]] <- computeSummary + + computeSummary$addColumnInfo(name = "step", title = gettext("Step"), type = "integer") + computeSummary$addColumnInfo(name = "effectSize", title = gettext("Effect Size"), type = "string") + computeSummary$addColumnInfo(name = "computed", title = gettext("Computed"), type = "integer") + computeSummary$addColumnInfo(name = "totalComputed", title = gettext("Total Computed"), type = "integer") + + # compute summary + if (length(seq_along(options[["effectSizeType"]])) > 0) { + + computeSummaryData <- lapply(seq_along(options[["effectSizeType"]]), function(i) { + list("step" = i, "effectSize" = options[["effectSizeType"]][[i]][["effectSize"]], "computed" = sum(dataOutput[["step"]] == i, na.rm = TRUE)) + }) + computeSummaryData <- do.call(rbind.data.frame, computeSummaryData) + computeSummaryData$totalComputed <- cumsum(computeSummaryData$computed) + + # set the data + computeSummary$setData(computeSummaryData) + + if (nrow(dataset == sum(computeSummaryData[["computed"]]))) + addFootnote(computeSummary, gettext("Note: Effect sizes were successfully computed for each data entry.")) + else + addFootnote(computeSummary, gettextf( + "Note: Effect sizes were successfully computed for %1$i out of %2$i data entries.", + sum(computeSummaryData[["computed"]]), + nrow(dataset))) + } + + computeErrors <- attr(dataOutput, "errors") + for (i in seq_along(computeErrors)) { + addFootnote(computeSummary, with(computeErrors[[i]], gettextf("Error in step %1$i: %2$s", step, error))) + } + + return() +} +.escExportData <- function(jaspResults, options, dataOutput) { + + if (length(dataOutput) == 0) + return() + + # columns to add + if (options[["computeSamplingVariance"]]) { + columnOptions <- c("computedcolumnsNamesEffectSize", "computedcolumnsNamesSamplingVariance", "computedcolumnsNamesEffectSizeType") + } else { + columnOptions <- c("computedcolumnsNamesEffectSize", "computedcolumnsNamesStandardError", "computedcolumnsNamesEffectSizeType") + } + + for (column in columnOptions) { + + columnName <- options[[column]] + + if (jaspBase:::columnExists(columnName) && !jaspBase:::columnIsMine(columnName)) + .quitAnalysis(gettextf("Column name %s already exists in the dataset.", columnName)) + + jaspResults[[column]] <- createJaspColumn(columnName = columnName, dependencies = c("effectSizeType", "variables", column)) + jaspResults[[column]]$setScale(switch( + column, + "computedcolumnsNamesEffectSize" = dataOutput[["yi"]], + "computedcolumnsNamesStandardError" = sqrt(dataOutput[["vi"]]), + "computedcolumnsNamesSamplingVariance" = dataOutput[["vi"]], + "computedcolumnsNamesEffectSizeType" = dataOutput[["measure"]] + )) + + } return() } # functions for transforming input into metafor::escalc settings -getEscalcDataOptions <- function(options, dataset) { +.escGetEscalcDataOptions <- function(dataset, effectSizeType, variables) { - design <- options[["design"]] - measurement <- options[["measurement"]] - effectSize <- options[["effectSize"]] + design <- effectSizeType[["design"]] + measurement <- effectSizeType[["measurement"]] + effectSize <- effectSizeType[["effectSize"]] if (design == "independentGroups") { if (measurement == "quantitative") { if (effectSize == "SMD") { inputs <- list( - m1i = dataset[[options[["meanGroup1"]]]], - m2i = dataset[[options[["meanGroup2"]]]], - sd1i = dataset[[options[["sdGroup1"]]]], - sd2i = dataset[[options[["sdGroup2"]]]], - n1i = dataset[[options[["sampleSizeGroup1"]]]], - n2i = dataset[[options[["sampleSizeGroup2"]]]], - ti = dataset[[options[["tStatistic"]]]], - pi = dataset[[options[["pValue"]]]], - di = dataset[[options[["cohensD"]]]] + m1i = dataset[[variables[["meanGroup1"]]]], + m2i = dataset[[variables[["meanGroup2"]]]], + sd1i = dataset[[variables[["sdGroup1"]]]], + sd2i = dataset[[variables[["sdGroup2"]]]], + n1i = dataset[[variables[["sampleSizeGroup1"]]]], + n2i = dataset[[variables[["sampleSizeGroup2"]]]], + ti = dataset[[variables[["tStatistic"]]]], + pi = dataset[[variables[["pValue"]]]], + di = dataset[[variables[["cohensD"]]]] ) } else if (effectSize %in% c("SMD1", "SMDH1")) { inputs <- list( - m1i = dataset[[options[["meanGroup1"]]]], - m2i = dataset[[options[["meanGroup2"]]]], - sd2i = dataset[[options[["sdGroup2"]]]], - n1i = dataset[[options[["sampleSizeGroup1"]]]], - n2i = dataset[[options[["sampleSizeGroup2"]]]] + m1i = dataset[[variables[["meanGroup1"]]]], + m2i = dataset[[variables[["meanGroup2"]]]], + sd2i = dataset[[variables[["sdGroup2"]]]], + n1i = dataset[[variables[["sampleSizeGroup1"]]]], + n2i = dataset[[variables[["sampleSizeGroup2"]]]] ) } else if (effectSize %in% c("CVR", "VR")) { inputs <- list( - sd1i = dataset[[options[["sdGroup1"]]]], - sd2i = dataset[[options[["sdGroup2"]]]], - n1i = dataset[[options[["sampleSizeGroup1"]]]], - n2i = dataset[[options[["sampleSizeGroup2"]]]] + sd1i = dataset[[variables[["sdGroup1"]]]], + sd2i = dataset[[variables[["sdGroup2"]]]], + n1i = dataset[[variables[["sampleSizeGroup1"]]]], + n2i = dataset[[variables[["sampleSizeGroup2"]]]] ) } else { inputs <- list( - m1i = dataset[[options[["meanGroup1"]]]], - m2i = dataset[[options[["meanGroup2"]]]], - sd1i = dataset[[options[["sdGroup1"]]]], - sd2i = dataset[[options[["sdGroup2"]]]], - n1i = dataset[[options[["sampleSizeGroup1"]]]], - n2i = dataset[[options[["sampleSizeGroup2"]]]] + m1i = dataset[[variables[["meanGroup1"]]]], + m2i = dataset[[variables[["meanGroup2"]]]], + sd1i = dataset[[variables[["sdGroup1"]]]], + sd2i = dataset[[variables[["sdGroup2"]]]], + n1i = dataset[[variables[["sampleSizeGroup1"]]]], + n2i = dataset[[variables[["sampleSizeGroup2"]]]] ) } } else if (measurement == "binary") { inputs <- list( - ai = dataset[[options[["group1OutcomePlus"]]]], - bi = dataset[[options[["group1OutcomeMinus"]]]], - ci = dataset[[options[["group2OutcomePlus"]]]], - di = dataset[[options[["group2OutcomeMinus"]]]], - n1i = dataset[[options[["sampleSizeGroup1"]]]], - n2i = dataset[[options[["sampleSizeGroup2"]]]] + ai = dataset[[variables[["group1OutcomePlus"]]]], + bi = dataset[[variables[["group1OutcomeMinus"]]]], + ci = dataset[[variables[["group2OutcomePlus"]]]], + di = dataset[[variables[["group2OutcomeMinus"]]]], + n1i = dataset[[variables[["sampleSizeGroup1"]]]], + n2i = dataset[[variables[["sampleSizeGroup2"]]]] ) } else if (measurement == "countsPerTime") { inputs <- list( - t1i = dataset[[options[["personTimeGroup1"]]]], - t2i = dataset[[options[["personTimeGroup2"]]]], - x1i = dataset[[options[["eventsGroup1"]]]], - x2i = dataset[[options[["eventsGroup2"]]]] + t1i = dataset[[variables[["personTimeGroup1"]]]], + t2i = dataset[[variables[["personTimeGroup2"]]]], + x1i = dataset[[variables[["eventsGroup1"]]]], + x2i = dataset[[variables[["eventsGroup2"]]]] ) } else if (measurement == "mixed") { if (effectSize %in% c("D2ORN", "D2ORL")) { inputs <- list( - m1i = dataset[[options[["meanGroup1"]]]], - m2i = dataset[[options[["meanGroup2"]]]], - sd1i = dataset[[options[["sdGroup1"]]]], - sd2i = dataset[[options[["sdGroup2"]]]], - n1i = dataset[[options[["sampleSizeGroup1"]]]], - n2i = dataset[[options[["sampleSizeGroup2"]]]], - ti = dataset[[options[["tStatistic"]]]], - pi = dataset[[options[["pValue"]]]], - di = dataset[[options[["cohensD"]]]] + m1i = dataset[[variables[["meanGroup1"]]]], + m2i = dataset[[variables[["meanGroup2"]]]], + sd1i = dataset[[variables[["sdGroup1"]]]], + sd2i = dataset[[variables[["sdGroup2"]]]], + n1i = dataset[[variables[["sampleSizeGroup1"]]]], + n2i = dataset[[variables[["sampleSizeGroup2"]]]], + ti = dataset[[variables[["tStatistic"]]]], + pi = dataset[[variables[["pValue"]]]], + di = dataset[[variables[["cohensD"]]]] ) } else if (effectSize %in% c("PBIT", "OR2DN", "OR2DL")) { inputs <- list( - ai = dataset[[options[["group1OutcomePlus"]]]], - bi = dataset[[options[["group1OutcomeMinus"]]]], - ci = dataset[[options[["group2OutcomePlus"]]]], - di = dataset[[options[["group2OutcomeMinus"]]]], - n1i = dataset[[options[["sampleSizeGroup1"]]]], - n2i = dataset[[options[["sampleSizeGroup2"]]]] + ai = dataset[[variables[["group1OutcomePlus"]]]], + bi = dataset[[variables[["group1OutcomeMinus"]]]], + ci = dataset[[variables[["group2OutcomePlus"]]]], + di = dataset[[variables[["group2OutcomeMinus"]]]], + n1i = dataset[[variables[["sampleSizeGroup1"]]]], + n2i = dataset[[variables[["sampleSizeGroup2"]]]] ) } } } else if (design == "variableAssociation") { if (measurement == "quantitative") { inputs <- list( - ri = dataset[[options[["correlation"]]]], - ni = dataset[[options[["sampleSize"]]]], - ti = dataset[[options[["tStatistic"]]]], - pi = dataset[[options[["pValue"]]]] + ri = dataset[[variables[["correlation"]]]], + ni = dataset[[variables[["sampleSize"]]]], + ti = dataset[[variables[["tStatistic"]]]], + pi = dataset[[variables[["pValue"]]]] ) } else if (measurement == "binary") { if (effectSize %in% c("OR", "YUQ", "YUY", "RTET")) { inputs <- list( - ai = dataset[[options[["outcomePlusPlus"]]]], - bi = dataset[[options[["outcomePlusMinus"]]]], - ci = dataset[[options[["outcomeMinusPlus"]]]], - di = dataset[[options[["outcomeMinusMinus"]]]], - n1i = dataset[[options[["outcomePlusPlusAndPlusMinus"]]]], - n2i = dataset[[options[["outcomeMinusPlusAndMinusMinus"]]]] + ai = dataset[[variables[["outcomePlusPlus"]]]], + bi = dataset[[variables[["outcomePlusMinus"]]]], + ci = dataset[[variables[["outcomeMinusPlus"]]]], + di = dataset[[variables[["outcomeMinusMinus"]]]], + n1i = dataset[[variables[["outcomePlusPlusAndPlusMinus"]]]], + n2i = dataset[[variables[["outcomeMinusPlusAndMinusMinus"]]]] ) } else if (effectSize %in% c("PHI", "ZPHI")) { inputs <- list( - ai = dataset[[options[["outcomePlusPlus"]]]], - bi = dataset[[options[["outcomePlusMinus"]]]], - ci = dataset[[options[["outcomeMinusPlus"]]]], - di = dataset[[options[["outcomeMinusMinus"]]]], - n1i = dataset[[options[["outcomePlusPlusAndPlusMinus"]]]], - n2i = dataset[[options[["outcomeMinusPlusAndMinusMinus"]]]], - vtype = if(length(options[["samplingVarianceTypeMixed"]]) != 0) dataset[[options[["samplingVarianceTypeMixed"]]]] else NULL + ai = dataset[[variables[["outcomePlusPlus"]]]], + bi = dataset[[variables[["outcomePlusMinus"]]]], + ci = dataset[[variables[["outcomeMinusPlus"]]]], + di = dataset[[variables[["outcomeMinusMinus"]]]], + n1i = dataset[[variables[["outcomePlusPlusAndPlusMinus"]]]], + n2i = dataset[[variables[["outcomeMinusPlusAndMinusMinus"]]]], + vtype = if(length(variables[["samplingVarianceTypeMixed"]]) != 0) dataset[[variables[["samplingVarianceTypeMixed"]]]] else NULL ) } } else if (measurement == "mixed") { if (effectSize %in% c("RBIS", "ZBIS")) { inputs <- list( - m1i = dataset[[options[["meanGroup1"]]]], - m2i = dataset[[options[["meanGroup2"]]]], - sd1i = dataset[[options[["sdGroup1"]]]], - sd2i = dataset[[options[["sdGroup2"]]]], - n1i = dataset[[options[["sampleSizeGroup1"]]]], - n2i = dataset[[options[["sampleSizeGroup2"]]]], - ti = dataset[[options[["tStatistic"]]]], - pi = dataset[[options[["pValue"]]]], - di = dataset[[options[["cohensD"]]]] + m1i = dataset[[variables[["meanGroup1"]]]], + m2i = dataset[[variables[["meanGroup2"]]]], + sd1i = dataset[[variables[["sdGroup1"]]]], + sd2i = dataset[[variables[["sdGroup2"]]]], + n1i = dataset[[variables[["sampleSizeGroup1"]]]], + n2i = dataset[[variables[["sampleSizeGroup2"]]]], + ti = dataset[[variables[["tStatistic"]]]], + pi = dataset[[variables[["pValue"]]]], + di = dataset[[variables[["cohensD"]]]] ) } else if (effectSize %in% c("RPB", "ZPB")) { inputs <- list( - m1i = dataset[[options[["meanGroup1"]]]], - m2i = dataset[[options[["meanGroup2"]]]], - sd1i = dataset[[options[["sdGroup1"]]]], - sd2i = dataset[[options[["sdGroup2"]]]], - n1i = dataset[[options[["sampleSizeGroup1"]]]], - n2i = dataset[[options[["sampleSizeGroup2"]]]], - ti = dataset[[options[["tStatistic"]]]], - pi = dataset[[options[["pValue"]]]], - di = dataset[[options[["cohensD"]]]], - vtype = if(length(options[["samplingVarianceTypeMixed"]]) != 0) dataset[[options[["samplingVarianceTypeMixed"]]]] else NULL + m1i = dataset[[variables[["meanGroup1"]]]], + m2i = dataset[[variables[["meanGroup2"]]]], + sd1i = dataset[[variables[["sdGroup1"]]]], + sd2i = dataset[[variables[["sdGroup2"]]]], + n1i = dataset[[variables[["sampleSizeGroup1"]]]], + n2i = dataset[[variables[["sampleSizeGroup2"]]]], + ti = dataset[[variables[["tStatistic"]]]], + pi = dataset[[variables[["pValue"]]]], + di = dataset[[variables[["cohensD"]]]], + vtype = if(length(variables[["samplingVarianceTypeMixed"]]) != 0) dataset[[variables[["samplingVarianceTypeMixed"]]]] else NULL ) } } @@ -152,134 +325,143 @@ getEscalcDataOptions <- function(options, dataset) { if (measurement == "quantitative") { if (effectSize %in% c("MN", "SMN", "MNLN", "CVLN")) { inputs <- list( - mi = dataset[[options[["mean"]]]], - sdi = dataset[[options[["sd"]]]], - ni = dataset[[options[["sampleSize"]]]] + mi = dataset[[variables[["mean"]]]], + sdi = dataset[[variables[["sd"]]]], + ni = dataset[[variables[["sampleSize"]]]] ) } else if (effectSize == "SDLN") { inputs <- list( - sdi = dataset[[options[["sd"]]]], - ni = dataset[[options[["sampleSize"]]]] + sdi = dataset[[variables[["sd"]]]], + ni = dataset[[variables[["sampleSize"]]]] ) } } else if (measurement == "binary") { inputs <- list( - xi = dataset[[options[["events"]]]], - mi = dataset[[options[["nonEvents"]]]], - ni = dataset[[options[["sampleSize"]]]] + xi = dataset[[variables[["events"]]]], + mi = dataset[[variables[["nonEvents"]]]], + ni = dataset[[variables[["sampleSize"]]]] ) } else if (measurement == "countsPerTime") { inputs <- list( - xi = dataset[[options[["events"]]]], - ti = dataset[[options[["personTime"]]]], - ni = dataset[[options[["sampleSize"]]]] + xi = dataset[[variables[["events"]]]], + ti = dataset[[variables[["personTime"]]]], + ni = dataset[[variables[["sampleSize"]]]] ) } } else if (design == "repeatedMeasures") { if (measurement == "quantitative") { if (effectSize %in% c("MC", "SMCR", "SMCRH", "SMCRP", "SMCRPH", "ROMC")) { input <- list( - m1i = dataset[[options[["meanTime1"]]]], - m2i = dataset[[options[["meanTime2"]]]], - sd1i = dataset[[options[["sdTime1"]]]], - sd2i = dataset[[options[["sdTime2"]]]], - ni = dataset[[options[["sampleSize"]]]], - ri = dataset[[options[["correlation"]]]] + m1i = dataset[[variables[["meanTime1"]]]], + m2i = dataset[[variables[["meanTime2"]]]], + sd1i = dataset[[variables[["sdTime1"]]]], + sd2i = dataset[[variables[["sdTime2"]]]], + ni = dataset[[variables[["sampleSize"]]]], + ri = dataset[[variables[["correlation"]]]] ) } else if (effectSize == "SMCC") { input <- list( - m1i = dataset[[options[["meanTime1"]]]], - m2i = dataset[[options[["meanTime2"]]]], - sd1i = dataset[[options[["sdTime1"]]]], - sd2i = dataset[[options[["sdTime2"]]]], - ni = dataset[[options[["sampleSize"]]]], - ri = dataset[[options[["correlation"]]]], - ti = dataset[[options[["tStatistic"]]]], - pi = dataset[[options[["pValue"]]]], - di = dataset[[options[["cohensD"]]]] + m1i = dataset[[variables[["meanTime1"]]]], + m2i = dataset[[variables[["meanTime2"]]]], + sd1i = dataset[[variables[["sdTime1"]]]], + sd2i = dataset[[variables[["sdTime2"]]]], + ni = dataset[[variables[["sampleSize"]]]], + ri = dataset[[variables[["correlation"]]]], + ti = dataset[[variables[["tStatistic"]]]], + pi = dataset[[variables[["pValue"]]]], + di = dataset[[variables[["cohensD"]]]] ) } else if (effectSize %in% c("CVRC", "VRC")) { input <- list( - sd1i = dataset[[options[["sdTime1"]]]], - sd2i = dataset[[options[["sdTime2"]]]], - ni = dataset[[options[["sampleSize"]]]], - ri = dataset[[options[["correlation"]]]] + sd1i = dataset[[variables[["sdTime1"]]]], + sd2i = dataset[[variables[["sdTime2"]]]], + ni = dataset[[variables[["sampleSize"]]]], + ri = dataset[[variables[["correlation"]]]] ) } } else if (measurement == "binary") { inputs <- list( - ai = dataset[[options[["outcomePlusPlus"]]]], - bi = dataset[[options[["outcomePlusMinus"]]]], - ci = dataset[[options[["outcomeMinusPlus"]]]], - di = dataset[[options[["outcomeMinusMinus"]]]] + ai = dataset[[variables[["outcomePlusPlus"]]]], + bi = dataset[[variables[["outcomePlusMinus"]]]], + ci = dataset[[variables[["outcomeMinusPlus"]]]], + di = dataset[[variables[["outcomeMinusMinus"]]]] ) } else if (measurement == "binaryMarginal") { inputs <- list( - ai = dataset[[options[["time1OutcomePlus"]]]], - bi = dataset[[options[["time1OutcomeMinus"]]]], - ci = dataset[[options[["time2OutcomePlus"]]]], - di = dataset[[options[["time2OutcomeMinus"]]]], - ri = dataset[[options[["correlation"]]]], - pi = dataset[[options[["proportionPlusPlus"]]]] + ai = dataset[[variables[["time1OutcomePlus"]]]], + bi = dataset[[variables[["time1OutcomeMinus"]]]], + ci = dataset[[variables[["time2OutcomePlus"]]]], + di = dataset[[variables[["time2OutcomeMinus"]]]], + ri = dataset[[variables[["correlation"]]]], + pi = dataset[[variables[["proportionPlusPlus"]]]] ) } } else if (design == "other") { if (measurement == "reliability") { inputs <- list( - ai = dataset[[options[["cronbachsAlpha"]]]], - mi = dataset[[options[["items"]]]], - ni = dataset[[options[["sampleSize"]]]] + ai = dataset[[variables[["cronbachsAlpha"]]]], + mi = dataset[[variables[["items"]]]], + ni = dataset[[variables[["sampleSize"]]]] ) } else if (measurement == "partialCorrelation") { if (effectSize %in% c("PCOR", "ZPCOR")) { inputs <- list( - ti = dataset[[options[["tStatistic"]]]], - mi = dataset[[options[["predictors"]]]], - ni = dataset[[options[["sampleSize"]]]], - ti = dataset[[options[["tStatistic"]]]], - ri = dataset[[options[["semipartialCorrelation"]]]], - pi = dataset[[options[["pValue"]]]] + ti = dataset[[variables[["tStatistic"]]]], + mi = dataset[[variables[["predictors"]]]], + ni = dataset[[variables[["sampleSize"]]]], + ti = dataset[[variables[["tStatistic"]]]], + ri = dataset[[variables[["semipartialCorrelation"]]]], + pi = dataset[[variables[["pValue"]]]] ) } else if (effectSize %in% c("SPCOR", "ZSPCOR")) { inputs <- list( - ti = dataset[[options[["tStatistic"]]]], - mi = dataset[[options[["predictors"]]]], - ni = dataset[[options[["sampleSize"]]]], - r2i = dataset[[options[["rSquared"]]]], - ti = dataset[[options[["tStatistic"]]]], - ri = dataset[[options[["semipartialCorrelation"]]]], - pi = dataset[[options[["pValue"]]]] + ti = dataset[[variables[["tStatistic"]]]], + mi = dataset[[variables[["predictors"]]]], + ni = dataset[[variables[["sampleSize"]]]], + r2i = dataset[[variables[["rSquared"]]]], + ti = dataset[[variables[["tStatistic"]]]], + ri = dataset[[variables[["semipartialCorrelation"]]]], + pi = dataset[[variables[["pValue"]]]] ) } } else if (measurement == "modelFit") { inputs <- list( - mi = dataset[[options[["predictors"]]]], - ni = dataset[[options[["sampleSize"]]]], - r2i = dataset[[options[["rSquared"]]]], - fi = dataset[[options[["fStatistic"]]]], - pi = dataset[[options[["pValue"]]]] + mi = dataset[[variables[["predictors"]]]], + ni = dataset[[variables[["sampleSize"]]]], + r2i = dataset[[variables[["rSquared"]]]], + fi = dataset[[variables[["fStatistic"]]]], + pi = dataset[[variables[["pValue"]]]] ) } else if (measurement == "heterozygosity") { inputs <- list( - ai = dataset[[options[["homozygousDominantAlleles"]]]], - bi = dataset[[options[["heterozygousAlleles"]]]], - ci = dataset[[options[["homozygousRecessiveAlleles"]]]] + ai = dataset[[variables[["homozygousDominantAlleles"]]]], + bi = dataset[[variables[["heterozygousAlleles"]]]], + ci = dataset[[variables[["homozygousRecessiveAlleles"]]]] ) } } else if (design == "reportedEffectSizes") { inputs <- list( - yi = dataset[[options[["effectSize"]]]], - sei = dataset[[options[["standardError"]]]], - vi = dataset[[options[["samplingVariance"]]]] + yi = dataset[[variables[["effectSize"]]]], + sei = dataset[[variables[["standardError"]]]], + vi = dataset[[variables[["samplingVariance"]]]], + lci = dataset[[variables[["confidenceInterval"]][[1]][1]]], + uci = dataset[[variables[["confidenceInterval"]][[1]][2]]] ) + inputs <- .escReportedEffectSizesInput(inputs) } - if (length(options[["subset"]]) == 1) - inputs[["subset"]] <- dataset[[options[["subset"]]]] + if (length(variables[["subset"]]) == 1) + inputs[["subset"]] <- dataset[[variables[["subset"]]]] + + inputs <- inputs[!sapply(inputs, is.null)] return(inputs) } -getEscalcAdjustFrequenciesOptions <- function(design, measurement, effectSize, options) { +.escGetEscalcAdjustFrequenciesOptions <- function(effectSizeType, variables) { + + design <- effectSizeType[["design"]] + measurement <- effectSizeType[["measurement"]] + effectSize <- effectSizeType[["effectSize"]] # Conditions for when add is appropriate if ((design == "independentGroups" && measurement == "binary") || @@ -289,10 +471,16 @@ getEscalcAdjustFrequenciesOptions <- function(design, measurement, effectSize, o (design == "singleGroup" && measurement == "binary") || (design == "singleGroup" && measurement == "countsPerTime")) { return(list( - add = options[["add"]], - to = options[["to"]], + add = variables[["add"]], + to = switch( + variables[["to"]], + "all" = "all", + "onlyZero" = "only0", + "ifAnyZero" = "if0all", + "none" = "none" + ), drop00 = switch( - options[["dropStudiesWithNoCasesOrEvents"]], + variables[["dropStudiesWithNoCasesOrEvents"]], "yes" = TRUE, "no" = FALSE ) @@ -301,7 +489,11 @@ getEscalcAdjustFrequenciesOptions <- function(design, measurement, effectSize, o return(NULL) } } -getEscalcVtypeOption <- function(design, measurement, effectSize, options) { +.escGetEscalcVtypeOption <- function(effectSizeType, variables) { + + design <- effectSizeType[["design"]] + measurement <- effectSizeType[["measurement"]] + effectSize <- effectSizeType[["effectSize"]] # Conditions for when vtype is appropriate if ((design == "independentGroups" && measurement == "quantitative" && effectSize %in% c("MD", "SMD", "SMD1", "ROM")) || @@ -309,9 +501,323 @@ getEscalcVtypeOption <- function(design, measurement, effectSize, o (design == "variableAssociation" && measurement == "binary") || (design == "variableAssociation" && measurement == "mixed") || (design == "other" && measurement == "modelFit")) { - return(options[["samplingVarianceType"]]) + return(list( + vtype = variables[["samplingVarianceType"]] + )) } else { return(NULL) } } +.escMapEscalcInput2Options <- function(effectSizeType) { + + design <- effectSizeType[["design"]] + measurement <- effectSizeType[["measurement"]] + effectSize <- effectSizeType[["effectSize"]] + if (design == "independentGroups") { + if (measurement == "quantitative") { + if (effectSize == "SMD") { + inputs <- list( + m1i = "Mean Group 1", + m2i = "Mean Group 2", + sd1i = "SD Group 1", + sd2i = "SD Group 2", + n1i = "Sample Size Group 1", + n2i = "Sample Size Group 2", + ti = "T-Statistic", + pi = "P-Value", + di = "Cohen's d" + ) + } else if (effectSize %in% c("SMD1", "SMDH1")) { + inputs <- list( + m1i = "Mean Group 1", + m2i = "Mean Group 2", + sd2i = "SD Group 2", + n1i = "Sample Size Group 1", + n2i = "Sample Size Group 2" + ) + } else if (effectSize %in% c("CVR", "VR")) { + inputs <- list( + sd1i = "SD Group 1", + sd2i = "SD Group 2", + n1i = "Sample Size Group 1", + n2i = "Sample Size Group 2" + ) + } else { + inputs <- list( + m1i = "Mean Group 1", + m2i = "Mean Group 2", + sd1i = "SD Group 1", + sd2i = "SD Group 2", + n1i = "Sample Size Group 1", + n2i = "Sample Size Group 2" + ) + } + } else if (measurement == "binary") { + inputs <- list( + ai = "Group 1/Outcome +", + bi = "Group 1/Outcome -", + ci = "Group 2/Outcome +", + di = "Group 2/Outcome -", + n1i = "Sample Size Group 1", + n2i = "Sample Size Group 2" + ) + } else if (measurement == "countsPerTime") { + inputs <- list( + t1i = "Person-Time Group 1", + t2i = "Person-Time Group 2", + x1i = "Events Group 1", + x2i = "Events Group 2" + ) + } else if (measurement == "mixed") { + if (effectSize %in% c("D2ORN", "D2ORL")) { + inputs <- list( + m1i = "Mean Group 1", + m2i = "Mean Group 2", + sd1i = "SD Group 1", + sd2i = "SD Group 2", + n1i = "Sample Size Group 1", + n2i = "Sample Size Group 2", + ti = "T-Statistic", + pi = "P-Value", + di = "Cohen's d" + ) + } else if (effectSize %in% c("PBIT", "OR2DN", "OR2DL")) { + inputs <- list( + ai = "Group 1/Outcome +", + bi = "Group 1/Outcome -", + ci = "Group 2/Outcome +", + di = "Group 2/Outcome -", + n1i = "Sample Size Group 1", + n2i = "Sample Size Group 2" + ) + } + } + } else if (design == "variableAssociation") { + if (measurement == "quantitative") { + inputs <- list( + ri = "Correlation", + ni = "Sample Size", + ti = "T-Statistic", + pi = "P-Value" + ) + } else if (measurement == "binary") { + if (effectSize %in% c("OR", "YUQ", "YUY", "RTET")) { + inputs <- list( + ai = "Outcome +/+", + bi = "Outcome +/-", + ci = "Outcome -/+", + di = "Outcome -/-", + n1i = "Outcome +/+ and +/-", + n2i = "Outcome -/+ and -/-" + ) + } else if (effectSize %in% c("PHI", "ZPHI")) { + inputs <- list( + ai = "Outcome +/+", + bi = "Outcome +/-", + ci = "Outcome -/+", + di = "Outcome -/-", + n1i = "Outcome +/+ and +/-", + n2i = "Outcome -/+ and -/-", + vtype = if(length(variables[["samplingVarianceTypeMixed"]]) != 0) "samplingVarianceTypeMixed" else NULL + ) + } + } else if (measurement == "mixed") { + if (effectSize %in% c("RBIS", "ZBIS")) { + inputs <- list( + m1i = "Mean Group 1", + m2i = "Mean Group 2", + sd1i = "SD Group 1", + sd2i = "SD Group 2", + n1i = "Sample Size Group 1", + n2i = "Sample Size Group 2", + ti = "T-Statistic", + pi = "P-Value", + di = "Cohen's d" + ) + } else if (effectSize %in% c("RPB", "ZPB")) { + inputs <- list( + m1i = "Mean Group 1", + m2i = "Mean Group 2", + sd1i = "SD Group 1", + sd2i = "SD Group 2", + n1i = "Sample Size Group 1", + n2i = "Sample Size Group 2", + ti = "T-Statistic", + pi = "P-Value", + di = "Cohen's d", + vtype = if(length(variables[["samplingVarianceTypeMixed"]]) != 0) "samplingVarianceTypeMixed" else NULL + ) + } + } + } else if (design == "singleGroup") { + if (measurement == "quantitative") { + if (effectSize %in% c("MN", "SMN", "MNLN", "CVLN")) { + inputs <- list( + mi = "Mean", + sdi = "SD", + ni = "Sample Size" + ) + } else if (effectSize == "SDLN") { + inputs <- list( + sdi = "SD", + ni = "Sample Size" + ) + } + } else if (measurement == "binary") { + inputs <- list( + xi = "Events", + mi = "Non-Events", + ni = "Sample Size" + ) + } else if (measurement == "countsPerTime") { + inputs <- list( + xi = "Events", + ti = "Person-Time", + ni = "Sample Size" + ) + } + } else if (design == "repeatedMeasures") { + if (measurement == "quantitative") { + if (effectSize %in% c("MC", "SMCR", "SMCRH", "SMCRP", "SMCRPH", "ROMC")) { + inputs <- list( + m1i = "Mean Time 1 (or Group 1)", + m2i = "Mean Time 2 (or Group 2)", + sd1i = "SD Time 1 (or Group 1)", + sd2i = "SD Time 2 (or Group 2)", + ni = "Sample Size", + ri = "Correlation" + ) + } else if (effectSize == "SMCC") { + inputs <- list( + m1i = "Mean Time 1 (or Group 1)", + m2i = "Mean Time 2 (or Group 2)", + sd1i = "SD Time 1 (or Group 1)", + sd2i = "SD Time 2 (or Group 2)", + ni = "Sample Size", + ri = "Correlation", + ti = "T-Statistic", + pi = "P-Value", + di = "Cohen's d" + ) + } else if (effectSize %in% c("CVRC", "VRC")) { + inputs <- list( + sd1i = "SD Time 1 (or Group 1)", + sd2i = "SD Time 2 (or Group 2)", + ni = "Sample Size", + ri = "Correlation" + ) + } + } else if (measurement == "binary") { + inputs <- list( + ai = "Outcome +/+", + bi = "Outcome +/-", + ci = "Outcome -/+", + di = "Outcome -/-" + ) + } else if (measurement == "binaryMarginal") { + inputs <- list( + ai = "Time 1/Outcome +", + bi = "Time 1/Outcome -", + ci = "Time 2/Outcome +", + di = "Time 2/Outcome -", + ri = "Correlation", + pi = "Proportion +/+" + ) + } + } else if (design == "other") { + if (measurement == "reliability") { + inputs <- list( + ai = "Cronbach's alpha", + mi = "Items", + ni = "Sample Size" + ) + } else if (measurement == "partialCorrelation") { + if (effectSize %in% c("PCOR", "ZPCOR")) { + inputs <- list( + ti = "T-Statistic", + mi = "Predictors", + ni = "Sample Size", + ti = "T-Statistic", + ri = "(Semi)Partial Correlation", + pi = "P-Value" + ) + } else if (effectSize %in% c("SPCOR", "ZSPCOR")) { + inputs <- list( + ti = "T-Statistic", + mi = "Predictors", + ni = "Sample Size", + r2i = "R-Squared", + ti = "T-Statistic", + ri = "(Semi)Partial Correlation", + pi = "P-Value" + ) + } + } else if (measurement == "modelFit") { + inputs <- list( + mi = "Predictors", + ni = "Sample Size", + r2i = "R-Squared", + fi = "F-Statistic", + pi = "P-Value" + ) + } else if (measurement == "heterozygosity") { + inputs <- list( + ai = "Homozygous Dominant Alleles", + bi = "Heterozygous Alleles", + ci = "Homozygous Recessive Alleles" + ) + } + } else if (design == "reportedEffectSizes") { + inputs <- list( + yi = "Effect Size", + sei = "Standard Error", + vi = "Sampling Variance" + ) + } + + return(inputs) +} +.escCleanErrorMessage <- function(errorMessage, effectSizeType) { + + # remove new lines + errorMessage <- gsub("\\n ", "", errorMessage) + + errorMessage <- attr(newDataOutput, "condition")$message + + if (grepl("via the appropriate arguments", errorMessage)) { + + # split the message at 'via the appropriate arguments' + errorSplit <- regexpr("via the appropriate arguments", errorMessage) + errorMessageStart <- substr(errorMessage, 1, errorSplit + attr(errorSplit, "match.length") - 1) + errorMessageEnd <- substr(errorMessage, errorSplit + attr(errorSplit, "match.length"), nchar(errorMessage)) + + inputMapping <- .escMapEscalcInput2Options(effectSizeType) + for (input in names(inputMapping)) { + errorMessageEnd <- gsub(input, inputMapping[[input]], errorMessageEnd) + } + + # re-assemble the message + errorMessage <- paste(errorMessageStart, errorMessageEnd, sep = "") + + } else if (grepl("'vtype'", errorMessage)) { + errorMessage <- gsub("'vtype'", "'Sampling variance type'", errorMessage) + } + + return(errorMessage) +} +.escReportedEffectSizesInput <- function(inputs) { + + # add standard error when missing and CI is available + inputs$sei[[is.na(inputs$sei)]] <- (inputs$uci[[is.na(inputs$sei)]] - inputs$lci[[is.na(inputs$sei)]]) / (2 * stats::qnorm(0.975)) + + # add variance when missing and standard error is available + inputs$vi[[is.na(input$vi)]] <- inputs$sei[[is.na(inputs$vi)]]^2 + + # remove sei and cis + inputs$sei <- NULL + inputs$uci <- NULL + inputs$lci <- NULL + + return(inputs) +} diff --git a/gibson2002.csv b/gibson2002.csv new file mode 100644 index 00000000..bab03b37 --- /dev/null +++ b/gibson2002.csv @@ -0,0 +1,16 @@ +"author","year","n1i","m1i","sd1i","n2i","m2i","sd2i","ai","bi","ci","di","type" +"Cote",1997,50,2.2,12.73,54,5.2,12.5,NA,NA,NA,NA,1 +"Ghosh",1998,140,17.6,24.2,136,34.1,38.8,NA,NA,NA,NA,1 +"Hayward",1996,23,0.38,0.56,19,0.23,0.29,NA,NA,NA,NA,1 +"Heard",1999,97,2.09,5.93,94,2.66,4.95,34,63,36,58,1 +"Ignacio-Garcia",1995,35,4.92,6.05,35,20,26.34,24,11,29,6,1 +"Knoell",1998,45,0.85,4.75,55,2.31,9.16,NA,NA,NA,NA,1 +"Lahdensuo",1996,56,2.8,9,59,4.8,7.2,13,43,25,34,1 +"Sommaruga",1995,20,24.1,11.8,20,31.8,17.9,NA,NA,NA,NA,1 +"Zeiger",1991,128,1.4,3.3,143,2.3,7.6,NA,NA,NA,NA,1 +"Garret",1994,119,6.23,12.2,100,5.71,8.57,58,42,57,33,2 +"Neri",1996,32,2.1,8,33,5.1,14,7,25,13,20,3 +"Hilton",1986,86,0.73,1.48,100,0.47,1.2,NA,NA,NA,NA,4 +"Gallefoss",1999,25,8,32,24,26,70,NA,NA,NA,NA,5 +"Yoon",1993,28,NA,NA,28,NA,NA,5,23,4,24,1 +"Brewin",1995,12,NA,NA,33,NA,NA,0,12,16,17,3 diff --git a/inst/help/EffectSizeComputation.md b/inst/help/EffectSizeComputation.md index e0388bd1..989a59db 100644 --- a/inst/help/EffectSizeComputation.md +++ b/inst/help/EffectSizeComputation.md @@ -1,7 +1,7 @@ Effect Size Computation ========================== -------------------------- -This analysis allows users to compute effect sizes based on the design and measurement of their experiment. In case multiple types of designs and measurements are included in the data set, the user can specify the order in which the effect sizes are calculated (the effect size from the following option is filled in only if it was computed in the previous step). +This analysis allows users to compute effect sizes based on the design and measurement of the studies. In case multiple types of designs and measurements are included in the data set, the user can specify the order in which the effect sizes are calculated (the effect size from the following option is filled in only if it was computed in the previous step). Already included effect sizes can be passed forward using the Reported effect sizes option. @@ -333,32 +333,32 @@ Note that users can supply "signed" P-Value (e.g., p = -0.01, 0.95) where the si -------------------------- #### Frequency/event cell adjustment +Available only for: +- Independent groups design with Binary measurement. +- Independent groups design with Counts per time measurement. +- Independent groups design with Mixed measurement and effect sizes `PBIT`, `OR2DN`, or `OR2DL`. +- Variable association with Binary measurement. +- Single group designs with Binary measurement. +- Single group designs with Counts per time measurement. #### Add -The Add field allows you to specify the amount to add to zero cells, counts, or frequencies when calculating effect sizes or outcomes. - -Default Values: -- 0.5 for: - - Independent groups with binary measurement (RR, OR). - - Independent groups with counts per time measurement (IRR, IRD, IRSD). - - Repeated measures/matched groups with binary measurement (MPRR, MPOR, MPRD, MPORC, MPPETO, MPORM). - - Single group with binary measurement (PR, PFT). - - Single group with counts per time measurement (IR, IRLN, IRS, IRFT). - - Variable association with binary measurement (OR, PHI, YUQ, YUY, RTET). - - Independent groups with mixed measurement (D2ORN, D2ORL). -- 0 for: - - Independent groups with binary measurement (RD, AS, PETO). - - Single group with binary measurement (PLN, PLO, PAS). +The Add input field allows you to specify a small constant to add to zero cells, counts, or frequencies when computing effect sizes, as many effect sizes are undefined when one of the cells, counts or frequencies is equal to zero. + +Default Value: +- 0.5: Default value for most effect sizes. +- 0: Used for AS, PHI, ZPHI, RTET, ZTET, IRSD, PAS, PFT, IRS, IRFT + #### To The To dropdown allows you to specify when the values under the Add option should be added to Options -- All: The value of Add is added to each cell of all tables. -- Only zero: The value of Add is added only to cells of tables with at least one cell equal to 0. -- If any zero: The value of Add is added to each cell of all tables, but only when there is at least one table with a zero cell. +- All: The value of Add is added to each cell/count/frequency of all studies. +- Only zero: The value of Add is added to each cell/count/frequency of a study with at least one cell/count/frequency equal to 0. +- If any zero: The value of Add is added to each cell/count/frequency of all studies, but only when there is at least one study with a zero cell/count/frequency. - None: No adjustment to the observed table frequencies is made. + #### Drop studies with no cases/events The `Drop Studies with No Cases/Events` radio button group allows you to specify whether studies with no cases or events should be dropped when calculating the effect sizes. diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 1d286440..2ffb8ad7 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -94,8 +94,8 @@ Form AvailableVariablesList { - name: "effectSizeModelComponents" - title: qsTr("Components") + name: "effectSizeModelAvailableComponents" + title: qsTr("Available Components") source: ["covariates","factors"] } @@ -125,8 +125,8 @@ Form AvailableVariablesList { - name: "heterogeneityModelComponents" - title: qsTr("Components") + name: "heterogeneityModelAvailableComponents" + title: qsTr("Available Components") source: ["covariates","factors"] } @@ -147,6 +147,206 @@ Form } } + ComponentsList + { + id: randomEffects + name: "randomEffects" + title: qsTr("Random effects") + + rowComponent: RowLayout + { + property string typeValue: type.value + property string structureValue: structure.value + property string spatialInputTypeValue: spatialInputType.value + + DropDown + { + id: type + name: "type" + label: qsTr("Type") + values: [ + { label: qsTr("Simple"), value: "simple"}, + { label: qsTr("Nested (multilevel)"), value: "nested"}, + { label: qsTr("Random slopes"), value: "randomSlopes"}, + { label: qsTr("Structured"), value: "structured"}, + { label: qsTr("Autoregressive"), value: "autoregressive"}, + { label: qsTr("Spatial"), value: "spatial"}, + { label: qsTr("Known correlation"), value: "knownCorrelation"} + ] + } + + DropDown + { + id: structure + name: "structure" + label: qsTr("Structure") + visible: type.value == "structured" || type.value == "autoregressive" || type.value == "spatial" + values: (function() { + if (type.value == "structured") { + return [ + { label: qsTr("Compound symmetry"), value: "compoundSymmetry"}, + { label: qsTr("Heteroscedastic compound symmetry"), value: "heteroscedasticCompoundSymmetry"}, + { label: qsTr("Unstructured "), value: "Unstructured"}, + { label: qsTr("Identity"), value: "identity"}, + { label: qsTr("Diagonal"), value: "diagonal"} + ]; + } else if (type.value == "autoregressive") { + return [ + { label: qsTr("AR(1)"), value: "ar1"}, + { label: qsTr("Heteroscedastic AR(1)"), value: "heteroskedasticAr1"}, + { label: qsTr("Continuous-time AR"), value: "continuousTimeAr"} + ]; + } else if (type.value == "spatial") { + return [ + { label: qsTr("Exponential"), value: "exponential"}, + { label: qsTr("Gaussian"), value: "gaussian"}, + { label: qsTr("Linear"), value: "linear"}, + { label: qsTr("Rational quadratic"), value: "rationalQuadratic"}, + { label: qsTr("Spherical"), value: "spherical"} + ]; + } else { + return []; + } + })() + } + + DropDown + { + id: spatialInputType + name: "spatialInputType" + label: qsTr("Spatial input type") + visible: type.value == "spatial" + values: (function() { + if (type.value == "spatial") { + return [ + { label: qsTr("Compute from variables"), value: "computeFromVariables"}, + { label: qsTr("Load from file"), value: "loadFromFile"} + ]; + } else { + return []; + } + })() + } + + } + } + + + ComponentsList + { + name: "randomEffectsSpecification" + source: "randomEffects" + title: qsTr("Random effects specification") + rowSpacing: 20 + + rowComponent: ColumnLayout + { + property var typeValue: randomEffects.rowAt(rowIndex).typeValue + property var structureValue: randomEffects.rowAt(rowIndex).structureValue + property var spatialInputTypeValue: randomEffects.rowAt(rowIndex).spatialInputTypeValue + + VariablesForm + { + removeInvisibles: true + preferredHeight: (typeValue == "randomSlopes" || typeValue == "spatial") ? 250 * preferencesModel.uiScale : 200 * preferencesModel.uiScale + visible: typeValue == "simple" || typeValue == "randomSlopes" || typeValue == "structured" || typeValue == "autoregressive" || (typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables") || typeValue == "knownCorrelation" + + AvailableVariablesList + { + name: "allVars" + title: typeValue + ": " + structureValue + } + + AssignedVariablesList + { + name: "randomSlopeTerms" + title: qsTr("Random Slope Terms") + visible: typeValue == "randomSlopes" + listViewType: JASP.Interaction + suggestedColumns: ["nominal", "scale"] // this should be choose on assignment + } + + AssignedVariablesList + { + name: "randomLevels" + title: qsTr("Random Levels") + visible: typeValue == "structured" + singleVariable: true + suggestedColumns: ["nominal"] + } + + AssignedVariablesList + { + name: "time" + title: qsTr("Time") + visible: typeValue == "autoregressive" + singleVariable: true + suggestedColumns: ["ordinal", "scale"] // scale for continuous time AR otherwise ordinal + } + + AssignedVariablesList + { + name: "spatialCoordinates" + title: qsTr("Spatial Coordinates") + visible: typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables" + suggestedColumns: ["nominal"] + } + + AssignedVariablesList + { + name: "groupingFactor" + title: qsTr("Grouping Factor") + singleVariable: true + suggestedColumns: ["nominal"] + } + } + + // TODO: Bruno -- adding variable crashes the qml + // TODO: Bruno -- allow single variable only, set-type to nominal + FactorsForm + { + name: "nestedGroupingFactors" + id: nestedGroupingFactors + title: qsTr("Nested Grouping Factors") + preferredHeight: 200 * preferencesModel.uiScale + initNumberFactors: 1 + allowAll: true + visible: typeValue == "nested" + } + + DropDown + { + name: "distanceMetric" + id: distanceMetric + label: qsTr("Distance metric") + visible: typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables" + values: [ + { label: qsTr("Euclidean"), value: "euclidean" }, + { label: qsTr("Manhattan"), value: "manhattan" }, + { label: qsTr("Maximum"), value: "maximum" }, + { label: qsTr("Great-circle"), value: "greatCircle"} + ] + } + + FileSelector + { + name: "distanceMatrixFile" + label: qsTr("Distance matrix file") + visible: typeValue == "spatial" && spatialInputTypeValue == "loadFromFile" + filter: "*.csv" + } + + FileSelector + { + name: "knownCorrelationMatrixFile" + label: qsTr("Known correlation matrix file") + visible: typeValue == "knownCorrelation" + filter: "*.csv" + } + + } + } + Section { title: qsTr("Statistics") diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index 949b2feb..4761c86b 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -244,7 +244,7 @@ Form ComponentsList { - name: "vars" + name: "variables" source: "effectSizeType" rowSpacing: 20 @@ -380,7 +380,7 @@ Form AssignedVariablesList { // metafor: di - name: "group2Outcome2" + name: "group2OutcomeMinus" title: qsTr("Group 2/Outcome Minus") singleVariable: true visible: (designValue == "independentGroups" && measurementValue == "binary") || From a3b8029a5a38a2b91e3c2727524fed6f16537777 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 10 Jun 2024 12:38:08 +0200 Subject: [PATCH 006/127] Update effectsizecomputation.R --- R/effectsizecomputation.R | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index 31d8fd70..80d38b02 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -1,12 +1,13 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { - saveRDS(options, file = "C:/JASP/options.RDS") - saveRDS(dataset, file = "C:/JASP/dataset.RDS") +# saveRDS(options, file = "C:/JASP/options.RDS") +# saveRDS(dataset, file = "C:/JASP/dataset.RDS") + - return(NULL) dataset <- .escReadDataset(dataset, options) + return(NULL) dataOutput <- .escComputeEffectSizes(dataset, options) .escComputeSummaryTable(jaspResults, dataset, options, dataOutput) From 8405e1a0c36587ced30a0f1e9bfff360dfcc4449 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 10 Jun 2024 13:31:05 +0200 Subject: [PATCH 007/127] Bruno's fixes --- inst/qml/EffectSizeComputation.qml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index 4761c86b..50eeac58 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -29,6 +29,7 @@ Form { id: effectSizeType name: "effectSizeType" + headerLabels: ["Design", "Measurement", "Effect size"] rowComponent: RowLayout { @@ -40,11 +41,15 @@ Form property string measurementLabel: measurement.label property string effectSizeLabel: effectSize.label + Text + { + text: qsTr("Step %1").arg((rowIndex + 1)) + } + DropDown { id: design name: "design" - label: qsTr("Design") values: [ { label: qsTr("Independent groups"), value: "independentGroups"}, { label: qsTr("Variable association"), value: "variableAssociation"}, @@ -59,7 +64,6 @@ Form { id: measurement name: "measurement" - label: qsTr("Measurement") visible: design.value != "reportedEffectSizes" values: (function() { if (design.value == "independentGroups") { @@ -104,7 +108,6 @@ Form { id: effectSize name: "effectSize" - label: qsTr("Effect size") visible: design.value != "reportedEffectSizes" values: (function() { if (design.value == "independentGroups" && measurement.value == "quantitative") { @@ -260,6 +263,7 @@ Form VariablesForm { removeInvisibles: true + preferredWidth: parent.width - 2 * jaspTheme.contentMargin // TODO: dynamically set proper height AvailableVariablesList From f18ec78c4110c3fd2c720a32b324755bec0185f1 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sat, 15 Jun 2024 21:12:34 +0200 Subject: [PATCH 008/127] basic model fit --- DESCRIPTION | 3 +- R/classicalmetaanalysis.R | 127 ++- R/classicalmetaanalysiscommon.R | 1496 ++++------------------------ inst/qml/ClassicalMetaAnalysis.qml | 355 ++----- 4 files changed, 345 insertions(+), 1636 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 7ccfc52e..47f83b72 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -28,7 +28,8 @@ Imports: RoBMA, metamisc (>= 0.2.5), ggmcmc, - pema + pema, + clubSandwich Remotes: jasp-stats/jaspBase, jasp-stats/jaspGraphs diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 5a8f5101..fda05981 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -25,73 +25,92 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { options[["module"]] <- "metaAnalysis" - ready <- options$effectSize != "" && options$effectSizeSe != "" && (options$interceptTerm || length(options$modelTerms) > 0) - if(ready) { - dataset <- .metaAnalysisReadData(dataset, options) - .metaAnalysisCheckErrors(dataset, options) + if (.maReady(options)) { + dataset <- .maReadData(dataset, options) + .maCheckErrors(dataset, options) } - container <- .metaAnalysisGetOutputContainer(jaspResults) + saveRDS(options, file = "C:/JASP/options.RDS") + saveRDS(dataset, file = "C:/JASP/dataset.RDS") - .ClassicalMetaAnalysisCommon(container, dataset, ready, options) + .ClassicalMetaAnalysisCommon(jaspResults, dataset, options) return() + options <- readRDS(file = "C:/JASP/options.RDS") + dataset <- readRDS(file = "C:/JASP/dataset.RDS") + return() } -.metaAnalysisGetOutputContainer <- function(jaspResults) { - if (!is.null(jaspResults[["modelContainer"]])) { - modelContainer <- jaspResults[["modelContainer"]] - } else { - modelContainer <- createJaspContainer() - modelContainer$dependOn(c("effectSize", "effectSizeSe", "method", "studyLabel", "covariates", "estimateTest", - "factors", "modelTerms", "interceptTerm", "coefficientCiLevel")) - jaspResults[["modelContainer"]] <- modelContainer - } - return(modelContainer) +.maDependencies <- c( + "effectSize", "effectSizeStandardError", "effectSizeModelTerms", "effectSizeModelIncludeIntercept", + "heterogeneityModelTerms", "heterogeneityModelIncludeIntercept", "predictors", "predictors.types", + "clustering", "studyLabel", + "method", "fixedEffectTest", + "clusteringUseClubSandwich", "clusteringSmallSampleCorrection" +) + +.maReady <- function(options) { + + inputReady <- options[["effectSize"]] != "" && options[["effectSizeStandardError"]] != "" + termsEffectSizeReady <- length(options[["effectSizeModelTerms"]]) > 0 || options[["effectSizeModelIncludeIntercept"]] + termsHeterogeneityReady <- length(options[["heterogeneityModelTerms"]]) > 0 || options[["heterogeneityModelIncludeIntercept"]] + + return(inputReady && termsEffectSizeReady && termsHeterogeneityReady) } +.maReadData <- function(dataset, options) { -.metaAnalysisReadData <- function(dataset, options) { if (!is.null(dataset)) return(dataset) - else { - effsizeName <- unlist(options$effectSize) - stderrName <- unlist(options$effectSizeSe) - covarNames <- if (length(options$covariates) > 0) unlist(options$covariates) - factNames <- if (length(options$factors) > 0) unlist(options$factors) - - numeric.variables <- Filter(function(s) s != "", c(effsizeName, covarNames, stderrName)) - factor.variables <- Filter(function(s) s != "", c(factNames, options$studyLabel)) - return(.readDataSetToEnd(columns.as.factor = factor.variables, - columns.as.numeric = numeric.variables, - exclude.na.listwise = numeric.variables)) - } -} -.metaAnalysisCheckErrors <- function(dataset, options){ - effsizeName <- unlist(options$effectSize) - stderrName <- unlist(options$effectSizeSe) - covarNames <- if (length(options$covariates) > 0) unlist(options$covariates) - numeric.variables <- Filter(function(s) s != "", c(effsizeName, covarNames, stderrName)) - .hasErrors(dataset = dataset, - type = c("infinity", "observations", "variance"), - all.target = numeric.variables, - observations.amount = "< 2", - exitAnalysisIfErrors = TRUE) - .hasErrors(dataset = dataset, - type = c("modelInteractions"), - modelInteractions.modelTerms = options$modelTerms, - exitAnalysisIfErrors = TRUE) - .hasErrors(dataset = dataset, - seCheck.target = options[["effectSizeSe"]], - custom = .metaAnalysisCheckSE, - exitAnalysisIfErrors = TRUE) + predictorsNominal <- options[["predictors"]][options[["predictors.types"]] == "nominal"] + predictorsScale <- options[["predictors"]][options[["predictors.types"]] == "scale"] + + # load data + dataset <- .readDataSetToEnd( + columns.as.factor = c( + if (length(predictorsNominal) > 0) predictorsNominal, + if (options[["clustering"]] != "") options[["clustering"]], + if (options[["studyLabel"]] != "") options[["studyLabel"]] + ), + columns.as.numeric = c( + options[["effectSize"]], + options[["effectSizeStandardError"]], + if (length(predictorsScale) > 0) predictorsScale + )) + + # omit NAs + dataset <- na.omit(dataset) + + return(dataset) } +.maCheckErrors <- function(dataset, options) { + + .hasErrors( + dataset = dataset, + type = c("infinity", "observations", "variance"), + all.target = c( + options[["effectSize"]], + options[["effectSizeStandardError"]], + options[["predictors"]][options[["predictors.types"]] == "scale"] + ), + observations.amount = "< 2", + exitAnalysisIfErrors = TRUE) -.metaAnalysisCheckSE <- list( - seCheck = function(dataset, target) { - nonPositive <- !all(na.omit(dataset[,target]) > 0) + .hasErrors( + dataset = dataset, + type = c("modelInteractions"), + modelInteractions.modelTerms = c(options[["effectSizeModelTerms"]], options[["heterogeneityModelTerms"]]), + exitAnalysisIfErrors = TRUE) + + .hasErrors( + dataset = dataset, + seCheck.target = options[["effectSizeStandardError"]], + custom = .maCheckStandardErrors, + exitAnalysisIfErrors = TRUE) +} +.maCheckStandardErrors <- list(seCheck = function(dataset, target) { + nonPositive <- !all(dataset[,target] > 0) if (nonPositive) { - return(gettext("All standard errors/sample sizes must be positive.")) + return(gettext("All standard errors must be positive.")) } - } -) \ No newline at end of file + }) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index fb553835..9f725b90 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -15,1407 +15,271 @@ # along with this program. If not, see . # -.ClassicalMetaAnalysisCommon <- function(container, dataset = NULL, ready, options, ...) { +.ClassicalMetaAnalysisCommon <- function(jaspResults, dataset, options, ...) { - # Output tables - .metaAnalysisFixRandTable( container, dataset, options, ready) - .metaAnalysisCoeffTable( container, dataset, options, ready) - .metaAnalysisFitMeasuresTable( container, dataset, options, ready) - .metaAnalysisResidualTable( container, dataset, options, ready) - .metaAnalysisCovMatTable( container, dataset, options, ready) - .metaAnalysisRankTestTable( container, dataset, options, ready) - .metaAnalysisRegTestTable( container, dataset, options, ready) - .metaAnalysisCasewiseTable( container, dataset, options, ready) - .metaAnalysisFailSafeTable( container, dataset, options, ready) + .maFitModel(jaspResults, dataset, options) + .maSummaryTable(jaspResults, dataset, options) - # Output plots - .metaAnalysisForestPlot( container, dataset, options, ready) - .metaAnalysisFunnelPlot( container, dataset, options, ready) - .metaAnalysisDiagnosticPlot( container, dataset, options, ready) - .metaAnalysisProfilePlot( container, dataset, options, ready) - .metaAnalysisTrimFillPlot( container, dataset, options, ready) return() } -## This file interfaces the metafor::rma function and associated diagnostic functions -### (but it restricts its multipurposeness to one central purpose: fitting a -### meta-regression to effect sizes and their standard errors and providing diagnostics.) -### options contains: -## essentials: -# effectsize: string (maps to 'yi'), name of the variable that contains the effect sizes (ES) -# stderr: string (maps to 'sei'), name of the variable containing the ES standard errors -# intercept: logical (maps to 'intercept'), intercept in the model? -# -## optional: -# covariates: string array (maps to 'mods'), names of continuous predictor variables -# factors: string array (maps to 'mods'), names of nominal/ordinal predictor variables -## plotting: -# studylabels: string (maps to 'slab'), name of variable that contains label for a forrest plot -# forrestPlot: logical, make this plot? -# funnelPlot: logical, -## advanced analysis: -# method: string, one of [`Fixed Effects`, `Maximum Likelihood`, `Restricted ML`, `DerSimonian-Laird`, `Hedges`, `Hunter-Schmidt`, `Sidik-Jonkman`, `Empirical Bayes`, `Paule-Mandel`] (see ?rma) -# - -# test: string, one of ["z", "knha"] -# btt: numeric, vector of indices specifying which coefficients to include in the omnibus test of moderators -# - -# ...: numeric, -3 ??? value ??? 3, distribution used is dt((tStatistic - Tlocation) / Tscale, TDf) - -.metaAnalysisComputeModel <- function(container, dataset, options, ready) { - if (!is.null(container[["Model"]])) - return(container[["Model"]]$object) - rma.fit <- structure(list('b' = numeric(), - 'se' = numeric(), - 'ci.lb' = numeric(), - 'ci.ub' = numeric(), - 'zval' = numeric(), - 'pval' = numeric()), - class = c("dummy", "rma")) - if (ready) { - - argList <- list( - yi = dataset[,options$effectSize], - sei = dataset[,options$effectSizeSe], - slab = if(options$studyLabel != "") dataset[,options$studyLabel], - method = .metaAnalysisGetMethod(options), - mods = .metaAnalysisFormula(options), - data = dataset, - test = options$estimateTest, - # add tiny amount because 1 is treated by rma() as 100% whereas values > 1 as percentages - level = options$coefficientCiLevel * 100, - control = list(maxiter = 500) - ) - argList <- argList[!sapply(argList, is.null)] - - - # analysis - rma.fit <- tryCatch( - do.call(metafor::rma, argList), - error = function(e) .quitAnalysis(gettextf("The metafor package crashed with the following error: %s", e$message)) - ) - - } - - # Save results to state - container[["Model"]] <- createJaspState(rma.fit) - - return(rma.fit) -} - -#Tables -.metaAnalysisFixRandTable <- function(container, dataset, options, ready) { - if (!is.null(container[["fixRandTable"]])) return() - - mainTable <- createJaspTable(gettext("Fixed and Random Effects")) - mainTable$position <- 1 - mainTable$addCitation("Hedges, L. V., & Olkin, I. (1985). Statistical methods for meta-analysis. San Diego, CA: Academic Press.") - - mainTable$addColumnInfo(name = "name", type = "string", title = "") - mainTable$addColumnInfo(name = "qstat", type = "number", title = gettext("Q")) - mainTable$addColumnInfo(name = "df", type = "integer", title = gettext("df")) - mainTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) - - mainTable$addFootnote(gettext("p-values are approximate.")) - - container[["fixRandTable"]] <- mainTable - - res <- try(.metaAnalysisFixRandFill(container, dataset, options, ready)) - - .metaAnalysisSetError(res, mainTable) -} - -.metaAnalysisCoeffTable <- function(container, dataset, options, ready) { - if (!options$coefficientEstimate || !is.null(container[["coeffTable"]])) - return() - - coeffTable <- createJaspTable(gettext("Coefficients")) - coeffTable$dependOn(c("coefficientEstimate", "coefficientCi")) - coeffTable$position <- 2 - coeffTable$showSpecifiedColumnsOnly <- TRUE - coeffTable$addCitation("Viechtbauer, W. (2010). Conducting meta-analyses in R with the metafor package. Journal of Statistical Software, 36(3), 1-48. URL: http://www.jstatsoft.org/v36/i03/") +.maGetFormula <- function(modelTerms, includeIntercept) { - coeffTable$addColumnInfo(name = "name", type = "string", title = "") - coeffTable$addColumnInfo(name = "est", type = "number", title = gettext("Estimate")) - coeffTable$addColumnInfo(name = "se", type = "number", title = gettext("Standard Error")) - if (options[["estimateTest"]] == "z") - coeffTable$addColumnInfo(name = "zval", type = "number", title = gettext("z")) - else if (options[["estimateTest"]] == "knha") { - coeffTable$addColumnInfo(name = "tval", type = "number", title = gettext("t")) - coeffTable$addColumnInfo(name = "df", type = "number", title = gettext("df")) - } - coeffTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) - .metaAnalysisConfidenceInterval(options, coeffTable) - - coeffTable$addFootnote(switch(options$estimateTest, z = gettext("Wald test."), knha = gettext("Knapp and Hartung test adjustment."))) - - container[["coeffTable"]] <- coeffTable - if(!ready) - return() - - res <- try(.metaAnalysisCoeffFill(container, dataset, options)) - - .metaAnalysisSetError(res, coeffTable) -} - -.metaAnalysisFitMeasuresTable <- function(container, dataset, options, ready) { - if (!options$fitMeasure || !is.null(container[["fitMeasuresTable"]])) - return() - - fitMeasuresTable <- createJaspTable(gettext("Fit measures")) - fitMeasuresTable$dependOn("fitMeasure") - fitMeasuresTable$position <- 3 - - method <- .metaAnalysisGetTranslatedMethod(options) - - fitMeasuresTable$addColumnInfo(name = "name", type = "string", title = "") - fitMeasuresTable$addColumnInfo(name = "method", type = "number", title = method) + predictors <- unlist(lapply(modelTerms, function(x) { + if (length(x[["components"]]) > 1) + return(paste(x[["components"]], collapse = ":")) + else + return(x[["components"]]) + })) - container[["fitMeasuresTable"]] <- fitMeasuresTable + if (length(predictors) == 0) + return(NULL) - res <- try(.metaAnalysisFitMeasuresFill(container, dataset, options, ready)) + if (includeIntercept) + formula <- paste("~", paste(predictors, collapse = "+")) + else + formula <- paste("~", paste(predictors, collapse = "+"), "-1") - .metaAnalysisSetError(res, fitMeasuresTable) + return(as.formula(formula, env = parent.frame(1))) } +.maFitModel <- function(jaspResults, dataset, options) { -.metaAnalysisResidualTable <- function(container, dataset, options, ready) { - method <- .metaAnalysisGetMethod(options) - - if (!options$residualParameter || method == "FE" || !is.null(container[["residualTable"]])) + if (!.maReady(options) || !is.null(jaspResults[["fit"]])) return() - residualTable <- createJaspTable(gettext("Residual Heterogeneity Estimates")) - residualTable$dependOn(c("residualParameter", "coefficientCi")) - residualTable$position <- 4 - residualTable$showSpecifiedColumnsOnly <- TRUE + # create the output container + fitContainer <- createJaspState() + fitContainer$dependOn(.maDependencies) + jaspResults[["fit"]] <- fitContainer - residualTable$addColumnInfo(name = "name", type = "string", title = "") - residualTable$addColumnInfo(name = "est", type = "number", title = gettext("Estimate")) - .metaAnalysisConfidenceInterval(options, residualTable) + # specify the effect size and outcome + rmaInput <- list( + yi = as.name(options[["effectSize"]]), + sei = as.name(options[["effectSizeStandardError"]]), + data = dataset + ) - container[["residualTable"]] <- residualTable + # add labels if specified + if (options[["studyLabel"]] != "") + rmaInput$slab <- as.name(options[["studyLabel"]]) - res <- try(.metaAnalysisResidualFill(container, dataset, options, ready)) + # add formulas if specified + rmaInput$mods <- .maGetFormula(options[["effectSizeModelTerms"]], options[["effectSizeModelIncludeIntercept"]]) + rmaInput$scale <- .maGetFormula(options[["heterogeneityModelTerms"]], options[["heterogeneityModelIncludeIntercept"]]) - .metaAnalysisSetError(res, residualTable) -} + # specify method and fixed effect terms test + rmaInput$method <- .maGetMethodOptions(options) + rmaInput$test <- options[["fixedEffectTest"]] -.metaAnalysisCovMatTable <- function(container, dataset, options, ready) { - if (!options$covarianceMatrix || !is.null(container[["covMatTable"]])) - return() - - covMatTable <- createJaspTable(gettext("Parameter Covariances")) - covMatTable$dependOn("covarianceMatrix") - covMatTable$position <- 5 - covMatTable$showSpecifiedColumnsOnly <- TRUE + # fit the model + fit <- try(do.call(metafor::rma, rmaInput)) - covMatTable$addColumnInfo(name = "name", type = "string", title = "") - if(!ready) { - coeffVcov <- NULL - covMatTable$addColumnInfo(name = "intercept", type = "number", title = "...") + # add clustering if specified + if (options[["clustering"]] != "") { + fitClustered <- try(metafor::robust( + fit, + cluster = dataset[[options[["clustering"]]]], + clubSandwich = options[["clusteringUseClubSandwich"]], + adjust = options[["clusteringSmallSampleCorrection"]] + )) } else { - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready) - coeffVcov <- try(vcov(rma.fit)) - colnames(coeffVcov) <- .metaAnalysisMakePrettyCoeffNames(colnames(coeffVcov), dataset) - for (i in seq_along(colnames(coeffVcov))) - covMatTable$addColumnInfo(name = colnames(coeffVcov)[i], type = "number") + fitClustered <- NULL } - container[["covMatTable"]] <- covMatTable - - res <- try(.metaAnalysisCovMatFill(container, dataset, options, ready, coeffVcov)) + # return the results + jaspResults[["fit"]]$object <- list( + fit = fit, + fitClustered = fitClustered + ) - .metaAnalysisSetError(res, covMatTable) + return() } +.maSummaryTable <- function(jaspResults, dataset, options) { -.metaAnalysisRankTestTable <- function(container, dataset, options, ready) { - if (!options$funnelPlotRankTestAsymmetry || !is.null(container[["rankTestTable"]])) + if (!is.null(jaspResults[["modelSummary"]])) return() - rankTestTable <- createJaspTable(gettext("Rank correlation test for Funnel plot asymmetry")) - rankTestTable$dependOn("funnelPlotRankTestAsymmetry") - rankTestTable$position <- 6 - rankTestTable$showSpecifiedColumnsOnly <- TRUE + fit <- .maExtractFit(jaspResults, options) + modelSummary <- createJaspContainer(gettext("Model Summary")) + modelSummary$dependOn(.maDependencies) + jaspResults[["modelSummary"]] <- modelSummary - rankTestTable$addColumnInfo(name = "name", type = "string", title = "") - rankTestTable$addColumnInfo(name = "kendall", type = "number", title = gettextf("Kendall's %s", "\u3C4")) - rankTestTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) - container[["rankTestTable"]] <- rankTestTable + ### residual heterogeneity table + residualHeterogeneityTable <- createJaspTable(gettext("Residual Heterogeneity Test")) + residualHeterogeneityTable$position <- 1 - res <- try(.metaAnalysisRankTestFill(container, dataset, options, ready)) + residualHeterogeneityTable$addColumnInfo(name = "qstat", type = "number", title = gettext("QE")) + residualHeterogeneityTable$addColumnInfo(name = "df", type = "integer", title = gettext("df")) + residualHeterogeneityTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) - .metaAnalysisSetError(res, rankTestTable) -} - -.metaAnalysisRegTestTable <- function(container, dataset, options, ready) { - if (!options$funnelPlotRegressionTestAsymmetry || !is.null(container[["regTestTable"]])) - return() - regTestTable <- createJaspTable(gettext("Regression test for Funnel plot asymmetry (\"Egger's test\")")) - regTestTable$dependOn("funnelPlotRegressionTestAsymmetry") - regTestTable$position <- 6 - regTestTable$showSpecifiedColumnsOnly <- TRUE - regTestTable$addCitation("Viechtbauer, W. (2010). Conducting meta-analyses in R with the metafor package. Journal of Statistical Software, 36(3), 1-48.") + modelSummary[["residualHeterogeneityTable"]] <- residualHeterogeneityTable - regTestTable$addColumnInfo(name = "name", type = "string", title = "") - if (options$estimateTest == "knha") - title <- gettext("t") - else - title <- gettext("z") - regTestTable$addColumnInfo(name = "test", type = "number", title = title) - regTestTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) - - container[["regTestTable"]] <- regTestTable - - if(!ready) - return() - res <- try(.metaAnalysisRegTestFill(container, dataset, options)) + ### moderators table + if (.maIsMetaregression(options)) { - .metaAnalysisSetError(res, regTestTable) -} + moderatorsTable <- createJaspTable(gettext("Omnibus Moderation Test")) + moderatorsTable$position <- 2 -.metaAnalysisCasewiseTable <- function(container, dataset, options, ready) { - if (!options$casewiseDiagnostics || !is.null(container[["casewiseTable"]])) - return() + # add column name for the omnibus test if both effect size and scale moderators are specified + if (.maIsMetaregressionHeterogeneity(options)) + moderatorsTable$addColumnInfo(name = "parameter", type = "string", title = gettext("Parameter")) - casewiseTable <- createJaspTable(gettext("Influence Measures")) - casewiseTable$dependOn("casewiseDiagnostics") - casewiseTable$position <- 6 - casewiseTable$showSpecifiedColumnsOnly <- TRUE + # dispatch columns based on the test type + moderatorsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("QM")) + moderatorsTable$addColumnInfo(name = "df1", type = "integer", title = if(.maIsMetaregressionFtest(options)) gettext("df1") else gettext("df")) + if (.maIsMetaregressionFtest(options)) { + moderatorsTable$addColumnInfo(name = "df2", type = if(options$clustering == "") "integer" else "number", title = gettext("df2")) + } + moderatorsTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) - casewiseTable$addColumnInfo(name = "name", type = "string", title = "") - casewiseTable$addColumnInfo(name = "sdRes", type = "number", title = gettext("Std. Residual")) - casewiseTable$addColumnInfo(name = "dfFits", type = "number", title = gettext("DFFITS")) - casewiseTable$addColumnInfo(name = "cook", type = "number", title = gettext("Cook's Distance")) - casewiseTable$addColumnInfo(name = "cov", type = "number", title = gettext("Cov. Ratio")) - casewiseTable$addColumnInfo(name = "tau2", type = "number", title = gettextf("%1$s%2$s(-i)", "\u3C4", "\u00B2")) - casewiseTable$addColumnInfo(name = "QE", type = "number", title = gettext("QE(-i)")) - casewiseTable$addColumnInfo(name = "hat", type = "number", title = gettext("Hat")) - casewiseTable$addColumnInfo(name = "weight", type = "number", title = gettext("Weight")) + modelSummary[["moderatorsTable"]] <- moderatorsTable + } - container[["casewiseTable"]] <- casewiseTable - if(!ready) + ### stop on error + if (is.null(fit)) return() - res <- try(.metaAnalysisCasewiseFill(container, dataset, options)) - - .metaAnalysisSetError(res, casewiseTable) -} - -.metaAnalysisFailSafeTable <- function(container, dataset, options, ready) { - if (!options$failSafeN || !is.null(container[["failSafeTable"]]) || !ready) + if (!is.null(.maCheckIsPossibleOptions(options))) { + residualHeterogeneityTable$setError(.maCheckIsPossibleOptions(options)) return() - - failSafeTable <- createJaspTable(gettext("File Drawer Analysis")) - failSafeTable$dependOn("failSafeN") - failSafeTable$position <- 6 - failSafeTable$showSpecifiedColumnsOnly <- TRUE - - failSafeTable$addColumnInfo(name = "name", type = "string", title = "") - failSafeTable$addColumnInfo(name = "fsnum", type = "number", title = gettext("Fail-safe N")) - failSafeTable$addColumnInfo(name = "alpha", type = "number", title = gettext("Target Significance")) - failSafeTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("Observed Significance")) - - container[["failSafeTable"]] <- failSafeTable - - res <- try(.metaAnalysisFailSafeFill(container, dataset, options)) - - .metaAnalysisSetError(res, failSafeTable) -} - -#Table filling -.metaAnalysisFixRandFill <- function(container, dataset, options, ready) { - # Compute/get model - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready) - - row <- list(name = gettext("Omnibus test of Model Coefficients"), - qstat = ".", df = ".", pval = ".") - if(ready) { - row$qstat <- rma.fit$QM - row$df <- rma.fit$m - row$pval <- rma.fit$QMp - } - container[["fixRandTable"]]$addRows(row) - row <- list(name = gettext("Test of Residual Heterogeneity"), - qstat = ".", df = ".", pval = ".") - if(ready) { - row$qstat <- rma.fit$QE - row$df <- rma.fit$k - rma.fit$p - row$pval <- rma.fit$QEp - } - container[["fixRandTable"]]$addRows(row) - - if (ready) - container[["fixRandTable"]]$addFootnote(gettextf("The model was estimated using %1$s method.", options[["method"]])) -} - -.metaAnalysisCoeffFill <- function(container, dataset, options) { - # Compute/get model - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready = TRUE) - coeff <- coef(summary(rma.fit)) - - if (options[["estimateTest"]] == "z") { - for (i in 1:nrow(coeff)) { - container[["coeffTable"]]$addRows(list( - name = .metaAnalysisMakePrettyCoeffNames(rownames(coeff)[i], dataset), - est = coeff[i,"estimate"], - se = coeff[i,"se"], - zval = coeff[i,"zval"], - pval = coeff[i,"pval"], - lower = coeff[i,"ci.lb"], - upper = coeff[i,"ci.ub"] - )) - } - } else if (options[["estimateTest"]] == "knha") { - for (i in 1:nrow(coeff)) { - container[["coeffTable"]]$addRows(list( - name = .metaAnalysisMakePrettyCoeffNames(rownames(coeff)[i], dataset), - est = coeff[i,"estimate"], - se = coeff[i,"se"], - tval = coeff[i,"tval"], - df = coeff[i,"df"], - pval = coeff[i,"pval"], - lower = coeff[i,"ci.lb"], - upper = coeff[i,"ci.ub"] - )) - } } -} -.metaAnalysisFitMeasuresFill <- function(container, dataset, options, ready) { - stats <- list( - logLik = ".", - deviance = ".", - AIC = ".", - BIC = ".", - AICc = "." - ) - if(ready) { - # Compute/get model - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready) - fitStats <- try(metafor:::fitstats(rma.fit)) - stats$logLik <- fitStats[[1]] - stats$deviance <- fitStats[[2]] - stats$AIC <- fitStats[[3]] - stats$BIC <- fitStats[[4]] - stats$AICc <- fitStats[[5]] + if (jaspBase::isTryError(fit)) { + residualHeterogeneityTable$setError(fit) + return() } - # Fill table - container[["fitMeasuresTable"]]$addRows(list(name = gettext("Log-Likelihood"), method = stats$logLik)) - container[["fitMeasuresTable"]]$addRows(list(name = gettext("Deviance"), method = stats$deviance)) - container[["fitMeasuresTable"]]$addRows(list(name = gettext("AIC"), method = stats$AIC)) - container[["fitMeasuresTable"]]$addRows(list(name = gettext("BIC"), method = stats$BIC)) - container[["fitMeasuresTable"]]$addRows(list(name = gettext("AICc"), method = stats$AICc)) -} -.metaAnalysisResidualFill <- function(container, dataset, options, ready) { - est <- ci.lower <- ci.upper <- list( - tau2 = ".", - tau = ".", - I2 = ".", - H2 = "." - ) - - if (ready) { - # Compute/get model - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready) - confInt <- options$coefficientCiLevel - residPars <- try(confint(rma.fit, digits = 12, level = confInt)$random) + ### fill tables + residualHeterogeneityTable$addRows(list( + qstat = fit[["QE"]], + df = fit[["k"]] - fit[["p"]], + pval = fit[["QEp"]] + )) - est$tau2 <- residPars[1,1] - est$tau <- residPars[2,1] - est$I2 <- residPars[3,1] - est$H2 <- residPars[4,1] + if (.maIsMetaregression(options)) { - ci.lower$tau2 <- residPars[1,2] - ci.lower$tau <- residPars[2,2] - ci.lower$I2 <- residPars[3,2] - ci.lower$H2 <- residPars[4,2] + row1 <- list( + stat = fit[["QM"]], + df1 = fit[["QMdf"]][1], + df2 = if(.maIsMetaregressionFtest(options)) fit[["QMdf"]][2], + pval = fit[["QMp"]] + ) - ci.upper$tau2 <- residPars[1,3] - ci.upper$tau <- residPars[2,3] - ci.upper$I2 <- residPars[3,3] - ci.upper$H2 <- residPars[4,3] - } + if (.maIsMetaregressionHeterogeneity(options)) { - ##TODO: need name column entries in - # Fill table - container[["residualTable"]]$addRows(list( - list(name = "\u3C4\u00B2", est = est$tau2, - lower = ci.lower$tau2, upper = ci.upper$tau2), - list(name = "\u3C4", est = est$tau, - lower = ci.lower$tau, upper = ci.upper$tau), - list(name = gettextf("I%s (%%)", "\u00B2"), est = est$I2, - lower = ci.lower$I2, upper = ci.upper$I2), - list(name = gettextf("H%s", "\u00B2"), est = est$H2, - lower = ci.lower$H2, upper = ci.upper$H2) - )) -} + row2 <- list( + stat = fit[["QS"]], + df1 = fit[["QSdf"]][1], + df2 = if(.maIsMetaregressionFtest(options)) fit[["QSdf"]][2], + pval = fit[["QSp"]] + ) -.metaAnalysisCovMatFill <- function(container, dataset, options, ready, coeffVcov) { - if(ready) { - cov <- colnames(coeffVcov) - for(i in 1:length(cov)) { - row <- list(name = cov[[i]]) - for(j in 1:length(cov)) - row[[paste(cov[[j]])]] <- coeffVcov[i,j] - container[["covMatTable"]]$addRows(row) + row1$parameter <- gettext("Effect size") + row2$parameter <- gettext("Hetereogeneity") } - } else - container[["covMatTable"]]$addRows(list(name = "...", intercept = ".")) -} -.metaAnalysisRankTestFill <- function(container, dataset, options, ready) { - results <- list(name = gettext("Rank test"), kendall = ".", pval = ".") - if(ready) { - # Compute/get model - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready) - ranktst <- unlist(metafor::ranktest(rma.fit)) - results$kendall <- ranktst[[1]] - results$pval <- ranktst[[2]] - } - container[["rankTestTable"]]$addRows(results) -} - -.metaAnalysisRegTestFill <- function(container, dataset, options) { - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready = TRUE) - egger <- metafor::regtest(rma.fit) - container[["regTestTable"]]$setData(list(name = egger$predictor, test = egger$zval, pval = egger$pval)) -} - -.metaAnalysisCasewiseFill <- function(container, dataset, options) { - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready = TRUE) - influ <- metafor::influence.rma.uni(rma.fit) - influenceVals <- influ$inf - isInfluential <- influ$is.infl + moderatorsTable$addRows(row1) - if (sum(isInfluential) > 0) - container[["casewiseTable"]]$addFootnote(gettextf("Cases marked with %s are influential.", "\u002A")) + if (.maIsMetaregressionHeterogeneity(options)) + moderatorsTable$addRows(row2) - for (i in 1:length(influenceVals$rstudent)) { - name <- influenceVals$slab[i] - if (!is.na(isInfluential[i]) && isInfluential[i]) - name <- paste0(name, "\u002A") - - container[["casewiseTable"]]$addRows(list( - name = name, - sdRes = influenceVals$rstudent[i], - dfFits = influenceVals$dffits[i], - cook = influenceVals$cook.d[i], - cov = influenceVals$cov.r[i], - tau2 = influenceVals$tau2.del[i], - QE = influenceVals$QE.del[i], - hat = influenceVals$hat[i], - weight = influenceVals$weight[i] - )) + if (options[["clustering"]] != "") + moderatorsTable$addFootnote(.maClusteringMessage(fit), symbol = gettext("Clustering:")) } } - -.metaAnalysisFailSafeFill <- function(container, dataset, options) { - # Compute/get model - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready) - fsn.fit <- metafor::fsn(x = get(options$effectSize), - sei = get(options$effectSizeSe), - data = dataset) - container[["failSafeTable"]]$addRows(list("name" = fsn.fit$type, - "fsnum" = fsn.fit$fsnum, - "alpha" = fsn.fit$alpha, - "pval" = fsn.fit$pval)) -} - -# Plots -.metaAnalysisPlotsContainer <- function(container, options, ready) { - if(!ready) return() - if(!options$forestPlot && !options$funnelPlot && !options$diagnosticPlot && - !options$profilePlot && !options$trimFillAnalysis) +.maCoeffTable <- function(container, dataset, options, ready) { + if (!options$coefficientEstimate || !is.null(container[["coeffTable"]])) return() - if (is.null(container[["plots"]])) { - plotContainer <- createJaspContainer(gettext("Plot")) - container[["plots"]] <- plotContainer - } -} -.metaAnalysisForestPlot <- function(container, dataset, options, ready) { - if(!options$forestPlot) - return() - .metaAnalysisPlotsContainer(container, options, ready) - plotContainer <- container[["plots"]] - # Compute/get model - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready) - imgHeight <- 400 - imgWidth <- 520 - if (ready){ - imgHeight <- nobs(rma.fit) * 30 + 100 - if(options[["studyLabel"]] != "") - imgWidth <- max(nchar(as.character(dataset[,options[["studyLabel"]]]))) * 5 + 500 - } + coeffTable <- createJaspTable(gettext("Coefficients")) + coeffTable$dependOn(c("coefficientEstimate", "coefficientCi")) + coeffTable$position <- 2 + coeffTable$showSpecifiedColumnsOnly <- TRUE + coeffTable$addCitation("Viechtbauer, W. (2010). Conducting meta-analyses in R with the metafor package. Journal of Statistical Software, 36(3), 1-48. URL: http://www.jstatsoft.org/v36/i03/") - forestPlot <- createJaspPlot(title = gettext("Forest Plot"), width = imgWidth, height = imgHeight) - forestPlot$position <- 1 - forestPlot$dependOn(c("forestPlot")) - plotContainer[["forest"]] <- forestPlot - if (ready){ - p <- try(.metaAnalysisForestPlotFill(rma.fit, showLabels = if(!is.null(options[["forestPlotLabel"]])) options[["forestPlotLabel"]] else TRUE)) - if(isTryError(p)) - forestPlot$setError(.extractErrorMessage(p)) - else - forestPlot$plotObject <- p + coeffTable$addColumnInfo(name = "name", type = "string", title = "") + coeffTable$addColumnInfo(name = "est", type = "number", title = gettext("Estimate")) + coeffTable$addColumnInfo(name = "se", type = "number", title = gettext("Standard Error")) + if (options[["estimateTest"]] == "z") + coeffTable$addColumnInfo(name = "zval", type = "number", title = gettext("z")) + else if (options[["estimateTest"]] == "knha") { + coeffTable$addColumnInfo(name = "tval", type = "number", title = gettext("t")) + coeffTable$addColumnInfo(name = "df", type = "number", title = gettext("df")) } - return() -} + coeffTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) + .metaAnalysisConfidenceInterval(options, coeffTable) -.metaAnalysisFunnelPlot <- function(container, dataset, options, ready) { - if(!options$funnelPlot) + coeffTable$addFootnote(switch(options$estimateTest, z = gettext("Wald test."), knha = gettext("Knapp and Hartung test adjustment."))) + + container[["coeffTable"]] <- coeffTable + if(!ready) return() - .metaAnalysisPlotsContainer(container, options, ready) - plotContainer <- container[["plots"]] - # Compute/get model - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready) - funnelPlot <- createJaspPlot(title = gettext("Funnel Plot"), width = 520, height = 520) - funnelPlot$position <- 2 - funnelPlot$dependOn(c("funnelPlot")) - plotContainer[["funnel"]] <- funnelPlot + res <- try(.metaAnalysisCoeffFill(container, dataset, options)) - if(ready){ - p <- try(.metaAnalysisFunnelPlotFill(rma.fit)) - if(isTryError(p)) - funnelPlot$setError(.extractErrorMessage(p)) - else - funnelPlot$plotObject <- p - } - return() + .metaAnalysisSetError(res, coeffTable) } -.metaAnalysisProfilePlot <- function(container, dataset, options, ready) { - if(!options$profilePlot) - return() - .metaAnalysisPlotsContainer(container, options, ready) - plotContainer <- container[["plots"]] - # Compute/get model - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready) - profilePlot <- createJaspPlot(title = gettextf("Log-Likelihood for %1$s%2$s", "\u3C4", "\u00B2"), width = 520, height = 520) - profilePlot$position <- 4 - profilePlot$dependOn(c("profilePlot")) - plotContainer[["profile"]] <- profilePlot - if(ready){ - p <- try(.metaAnalysisProfilePlotFill(rma.fit)) - if(isTryError(p)) - profilePlot$setError(.extractErrorMessage(p)) - else - profilePlot$plotObject <- p - } - return() -} +.maExtractFit <- function(jaspResults, options) { -.metaAnalysisTrimFillPlot <- function(container, dataset, options, ready) { - if(!options$trimFillAnalysis) + if (is.null(jaspResults[["fit"]]$object)) return() - .metaAnalysisPlotsContainer(container, options, ready) - plotContainer <- container[["plots"]] - # Compute/get model - trimFillPlot <- createJaspPlot(title = gettext("Trim-Fill Analysis"), width = 820, height = 820) - trimFillPlot$position <- 5 - trimFillPlot$dependOn(c("trimFillAnalysis")) - plotContainer[["trimFill"]] <- trimFillPlot - if (ready) { - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready) - trimfill.fit <- metafor::trimfill(update(rma.fit, mods = ~1)) - - p <- try(.metaAnalysisTrimFillPlotFill(trimfill.fit)) - if (isTryError(p)) - trimFillPlot$setError(.extractErrorMessage(p)) - else - trimFillPlot$plotObject <- p + # extract clustered model if specified + if (options[["clustering"]] != "") { + return(jaspResults[["fit"]]$object[["fitClustered"]]) + } else { + return(jaspResults[["fit"]]$object[["fit"]]) } - return() } - -.metaAnalysisDiagnosticPlot <- function(container, dataset, options, ready) { - if(!options$diagnosticPlot) - return() - .metaAnalysisPlotsContainer(container, options, ready) - plotContainer <- container[["plots"]] - # Compute/get model - rma.fit <- .metaAnalysisComputeModel(container, dataset, options, ready) - diagnosticPlot <- createJaspPlot(title = gettext("Diagnostic Plots"), width = 820, height = 820) - diagnosticPlot$position <- 3 - diagnosticPlot$dependOn(c("diagnosticPlot", "diagnosticQqPlot")) - plotContainer[["diagnosticPlot"]] <- diagnosticPlot - if(ready){ - p <- try(.metaAnalysisDiagnosticPlotFill(plotContainer, rma.fit, - qqplot = options$diagnosticQqPlot, - radial = rma.fit$int.only)) - if(isTryError(p)) - diagnosticPlot$setError(.extractErrorMessage(p)) - else - diagnosticPlot$plotObject <- p - } - return() +.maIsMetaregression <- function(options) { + return(length(options[["effectSizeModelTerms"]]) > 0) } - -#Plot filling -.metaAnalysisTrimFillPlotFill <- function(trimfill.fit){ - plotMat <- matrix(list(), 2, 2) - plotMat[[1,1]] <- .metaAnalysisForestPlotFill(trimfill.fit) - plotMat[[1,2]] <- .metaAnalysisFunnelPlotFill(trimfill.fit) - plotMat[[2,1]] <- .metaAnalysisRadialPlotFill(trimfill.fit) - plotMat[[2,2]] <- .metaAnalysisQQPlotFill(trimfill.fit) - p <- jaspGraphs::ggMatrixPlot(plotList = plotMat, scaleXYlabels = NULL) - return(p) +.maIsMetaregressionHeterogeneity <- function(options) { + return(length(options[["heterogeneityModelTerms"]]) > 0) } - -.metaAnalysisDiagnosticPlotFill <- function(plotContainer, rma.fit, qqplot, radial = TRUE) { - plotMat <- matrix(list(), 2, 2) - - if(!is.null(plotContainer[["forest"]])) - plotMat[[1,1]] <- plotContainer[["forest"]][["plotObject"]] - else - plotMat[[1,1]] <- .metaAnalysisForestPlotFill(rma.fit) - - if(!is.null(plotContainer[["funnel"]])) - plotMat[[1,2]] <- plotContainer[["funnel"]][["plotObject"]] - else - plotMat[[1,2]] <- .metaAnalysisFunnelPlotFill(rma.fit) - - if(radial) - plotMat[[2,1]] <- .metaAnalysisRadialPlotFill(rma.fit) - else - plotMat[[2,1]] <- .metaAnalysisFittedVsStandardPlotFill(rma.fit) - - if(qqplot) - plotMat[[2,2]] <- .metaAnalysisQQPlotFill(rma.fit) - else - plotMat[[2,2]] <- .metaAnalysisStandResidPlotFill(rma.fit) - - p <- jaspGraphs::ggMatrixPlot(plotList = plotMat, scaleXYlabels = NULL) - return(p) +.maIsMetaregressionFtest <- function(options) { + return(options[["fixedEffectTest"]] %in% c("knha", "r")) } +.maCheckIsPossibleOptions <- function(options) { -.metaAnalysisForestPlotFill <- function(rma.fit, showLabels = TRUE){ - ci.lb <- rma.fit$yi - qnorm(rma.fit$level/2, lower.tail = FALSE) * sqrt(rma.fit$vi) - ci.ub <- rma.fit$yi + qnorm(rma.fit$level/2, lower.tail = FALSE) * sqrt(rma.fit$vi) - xlims <- c(-1, rma.fit$k+1) - ylims <- c(min(ci.lb), max(ci.ub)) - ci.int <- sprintf("%.2f [%.2f, %.2f]", rma.fit$yi, ci.lb, ci.ub) - b.pred <- predict(rma.fit) - b.ci.lb <- round(b.pred$ci.lb, 2) - b.ci.ub <- round(b.pred$ci.ub, 2) - b.ci.int <- sprintf("%.2f [%.2f, %.2f]", b.pred$pred, b.ci.lb, b.ci.ub) - - cols <- c("black", "grey") - - k <- rma.fit$k - wi <- weights(rma.fit) - psize <- wi/sum(wi, na.rm = TRUE) - rng <- max(psize, na.rm = TRUE) - min(psize, na.rm = TRUE) - - if (rng <= .Machine$double.eps^0.5) - psize <- rep(1, k) - else - psize <- 0.5 * (psize - min(psize, na.rm = TRUE))/rng - if (all(is.na(psize))) - psize <- rep(1, k) - if(rma.fit$slab.null) - slabs <- gettextf("Study %s", rma.fit$ids[rma.fit$not.na]) - else - slabs <- rma.fit$slab[rma.fit$not.na] - - studyNos <- rma.fit$ids[rma.fit$not.na] - studies.not.na <- sum(rma.fit$not.na) - rma.data <- data.frame(StudyNo = studies.not.na + 1 - 1:studies.not.na, - labs = slabs, - ES = rma.fit$yi, - ci.int = ci.int, - ci.lb = ci.lb, - ci.ub = ci.ub, - shape = rep(15, sum(rma.fit$not.na)), - size = psize) - - #grey polygons when not intercept only - if(!rma.fit$int.only){ - pred <- fitted(rma.fit) - height <- (xlims[2] - xlims[1])/50 - alim <- range(k + 1 - rma.fit$ids[rma.fit$not.na]) - add.data <- data.frame() - for(study in 1:studies.not.na) { - if (is.na(pred[study])) - next - rownum <- studies.not.na + 1 - study - row1 <- data.frame(ES = c(pred[study], b.ci.ub[study], pred[study]), - StudyNo = c(rownum - height, rownum, rownum + height), - group = as.character(rep(study,3))) - row2 <- data.frame(ES = c(pred[study], b.ci.lb[study], pred[study]), - StudyNo = c(rownum - height, rownum, rownum + height), - group = as.character(rep(study+0.5,3))) - add.data <- rbind(add.data, row1, row2) - } - } - - if(rma.fit$int.only){ - mName <- ifelse(rma.fit$method == "FE", gettext("FE Model"), gettext("RE Model")) - mData <- data.frame(StudyNo = -1, - labs = mName, - ES = b.pred$pred, - ci.int = b.ci.int, - ci.lb = b.ci.lb, - ci.ub = b.ci.ub, - shape = 18, - size = 1) - dat <- rbind(rma.data, mData) - } - else - dat <- rma.data - - # a sneaky way of coloring user-added estimates for Cochrane - dat$color <- ifelse(grepl("_add", dat$labs), "blue", "black") - dat$labs <- gsub("_add", "", dat$labs) - - if (!showLabels) { - dat$labs <- "" - dat$ci.int <- "" - } - - p <- ggplot2::ggplot(data = dat, ggplot2::aes(x = StudyNo, y = ES)) - if(!rma.fit$int.only) - p <- p + ggplot2::geom_polygon(data = add.data, fill = "grey75", ggplot2::aes(group = group)) - - p <- p + ggplot2::geom_point(data = dat, ggplot2::aes(size = size, shape = factor(shape)), colour = dat$color) + - ggplot2::geom_errorbar(ggplot2::aes(x = StudyNo, ymax = ci.ub, ymin = ci.lb), - width = 0.5, colour = dat$color) + - ggplot2::scale_shape_manual(values = c(15, 18)) - - p <- p + - ggplot2::geom_hline(ggplot2::aes(yintercept = 0), lty = "dotted", size = 0.5, colour = cols[1]) + - ggplot2::annotate("segment", x = k + .95, xend = k + .95, y = 10 * ylims[1], yend = 10 * ylims[2]) - if(rma.fit$int.only) - p <- p + ggplot2::annotate("segment", x = 0, xend = 0, y = 10 * ylims[1], yend = 10 * ylims[2]) - - # clip = "off" allows us to draw outside of the margins using the annotate("segment", ...) above. - p <- p + ggplot2::coord_flip(ylim = ylims, clip = "on") + - ggplot2::xlab(NULL) + ggplot2::ylab("Effect Size") + - ggplot2::scale_y_continuous(breaks = jaspGraphs::getPrettyAxisBreaks(ylims), - expand = ggplot2::expand_scale(mult = c(0.3,0.3), add = 0)) - - p <- p + ggplot2::scale_x_continuous(breaks = dat$StudyNo, - limits = xlims, - labels = dat$labs, - sec.axis = ggplot2::dup_axis(trans = ~., labels = dat$ci.int), - expand = ggplot2::expand_scale(mult = c(0.1,0), add = 0)) - - fontsize <- 0.85 * jaspGraphs::getGraphOption("fontsize") - p <- p + jaspGraphs::geom_rangeframe(sides = "b") + jaspGraphs::themeJaspRaw() + - ggplot2::theme(axis.ticks.y = ggplot2::element_blank(), - axis.text.y.left = ggplot2::element_text(hjust = 0, size = fontsize), - axis.text.y.right = ggplot2::element_text(hjust = 1, size = fontsize), - plot.margin = ggplot2::margin(5)) - return(p) -} - -.metaAnalysisProfilePlotFill <- function(rma.fit){ - x <- rma.fit - vc.ci <- try(suppressWarnings(confint(x)), silent = TRUE) - if (isTryError(vc.ci)) { - vc.lb <- NA - vc.ub <- NA - } - else { - vc.lb <- min(x$tau2, vc.ci$random[1, 2]) - vc.ub <- max(0.1, x$tau2, vc.ci$random[1, 3]) - } - if (is.na(vc.lb) || is.na(vc.ub)) { - vc.lb <- max(0, x$tau2 - 1.96 * x$se.tau2) - vc.ub <- max(0.1, x$tau2 + 1.96 * x$se.tau2) - } - if (is.na(vc.lb) || is.na(vc.ub)) { - vc.lb <- max(0, x$tau2/4) - vc.ub <- max(0.1, x$tau2 * 4) - } - if (is.na(vc.lb) || is.na(vc.ub)) - stop("Cannot set 'xlim' automatically. Please set this argument manually.") - xlim <- c(vc.lb, vc.ub) - vcs <- seq(xlim[1], xlim[2], length = 20) - lls <- rep(NA_real_, length(vcs)) - for (i in seq_along(vcs)) { - - argList <- list( - yi = x$yi, - vi = x$vi, - weights = x$weights, - mods = x$X, - intercept = FALSE, - method = x$method, - weighted = x$weighted, - test = x$estimateTest, - level = x$level, - control = x$control, - tau2 = vcs[i] - ) - argList <- argList[!sapply(argList, is.null)] - - res <- try(suppressWarnings(do.call(metafor::rma.uni, argList)), silent = TRUE) - if (isTryError(res)) - next - lls[i] <- c(logLik(res)) - } - - xlab <- bquote(paste(tau^2, .(gettext(" Value")))) - title <- bquote(paste(.(gettext("Profile Plot for ")), tau^2)) - profile.data <- data.frame(tau2 = vcs, ll = lls) - - ylim <- c(min(lls, logLik(x)[1]), max(lls, logLik(x)[1] + 0.001*abs(logLik(x)[1]))) - - p <- ggplot2::ggplot(data = profile.data, ggplot2::aes(x = tau2, y = ll)) + - ggplot2::geom_point(data = profile.data, shape = 19, colour = "black") + - ggplot2::geom_line() + - ggplot2::geom_hline(yintercept = logLik(x), linetype = "dotted", colour = "black") + - ggplot2::geom_vline(xintercept = x$tau2, linetype = "dotted", colour = "black") + - ggplot2::xlab(xlab) + ggplot2::ylab(gettext("Restricted Log-Likelihood")) + - ggplot2::ggtitle(title) + - ggplot2::scale_x_continuous(breaks = jaspGraphs::getPrettyAxisBreaks(xlim), - limits = xlim) + - ggplot2::scale_y_continuous(breaks = jaspGraphs::getPrettyAxisBreaks(ylim), - limits = ylim) - p <- p + ggplot2::theme(axis.line.x = ggplot2::element_line(), - axis.line.y = ggplot2::element_line()) - p <- jaspGraphs::themeJasp(p, legend.position = "none") - return(p) -} - -.metaAnalysisFunnelPlotFill <- function(rma.fit){ - x <- rma.fit - level <- x$level - ci.res <- 1000 - k <- x$k - - if (!inherits(x, "rma.uni.trimfill")) { - col.vec <- FALSE - col <- rep("black", x$k.all) - if (!is.null(x$subset)) - col <- col[x$subset] - bg.vec <- FALSE - bg <- rep("white", x$k.all) - if (!is.null(x$subset)) - bg <- bg[x$subset] - } else { - col <- c("black", "black") - if (length(col) == 1L) - col <- c(col, "black") - col.vec <- FALSE - bg <- c("white", "white") - if (length(bg) == 1L) - bg <- c(bg, "white") - bg.vec <- FALSE - } - if (x$int.only) { - refline <- c(x$beta) - yi <- x$yi - vi <- x$vi - ni <- x$ni - sei <- sqrt(vi) - slab <- x$slab[x$not.na] - xlab <- "Effect Size" - } else { - refline <- 0 - res <- rstandard(x) - not.na <- x$not.na - #not.na <- !is.na(res$resid) - yi <- res$resid[not.na] - sei <- res$se[not.na] - ni <- x$ni.f[not.na] - vi <- sei^2 - slab <- x$slab[not.na] - xlab <- gettext("Residual Value") - } - - ylim <- c(0, max(sei[!is.na(sei)])) - - level <- ifelse(level == 0, 1, - ifelse(level >= 1, (100 - level)/100, - ifelse(level > 0.5, 1 - level, level))) - level.min <- min(level) - lvals <- length(level) - - x.lb.bot <- refline - qnorm(level.min/2, lower.tail = FALSE) * ylim[2] - x.ub.bot <- refline + qnorm(level.min/2, lower.tail = FALSE) * ylim[2] - - xlim <- c(min(x.lb.bot, min(yi[!is.na(yi)])), max(x.ub.bot, max(yi[!is.na(yi)]))) - rxlim <- xlim[2] - xlim[1] - xlim[1] <- xlim[1] - (rxlim * 0.1) - xlim[2] <- xlim[2] + (rxlim * 0.1) - - new_ylim <- c() - rylim <- ylim[1] - ylim[2] - new_ylim[1] <- ylim[1] - #new_ylim[1] <- ylim[1] + (rylim * 0.1) - # new_ylim[2] <- ylim[2] # this is not necessary I believe - new_ylim[2] <- max(0, ylim[2] - (rylim * 0.1)) - - yi.vals <- seq(from = new_ylim[2], to = new_ylim[1], length.out = ci.res) - - xaxis.vals <- yi - yaxis.vals <- sei - - ci.left <- refline - qnorm(level[1]/2, lower.tail = FALSE) * yi.vals - ci.right <- refline + qnorm(level[1]/2, lower.tail = FALSE) * yi.vals - - # I don't know why this was added - # It makes the x-axis symmetric, but this is unusual for a funnel plot.. - # xend <- max(abs(c(ci.left, ci.right, xlim))) - # xlims <- c(-1*xend, xend) - xlims <- xlim - - if(inherits(x, "rma.uni.trimfill")) { - fillcol <- ifelse(x$fill, "white", "black") - shape <- ifelse(x$fill, 1, 19) - } else { - fillcol <- rep("black", sum(x$not.na)) - shape <- 19 + if (length(options[["heterogeneityModelTerms"]]) > 0 && options[["clustering"]] != "") { + return(gettext("Clustering is not supported when specifying a heterogeneity meta-regression model.")) } - funnel.data <- data.frame(x = xaxis.vals, y = yaxis.vals, slab = slab, fill = fillcol) - triangle.data <- data.frame(x = c(ci.left, ci.right[ci.res:1]), - y = c(yi.vals, yi.vals[ci.res:1])) - hlines <- jaspGraphs::getPrettyAxisBreaks(ylim) - #hlines <- seq(from = ylim[1], to = ylim[2], length.out = 5) - p <- ggplot2::ggplot(data = funnel.data, ggplot2::aes(x = x, y = y)) - p <- p + ggplot2::geom_hline(yintercept = hlines, linetype = "solid", colour = "white") - p <- p + ggplot2::geom_polygon(data = triangle.data, fill = "white") - p <- p + ggplot2::geom_point(data = funnel.data, shape = shape, colour = "black", fill = fillcol) - p <- p + ggplot2::geom_segment(ggplot2::aes(x = refline, y = new_ylim[2], xend = refline, yend = ylim[1]), - linetype = "solid", colour = "black") - p <- p + ggplot2::geom_segment(ggplot2::aes(x = min(ci.left), y = new_ylim[2], xend = refline, yend = new_ylim[1]), - linetype = "dotted", colour = "black") + - ggplot2::geom_segment(ggplot2::aes(x = refline, y = new_ylim[1], xend = max(ci.right), yend = new_ylim[2]), - linetype = "dotted", colour = "black") - p <- p + ggplot2::xlab(xlab) + ggplot2::ylab(gettext("Standard Error")) - #p <- p + ggplot2::ylim(new_ylim[1], new_ylim[2]) - p <- jaspGraphs::themeJasp(p) - p <- p + ggplot2::theme(axis.line.x.bottom= ggplot2::element_line(), - axis.line.x.top = ggplot2::element_blank(), - axis.line.y = ggplot2::element_line(), - panel.background = ggplot2::element_rect(fill = "lightgrey"), - panel.grid.major = ggplot2::element_blank(), - panel.grid.minor = ggplot2::element_blank(), - legend.position = "none") - p <- p + ggplot2::scale_y_reverse(limits = c(new_ylim[2], new_ylim[1]), - breaks = hlines, - labels = round(hlines, 3), - expand = ggplot2::expand_scale(mult = c(0,0.05), add = 0)) + - ggplot2::scale_x_continuous(limits = xlims, - breaks = jaspGraphs::getPrettyAxisBreaks(xlims)) - return(p) + return(NULL) } +.maClusteringMessage <- function(fit) { -.metaAnalysisRadialPlotFill <- function(rma.fit){ - x <- rma.fit - #new.radial(x) - if (!inherits(x, "rma")) - stop("Argument 'x' must be an object of class \"rma\".") - if (inherits(x, "robust.rma")) - stop("Function not applicable to objects of class \"robust.rma\".") - if (inherits(x, "rma.ls")) - stop("Function not applicable to objects of class \"rma.ls\".") - level <- x$level - yi <- x$yi - vi <- x$vi - beta <- x$beta - ci.lb <- x$ci.lb - ci.ub <- x$ci.ub - tau2 <- 1/mean(1/x$tau2) - atyis <- range(yi) - level <- ifelse(level == 0, 1, - ifelse(level >= 1, (100 - level)/100, - ifelse(level > 0.5, 1 - level, level))) - zcrit <- qnorm(level/2, lower.tail = FALSE) - zi <- yi/sqrt(vi + tau2) - xi <- 1/sqrt(vi + tau2) - if (any(is.infinite(c(xi, zi)))) - stop(mstyle$stop("Setting 'xlim' and 'zlim' automatically not possible (must set axis limits manually).")) - xlims <- c(0, (1.3 * max(xi))) - ci.xpos <- xlims[2] + 0.12 * (xlims[2] - xlims[1]) - ya.xpos <- xlims[2] + 0.14 * (xlims[2] - xlims[1]) - xaxismax <- xlims[2] - zlims <- c(min(-5, 1.1 * min(zi), 1.1 * ci.lb * ci.xpos, - 1.1 * min(atyis) * ya.xpos, 1.1 * min(yi) * ya.xpos, - -1.1 * zcrit + xaxismax * beta), - max(5, 1.1 * max(zi), 1.1 * ci.ub * ci.xpos, - 1.1 * max(atyis) * ya.xpos, 1.1 * max(yi) * ya.xpos, - 1.1 * zcrit + xaxismax * beta)) - - asp.rat <- (zlims[2] - zlims[1])/(xlims[2] - xlims[1]) - - if(x$method == "FE") { - xlabExpression <- bquote(x[i] == frac(1, sqrt(v[i]))) - ylabExpression <- bquote(z[i] == frac(y[i], sqrt(v[i]))) + if (all(fit[["tcl"]][1] == fit[["tcl"]])) { + return(gettextf("%1$i clusters with %2$i estimates each.", fit[["n"]], fit[["tcl"]][1])) } else { - xlabExpression <- bquote(x[i] == frac(1, sqrt(v[i]+tau^2))) - ylabExpression <- bquote(z[i] == frac(y[i], sqrt(v[i]+tau^2))) - } - - .arc.line <- function(zlims, yi, ya.xpos, asp.rat, length){ - atyis <- seq(min(yi), max(yi), length = length) - len <- ya.xpos - xis <- sqrt(len^2/(1 + (atyis/asp.rat)^2)) - zis <- xis * atyis - valid <- zis > zlims[1] & zis < zlims[2] - xisv <- xis[valid] - zisv <- zis[valid] - dat <- data.frame() - for(j in 2:length(atyis)) { - row <- data.frame( - x = xisv[j-1], - y = zisv[j-1], - xend = xisv[j], - yend = zisv[j] - ) - dat <- rbind(dat, row) - } - return(ggplot2::geom_segment(data = dat, - ggplot2::aes(x = x, y = y, - xend = xend, yend = yend))) - } - .arc.ticks <- function(xlims, yi, ya.xpos, asp.rat){ - atyis <- seq(min(yi), max(yi), length = 7) - len.l <- ya.xpos - len.u <- ya.xpos + 0.015 * (xlims[2] - xlims[1]) - xis.l <- sqrt(len.l^2/(1 + (atyis/asp.rat)^2)) - zis.l <- xis.l * atyis - xis.u <- sqrt(len.u^2/(1 + (atyis/asp.rat)^2)) - zis.u <- xis.u * atyis - valid <- zis.l > zlims[1] & zis.u > zlims[1] & zis.l < zlims[2] & zis.u < zlims[2] - dat <- data.frame(x = xis.l[valid], xend = xis.u[valid], - y = zis.l[valid], yend = zis.u[valid]) - return(ggplot2::geom_segment(data = dat, - ggplot2::aes(x = x, y = y, - xend = xend, yend = yend), - colour = "black")) - } - .arc.text <- function(xlims, yi, ya.xpos, asp.rat){ - atyis <- seq(min(yi), max(yi), length = 7) - len <- ya.xpos + 0.02 * (xlims[2] - xlims[1]) - xis <- sqrt(len^2/(1 + (atyis/asp.rat)^2)) - zis <- xis * atyis - valid <- zis > zlims[1] & zis < zlims[2] - dat <- data.frame(x = xis[valid], y = zis[valid], - label = as.character(round(atyis[valid], 2))) - return(ggplot2::geom_text(data = dat, ggplot2::aes(x = x, y = y, label = label), - nudge_x = 0.1 * (xlims[2] - xlims[1]), hjust = 0)) - } - .arc.int <- function(xlims, zlims, ci.xpos, ci.lb, beta, ci.ub, asp.rat){ - atyis <- c(ci.lb, beta, ci.ub) - len.l <- ci.xpos - 0.007 * (xlims[2] - xlims[1]) - len.u <- ci.xpos + 0.007 * (xlims[2] - xlims[1]) - - xis.l <- sqrt(len.l^2/(1 + (atyis/asp.rat)^2)) - zis.l <- xis.l * atyis - xis.u <- sqrt(len.u^2/(1 + (atyis/asp.rat)^2)) - zis.u <- xis.u * atyis - - valid <- zis.l > zlims[1] & zis.u > zlims[1] & zis.l < zlims[2] & zis.u < zlims[2] - dat <- data.frame(xl = xis.l[valid], - zl = zis.l[valid], - xu = xis.u[valid], - zu = (xis.u * atyis)[valid]) - connectingLine <- data.frame(xl = mean(c(dat[1,1], dat[1,3])), - zl = mean(c(dat[1,2], dat[1,4])), - xu = mean(c(dat[3,1], dat[3,3])), - zu = mean(c(dat[3,2], dat[3,4]))) - dat <- rbind(dat, connectingLine) - return(ggplot2::geom_segment(data = dat, ggplot2::aes(x = xl, xend = xu, - y = zl, yend = zu))) - } - arc.line <- .arc.line(zlims, yi, ya.xpos, asp.rat, length = 100) - arc.ticks <- .arc.ticks(xlims, yi, ya.xpos, asp.rat) - arc.text <- .arc.text(xlims, yi, ya.xpos, asp.rat) - arc.int <- .arc.int(xlims, zlims, ci.xpos, ci.lb, beta, ci.ub, asp.rat) - - len <- ya.xpos + 0.02 * (xlims[2] - xlims[1]) - atyis <- seq(min(yi), max(yi), length = 7) - x.margin.right <- 1.2 * max(arc.text$data$x)#max(sqrt(len^2/(1 + (atyis)/asp.rat)^2)) - - radial.data <- data.frame(x = xi, y = zi, slab = x$slab[x$not.na]) - rectangle.data <- data.frame(x = c(0, xaxismax, xaxismax, 0), - y = c(zcrit, zcrit + xaxismax * beta, - -zcrit + xaxismax * beta, -zcrit)) - p <- ggplot2::ggplot(data = radial.data, ggplot2::aes(x = x, y = y)) + - ggplot2::geom_polygon(data = rectangle.data, fill = "lightgrey") + - ggplot2::geom_point(data = radial.data, shape = 19, colour = "black") + - ggplot2::ggtitle(gettext("Radial Plot")) - p <- p + arc.line + arc.ticks + arc.int + arc.text - p <- p + ggplot2::geom_segment(ggplot2::aes(x = xlims[1], y = max(zcrit), xend = xlims[2], - yend = max(zcrit + xaxismax * beta)), - linetype = "dotted", colour = "black") - p <- p + ggplot2::geom_segment(ggplot2::aes(x = xlims[1], y = min(-zcrit), xend = xlims[2], - yend = min(-zcrit +xaxismax * beta)), - linetype = "dotted", colour = "black") - p <- p + ggplot2::geom_segment(ggplot2::aes(x = 0, y = 0, xend = xlims[2], yend = xaxismax * beta), - linetype = "solid", colour = "black") - - valsForBreaks <- c(-zcrit, zcrit, min(-zcrit +xaxismax * beta), max(zcrit + xaxismax * beta)) - yBreaks <- jaspGraphs::getPrettyAxisBreaks(valsForBreaks) - # do it again to get something symmetric around 0 - temp <- max(abs(yBreaks)) - yBreaks <- jaspGraphs::getPrettyAxisBreaks(c(-temp, temp)) - # add the data from the right axis to stop ggplot2 from deleting these values - yLimits <- range(jaspGraphs::getPrettyAxisBreaks(c( - yBreaks, valsForBreaks, arc.text$data$y, arc.line$data$y, arc.line$data$yend) - )) - - yBreaks <- jaspGraphs::getPrettyAxisBreaks(c(-temp, temp)) - xBreaks <- jaspGraphs::getPrettyAxisBreaks(c(0, radial.data$x)) - xLimits <- c(0, x.margin.right) - p <- p + ggplot2::xlab(xlabExpression) + ggplot2::ylab(ylabExpression) + - ggplot2::scale_x_continuous(breaks = xBreaks, limits = xLimits) + - ggplot2::scale_y_continuous(breaks = yBreaks, limits = yLimits) - - p <- p + jaspGraphs::geom_rangeframe() + jaspGraphs::themeJaspRaw() - - # we want to show the axis titles in the middle of the breaks, not the middle of the limits (the default) - # so we adjust the vjust and hjust accordingly - vjustY <- (mean(yBreaks) - yLimits[1L]) / (yLimits[2L] - yLimits[1L]) - hjustX <- (mean(xBreaks) - xLimits[1L]) / (xLimits[2L] - xLimits[1L]) - - p <- p + ggplot2::theme(axis.line.x = ggplot2::element_blank(), - axis.line.y = ggplot2::element_blank(), - axis.title.y = ggplot2::element_text(size = 12, angle = 0, vjust = vjustY), - axis.title.x = ggplot2::element_text(size = 12, hjust = hjustX), - panel.background = ggplot2::element_blank(), - panel.grid.major = ggplot2::element_blank(), - panel.grid.minor = ggplot2::element_blank(), - legend.position = "none") - return(p) -} - -.metaAnalysisQQPlotFill <- function(rma.fit){ - x <- rma.fit - if (x$k == 1) - stop(gettext("Stopped because k = 1.")) - - res <- rstandard(x) - not.na <- !is.na(res$z) - zi <- res$z[not.na] - slab <- res$slab[not.na] - ord <- order(zi) - slab <- slab[ord] - - sav <- qqnorm(zi, plot.it = FALSE) - pos.x <- sav$x[ord] - pos.y <- sav$y[ord] - - reps <- 1000 - level <- x$level - dat <- matrix(rnorm(x$k * reps), nrow = x$k, ncol = reps) - H <- hatvalues(x, type = "matrix") - ImH <- diag(x$k) - H - ei <- ImH %*% dat - ei <- apply(ei, 2, sort) - lb <- apply(ei, 1, quantile, (level/2)) - ub <- apply(ei, 1, quantile, 1 - (level/2)) - temp.lb <- qqnorm(lb, plot.it = FALSE) - temp.lb <- supsmu(temp.lb$x, temp.lb$y) - temp.ub <- qqnorm(ub, plot.it = FALSE) - temp.ub <- supsmu(temp.ub$x, temp.ub$y) - - xBreaks <- jaspGraphs::getPrettyAxisBreaks(pos.x) - yBreaks <- jaspGraphs::getPrettyAxisBreaks(c(pos.y, temp.lb$y, temp.ub$y)) - xLimits <- range(xBreaks) - yLimits <- range(yBreaks) - - qq.data <- data.frame(x = pos.x, y = pos.y, ci.lb = temp.lb$y, ci.ub = temp.ub$y) - p <- ggplot2::ggplot(data = qq.data) + - ggplot2::ggtitle(gettext("Normal Q-Q Plot")) + - ggplot2::geom_ribbon(data = qq.data, ggplot2::aes(ymin = ci.lb, ymax = ci.ub, x = x), - fill = "gray", alpha = 0.5, stat = "identity") + - ggplot2::geom_point(ggplot2::aes(x = x, y = y), shape = 19, colour = "black") + - ggplot2::geom_abline(slope = 1, intercept = 0) + - ggplot2::scale_x_continuous(name = gettext("Theoretical Quantiles"), limits = xLimits, breaks = xBreaks) + - ggplot2::scale_y_continuous(name = gettext("Sample Quantiles"), limits = yLimits, breaks = yBreaks) - p <- jaspGraphs::themeJasp(p) - return(p) -} - -.metaAnalysisStandResidPlotFill <- function(rma.fit) { - res <- rstandard(rma.fit) - zi <- res$z[!is.na(res$z)] - title <- gettext("Standardized Residuals") - study <- seq_along(zi) - stand.data <- data.frame(study = factor(study, levels = study), resid = zi) - hlines <- qnorm(c(0.025, 0.5, 0.975)) - linetypes <- c("dotted", "dashed", "dotted") - ylims <- range(c(zi, hlines)) - - p <- ggplot2::ggplot(data = stand.data, ggplot2::aes(x = study, y = resid, group = 1)) + - ggplot2::geom_point(shape = 19, colour = "black") + ggplot2::geom_line() + - ggplot2::geom_hline(yintercept = hlines, linetype = linetypes, colour = "black") + - ggplot2::xlab(gettext("Study")) + ggplot2::ylab(" ") + ggplot2::ggtitle(title) - p <- p + ggplot2::scale_y_continuous(breaks = jaspGraphs::getPrettyAxisBreaks(ylims), - limits = ylims) + - ggplot2::theme(axis.line.x = ggplot2::element_line(), - axis.line.y = ggplot2::element_line(), - axis.ticks.x.bottom = ggplot2::element_line()) - p <- jaspGraphs::themeJasp(p, legend.position = "none") - - return(p) -} - -.metaAnalysisFittedVsStandardPlotFill <- function(rma.fit){ - title <- gettext("Fitted vs. Standardized Residuals") - fit.data <- data.frame(x = fitted(rma.fit), y = rstandard(rma.fit)$z) - hlines <- qnorm(c(0.025, 0.5, 0.975)) - lty <- c("dotted", "dashed", "dotted") - xlims <- range(fitted(rma.fit)) - ylims <- range(rstandard(rma.fit)$z) - p <- ggplot2::ggplot(data = fit.data) + - ggplot2::geom_point(ggplot2::aes(x = x, y = y)) + - ggplot2::geom_hline(yintercept = hlines, linetype = lty, colour = "black") + - ggplot2::xlab(gettext("Fitted Value")) + ggplot2::ylab(gettext("Standardized Residual")) + - ggplot2::ggtitle(title) + - ggplot2::scale_x_continuous(limits = xlims, - breaks = jaspGraphs::getPrettyAxisBreaks(xlims)) + - ggplot2::scale_y_continuous(limits = ylims, - breaks = jaspGraphs::getPrettyAxisBreaks(ylims)) - p <- p + ggplot2::theme(axis.line.x = ggplot2::element_line(), - axis.line.y = ggplot2::element_line(), - axis.ticks.x.bottom = ggplot2::element_line() + return(gettextf("%1$i clusters with min/median/max %2$i/%3$i/%4$i estimates.", fit[["n"]], min(fit[["tcl"]]), median(fit[["tcl"]]), max(fit[["tcl"]]))) + } +} +.maGetMethodOptions <- function(options) { + switch( + options[["method"]], + "fixedEffects" = "FE", + "maximumLikelihood" = "ML", + "restrictedML" = "REML", + "derSimonianLaird" = "DL", + "hedges" = "HE", + "hunterSchmidt" = "HS", + "hunterSchmidtSSC" = "HSk", + "sidikJonkman" = "SJ", + "empiricalBayes" = "EB", + "pauleMandel" = "PM", + "qeneralizedQStat" = "GENQ", + "qeneralizedQStatMu" = "GENQM", + NA ) - p <- jaspGraphs::themeJasp(p, legend.position = "none") - return(p) -} - -# Extra functions -.metaAnalysisFormula <- function(options){ - if (length(options$modelTerms) > 0) - formula.rhs <- formula(as.modelTerms(options$modelTerms)) - else - formula.rhs <- NULL - - if (is.null(formula.rhs)) - formula.rhs <- ~1 - if (!options$interceptTerm) - formula.rhs <- update(formula.rhs, ~ . + 0) - - if (identical(formula.rhs, ~ 1 - 1)) - .quitAnalysis(gettext("The model should contain at least one predictor or an intercept.")) - - return(formula.rhs) -} - -# we need both of these functions, because these values are shown as columns, but also passed along as arguments to the meta analysis pkg -.metaAnalysisGetTranslatedMethod <- function(options){ - switch(options$method, - "Fixed Effects" = gettext("FE"), - "Maximum Likelihood" = gettext("ML"), - "Restricted ML" = gettext("REML"), - "DerSimonian-Laird" = gettext("DL"), - "Hedges" = gettext("HE"), - "Hunter-Schmidt" = gettext("HS"), - "Sidik-Jonkman" = gettext("SJ"), - "Empirical Bayes" = gettext("EB"), - "Paule-Mandel" = gettext("PM") - ) -} - -.metaAnalysisGetMethod <- function(options){ - switch(options$method, - "Fixed Effects" = "FE", - "Maximum Likelihood" = "ML", - "Restricted ML" = "REML", - "DerSimonian-Laird" = "DL", - "Hedges" = "HE", - "Hunter-Schmidt" = "HS", - "Sidik-Jonkman" = "SJ", - "Empirical Bayes" = "EB", - "Paule-Mandel" = "PM" - ) -} - -.metaAnalysisConfidenceInterval <- function(options, table) { - if(options$coefficientCi) { - ci <- gettextf("%g%% Confidence Interval", 100 * options$coefficientCiLevel) - table$addColumnInfo(name = "lower", type = "number", title = "Lower", overtitle = ci) - table$addColumnInfo(name = "upper", type = "number", title = "Upper", overtitle = ci) - } -} - -.metaAnalysisSetError <- function(res, table) { - if(isTryError(res)) - table$setError(.extractErrorMessage(res)) -} - -# Replaces "intrcpt" with "intercept" and concated "factorNamelevelName" with "factorName (levelName)" -.metaAnalysisMakePrettyCoeffNames <- function(coeffNames, dataset, concatFactorNames = NULL) { - newNames <- coeffNames - - if (is.null(concatFactorNames)) - concatFactorNames <- .metaAnalysisMapConcatFactorNames(dataset) - - for (i in seq_along(coeffNames)) { - coeffName <- coeffNames[i] - - if (coeffName == "intrcpt") { - newNames[i] <- "intercept" - } else if (!is.null(concatFactorNames)) { - coeffNameEnc <- coeffName - if (grepl(":", coeffNameEnc, fixed = TRUE)) { # it's an interaction term - terms <- unlist(strsplit(coeffNameEnc, ":", fixed = TRUE)) - replaced <- .metaAnalysisMakePrettyCoeffNames(terms, dataset, concatFactorNames) - newNames[i] <- paste(replaced, collapse = "\u2009\u273b\u2009") - } else { # it's a regular term - match <- which(concatFactorNames == coeffName) - if (length(match) == 1) - newNames[i] <- names(concatFactorNames)[match] - } - } - } - - return(newNames) -} - -# Creates a named character vector with values = "factorNameLevelName" and names = "factorName (levelName)" -.metaAnalysisMapConcatFactorNames <- function(dataset) { - factorCols <- unlist(lapply(dataset, is.factor)) - if (length(factorCols) == 0) - return(NULL) - - dataset <- dataset[factorCols] - - mapping <- levelsPerFactor <- lapply(dataset, levels) - names(levelsPerFactor) <- names(levelsPerFactor) - names(mapping) <- NULL - - for (i in seq_along(levelsPerFactor)) { - values <- paste0(names(levelsPerFactor)[i], levelsPerFactor[[i]]) - values <- setNames(values, paste0(names(levelsPerFactor)[i], " (", levelsPerFactor[[i]], ")")) - mapping[[i]] <- values - } - - return(unlist(mapping)) -} - -# these functions originally lived in jaspBase/R/common.R, but are only used by this module -as.modelTerms <- function(object, ...) UseMethod("as.modelTerms") -as.modelTerms.list <- function(object) structure(object, class = "modelTerms") -as.modelTerms.formula <- function(formula) structure(sapply(attr(terms(formula), "term.labels"), strsplit, ":"), class="modelTerms") -formula.modelTerms <- function(modelTerms, env = parent.frame()) { - # Converts a modelTerms list into a one-side R formula - # - # Args: - # modelTerms: A list of interaction terms, each term being a list of variable names involved in the interaction - # env: An environement associated with the variables in the formula, see ?as.formula - # - # Value: - # A formula. See ?formula - # - terms = sapply(modelTerms, function(x) paste0(unlist(x), collapse = ":")) - terms = terms[terms != ""] - formula.rhs = paste(terms, collapse = " + ") - if (formula.rhs != "") as.formula(paste(" ~ ", formula.rhs), env = env) } diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 2ffb8ad7..ca363f99 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -26,7 +26,7 @@ Form { VariablesForm { - preferredHeight: 400 * preferencesModel.uiScale + preferredHeight: 425 * preferencesModel.uiScale AvailableVariablesList { @@ -38,37 +38,59 @@ Form name: "effectSize" title: qsTr("Effect Size") singleVariable: true - suggestedColumns: ["scale"] + allowedColumns: ["scale"] } AssignedVariablesList { name: "effectSizeStandardError" title: qsTr("Effect Size Standard Error") singleVariable: true - suggestedColumns: ["scale"] + allowedColumns: ["scale"] } - MA.ClassicalMetaAnalysisMethod{visible: true} - - AssignedVariablesList + DropDown { - name: "covariates" - title: qsTr("Covariates") - suggestedColumns: ["scale"] + name: "method" + label: qsTr("Method") + startValue: "restrictedML" + values: [ + { label: qsTr("Fixed Effects") , value: "fixedEffects" }, + { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, + { label: qsTr("Restricted ML") , value: "restrictedML" }, + { label: qsTr("DerSimonian-Laird") , value: "derSimonianLaird" }, + { label: qsTr("Hedges") , value: "hedges" }, + { label: qsTr("Hunter-Schmidt") , value: "hunterSchmidt" }, + { label: qsTr("Hunter-Schmidt (SSC)") , value: "hunterSchmidtSsc" }, + { label: qsTr("Sidik-Jonkman") , value: "sidikJonkman" }, + { label: qsTr("Empirical Bayes") , value: "empiricalBayes" }, + { label: qsTr("Paule-Mandel") , value: "pauleMandel" }, + { label: qsTr("Paule-Mandel (MU)") , value: "pauleMandelMu" }, + { label: qsTr("Generalized Q-stat") , value: "qeneralizedQStat" }, + { label: qsTr("Generalized Q-stat (MU)"), value: "qeneralizedQStatMu" } + ] + } + + DropDown + { + name: "fixedEffectTest" + label: qsTr("Fixed effect test") + startValue: "knha" + values: [ "z", "t", "knha"] } + AssignedVariablesList { - name: "factors" - title: qsTr("Factors") - suggestedColumns: ["nominal"] + name: "predictors" + title: qsTr("Predictors") + allowedColumns: ["nominal", "scale"] } AssignedVariablesList { - name: "clusters" - title: qsTr("Clusters") + name: "clustering" + title: qsTr("Clustering") singleVariable: true - suggestedColumns: ["nominal"] + allowedColumns: ["nominal"] } AssignedVariablesList @@ -96,7 +118,7 @@ Form { name: "effectSizeModelAvailableComponents" title: qsTr("Available Components") - source: ["covariates","factors"] + source: ["predictors"] } AssignedVariablesList @@ -105,13 +127,13 @@ Form title: qsTr("Model Terms") listViewType: JASP.Interaction } - } - CheckBox - { - name: "effectSizeModelIncludeIntercept"; - label: qsTr("Include intercept") - checked: true + CheckBox + { + name: "effectSizeModelIncludeIntercept"; + label: qsTr("Include intercept") + checked: true + } } } @@ -127,226 +149,28 @@ Form { name: "heterogeneityModelAvailableComponents" title: qsTr("Available Components") - source: ["covariates","factors"] + source: ["predictors"] } + // TODO: start empty AssignedVariablesList { name: "heterogeneityModelTerms"; title: qsTr("Model Terms") listViewType: JASP.Interaction } - } - - CheckBox - { - name: "heterogeneityModelIncludeIntercept"; - label: qsTr("Include intercept") - checked: true - } - } - } - - ComponentsList - { - id: randomEffects - name: "randomEffects" - title: qsTr("Random effects") - - rowComponent: RowLayout - { - property string typeValue: type.value - property string structureValue: structure.value - property string spatialInputTypeValue: spatialInputType.value - - DropDown - { - id: type - name: "type" - label: qsTr("Type") - values: [ - { label: qsTr("Simple"), value: "simple"}, - { label: qsTr("Nested (multilevel)"), value: "nested"}, - { label: qsTr("Random slopes"), value: "randomSlopes"}, - { label: qsTr("Structured"), value: "structured"}, - { label: qsTr("Autoregressive"), value: "autoregressive"}, - { label: qsTr("Spatial"), value: "spatial"}, - { label: qsTr("Known correlation"), value: "knownCorrelation"} - ] - } - - DropDown - { - id: structure - name: "structure" - label: qsTr("Structure") - visible: type.value == "structured" || type.value == "autoregressive" || type.value == "spatial" - values: (function() { - if (type.value == "structured") { - return [ - { label: qsTr("Compound symmetry"), value: "compoundSymmetry"}, - { label: qsTr("Heteroscedastic compound symmetry"), value: "heteroscedasticCompoundSymmetry"}, - { label: qsTr("Unstructured "), value: "Unstructured"}, - { label: qsTr("Identity"), value: "identity"}, - { label: qsTr("Diagonal"), value: "diagonal"} - ]; - } else if (type.value == "autoregressive") { - return [ - { label: qsTr("AR(1)"), value: "ar1"}, - { label: qsTr("Heteroscedastic AR(1)"), value: "heteroskedasticAr1"}, - { label: qsTr("Continuous-time AR"), value: "continuousTimeAr"} - ]; - } else if (type.value == "spatial") { - return [ - { label: qsTr("Exponential"), value: "exponential"}, - { label: qsTr("Gaussian"), value: "gaussian"}, - { label: qsTr("Linear"), value: "linear"}, - { label: qsTr("Rational quadratic"), value: "rationalQuadratic"}, - { label: qsTr("Spherical"), value: "spherical"} - ]; - } else { - return []; - } - })() - } - - DropDown - { - id: spatialInputType - name: "spatialInputType" - label: qsTr("Spatial input type") - visible: type.value == "spatial" - values: (function() { - if (type.value == "spatial") { - return [ - { label: qsTr("Compute from variables"), value: "computeFromVariables"}, - { label: qsTr("Load from file"), value: "loadFromFile"} - ]; - } else { - return []; - } - })() - } - - } - } - - - ComponentsList - { - name: "randomEffectsSpecification" - source: "randomEffects" - title: qsTr("Random effects specification") - rowSpacing: 20 - - rowComponent: ColumnLayout - { - property var typeValue: randomEffects.rowAt(rowIndex).typeValue - property var structureValue: randomEffects.rowAt(rowIndex).structureValue - property var spatialInputTypeValue: randomEffects.rowAt(rowIndex).spatialInputTypeValue - - VariablesForm - { - removeInvisibles: true - preferredHeight: (typeValue == "randomSlopes" || typeValue == "spatial") ? 250 * preferencesModel.uiScale : 200 * preferencesModel.uiScale - visible: typeValue == "simple" || typeValue == "randomSlopes" || typeValue == "structured" || typeValue == "autoregressive" || (typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables") || typeValue == "knownCorrelation" - - AvailableVariablesList - { - name: "allVars" - title: typeValue + ": " + structureValue - } - - AssignedVariablesList - { - name: "randomSlopeTerms" - title: qsTr("Random Slope Terms") - visible: typeValue == "randomSlopes" - listViewType: JASP.Interaction - suggestedColumns: ["nominal", "scale"] // this should be choose on assignment - } - AssignedVariablesList - { - name: "randomLevels" - title: qsTr("Random Levels") - visible: typeValue == "structured" - singleVariable: true - suggestedColumns: ["nominal"] - } - - AssignedVariablesList + CheckBox { - name: "time" - title: qsTr("Time") - visible: typeValue == "autoregressive" - singleVariable: true - suggestedColumns: ["ordinal", "scale"] // scale for continuous time AR otherwise ordinal - } - - AssignedVariablesList - { - name: "spatialCoordinates" - title: qsTr("Spatial Coordinates") - visible: typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables" - suggestedColumns: ["nominal"] - } - - AssignedVariablesList - { - name: "groupingFactor" - title: qsTr("Grouping Factor") - singleVariable: true - suggestedColumns: ["nominal"] + name: "heterogeneityModelIncludeIntercept"; + label: qsTr("Include intercept") + checked: true } } - - // TODO: Bruno -- adding variable crashes the qml - // TODO: Bruno -- allow single variable only, set-type to nominal - FactorsForm - { - name: "nestedGroupingFactors" - id: nestedGroupingFactors - title: qsTr("Nested Grouping Factors") - preferredHeight: 200 * preferencesModel.uiScale - initNumberFactors: 1 - allowAll: true - visible: typeValue == "nested" - } - - DropDown - { - name: "distanceMetric" - id: distanceMetric - label: qsTr("Distance metric") - visible: typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables" - values: [ - { label: qsTr("Euclidean"), value: "euclidean" }, - { label: qsTr("Manhattan"), value: "manhattan" }, - { label: qsTr("Maximum"), value: "maximum" }, - { label: qsTr("Great-circle"), value: "greatCircle"} - ] - } - - FileSelector - { - name: "distanceMatrixFile" - label: qsTr("Distance matrix file") - visible: typeValue == "spatial" && spatialInputTypeValue == "loadFromFile" - filter: "*.csv" - } - - FileSelector - { - name: "knownCorrelationMatrixFile" - label: qsTr("Known correlation matrix file") - visible: typeValue == "knownCorrelation" - filter: "*.csv" - } - } } + Section { title: qsTr("Statistics") @@ -364,22 +188,15 @@ Form CheckBox { - name: "metaregressionCoefficientsEstimates" - text: qsTr("Coefficients estimates") + name: "metaregressionCoefficientEstimates" + text: qsTr("Coefficient estimates") checked: true } - DropDown - { - name: "metaregressionCoefficientsTest" - label: qsTr("Coefficients test") - values: [ "z", "t", "knha"] - } - CheckBox { - name: "metaregressionCoefficientsCovarianceMatrix" - text: qsTr("Coefficients covariance matrix") + name: "metaregressionCoefficientCovarianceMatrix" + text: qsTr("Coefficient covariance matrix") checked: false } } @@ -387,47 +204,49 @@ Form Group { title: qsTr("Hetereogeneity") + columns: 2 CheckBox { - name: "𝜏" - text: qsTr("heterogeneityTau") + text: qsTr("𝜏") + name: "heterogeneityTau" checked: true } CheckBox { - name: "𝜏²" - text: qsTr("heterogeneityTau2") - checked: false + text: qsTr("𝜏²") + name: "heterogeneityTau2" + checked: true } CheckBox { - name: "IΒ²" - text: qsTr("heterogeneityI2") + text: qsTr("IΒ²") + name: "heterogeneityI2" checked: false } CheckBox { - name: "HΒ²" - text: qsTr("heterogeneityH2") + text: qsTr("HΒ²") + name: "heterogeneityH2" checked: false } CheckBox { - name: "Prediction Interval" - text: qsTr("heterogeneityPredictionInterval") + text: qsTr("Prediction Interval") + name: "heterogeneityPredictionInterval" checked: false } } CheckBox { - name: "cconfidenceIntervals" + name: "confidenceIntervals" text: qsTr("Confidence intervals") + checked: true childrenOnSameRow: true CIField @@ -438,21 +257,8 @@ Form CheckBox { - name: "modelFit" - text: qsTr("Pooled estimate") - checked: true - } - - - Group - { - title: qsTr("Model Fit") - - CheckBox - { - name: "fitMeasure" - text: qsTr("Fit measures") - } + name: "fitMeasure" + text: qsTr("Fit measures") } } @@ -489,4 +295,23 @@ Form } MA.ClassicalMetaAnalysisDiagnostics{} + + Section + { + title: qsTr("Clustering") + + CheckBox + { + name: "clusteringUseClubSandwich" + text: qsTr("Use clubSandwich") + checked: true + } + + CheckBox + { + name: "clusteringSmallSampleCorrection" + text: qsTr("Small sample correction") + checked: true + } + } } \ No newline at end of file From 9e3ae046a426dc83bb01168fa7208ae85832ee9d Mon Sep 17 00:00:00 2001 From: FBartos Date: Sat, 15 Jun 2024 22:03:35 +0200 Subject: [PATCH 009/127] coefficient estimates --- R/classicalmetaanalysis.R | 2 +- R/classicalmetaanalysiscommon.R | 161 +++++++++++++++++++++-------- inst/qml/ClassicalMetaAnalysis.qml | 27 +++-- 3 files changed, 136 insertions(+), 54 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index fda05981..ef5e373b 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -45,7 +45,7 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "effectSize", "effectSizeStandardError", "effectSizeModelTerms", "effectSizeModelIncludeIntercept", "heterogeneityModelTerms", "heterogeneityModelIncludeIntercept", "predictors", "predictors.types", "clustering", "studyLabel", - "method", "fixedEffectTest", + "method", "fixedEffectTest", "confidenceIntervalsLevel", "clusteringUseClubSandwich", "clusteringSmallSampleCorrection" ) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 9f725b90..5474d585 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -19,13 +19,14 @@ .maFitModel(jaspResults, dataset, options) .maSummaryTable(jaspResults, dataset, options) - + .maCoefficientTable(jaspResults, dataset, options, "effectSize") + .maCoefficientTable(jaspResults, dataset, options, "heterogeneity") return() } -.maGetFormula <- function(modelTerms, includeIntercept) { +.maGetFormula <- function(modelTerms, includeIntercept) { predictors <- unlist(lapply(modelTerms, function(x) { if (length(x[["components"]]) > 1) @@ -44,7 +45,7 @@ return(as.formula(formula, env = parent.frame(1))) } -.maFitModel <- function(jaspResults, dataset, options) { +.maFitModel <- function(jaspResults, dataset, options) { if (!.maReady(options) || !is.null(jaspResults[["fit"]])) return() @@ -73,6 +74,9 @@ rmaInput$method <- .maGetMethodOptions(options) rmaInput$test <- options[["fixedEffectTest"]] + # additional input + rmaInput$level <- 100 * options[["confidenceIntervalsLevel"]] + # fit the model fit <- try(do.call(metafor::rma, rmaInput)) @@ -96,16 +100,16 @@ return() } -.maSummaryTable <- function(jaspResults, dataset, options) { +.maSummaryTable <- function(jaspResults, dataset, options) { - if (!is.null(jaspResults[["modelSummary"]])) + if (!is.null(jaspResults[["modelSummaryContainer"]])) return() fit <- .maExtractFit(jaspResults, options) - modelSummary <- createJaspContainer(gettext("Model Summary")) - modelSummary$dependOn(.maDependencies) - jaspResults[["modelSummary"]] <- modelSummary + modelSummaryContainer <- createJaspContainer(gettext("Model Summary")) + modelSummaryContainer$dependOn(.maDependencies) + jaspResults[["modelSummaryContainer"]] <- modelSummaryContainer ### residual heterogeneity table @@ -116,7 +120,7 @@ residualHeterogeneityTable$addColumnInfo(name = "df", type = "integer", title = gettext("df")) residualHeterogeneityTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) - modelSummary[["residualHeterogeneityTable"]] <- residualHeterogeneityTable + modelSummaryContainer[["residualHeterogeneityTable"]] <- residualHeterogeneityTable ### moderators table @@ -133,11 +137,11 @@ moderatorsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("QM")) moderatorsTable$addColumnInfo(name = "df1", type = "integer", title = if(.maIsMetaregressionFtest(options)) gettext("df1") else gettext("df")) if (.maIsMetaregressionFtest(options)) { - moderatorsTable$addColumnInfo(name = "df2", type = if(options$clustering == "") "integer" else "number", title = gettext("df2")) + moderatorsTable$addColumnInfo(name = "df2", type = "number", title = gettext("df2")) } moderatorsTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) - modelSummary[["moderatorsTable"]] <- moderatorsTable + modelSummaryContainer[["moderatorsTable"]] <- moderatorsTable } @@ -182,7 +186,7 @@ ) row1$parameter <- gettext("Effect size") - row2$parameter <- gettext("Hetereogeneity") + row2$parameter <- gettext("heterogeneity") } moderatorsTable$addRows(row1) @@ -194,41 +198,94 @@ moderatorsTable$addFootnote(.maClusteringMessage(fit), symbol = gettext("Clustering:")) } } -.maCoeffTable <- function(container, dataset, options, ready) { - if (!options$coefficientEstimate || !is.null(container[["coeffTable"]])) +.maCoefficientTable <- function(jaspResults, dataset, options, parameter = "effectSize") { + + metaregressionContainer <- .maExtractMetaregressionContainer(jaspResults) + + if (!is.null(metaregressionContainer[["coefficientsTable"]])) return() - coeffTable <- createJaspTable(gettext("Coefficients")) - coeffTable$dependOn(c("coefficientEstimate", "coefficientCi")) - coeffTable$position <- 2 - coeffTable$showSpecifiedColumnsOnly <- TRUE - coeffTable$addCitation("Viechtbauer, W. (2010). Conducting meta-analyses in R with the metafor package. Journal of Statistical Software, 36(3), 1-48. URL: http://www.jstatsoft.org/v36/i03/") - - coeffTable$addColumnInfo(name = "name", type = "string", title = "") - coeffTable$addColumnInfo(name = "est", type = "number", title = gettext("Estimate")) - coeffTable$addColumnInfo(name = "se", type = "number", title = gettext("Standard Error")) - if (options[["estimateTest"]] == "z") - coeffTable$addColumnInfo(name = "zval", type = "number", title = gettext("z")) - else if (options[["estimateTest"]] == "knha") { - coeffTable$addColumnInfo(name = "tval", type = "number", title = gettext("t")) - coeffTable$addColumnInfo(name = "df", type = "number", title = gettext("df")) + if (parameter == "heterogeneity" && !.maIsMetaregressionHeterogeneity(options)) + return() + + fit <- .maExtractFit(jaspResults, options) + + coefficientsTable <- createJaspTable(switch( + parameter, + effectSize = gettext("Effect Size Meta-Regression Coefficients"), + heterogeneity = gettext("Heterogeneity Meta-Regression Coefficients") + )) + coefficientsTable$position <- switch( + parameter, + effectSize = 3, + heterogeneity = 4 + ) + metaregressionContainer[[parameter]] <- coefficientsTable + + coefficientsTable$addColumnInfo(name = "name", type = "string", title = "") + coefficientsTable$addColumnInfo(name = "est", type = "number", title = gettext("Estimate")) + coefficientsTable$addColumnInfo(name = "se", type = "number", title = gettext("Standard Error")) + coefficientsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("t") else gettext("z")) + if (.maIsMetaregressionFtest(options)) + coefficientsTable$addColumnInfo(name = "df", type = "number", title = gettext("df")) + coefficientsTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) + + if (options[["confidenceIntervals"]]) { + overtitleCi <- gettextf("%s%% CI", 100 * options[["confidenceIntervalsLevel"]]) + coefficientsTable$addColumnInfo(name = "lCi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) + coefficientsTable$addColumnInfo(name = "uCi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) } - coeffTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) - .metaAnalysisConfidenceInterval(options, coeffTable) - coeffTable$addFootnote(switch(options$estimateTest, z = gettext("Wald test."), knha = gettext("Knapp and Hartung test adjustment."))) + coefficientsTable$addFootnote(.maFixedEffectTextMessage(options)) - container[["coeffTable"]] <- coeffTable - if(!ready) + if (is.null(fit) || jaspBase::isTryError(fit)) return() - res <- try(.metaAnalysisCoeffFill(container, dataset, options)) + if (parameter == "effectSize") { + + estimates <- data.frame( + name = rownames(fit[["beta"]]), + est = fit[["beta"]][,1], + se = fit[["se"]], + stat = fit[["zval"]], + pval = fit[["pval"]] + ) + + if (.maIsMetaregressionFtest(options)) + estimates$df <- fit[["ddf"]] + + if (options[["confidenceIntervals"]]) { + estimates$lCi <- fit[["ci.lb"]] + estimates$uCi <- fit[["ci.ub"]] + } + + coefficientsTable$setData(estimates) - .metaAnalysisSetError(res, coeffTable) + } else if (parameter == "heterogeneity") { + + estimates <- data.frame( + name = rownames(fit[["alpha"]]), + est = fit[["alpha"]][,1], + se = fit[["se.alpha"]], + stat = fit[["zval.alpha"]], + pval = fit[["pval.alpha"]] + ) + + if (.maIsMetaregressionFtest(options)) + estimates$df <- fit[["ddf.alpha"]] + + if (options[["confidenceIntervals"]]) { + estimates$lCi <- fit[["ci.lb.alpha"]] + estimates$uCi <- fit[["ci.ub.alpha"]] + } + + coefficientsTable$setData(estimates) + + } } -.maExtractFit <- function(jaspResults, options) { +.maExtractFit <- function(jaspResults, options) { if (is.null(jaspResults[["fit"]]$object)) return() @@ -240,16 +297,28 @@ return(jaspResults[["fit"]]$object[["fit"]]) } } -.maIsMetaregression <- function(options) { +.maExtractMetaregressionContainer <- function(jaspResults) { + + if (!is.null(jaspResults[["metaregressionContainer"]])) + return(jaspResults[["metaregressionContainer"]]) + + # create the output container + metaregressionContainer <- createJaspContainer(gettext("Meta-Regression Summary")) + metaregressionContainer$dependOn(c(.maDependencies, "confidenceInterval")) + jaspResults[["metaregressionContainer"]] <- metaregressionContainer + + return(metaregressionContainer) +} +.maIsMetaregression <- function(options) { return(length(options[["effectSizeModelTerms"]]) > 0) } -.maIsMetaregressionHeterogeneity <- function(options) { +.maIsMetaregressionHeterogeneity <- function(options) { return(length(options[["heterogeneityModelTerms"]]) > 0) } -.maIsMetaregressionFtest <- function(options) { - return(options[["fixedEffectTest"]] %in% c("knha", "r")) +.maIsMetaregressionFtest <- function(options) { + return(options[["fixedEffectTest"]] %in% c("knha", "t")) } -.maCheckIsPossibleOptions <- function(options) { +.maCheckIsPossibleOptions <- function(options) { if (length(options[["heterogeneityModelTerms"]]) > 0 && options[["clustering"]] != "") { return(gettext("Clustering is not supported when specifying a heterogeneity meta-regression model.")) @@ -257,7 +326,7 @@ return(NULL) } -.maClusteringMessage <- function(fit) { +.maClusteringMessage <- function(fit) { if (all(fit[["tcl"]][1] == fit[["tcl"]])) { return(gettextf("%1$i clusters with %2$i estimates each.", fit[["n"]], fit[["tcl"]][1])) @@ -265,6 +334,14 @@ return(gettextf("%1$i clusters with min/median/max %2$i/%3$i/%4$i estimates.", fit[["n"]], min(fit[["tcl"]]), median(fit[["tcl"]]), max(fit[["tcl"]]))) } } +.maFixedEffectTextMessage <- function(options) { + return(switch( + options[["fixedEffectTest"]], + "z" = gettext("Fixed effect tested using z-distribution."), + "t" = gettext("Fixed effect tested using t-distribution."), + "knha" = gettext("Fixed effect tested using Knapp and Hartung adjustment.") + )) +} .maGetMethodOptions <- function(options) { switch( options[["method"]], diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index ca363f99..a6403c72 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -298,20 +298,25 @@ Form Section { - title: qsTr("Clustering") + title: qsTr("Advanced") - CheckBox + Group { - name: "clusteringUseClubSandwich" - text: qsTr("Use clubSandwich") - checked: true - } + title: qsTr("Clustering") - CheckBox - { - name: "clusteringSmallSampleCorrection" - text: qsTr("Small sample correction") - checked: true + CheckBox + { + name: "clusteringUseClubSandwich" + text: qsTr("Use clubSandwich") + checked: true + } + + CheckBox + { + name: "clusteringSmallSampleCorrection" + text: qsTr("Small sample correction") + checked: true + } } } } \ No newline at end of file From 1dab16299648b9ed311b9f3cd8ce8f7b8e45322e Mon Sep 17 00:00:00 2001 From: FBartos Date: Sat, 15 Jun 2024 22:56:40 +0200 Subject: [PATCH 010/127] terms tests --- R/classicalmetaanalysiscommon.R | 207 +++++++++++++++++++++++++++-- inst/qml/ClassicalMetaAnalysis.qml | 5 +- 2 files changed, 196 insertions(+), 16 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 5474d585..818f2e67 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -19,8 +19,20 @@ .maFitModel(jaspResults, dataset, options) .maSummaryTable(jaspResults, dataset, options) - .maCoefficientTable(jaspResults, dataset, options, "effectSize") - .maCoefficientTable(jaspResults, dataset, options, "heterogeneity") + + # meta-regression tables + if (options[["metaregressionTermsTests"]]) { + .maTermsTable(jaspResults, dataset, options, "effectSize") + .maTermsTable(jaspResults, dataset, options, "heterogeneity") + } + if (options[["metaregressionCoefficientEstimates"]]) { + .maCoefficientEstimatesTable(jaspResults, dataset, options, "effectSize") + .maCoefficientEstimatesTable(jaspResults, dataset, options, "heterogeneity") + } + if (options[["metaregressionCoefficientCorrelationMatrix"]]) { + .maCoefficientCorrelationMatrixTable(jaspResults, dataset, options, "effectSize") + .maCoefficientCorrelationMatrixTable(jaspResults, dataset, options, "heterogeneity") + } return() } @@ -136,9 +148,8 @@ # dispatch columns based on the test type moderatorsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("QM")) moderatorsTable$addColumnInfo(name = "df1", type = "integer", title = if(.maIsMetaregressionFtest(options)) gettext("df1") else gettext("df")) - if (.maIsMetaregressionFtest(options)) { + if (.maIsMetaregressionFtest(options)) moderatorsTable$addColumnInfo(name = "df2", type = "number", title = gettext("df2")) - } moderatorsTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) modelSummaryContainer[["moderatorsTable"]] <- moderatorsTable @@ -172,21 +183,25 @@ row1 <- list( stat = fit[["QM"]], df1 = fit[["QMdf"]][1], - df2 = if(.maIsMetaregressionFtest(options)) fit[["QMdf"]][2], pval = fit[["QMp"]] ) + if (.maIsMetaregressionFtest(options)) + row1$df2 <- fit[["QMdf"]][2] + if (.maIsMetaregressionHeterogeneity(options)) { row2 <- list( stat = fit[["QS"]], df1 = fit[["QSdf"]][1], - df2 = if(.maIsMetaregressionFtest(options)) fit[["QSdf"]][2], pval = fit[["QSp"]] ) + if (.maIsMetaregressionFtest(options)) + row2$df2 <- fit[["QSdf"]][2] + row1$parameter <- gettext("Effect size") - row2$parameter <- gettext("heterogeneity") + row2$parameter <- gettext("Heterogeneity") } moderatorsTable$addRows(row1) @@ -197,12 +212,101 @@ if (options[["clustering"]] != "") moderatorsTable$addFootnote(.maClusteringMessage(fit), symbol = gettext("Clustering:")) } + + return() } -.maCoefficientTable <- function(jaspResults, dataset, options, parameter = "effectSize") { +.maTermsTable <- function(jaspResults, dataset, options, parameter = "effectSize") { metaregressionContainer <- .maExtractMetaregressionContainer(jaspResults) - if (!is.null(metaregressionContainer[["coefficientsTable"]])) + if (!is.null(metaregressionContainer[[paste0(parameter, "TermsTable")]])) + return() + + if (parameter == "heterogeneity" && !.maIsMetaregressionHeterogeneity(options)) + return() + + fit <- .maExtractFit(jaspResults, options) + + termsTable <- createJaspTable(switch( + parameter, + effectSize = gettext("Effect Size Meta-Regression Terms Tests"), + heterogeneity = gettext("Heterogeneity Meta-Regression Terms Tests") + )) + termsTable$position <- switch( + parameter, + effectSize = 1, + heterogeneity = 2 + ) + termsTable$dependOn("metaregressionTermsTests") + metaregressionContainer[[paste0(parameter, "TermsTable")]] <- termsTable + + termsTable$addColumnInfo(name = "term", type = "string", title = "") + termsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("QM")) + termsTable$addColumnInfo(name = "df1", type = "integer", title = if(.maIsMetaregressionFtest(options)) gettext("df1") else gettext("df")) + if (.maIsMetaregressionFtest(options)) { + termsTable$addColumnInfo(name = "df2", type = "number", title = gettext("df2")) + } + termsTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) + termsTable$addFootnote(.maFixedEffectTextMessage(options)) + + if (is.null(fit) || jaspBase::isTryError(fit)) + return() + + if (parameter == "effectSize") { + + terms <- attr(terms(fit[["formula.mods"]], data = fit[["data"]]),"term.labels") + termsIndex <- attr(model.matrix(fit[["formula.mods"]], data = fit[["data"]]), "assign") + termsTests <- do.call(rbind.data.frame, lapply(seq_along(terms), function(i) { + + termsAnova <- anova(fit, btt = seq_along(termsIndex)[termsIndex == i]) + + out <- list( + term = .maVariableNames(terms[i], options[["predictors"]]), + stat = termsAnova[["QM"]], + df1 = termsAnova[["QMdf"]][1], + pval = termsAnova[["QMp"]] + ) + + if (.maIsMetaregressionFtest(options)) + out$df2 <- termsAnova[["QMdf"]][2] + + return(out) + })) + + termsTable$setData(termsTests) + + } else if (parameter == "heterogeneity") { + + terms <- attr(terms(fit[["formula.scale"]], data = fit[["data"]]),"term.labels") + termsIndex <- attr(model.matrix(fit[["formula.scale"]], data = fit[["data"]]), "assign") + termsTests <- do.call(rbind.data.frame, lapply(seq_along(terms), function(i) { + + termsAnova <- anova(fit, btt = seq_along(termsIndex)[termsIndex == i]) + + out <- list( + term = .maVariableNames(terms[i], options[["predictors"]]), + stat = termsAnova[["QM"]], + df1 = termsAnova[["QMdf"]][1], + pval = termsAnova[["QMp"]] + ) + + if (.maIsMetaregressionFtest(options)) + out$df2 <- termsAnova[["QMdf"]][2] + + return(out) + })) + + termsTable$setData(termsTests) + + } + + return() +} +.maCoefficientEstimatesTable <- function(jaspResults, dataset, options, parameter = "effectSize") { + + metaregressionContainer <- .maExtractMetaregressionContainer(jaspResults) + + if (!is.null(metaregressionContainer[[paste0(parameter, "CoefficientTable")]])) return() if (parameter == "heterogeneity" && !.maIsMetaregressionHeterogeneity(options)) @@ -220,7 +324,8 @@ effectSize = 3, heterogeneity = 4 ) - metaregressionContainer[[parameter]] <- coefficientsTable + coefficientsTable$dependOn(c("metaregressionCoefficientEstimates", "confidenceIntervals")) + metaregressionContainer[[paste0(parameter, "CoefficientTable")]] <- coefficientsTable coefficientsTable$addColumnInfo(name = "name", type = "string", title = "") coefficientsTable$addColumnInfo(name = "est", type = "number", title = gettext("Estimate")) @@ -244,7 +349,7 @@ if (parameter == "effectSize") { estimates <- data.frame( - name = rownames(fit[["beta"]]), + name = .maVariableNames(rownames(fit[["beta"]]), options[["predictors"]]), est = fit[["beta"]][,1], se = fit[["se"]], stat = fit[["zval"]], @@ -264,7 +369,7 @@ } else if (parameter == "heterogeneity") { estimates <- data.frame( - name = rownames(fit[["alpha"]]), + name = .maVariableNames(rownames(fit[["alpha"]]), options[["predictors"]]), est = fit[["alpha"]][,1], se = fit[["se.alpha"]], stat = fit[["zval.alpha"]], @@ -282,8 +387,55 @@ coefficientsTable$setData(estimates) } + + return() } +.maCoefficientCorrelationMatrixTable <- function(jaspResults, dataset, options, parameter = "effectSize") { + + metaregressionContainer <- .maExtractMetaregressionContainer(jaspResults) + + if (!is.null(metaregressionContainer[[paste0(parameter, "CorrelationTable")]])) + return() + + if (parameter == "heterogeneity" && !.maIsMetaregressionHeterogeneity(options)) + return() + + fit <- .maExtractFit(jaspResults, options) + + correlationMatrixTable <- createJaspTable(switch( + parameter, + effectSize = gettext("Effect Size Meta-Regression Correlation Matrix"), + heterogeneity = gettext("Heterogeneity Meta-Regression Correlation Matrix") + )) + correlationMatrixTable$position <- switch( + parameter, + effectSize = 5, + heterogeneity = 6 + ) + correlationMatrixTable$dependOn("metaregressionCoefficientCorrelationMatrix") + metaregressionContainer[[paste0(parameter, "CorrelationTable")]] <- correlationMatrixTable + + + if (is.null(fit) || jaspBase::isTryError(fit)) + return() + + if (parameter == "effectSize") + correlationMatrix <- data.frame(cov2cor(fit[["vb"]])) + else if (parameter == "heterogeneity") + correlationMatrix <- data.frame(cov2cor(fit[["va"]])) + correlationMatrixNames <- .maVariableNames(colnames(correlationMatrix), options[["predictors"]]) + colnames(correlationMatrix) <- correlationMatrixNames + correlationMatrix$name <- correlationMatrixNames + + correlationMatrixTable$addColumnInfo(name = "name", type = "string", title = "") + for (correlationMatrixName in correlationMatrixNames) + correlationMatrixTable$addColumnInfo(name = correlationMatrixName, type = "number") + + correlationMatrixTable$setData(correlationMatrix) + + return() +} .maExtractFit <- function(jaspResults, options) { @@ -342,7 +494,7 @@ "knha" = gettext("Fixed effect tested using Knapp and Hartung adjustment.") )) } -.maGetMethodOptions <- function(options) { +.maGetMethodOptions <- function(options) { switch( options[["method"]], "fixedEffects" = "FE", @@ -360,3 +512,32 @@ NA ) } +.maVariableNames <- function(varNames, variables) { + + return(sapply(varNames, function(varName){ + + if (varName == "intrcpt") + return("Intercept") + + for (vn in variables) { + inf <- regexpr(vn, varName, fixed = TRUE) + + if (inf[1] != -1) { + varName <- paste0( + substr(varName, 0, inf[1] - 1), + substr(varName, inf[1], inf[1] + attr(inf, "match.length") - 1), + " (", + substr(varName, inf[1] + attr(inf, "match.length"), nchar(varName)) + ) + } + + } + + varName <- gsub(":", paste0(")", jaspBase::interactionSymbol), varName, fixed = TRUE) + varName <- paste0(varName, ")") + varName <- gsub(" ()", "", varName, fixed = TRUE) + + return(varName) + + })) +} diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index a6403c72..f22ad802 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -170,7 +170,6 @@ Form } } - Section { title: qsTr("Statistics") @@ -195,8 +194,8 @@ Form CheckBox { - name: "metaregressionCoefficientCovarianceMatrix" - text: qsTr("Coefficient covariance matrix") + name: "metaregressionCoefficientCorrelationMatrix" + text: qsTr("Coefficient correlation matrix") checked: false } } From 6bad41e0fff602b4206336eeaf0dfac31b0c5436 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 17 Jun 2024 08:23:55 +0200 Subject: [PATCH 011/127] updates --- R/classicalmetaanalysiscommon.R | 256 ++++++++++++++++++++++++++++- inst/qml/ClassicalMetaAnalysis.qml | 2 +- 2 files changed, 251 insertions(+), 7 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 818f2e67..36f42000 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -18,7 +18,12 @@ .ClassicalMetaAnalysisCommon <- function(jaspResults, dataset, options, ...) { .maFitModel(jaspResults, dataset, options) - .maSummaryTable(jaspResults, dataset, options) + #.maSummaryTable(jaspResults, dataset, options) + + # model summary + .maResidualHeterogeneityTable(jaspResults, dataset, options) + .maModeratorsTable(jaspResults, dataset, options) + .maPooledEstimatesTable(jaspResults, dataset, options) # meta-regression tables if (options[["metaregressionTermsTests"]]) { @@ -120,11 +125,11 @@ fit <- .maExtractFit(jaspResults, options) modelSummaryContainer <- createJaspContainer(gettext("Model Summary")) - modelSummaryContainer$dependOn(.maDependencies) + modelSummaryContainer$dependOn(c(.maDependencies, "confidenceIntervals", )) jaspResults[["modelSummaryContainer"]] <- modelSummaryContainer - ### residual heterogeneity table + ### residual heterogeneity table ---- residualHeterogeneityTable <- createJaspTable(gettext("Residual Heterogeneity Test")) residualHeterogeneityTable$position <- 1 @@ -135,7 +140,7 @@ modelSummaryContainer[["residualHeterogeneityTable"]] <- residualHeterogeneityTable - ### moderators table + ### moderators table ---- if (.maIsMetaregression(options)) { moderatorsTable <- createJaspTable(gettext("Omnibus Moderation Test")) @@ -156,7 +161,21 @@ } - ### stop on error + ### pooled results table ---- + pooledResultsTable <- createJaspTable(gettext("Pooled Results")) + pooledResultsTable$position <- 3 + + pooledResultsTable$addColumnInfo(name = "par", type = "string", title = "") + pooledResultsTable$addColumnInfo(name = "est", type = "number", title = "") + if (options[["confidenceIntervals"]]) { + overtitleCi <- gettextf("%s%% CI", 100 * options[["confidenceIntervalsLevel"]]) + pooledResultsTable$addColumnInfo(name = "lCi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) + pooledResultsTable$addColumnInfo(name = "uCi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) + } + modelSummaryContainer[["pooledResultsTable"]] <- pooledResultsTable + + + ### stop on error ---- if (is.null(fit)) return() @@ -171,13 +190,17 @@ } - ### fill tables + ### fill tables ---- + + ### residual heterogeneity ---- residualHeterogeneityTable$addRows(list( qstat = fit[["QE"]], df = fit[["k"]] - fit[["p"]], pval = fit[["QEp"]] )) + + ### meta-regression ---- if (.maIsMetaregression(options)) { row1 <- list( @@ -213,6 +236,206 @@ moderatorsTable$addFootnote(.maClusteringMessage(fit), symbol = gettext("Clustering:")) } + + + + return() +} + +.maResidualHeterogeneityTable <- function(jaspResults, dataset, options) { + + modelSummaryContainer <- .maExtractModelSummaryContainer(jaspResults) + + if (!is.null(modelSummaryContainer[["residualHeterogeneityTable"]])) + return() + + fit <- .maExtractFit(jaspResults, options) + + # residual heterogeneity table + residualHeterogeneityTable <- createJaspTable(gettext("Residual Heterogeneity Test")) + residualHeterogeneityTable$position <- 1 + modelSummaryContainer[["residualHeterogeneityTable"]] <- residualHeterogeneityTable + + residualHeterogeneityTable$addColumnInfo(name = "qstat", type = "number", title = gettext("QE")) + residualHeterogeneityTable$addColumnInfo(name = "df", type = "integer", title = gettext("df")) + residualHeterogeneityTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) + + # stop and display errors + if (is.null(fit)) + return() + + if (!is.null(.maCheckIsPossibleOptions(options))) { + residualHeterogeneityTable$setError(.maCheckIsPossibleOptions(options)) + return() + } + + if (jaspBase::isTryError(fit)) { + residualHeterogeneityTable$setError(fit) + return() + } + + # residual heterogeneity + residualHeterogeneityTable$addRows(list( + qstat = fit[["QE"]], + df = fit[["k"]] - fit[["p"]], + pval = fit[["QEp"]] + )) + + return() +} +.maModeratorsTable <- function(jaspResults, dataset, options) { + + modelSummaryContainer <- .maExtractModelSummaryContainer(jaspResults) + + if (!is.null(modelSummaryContainer[["moderatorsTable"]])) + return() + + if (!.maIsMetaregression(options)) + return() + + fit <- .maExtractFit(jaspResults, options) + + # omnibus moderator table + moderatorsTable <- createJaspTable(gettext("Omnibus Moderation Test")) + moderatorsTable$position <- 2 + modelSummaryContainer[["moderatorsTable"]] <- moderatorsTable + + if (.maIsMetaregressionHeterogeneity(options)) # add column name for the omnibus test if both effect size and scale moderators are specified + moderatorsTable$addColumnInfo(name = "parameter", type = "string", title = gettext("Parameter")) + moderatorsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("QM")) + moderatorsTable$addColumnInfo(name = "df1", type = "integer", title = if(.maIsMetaregressionFtest(options)) gettext("df1") else gettext("df")) + if (.maIsMetaregressionFtest(options)) + moderatorsTable$addColumnInfo(name = "df2", type = "number", title = gettext("df2")) + moderatorsTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) + + # stop on error + if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) + return() + + # effect size moderation + if (.maIsMetaregression(options)) { + + row1 <- list( + stat = fit[["QM"]], + df1 = fit[["QMdf"]][1], + pval = fit[["QMp"]] + ) + + if (.maIsMetaregressionFtest(options)) + row1$df2 <- fit[["QMdf"]][2] + + if (.maIsMetaregressionHeterogeneity(options)) + row1$parameter <- gettext("Effect size") + + moderatorsTable$addRows(row1) + } + + # heterogeneity moderation + if (.maIsMetaregressionHeterogeneity(options)) { + + row2 <- list( + stat = fit[["QS"]], + df1 = fit[["QSdf"]][1], + pval = fit[["QSp"]] + ) + + if (.maIsMetaregressionFtest(options)) + row2$df2 <- fit[["QSdf"]][2] + + row2$parameter <- gettext("Heterogeneity") + moderatorsTable$addRows(row2) + } + + + if (options[["clustering"]] != "") + moderatorsTable$addFootnote(.maClusteringMessage(fit), symbol = gettext("Clustering:")) + + return() +} +.maPooledEstimatesTable <- function(jaspResults, dataset, options) { + + modelSummaryContainer <- .maExtractModelSummaryContainer(jaspResults) + + if (!is.null(modelSummaryContainer[["pooledEstimatesTable"]])) + return() + + if (!.maIsMetaregression(options)) + return() + + fit <- .maExtractFit(jaspResults, options) + + # pooled estimates + pooledEstimatesTable <- createJaspTable(gettext("Pooled Estimates")) + pooledEstimatesTable$position <- 3 + pooledEstimatesTable$dependOn(c("heterogeneityTau", "heterogeneityTau2", "heterogeneityI2", "heterogeneityH2", "confidenceIntervals", "confidenceIntervalsLevel")) + modelSummaryContainer[["pooledEstimatesTable"]] <- pooledEstimatesTable + + pooledEstimatesTable$addColumnInfo(name = "par", type = "string", title = "") + pooledEstimatesTable$addColumnInfo(name = "est", type = "number", title = gettext("Estimate")) + if (options[["confidenceIntervals"]]) { + overtitleCi <- gettextf("%s%% CI", 100 * options[["confidenceIntervalsLevel"]]) + pooledEstimatesTable$addColumnInfo(name = "lCi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) + pooledEstimatesTable$addColumnInfo(name = "uCi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) + } + + + # stop on error + if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) + return() + + # pooled estimates + emmPrepFit <- metafor::emmprep(fit) + emmResults <- data.frame(emmeans::emmeans( + emmPrepFit, + specs = "1", + type = "response", + weights = "proportional", + level = options[["confidenceIntervalsLevel"]] + )) + + if (options[["confidenceIntervals"]]) { + pooledEstimatesTable$addRows(list( + par = "Effect Size", + est = emmResults$emmean, + lCi = emmResults[1,ncol(emmResults) - 1], + uCi = emmResults[1,ncol(emmResults)] + )) + } else { + pooledEstimatesTable$addRows(list( + par = "Effect Size", + est = emmResults$emmean + )) + } + + + if (.maGetMethodOptions(options) != "FE") { + + heterogeneityShow <- c( + if (options[["heterogeneityTau"]]) 1, + if (options[["heterogeneityTau2"]]) 2, + if (options[["heterogeneityI2"]]) 3, + if (options[["heterogeneityH2"]]) 4 + ) + + if (length(heterogeneityShow) > 0) { + + confIntHeterogeneity <- confint( + jaspResults[["fit"]]$object[["fit"]], # requires non-clustered fit + level = 100 * options[["confidenceIntervalsLevel"]] + ) + confIntHeterogeneity <- data.frame(confIntHeterogeneity[["random"]])[c(2,1,3,4),] + colnames(confIntHeterogeneity) <- c("est", "lCi", "uCi") + confIntHeterogeneity$par <- c("\U1D70F", "\U1D70F\U00B2", "I\U00B2", "H\U00B2") + + if (!options[["confidenceIntervals"]]) + confIntHeterogeneity <- confIntHeterogeneity[,c("par", "est")] + + for (i in heterogeneityShow) + pooledEstimatesTable$addRows(confIntHeterogeneity[i,]) + + } + } + return() } .maTermsTable <- function(jaspResults, dataset, options, parameter = "effectSize") { @@ -254,6 +477,9 @@ if (parameter == "effectSize") { + if (!.maIsMetaregressionEffectSize(options)) + return() + terms <- attr(terms(fit[["formula.mods"]], data = fit[["data"]]),"term.labels") termsIndex <- attr(model.matrix(fit[["formula.mods"]], data = fit[["data"]]), "assign") termsTests <- do.call(rbind.data.frame, lapply(seq_along(terms), function(i) { @@ -277,6 +503,9 @@ } else if (parameter == "heterogeneity") { + if (!.maIsMetaregressionHeterogeneity(options)) + return() + terms <- attr(terms(fit[["formula.scale"]], data = fit[["data"]]),"term.labels") termsIndex <- attr(model.matrix(fit[["formula.scale"]], data = fit[["data"]]), "assign") termsTests <- do.call(rbind.data.frame, lapply(seq_along(terms), function(i) { @@ -449,6 +678,18 @@ return(jaspResults[["fit"]]$object[["fit"]]) } } +.maExtractModelSummaryContainer <- function(jaspResults) { + + if (!is.null(jaspResults[["modelSummaryContainer"]])) + return(jaspResults[["modelSummaryContainer"]]) + + # create the output container + modelSummaryContainer <- createJaspContainer(gettext("Model Summary")) + modelSummaryContainer$dependOn(.maDependencies) + jaspResults[["modelSummaryContainer"]] <- modelSummaryContainer + + return(modelSummaryContainer) +} .maExtractMetaregressionContainer <- function(jaspResults) { if (!is.null(jaspResults[["metaregressionContainer"]])) @@ -462,6 +703,9 @@ return(metaregressionContainer) } .maIsMetaregression <- function(options) { + return(.maIsMetaregressionEffectSize(options) || .maIsMetaregressionHeterogeneity(options)) +} +.maIsMetaregressionEffectSize <- function(options) { return(length(options[["effectSizeModelTerms"]]) > 0) } .maIsMetaregressionHeterogeneity <- function(options) { diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index f22ad802..36433d93 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -182,7 +182,7 @@ Form { name: "metaregressionTermsTests" text: qsTr("Terms tests") - checked: true + checked: true // TODO: Enable once at least one term is selected } CheckBox From ead17ce2c330cbed71c57ab1c7a3f35cc732c374 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 17 Jun 2024 10:27:27 +0200 Subject: [PATCH 012/127] Update EffectSizeComputation.qml --- inst/qml/EffectSizeComputation.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index 50eeac58..bc55f36f 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -30,6 +30,7 @@ Form id: effectSizeType name: "effectSizeType" headerLabels: ["Design", "Measurement", "Effect size"] + defaultValues: [{"design": "independentGroups"}] rowComponent: RowLayout { From d4698bb87b04e8ec1468b930ac6bb06ab388364e Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 17 Jun 2024 14:51:17 +0200 Subject: [PATCH 013/127] updates --- R/classicalmetaanalysis.R | 7 +- R/classicalmetaanalysiscommon.R | 237 +++++++++++++++++++++-------- inst/qml/ClassicalMetaAnalysis.qml | 39 ++++- 3 files changed, 214 insertions(+), 69 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index ef5e373b..6c4b7310 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -46,7 +46,9 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "heterogeneityModelTerms", "heterogeneityModelIncludeIntercept", "predictors", "predictors.types", "clustering", "studyLabel", "method", "fixedEffectTest", "confidenceIntervalsLevel", - "clusteringUseClubSandwich", "clusteringSmallSampleCorrection" + "clusteringUseClubSandwich", "clusteringSmallSampleCorrection", + "fixParametersTau2", "fixParametersTau2Value", + "fixParametersWeights", "fixParametersWeightsVariable" ) .maReady <- function(options) { @@ -75,7 +77,8 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { columns.as.numeric = c( options[["effectSize"]], options[["effectSizeStandardError"]], - if (length(predictorsScale) > 0) predictorsScale + if (length(predictorsScale) > 0) predictorsScale, + if (options[["fixParametersWeights"]]) options[["fixParametersWeightsVariable"]] )) # omit NAs diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 36f42000..10632ee2 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -79,6 +79,12 @@ data = dataset ) + # add fixed parameters if needed + if (options[["fixParametersWeights"]]) + rmaInput$weights <- as.name(options[["fixParametersWeightsVariable"]]) + if (options[["fixParametersTau2"]]) + rmaInput$tau2 <- .maGetFixedTau2Options(options) + # add labels if specified if (options[["studyLabel"]] != "") rmaInput$slab <- as.name(options[["studyLabel"]]) @@ -359,15 +365,12 @@ if (!is.null(modelSummaryContainer[["pooledEstimatesTable"]])) return() - if (!.maIsMetaregression(options)) - return() - fit <- .maExtractFit(jaspResults, options) # pooled estimates pooledEstimatesTable <- createJaspTable(gettext("Pooled Estimates")) pooledEstimatesTable$position <- 3 - pooledEstimatesTable$dependOn(c("heterogeneityTau", "heterogeneityTau2", "heterogeneityI2", "heterogeneityH2", "confidenceIntervals", "confidenceIntervalsLevel")) + pooledEstimatesTable$dependOn(c("heterogeneityTau", "heterogeneityTau2", "heterogeneityI2", "heterogeneityH2", "confidenceIntervals", "confidenceIntervalsLevel", "heterogeneityPredictionInterval")) modelSummaryContainer[["pooledEstimatesTable"]] <- pooledEstimatesTable pooledEstimatesTable$addColumnInfo(name = "par", type = "string", title = "") @@ -377,65 +380,38 @@ pooledEstimatesTable$addColumnInfo(name = "lCi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) pooledEstimatesTable$addColumnInfo(name = "uCi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) } + if (options[["heterogeneityPredictionInterval"]]) { + overtitleCi <- gettextf("%s%% PI", 100 * options[["confidenceIntervalsLevel"]]) + pooledEstimatesTable$addColumnInfo(name = "lPi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) + pooledEstimatesTable$addColumnInfo(name = "uPi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) + } # stop on error if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) return() - # pooled estimates - emmPrepFit <- metafor::emmprep(fit) - emmResults <- data.frame(emmeans::emmeans( - emmPrepFit, - specs = "1", - type = "response", - weights = "proportional", - level = options[["confidenceIntervalsLevel"]] - )) - - if (options[["confidenceIntervals"]]) { - pooledEstimatesTable$addRows(list( - par = "Effect Size", - est = emmResults$emmean, - lCi = emmResults[1,ncol(emmResults) - 1], - uCi = emmResults[1,ncol(emmResults)] - )) - } else { - pooledEstimatesTable$addRows(list( - par = "Effect Size", - est = emmResults$emmean - )) - } - + # pooled effect size + pooledEffect <- .maComputePooledEffect(fit, options) + pooledEstimatesTable$addRows(pooledEffect) + # pooled heterogeneity if (.maGetMethodOptions(options) != "FE") { - heterogeneityShow <- c( - if (options[["heterogeneityTau"]]) 1, - if (options[["heterogeneityTau2"]]) 2, - if (options[["heterogeneityI2"]]) 3, - if (options[["heterogeneityH2"]]) 4 - ) - - if (length(heterogeneityShow) > 0) { - - confIntHeterogeneity <- confint( - jaspResults[["fit"]]$object[["fit"]], # requires non-clustered fit - level = 100 * options[["confidenceIntervalsLevel"]] - ) - confIntHeterogeneity <- data.frame(confIntHeterogeneity[["random"]])[c(2,1,3,4),] - colnames(confIntHeterogeneity) <- c("est", "lCi", "uCi") - confIntHeterogeneity$par <- c("\U1D70F", "\U1D70F\U00B2", "I\U00B2", "H\U00B2") - - if (!options[["confidenceIntervals"]]) - confIntHeterogeneity <- confIntHeterogeneity[,c("par", "est")] - - for (i in heterogeneityShow) - pooledEstimatesTable$addRows(confIntHeterogeneity[i,]) + # requires non-clustered fit + pooledHeterogeneity <- .maComputePooledHeterogeneity(jaspResults[["fit"]]$object[["fit"]], options) + if (nrow(pooledHeterogeneity) > 0) { + for (i in 1:nrow(pooledHeterogeneity)) + pooledEstimatesTable$addRows(pooledHeterogeneity[i,]) } } + # add messages + pooledEstimatesMessages <- .maPooledEstimatesMessages(fit, dataset, options) + for (i in seq_along(pooledEstimatesMessages)) + pooledEstimatesTable$addFootnote(pooledEstimatesMessages[i]) + return() } .maTermsTable <- function(jaspResults, dataset, options, parameter = "effectSize") { @@ -702,6 +678,107 @@ return(metaregressionContainer) } + +.maComputePooledEffect <- function(fit, options) { + + if (!.maIsMetaregressionEffectSize(options)) { + predictedEffect <- predict(fit, level = 100 * options[["confidenceIntervalsLevel"]]) + } else { + if (.maIsMetaregressionHeterogeneity(options)) { + predictedEffect <- predict( + fit, + newmods = colMeans(model.matrix(fit)$location)[-1], + newscale = colMeans(model.matrix(fit)$scale)[-1], + level = 100 * options[["confidenceIntervalsLevel"]] + ) + } else { + predictedEffect <- predict( + fit, + newmods = colMeans(model.matrix(fit))[-1], + evel = 100 * options[["confidenceIntervalsLevel"]] + ) + } + } + + predictedEffect <- data.frame(predictedEffect) + colnames(predictedEffect) <- c("est", "se", "lCi", "uCi", "lPi", "uPi") + predictedEffect$par <- "Effect Size" + + keepResults <- c( + "par", + "est", + if (options[["confidenceIntervals"]]) "lCi", + if (options[["confidenceIntervals"]]) "uCi", + if (options[["heterogeneityPredictionInterval"]]) "lPi", + if (options[["heterogeneityPredictionInterval"]]) "uPi" + ) + + predictedEffect <- predictedEffect[,keepResults] + return(as.list(predictedEffect)) +} +.maComputePooledHeterogeneity <- function(fit, options) { + + if (options[["fixParametersTau2"]]) { + + confIntHeterogeneity <- data.frame( + par = c("\U1D70F", "\U1D70F\U00B2"), + est = c(sqrt(.maGetFixedTau2Options(options)), .maGetFixedTau2Options(options)), + lCi = c(NA, NA), + uCi = c(NA, NA) + ) + + # keep only the requested parameters (other than tau and tau^2 are not possible) + heterogeneityShow <- c( + if (options[["heterogeneityTau"]]) 1, + if (options[["heterogeneityTau2"]]) 2 + ) + + confIntHeterogeneity <- confIntHeterogeneity[heterogeneityShow,,drop = FALSE] + + } else if (.maIsMetaregressionHeterogeneity(options)) { + # no confint support + # predict the scale on the average value + predScale <- predict(fit, newscale = colMeans(model.matrix(fit)$scale)[-1], level = 100 * options[["confidenceIntervalsLevel"]]) + + confIntHeterogeneity <- data.frame( + par = c("\U1D70F", "\U1D70F\U00B2"), + est = exp(c(predScale[["pred"]] / 2, predScale[["pred"]])), + lCi = exp(c(predScale[["ci.lb"]] / 2, predScale[["ci.lb"]])), + uCi = exp(c(predScale[["ci.ub"]] / 2, predScale[["ci.ub"]])) + ) + + # keep only the requested parameters (other than tau and tau^2 are not possible) + heterogeneityShow <- c( + if (options[["heterogeneityTau"]]) 1, + if (options[["heterogeneityTau2"]]) 2 + ) + + confIntHeterogeneity <- confIntHeterogeneity[heterogeneityShow,,drop = FALSE] + + } else { + + confIntHeterogeneity <- confint(fit, level = 100 * options[["confidenceIntervalsLevel"]]) + confIntHeterogeneity <- data.frame(confIntHeterogeneity[["random"]])[c(2,1,3,4),] + colnames(confIntHeterogeneity) <- c("est", "lCi", "uCi") + confIntHeterogeneity$par <- c("\U1D70F", "\U1D70F\U00B2", "I\U00B2", "H\U00B2") + + # keep only the requested parameters + heterogeneityShow <- c( + if (options[["heterogeneityTau"]]) 1, + if (options[["heterogeneityTau2"]]) 2, + if (options[["heterogeneityI2"]]) 3, + if (options[["heterogeneityH2"]]) 4 + ) + + confIntHeterogeneity <- confIntHeterogeneity[heterogeneityShow,,drop = FALSE] + } + + if (!options[["confidenceIntervals"]]) + confIntHeterogeneity <- confIntHeterogeneity[,c("par", "est")] + + return(confIntHeterogeneity) +} + .maIsMetaregression <- function(options) { return(.maIsMetaregressionEffectSize(options) || .maIsMetaregressionHeterogeneity(options)) } @@ -722,22 +799,7 @@ return(NULL) } -.maClusteringMessage <- function(fit) { - if (all(fit[["tcl"]][1] == fit[["tcl"]])) { - return(gettextf("%1$i clusters with %2$i estimates each.", fit[["n"]], fit[["tcl"]][1])) - } else { - return(gettextf("%1$i clusters with min/median/max %2$i/%3$i/%4$i estimates.", fit[["n"]], min(fit[["tcl"]]), median(fit[["tcl"]]), max(fit[["tcl"]]))) - } -} -.maFixedEffectTextMessage <- function(options) { - return(switch( - options[["fixedEffectTest"]], - "z" = gettext("Fixed effect tested using z-distribution."), - "t" = gettext("Fixed effect tested using t-distribution."), - "knha" = gettext("Fixed effect tested using Knapp and Hartung adjustment.") - )) -} .maGetMethodOptions <- function(options) { switch( options[["method"]], @@ -756,6 +818,16 @@ NA ) } +.maGetFixedTau2Options <- function(options) { + + tau2 <- .parseRCodeInOptions(options[["fixParametersTau2Value"]]) + + if (!is.numeric(tau2) || length(tau2) != 1 || tau2 < 0) + .quitAnalysis(gettext("The fixed value for tau2 must be a positive number.")) + else + return(tau2) +} + .maVariableNames <- function(varNames, variables) { return(sapply(varNames, function(varName){ @@ -785,3 +857,38 @@ })) } + + +.maClusteringMessage <- function(fit) { + if (all(fit[["tcl"]][1] == fit[["tcl"]])) { + return(gettextf("%1$i clusters with %2$i estimates each.", fit[["n"]], fit[["tcl"]][1])) + } else { + return(gettextf("%1$i clusters with min/median/max %2$i/%3$i/%4$i estimates.", fit[["n"]], min(fit[["tcl"]]), median(fit[["tcl"]]), max(fit[["tcl"]]))) + } +} +.maFixedEffectTextMessage <- function(options) { + return(switch( + options[["fixedEffectTest"]], + "z" = gettext("Fixed effect tested using z-distribution."), + "t" = gettext("Fixed effect tested using t-distribution."), + "knha" = gettext("Fixed effect tested using Knapp and Hartung adjustment.") + )) +} +.maPooledEstimatesMessages <- function(fit, dataset, options) { + + messages <- NULL + + if (.maIsMetaregressionEffectSize(options)) + messages <- c(messages, gettext("The pooled effect size corresponds to the weighted average effect across studies.")) + + if (.maIsMetaregressionHeterogeneity(options)) + messages <- c(messages, gettext("The pooled heterogeneity estimate corresponds to the weighted average heterogeneity across studies.")) + + if (.maIsMetaregressionHeterogeneity(options) && (options[["heterogeneityI2"]] || options[["heterogeneityH2"]])) + messages <- c(messages, gettext("The IΒ² and HΒ² statistics are not available for heterogeneity models.")) + + if (length(attr(dataset, "na.action")) > 0) + messages <- c(messages, gettextf("%1$i observations were ommited due to missing values.", length(attr(dataset, "na.action")))) + + return(messages) +} diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 36433d93..53cec49b 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -235,7 +235,7 @@ Form CheckBox { - text: qsTr("Prediction Interval") + text: qsTr("Prediction interval") name: "heterogeneityPredictionInterval" checked: false } @@ -301,7 +301,7 @@ Form Group { - title: qsTr("Clustering") + title: qsTr("Clustering") CheckBox { @@ -317,5 +317,40 @@ Form checked: true } } + + Group + { + title: qsTr("Fix Parameters") + + CheckBox // TODO: remove all items form heterogeneity model when specified + { + name: "fixParametersTau2" + text: qsTr("𝜏²") + childrenOnSameRow: true + + FormulaField + { + label: "" + name: "fixParametersTau2Value" + value: "1" + min: 0 + inclusive: JASP.None + } + } + + CheckBox + { + name: "fixParametersWeights" + text: qsTr("Weights") + childrenOnSameRow: true + + DropDown + { + label: "" + name: "fixParametersWeightsVariable" + source: "allVariables" + } + } + } } } \ No newline at end of file From d843d1acd2d115a5f7de9964640a252282cac46b Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 17 Jun 2024 15:54:01 +0200 Subject: [PATCH 014/127] updates --- R/classicalmetaanalysiscommon.R | 290 ++++++++++++++--------------- inst/qml/ClassicalMetaAnalysis.qml | 42 ++++- 2 files changed, 176 insertions(+), 156 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 10632ee2..79d57d89 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -18,7 +18,6 @@ .ClassicalMetaAnalysisCommon <- function(jaspResults, dataset, options, ...) { .maFitModel(jaspResults, dataset, options) - #.maSummaryTable(jaspResults, dataset, options) # model summary .maResidualHeterogeneityTable(jaspResults, dataset, options) @@ -39,10 +38,13 @@ .maCoefficientCorrelationMatrixTable(jaspResults, dataset, options, "heterogeneity") } + if (options[["fitMeasures"]]) + .maFitMeasuresTable(jaspResults, dataset, options) + return() } - +# fitting functions .maGetFormula <- function(modelTerms, includeIntercept) { predictors <- unlist(lapply(modelTerms, function(x) { @@ -121,133 +123,10 @@ fitClustered = fitClustered ) - return() -} -.maSummaryTable <- function(jaspResults, dataset, options) { - - if (!is.null(jaspResults[["modelSummaryContainer"]])) - return() - - fit <- .maExtractFit(jaspResults, options) - - modelSummaryContainer <- createJaspContainer(gettext("Model Summary")) - modelSummaryContainer$dependOn(c(.maDependencies, "confidenceIntervals", )) - jaspResults[["modelSummaryContainer"]] <- modelSummaryContainer - - - ### residual heterogeneity table ---- - residualHeterogeneityTable <- createJaspTable(gettext("Residual Heterogeneity Test")) - residualHeterogeneityTable$position <- 1 - - residualHeterogeneityTable$addColumnInfo(name = "qstat", type = "number", title = gettext("QE")) - residualHeterogeneityTable$addColumnInfo(name = "df", type = "integer", title = gettext("df")) - residualHeterogeneityTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) - - modelSummaryContainer[["residualHeterogeneityTable"]] <- residualHeterogeneityTable - - - ### moderators table ---- - if (.maIsMetaregression(options)) { - - moderatorsTable <- createJaspTable(gettext("Omnibus Moderation Test")) - moderatorsTable$position <- 2 - - # add column name for the omnibus test if both effect size and scale moderators are specified - if (.maIsMetaregressionHeterogeneity(options)) - moderatorsTable$addColumnInfo(name = "parameter", type = "string", title = gettext("Parameter")) - - # dispatch columns based on the test type - moderatorsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("QM")) - moderatorsTable$addColumnInfo(name = "df1", type = "integer", title = if(.maIsMetaregressionFtest(options)) gettext("df1") else gettext("df")) - if (.maIsMetaregressionFtest(options)) - moderatorsTable$addColumnInfo(name = "df2", type = "number", title = gettext("df2")) - moderatorsTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) - - modelSummaryContainer[["moderatorsTable"]] <- moderatorsTable - } - - - ### pooled results table ---- - pooledResultsTable <- createJaspTable(gettext("Pooled Results")) - pooledResultsTable$position <- 3 - - pooledResultsTable$addColumnInfo(name = "par", type = "string", title = "") - pooledResultsTable$addColumnInfo(name = "est", type = "number", title = "") - if (options[["confidenceIntervals"]]) { - overtitleCi <- gettextf("%s%% CI", 100 * options[["confidenceIntervalsLevel"]]) - pooledResultsTable$addColumnInfo(name = "lCi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) - pooledResultsTable$addColumnInfo(name = "uCi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) - } - modelSummaryContainer[["pooledResultsTable"]] <- pooledResultsTable - - - ### stop on error ---- - if (is.null(fit)) - return() - - if (!is.null(.maCheckIsPossibleOptions(options))) { - residualHeterogeneityTable$setError(.maCheckIsPossibleOptions(options)) - return() - } - - if (jaspBase::isTryError(fit)) { - residualHeterogeneityTable$setError(fit) - return() - } - - - ### fill tables ---- - - ### residual heterogeneity ---- - residualHeterogeneityTable$addRows(list( - qstat = fit[["QE"]], - df = fit[["k"]] - fit[["p"]], - pval = fit[["QEp"]] - )) - - - ### meta-regression ---- - if (.maIsMetaregression(options)) { - - row1 <- list( - stat = fit[["QM"]], - df1 = fit[["QMdf"]][1], - pval = fit[["QMp"]] - ) - - if (.maIsMetaregressionFtest(options)) - row1$df2 <- fit[["QMdf"]][2] - - if (.maIsMetaregressionHeterogeneity(options)) { - - row2 <- list( - stat = fit[["QS"]], - df1 = fit[["QSdf"]][1], - pval = fit[["QSp"]] - ) - - if (.maIsMetaregressionFtest(options)) - row2$df2 <- fit[["QSdf"]][2] - - row1$parameter <- gettext("Effect size") - row2$parameter <- gettext("Heterogeneity") - } - - moderatorsTable$addRows(row1) - - if (.maIsMetaregressionHeterogeneity(options)) - moderatorsTable$addRows(row2) - - if (options[["clustering"]] != "") - moderatorsTable$addFootnote(.maClusteringMessage(fit), symbol = gettext("Clustering:")) - } - - - - return() } +# output tables .maResidualHeterogeneityTable <- function(jaspResults, dataset, options) { modelSummaryContainer <- .maExtractModelSummaryContainer(jaspResults) @@ -304,10 +183,11 @@ # omnibus moderator table moderatorsTable <- createJaspTable(gettext("Omnibus Moderation Test")) moderatorsTable$position <- 2 + moderatorsTable$dependOn(c("addOmnibusModeratorTestEffectSizeCoefficients", "addOmnibusModeratorTestEffectSizeCoefficientsValues", + "addOmnibusModeratorTestHeterogeneityCoefficients", "addOmnibusModeratorTestHeterogeneityCoefficientsValues")) modelSummaryContainer[["moderatorsTable"]] <- moderatorsTable - if (.maIsMetaregressionHeterogeneity(options)) # add column name for the omnibus test if both effect size and scale moderators are specified - moderatorsTable$addColumnInfo(name = "parameter", type = "string", title = gettext("Parameter")) + moderatorsTable$addColumnInfo(name = "parameter", type = "string", title = gettext("Parameter")) moderatorsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("QM")) moderatorsTable$addColumnInfo(name = "df1", type = "integer", title = if(.maIsMetaregressionFtest(options)) gettext("df1") else gettext("df")) if (.maIsMetaregressionFtest(options)) @@ -321,38 +201,37 @@ # effect size moderation if (.maIsMetaregression(options)) { - row1 <- list( - stat = fit[["QM"]], - df1 = fit[["QMdf"]][1], - pval = fit[["QMp"]] - ) + testEffectSize <- .maOmnibusTest(fit, options, parameter = "effectSize") + moderatorsTable$addRows(testEffectSize) - if (.maIsMetaregressionFtest(options)) - row1$df2 <- fit[["QMdf"]][2] - - if (.maIsMetaregressionHeterogeneity(options)) - row1$parameter <- gettext("Effect size") - - moderatorsTable$addRows(row1) + if (options[["addOmnibusModeratorTestEffectSizeCoefficients"]]) { + testEffectSizeCoefficients <- .maOmnibusTestCoefficients(fit, options, parameter = "effectSize") + if (length(testEffectSizeCoefficients) == 1) { + moderatorsTable$setError(testEffectSizeCoefficients) + return() + } else { + moderatorsTable$addRows(testEffectSizeCoefficients) + } + } } # heterogeneity moderation if (.maIsMetaregressionHeterogeneity(options)) { - row2 <- list( - stat = fit[["QS"]], - df1 = fit[["QSdf"]][1], - pval = fit[["QSp"]] - ) - - if (.maIsMetaregressionFtest(options)) - row2$df2 <- fit[["QSdf"]][2] + testHeterogeneity <- .maOmnibusTest(fit, options, parameter = "heterogeneity") + moderatorsTable$addRows(testHeterogeneity) - row2$parameter <- gettext("Heterogeneity") - moderatorsTable$addRows(row2) + if (options[["addOmnibusModeratorTestHeterogeneityCoefficients"]]) { + testHeterogeneityCoefficients <- .maOmnibusTestCoefficients(fit, options, parameter = "heterogeneity") + if (length(testHeterogeneityCoefficients) == 1) { + moderatorsTable$setError(testHeterogeneityCoefficients) + return() + } else { + moderatorsTable$addRows(testHeterogeneityCoefficients) + } + } } - if (options[["clustering"]] != "") moderatorsTable$addFootnote(.maClusteringMessage(fit), symbol = gettext("Clustering:")) @@ -414,6 +293,31 @@ return() } +.maFitMeasuresTable <- function(jaspResults, dataset, options) { + + fit <- .maExtractFit(jaspResults, options) + + # fit measures table + fitMeasuresTable <- createJaspTable(gettext("Fit Measures")) + fitMeasuresTable$position <- 3 + fitMeasuresTable$dependOn(c(.maDependencies, "fitMeasures")) + jaspResults[["fitMeasuresTable"]] <- fitMeasuresTable + + + fitMeasuresTable$addColumnInfo(name = "ll", title = gettext("Log Lik."), type = "number") + fitMeasuresTable$addColumnInfo(name = "dev", title = gettext("Deviance"), type = "number") + fitMeasuresTable$addColumnInfo(name = "AIC", title = gettext("AIC"), type = "number") + fitMeasuresTable$addColumnInfo(name = "BIC", title = gettext("BIC"), type = "number") + fitMeasuresTable$addColumnInfo(name = "AICc", title = gettext("AICc"), type = "number") + + # stop on error + if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) + return() + + fitMeasuresTable$setData(t(fit[["fit.stats"]])) + + return() +} .maTermsTable <- function(jaspResults, dataset, options, parameter = "effectSize") { metaregressionContainer <- .maExtractMetaregressionContainer(jaspResults) @@ -642,6 +546,7 @@ return() } +# containers/state functions .maExtractFit <- function(jaspResults, options) { if (is.null(jaspResults[["fit"]]$object)) @@ -662,6 +567,7 @@ # create the output container modelSummaryContainer <- createJaspContainer(gettext("Model Summary")) modelSummaryContainer$dependOn(.maDependencies) + modelSummaryContainer$position <- 1 jaspResults[["modelSummaryContainer"]] <- modelSummaryContainer return(modelSummaryContainer) @@ -674,11 +580,13 @@ # create the output container metaregressionContainer <- createJaspContainer(gettext("Meta-Regression Summary")) metaregressionContainer$dependOn(c(.maDependencies, "confidenceInterval")) + metaregressionContainer$position <- 2 jaspResults[["metaregressionContainer"]] <- metaregressionContainer return(metaregressionContainer) } +# help compute functions .maComputePooledEffect <- function(fit, options) { if (!.maIsMetaregressionEffectSize(options)) { @@ -695,12 +603,21 @@ predictedEffect <- predict( fit, newmods = colMeans(model.matrix(fit))[-1], - evel = 100 * options[["confidenceIntervalsLevel"]] + level = 100 * options[["confidenceIntervalsLevel"]] ) } } + # to data.frame predictedEffect <- data.frame(predictedEffect) + + # add empty prediction interval for FE + if (.maGetMethodOptions(options) == "FE") { + predictedEffect$pi.lb <- NA + predictedEffect$pi.ub <- NA + } + + # fix column names colnames(predictedEffect) <- c("est", "se", "lCi", "uCi", "lPi", "uPi") predictedEffect$par <- "Effect Size" @@ -778,7 +695,72 @@ return(confIntHeterogeneity) } +.maOmnibusTest <- function(fit, options, parameter = "effectSize") { + + if (parameter == "effectSize") { + row <- list( + parameter = gettext("Effect size"), + stat = fit[["QM"]], + df1 = fit[["QMdf"]][1], + pval = fit[["QMp"]] + ) + } else if (parameter == "heterogeneity") { + row <- list( + parameter = gettext("Heterogeneity"), + stat = fit[["QS"]], + df1 = fit[["QSdf"]][1], + pval = fit[["QSp"]] + ) + } + + if (.maIsMetaregressionFtest(options)) { + if (parameter == "effectSize") + row$df2 <- fit[["QMdf"]][2] + else if (parameter == "heterogeneity") + row$df2 <- fit[["QSdf"]][2] + } + + return(row) +} +.maOmnibusTestCoefficients <- function(fit, options, parameter = "effectSize") { + + if (parameter == "effectSize") { + maxCoef <- nrow(fit$beta) + selCoef <- .parseRCodeInOptions(options[["addOmnibusModeratorTestEffectSizeCoefficientsValues"]]) + } else if (parameter == "heterogeneity") { + maxCoef <- nrow(fit$alpha) + selCoef <- .parseRCodeInOptions(options[["addOmnibusModeratorTestHeterogeneityCoefficientsValues"]]) + } + + if (!is.numeric(selCoef) || any(!(abs(selCoef - round(selCoef)) < .Machine$double.eps^0.5))) + return(gettext("The selected coefficients must be an integer vector.")) + if (any(selCoef < 1) || any(selCoef > maxCoef)) + return(gettextf("The selected coefficients must be between 1 and %1$i (i.e., the number of regression parameters).", maxCoef)) + + if (parameter == "effectSize") { + out <- anova(fit, btt = selCoef) + } else if (parameter == "heterogeneity") { + out <- anova(fit, btt = selCoef) + } + + row <- list( + stat = out[["QM"]], + df1 = out[["QMdf"]][1], + pval = out[["QMp"]] + ) + + if (.maIsMetaregressionFtest(options)) + row$df2 <- fit[["QMdf"]][2] + + if (.maIsMetaregressionHeterogeneity(options)) + row$parameter <- gettextf("Effect size (coef: %1$s)", paste(selCoef, collapse = ",")) + else if (.maIsMetaregressionEffectSize(options)) + row$parameter <- gettextf("Heterogeneity (coef: %1$s)", paste(selCoef, collapse = ",")) + + return(row) +} +# check functions .maIsMetaregression <- function(options) { return(.maIsMetaregressionEffectSize(options) || .maIsMetaregressionHeterogeneity(options)) } @@ -800,6 +782,7 @@ return(NULL) } +# extract options .maGetMethodOptions <- function(options) { switch( options[["method"]], @@ -828,6 +811,7 @@ return(tau2) } +# misc .maVariableNames <- function(varNames, variables) { return(sapply(varNames, function(varName){ @@ -858,7 +842,7 @@ })) } - +# messages .maClusteringMessage <- function(fit) { if (all(fit[["tcl"]][1] == fit[["tcl"]])) { return(gettextf("%1$i clusters with %2$i estimates each.", fit[["n"]], fit[["tcl"]][1])) diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 53cec49b..782df0dc 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -51,6 +51,7 @@ Form DropDown { name: "method" + id: method label: qsTr("Method") startValue: "restrictedML" values: [ @@ -202,8 +203,9 @@ Form Group { - title: qsTr("Hetereogeneity") - columns: 2 + title: qsTr("Hetereogeneity") + columns: 2 + enabled: method.value != "fixedEffects" CheckBox { @@ -256,7 +258,7 @@ Form CheckBox { - name: "fitMeasure" + name: "fitMeasures" text: qsTr("Fit measures") } } @@ -352,5 +354,39 @@ Form } } } + + Group + { + title: qsTr("Add Omibus Moderator Test") + + CheckBox + { // TODO: enable only if metaregression specified + text: qsTr("Effect size coefficients") + name: "addOmnibusModeratorTestEffectSizeCoefficients" + childrenOnSameRow: false + + // TODO: remove check for a number + TextField + { + label: "" + name: "addOmnibusModeratorTestEffectSizeCoefficientsValues" + value: "c(1, 2)" + } + } + + CheckBox + { + text: qsTr("Heterogeneity coefficients") + name: "addOmnibusModeratorTestHeterogeneityCoefficients" + childrenOnSameRow: false + + TextField + { + label: "" + name: "addOmnibusModeratorTestHeterogeneityCoefficientsValues" + value: "c(1, 2)" + } + } + } } } \ No newline at end of file From ad88fb8cdb0d3f3764097b8c98891600c1336126 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 17 Jun 2024 16:06:06 +0200 Subject: [PATCH 015/127] updates --- R/classicalmetaanalysiscommon.R | 7 ++++--- inst/qml/ClassicalMetaAnalysis.qml | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 79d57d89..08d3b404 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -275,7 +275,7 @@ pooledEstimatesTable$addRows(pooledEffect) # pooled heterogeneity - if (.maGetMethodOptions(options) != "FE") { + if (!.maGetMethodOptions(options) %in% c("EE", "FE")) { # requires non-clustered fit pooledHeterogeneity <- .maComputePooledHeterogeneity(jaspResults[["fit"]]$object[["fit"]], options) @@ -611,8 +611,8 @@ # to data.frame predictedEffect <- data.frame(predictedEffect) - # add empty prediction interval for FE - if (.maGetMethodOptions(options) == "FE") { + # add empty prediction interval for FE and EE + if (.maGetMethodOptions(options) %in% c("FE", "EE")) { predictedEffect$pi.lb <- NA predictedEffect$pi.ub <- NA } @@ -786,6 +786,7 @@ .maGetMethodOptions <- function(options) { switch( options[["method"]], + "equalEffects" = "EE", "fixedEffects" = "FE", "maximumLikelihood" = "ML", "restrictedML" = "REML", diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 782df0dc..190db7a2 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -55,6 +55,7 @@ Form label: qsTr("Method") startValue: "restrictedML" values: [ + { label: qsTr("Equal Effects") , value: "equalEffects" }, { label: qsTr("Fixed Effects") , value: "fixedEffects" }, { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, { label: qsTr("Restricted ML") , value: "restrictedML" }, @@ -205,7 +206,7 @@ Form { title: qsTr("Hetereogeneity") columns: 2 - enabled: method.value != "fixedEffects" + enabled: method.value != "fixedEffects" && method.value != "equalEffects" CheckBox { From 3d0eb5c396b4b1b0ee8c7b1325c9ff806384651c Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 17 Jun 2024 17:20:25 +0200 Subject: [PATCH 016/127] updates --- R/classicalmetaanalysis.R | 3 +- R/classicalmetaanalysiscommon.R | 73 ++++++++++++++++-------------- inst/qml/ClassicalMetaAnalysis.qml | 69 ++++++++++++++++++---------- 3 files changed, 85 insertions(+), 60 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 6c4b7310..58babe4d 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -48,7 +48,8 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "method", "fixedEffectTest", "confidenceIntervalsLevel", "clusteringUseClubSandwich", "clusteringSmallSampleCorrection", "fixParametersTau2", "fixParametersTau2Value", - "fixParametersWeights", "fixParametersWeightsVariable" + "fixParametersWeights", "fixParametersWeightsVariable", + "heterogeneityModelLink" ) .maReady <- function(options) { diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 08d3b404..e1edbf0e 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -23,23 +23,26 @@ .maResidualHeterogeneityTable(jaspResults, dataset, options) .maModeratorsTable(jaspResults, dataset, options) .maPooledEstimatesTable(jaspResults, dataset, options) + if (options[["fitMeasures"]]) + .maFitMeasuresTable(jaspResults, dataset, options) # meta-regression tables - if (options[["metaregressionTermsTests"]]) { - .maTermsTable(jaspResults, dataset, options, "effectSize") - .maTermsTable(jaspResults, dataset, options, "heterogeneity") - } - if (options[["metaregressionCoefficientEstimates"]]) { - .maCoefficientEstimatesTable(jaspResults, dataset, options, "effectSize") - .maCoefficientEstimatesTable(jaspResults, dataset, options, "heterogeneity") - } - if (options[["metaregressionCoefficientCorrelationMatrix"]]) { - .maCoefficientCorrelationMatrixTable(jaspResults, dataset, options, "effectSize") - .maCoefficientCorrelationMatrixTable(jaspResults, dataset, options, "heterogeneity") + if (.maIsMetaregression(options)) { + if (options[["metaregressionTermsTests"]]) { + .maTermsTable(jaspResults, dataset, options, "effectSize") + .maTermsTable(jaspResults, dataset, options, "heterogeneity") + } + if (options[["metaregressionCoefficientEstimates"]]) { + .maCoefficientEstimatesTable(jaspResults, dataset, options, "effectSize") + .maCoefficientEstimatesTable(jaspResults, dataset, options, "heterogeneity") + } + if (options[["metaregressionCoefficientCorrelationMatrix"]]) { + .maCoefficientCorrelationMatrixTable(jaspResults, dataset, options, "effectSize") + .maCoefficientCorrelationMatrixTable(jaspResults, dataset, options, "heterogeneity") + } } - if (options[["fitMeasures"]]) - .maFitMeasuresTable(jaspResults, dataset, options) + return() } @@ -86,7 +89,7 @@ rmaInput$weights <- as.name(options[["fixParametersWeightsVariable"]]) if (options[["fixParametersTau2"]]) rmaInput$tau2 <- .maGetFixedTau2Options(options) - +# TODO: add link: heterogeneityModelLink # add labels if specified if (options[["studyLabel"]] != "") rmaInput$slab <- as.name(options[["studyLabel"]]) @@ -189,9 +192,9 @@ moderatorsTable$addColumnInfo(name = "parameter", type = "string", title = gettext("Parameter")) moderatorsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("QM")) - moderatorsTable$addColumnInfo(name = "df1", type = "integer", title = if(.maIsMetaregressionFtest(options)) gettext("df1") else gettext("df")) + moderatorsTable$addColumnInfo(name = "df1", type = "integer", title = if(.maIsMetaregressionFtest(options)) gettext("df\U2081") else gettext("df")) if (.maIsMetaregressionFtest(options)) - moderatorsTable$addColumnInfo(name = "df2", type = "number", title = gettext("df2")) + moderatorsTable$addColumnInfo(name = "df2", type = "number", title = gettext("df\U2082")) moderatorsTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) # stop on error @@ -232,9 +235,6 @@ } } - if (options[["clustering"]] != "") - moderatorsTable$addFootnote(.maClusteringMessage(fit), symbol = gettext("Clustering:")) - return() } .maPooledEstimatesTable <- function(jaspResults, dataset, options) { @@ -295,13 +295,18 @@ } .maFitMeasuresTable <- function(jaspResults, dataset, options) { + modelSummaryContainer <- .maExtractModelSummaryContainer(jaspResults) + + if (!is.null(modelSummaryContainer[["fitMeasuresTable"]])) + return() + fit <- .maExtractFit(jaspResults, options) # fit measures table fitMeasuresTable <- createJaspTable(gettext("Fit Measures")) - fitMeasuresTable$position <- 3 + fitMeasuresTable$position <- 4 fitMeasuresTable$dependOn(c(.maDependencies, "fitMeasures")) - jaspResults[["fitMeasuresTable"]] <- fitMeasuresTable + modelSummaryContainer[["fitMeasuresTable"]] <- fitMeasuresTable fitMeasuresTable$addColumnInfo(name = "ll", title = gettext("Log Lik."), type = "number") @@ -343,11 +348,11 @@ termsTable$dependOn("metaregressionTermsTests") metaregressionContainer[[paste0(parameter, "TermsTable")]] <- termsTable - termsTable$addColumnInfo(name = "term", type = "string", title = "") - termsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("QM")) - termsTable$addColumnInfo(name = "df1", type = "integer", title = if(.maIsMetaregressionFtest(options)) gettext("df1") else gettext("df")) + termsTable$addColumnInfo(name = "term", type = "string", title = "") + termsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("QM")) + termsTable$addColumnInfo(name = "df1", type = "integer", title = if(.maIsMetaregressionFtest(options)) gettext("df\U2081") else gettext("df")) if (.maIsMetaregressionFtest(options)) { - termsTable$addColumnInfo(name = "df2", type = "number", title = gettext("df2")) + termsTable$addColumnInfo(name = "df2", type = "number", title = gettext("df\U2082")) } termsTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) termsTable$addFootnote(.maFixedEffectTextMessage(options)) @@ -699,7 +704,7 @@ if (parameter == "effectSize") { row <- list( - parameter = gettext("Effect size"), + parameter = gettext("Effect Size"), stat = fit[["QM"]], df1 = fit[["QMdf"]][1], pval = fit[["QMp"]] @@ -753,7 +758,7 @@ row$df2 <- fit[["QMdf"]][2] if (.maIsMetaregressionHeterogeneity(options)) - row$parameter <- gettextf("Effect size (coef: %1$s)", paste(selCoef, collapse = ",")) + row$parameter <- gettextf("Effect Size (coef: %1$s)", paste(selCoef, collapse = ",")) else if (.maIsMetaregressionEffectSize(options)) row$parameter <- gettextf("Heterogeneity (coef: %1$s)", paste(selCoef, collapse = ",")) @@ -844,13 +849,6 @@ } # messages -.maClusteringMessage <- function(fit) { - if (all(fit[["tcl"]][1] == fit[["tcl"]])) { - return(gettextf("%1$i clusters with %2$i estimates each.", fit[["n"]], fit[["tcl"]][1])) - } else { - return(gettextf("%1$i clusters with min/median/max %2$i/%3$i/%4$i estimates.", fit[["n"]], min(fit[["tcl"]]), median(fit[["tcl"]]), max(fit[["tcl"]]))) - } -} .maFixedEffectTextMessage <- function(options) { return(switch( options[["fixedEffectTest"]], @@ -863,6 +861,13 @@ messages <- NULL + if (options[["clustering"]] != "") { + if (all(fit[["tcl"]][1] == fit[["tcl"]])) + messages <- c(messages, gettextf("%1$i clusters with %2$i estimates each.", fit[["n"]], fit[["tcl"]][1])) + else + messages <- c(messages, gettextf("%1$i clusters with min/median/max %2$i/%3$i/%4$i estimates.", fit[["n"]], min(fit[["tcl"]]), median(fit[["tcl"]]), max(fit[["tcl"]]))) + } + if (.maIsMetaregressionEffectSize(options)) messages <- c(messages, gettext("The pooled effect size corresponds to the weighted average effect across studies.")) diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 190db7a2..cbaf2e1a 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -83,6 +83,7 @@ Form AssignedVariablesList { name: "predictors" + id: predictors title: qsTr("Predictors") allowedColumns: ["nominal", "scale"] } @@ -90,6 +91,7 @@ Form AssignedVariablesList { name: "clustering" + id: clustering title: qsTr("Clustering") singleVariable: true allowedColumns: ["nominal"] @@ -125,23 +127,26 @@ Form AssignedVariablesList { - name: "effectSizeModelTerms"; + name: "effectSizeModelTerms" + id: effectSizeModelTerms title: qsTr("Model Terms") listViewType: JASP.Interaction - } - - CheckBox - { - name: "effectSizeModelIncludeIntercept"; - label: qsTr("Include intercept") - checked: true + allowTypeChange:false } } + + CheckBox + { + name: "effectSizeModelIncludeIntercept" + label: qsTr("Include intercept") + checked: true + } } Group { - title: qsTr("Heterogeneity model") + title: qsTr("Heterogeneity model") + columns: 2 VariablesForm { @@ -154,20 +159,29 @@ Form source: ["predictors"] } - // TODO: start empty AssignedVariablesList { - name: "heterogeneityModelTerms"; + name: "heterogeneityModelTerms" + id: heterogeneityModelTerms title: qsTr("Model Terms") listViewType: JASP.Interaction - } + allowTypeChange:false + addAvailableVariablesToAssigned: false + } + } - CheckBox - { - name: "heterogeneityModelIncludeIntercept"; - label: qsTr("Include intercept") - checked: true - } + CheckBox + { + name: "heterogeneityModelIncludeIntercept"; + label: qsTr("Include intercept") + checked: true + } + + DropDown + { + name: "heterogeneityModelLink" + label: qsTr("Link") + values: ["log", "identity"] } } } @@ -178,13 +192,14 @@ Form Group { - title: qsTr("Meta-Regression") + title: qsTr("Meta-Regression") + enabled: predictors.count > 0 CheckBox { name: "metaregressionTermsTests" text: qsTr("Terms tests") - checked: true // TODO: Enable once at least one term is selected + checked: true } CheckBox @@ -304,7 +319,8 @@ Form Group { - title: qsTr("Clustering") + title: qsTr("Clustering") + enabled: clustering.count == 1 CheckBox { @@ -325,10 +341,11 @@ Form { title: qsTr("Fix Parameters") - CheckBox // TODO: remove all items form heterogeneity model when specified + CheckBox { name: "fixParametersTau2" text: qsTr("𝜏²") + enabled: heterogeneityModelTerms.count == 0 childrenOnSameRow: true FormulaField @@ -358,15 +375,16 @@ Form Group { - title: qsTr("Add Omibus Moderator Test") + title: qsTr("Add Omibus Moderator Test") + enabled: effectSizeModelTerms.count > 0 || heterogeneityModelTerms.count > 0 CheckBox - { // TODO: enable only if metaregression specified + { text: qsTr("Effect size coefficients") name: "addOmnibusModeratorTestEffectSizeCoefficients" + enabled: effectSizeModelTerms.count > 0 childrenOnSameRow: false - // TODO: remove check for a number TextField { label: "" @@ -379,6 +397,7 @@ Form { text: qsTr("Heterogeneity coefficients") name: "addOmnibusModeratorTestHeterogeneityCoefficients" + enabled: heterogeneityModelTerms.count > 0 childrenOnSameRow: false TextField From faa4d6e65c420cf2e7a424355b427e49e58cd8c0 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 17 Jun 2024 21:14:39 +0200 Subject: [PATCH 017/127] restrict methods --- inst/qml/ClassicalMetaAnalysis.qml | 41 ++++++++++++++++++------------ 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index cbaf2e1a..150eb53c 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -54,22 +54,31 @@ Form id: method label: qsTr("Method") startValue: "restrictedML" - values: [ - { label: qsTr("Equal Effects") , value: "equalEffects" }, - { label: qsTr("Fixed Effects") , value: "fixedEffects" }, - { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, - { label: qsTr("Restricted ML") , value: "restrictedML" }, - { label: qsTr("DerSimonian-Laird") , value: "derSimonianLaird" }, - { label: qsTr("Hedges") , value: "hedges" }, - { label: qsTr("Hunter-Schmidt") , value: "hunterSchmidt" }, - { label: qsTr("Hunter-Schmidt (SSC)") , value: "hunterSchmidtSsc" }, - { label: qsTr("Sidik-Jonkman") , value: "sidikJonkman" }, - { label: qsTr("Empirical Bayes") , value: "empiricalBayes" }, - { label: qsTr("Paule-Mandel") , value: "pauleMandel" }, - { label: qsTr("Paule-Mandel (MU)") , value: "pauleMandelMu" }, - { label: qsTr("Generalized Q-stat") , value: "qeneralizedQStat" }, - { label: qsTr("Generalized Q-stat (MU)"), value: "qeneralizedQStatMu" } - ] + values: (function() { + if (heterogeneityModelTerms.count == 0) { + return [ + { label: qsTr("Equal Effects") , value: "equalEffects" }, + { label: qsTr("Fixed Effects") , value: "fixedEffects" }, + { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, + { label: qsTr("Restricted ML") , value: "restrictedML" }, + { label: qsTr("DerSimonian-Laird") , value: "derSimonianLaird" }, + { label: qsTr("Hedges") , value: "hedges" }, + { label: qsTr("Hunter-Schmidt") , value: "hunterSchmidt" }, + { label: qsTr("Hunter-Schmidt (SSC)") , value: "hunterSchmidtSsc" }, + { label: qsTr("Sidik-Jonkman") , value: "sidikJonkman" }, + { label: qsTr("Empirical Bayes") , value: "empiricalBayes" }, + { label: qsTr("Paule-Mandel") , value: "pauleMandel" }, + { label: qsTr("Paule-Mandel (MU)") , value: "pauleMandelMu" }, + { label: qsTr("Generalized Q-stat") , value: "qeneralizedQStat" }, + { label: qsTr("Generalized Q-stat (MU)"), value: "qeneralizedQStatMu"} + ]; + } else { + return [ + { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, + { label: qsTr("Restricted ML") , value: "restrictedML" }, + { label: qsTr("Empirical Bayes") , value: "empiricalBayes" } + ]; + }})() } DropDown From 44a67e87ac2e54869b1be790e46792615ec33fa6 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 17 Jun 2024 22:51:38 +0200 Subject: [PATCH 018/127] finish fitting function --- R/classicalmetaanalysis.R | 6 +- R/classicalmetaanalysiscommon.R | 95 +++++++++++--- inst/qml/ClassicalMetaAnalysis.qml | 198 +++++++++++++++++++++++++++-- 3 files changed, 272 insertions(+), 27 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 58babe4d..722c4afb 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -49,7 +49,11 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "clusteringUseClubSandwich", "clusteringSmallSampleCorrection", "fixParametersTau2", "fixParametersTau2Value", "fixParametersWeights", "fixParametersWeightsVariable", - "heterogeneityModelLink" + "heterogeneityModelLink", "weightedEstimation", + "optimizerMethod", "optimizerInitialTau2", "optimizerInitialTau2Value", + "optimizerMinimumTau2", "optimizerMinimumTau2Value", "optimizerMaximumTau2", "optimizerMaximumTau2Value", + "optimizerMaximumIterations", "optimizerMaximumIterationsValue", "optimizerConvergenceTolerance", "optimizerConvergenceToleranceValue", + "optimizerConvergenceRelativeTolerance", "optimizerConvergenceRelativeToleranceValue", "optimizerStepAdjustment", "optimizerStepAdjustmentValue" ) .maReady <- function(options) { diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index e1edbf0e..85ffeebe 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -84,12 +84,6 @@ data = dataset ) - # add fixed parameters if needed - if (options[["fixParametersWeights"]]) - rmaInput$weights <- as.name(options[["fixParametersWeightsVariable"]]) - if (options[["fixParametersTau2"]]) - rmaInput$tau2 <- .maGetFixedTau2Options(options) -# TODO: add link: heterogeneityModelLink # add labels if specified if (options[["studyLabel"]] != "") rmaInput$slab <- as.name(options[["studyLabel"]]) @@ -102,10 +96,28 @@ rmaInput$method <- .maGetMethodOptions(options) rmaInput$test <- options[["fixedEffectTest"]] + if (!options[["weightedEstimation"]]) + rmaInput$weighted <- FALSE + + # add fixed parameters if needed + if (options[["fixParametersWeights"]]) + rmaInput$weights <- as.name(options[["fixParametersWeightsVariable"]]) + if (options[["fixParametersTau2"]]) + rmaInput$tau2 <- .maGetFixedTau2Options(options) + + # add link function if needed + if (.maIsMetaregressionHeterogeneity(options)) + rmaInput$link <- options[["heterogeneityModelLink"]] + + # add control options if needed + control <- .maGetControlOptions(options) + if (length(control) != 0) + rmaInput$control <- control + # additional input rmaInput$level <- 100 * options[["confidenceIntervalsLevel"]] - # fit the model + ### fit the model fit <- try(do.call(metafor::rma, rmaInput)) # add clustering if specified @@ -502,6 +514,9 @@ } + if (parameter == "heterogeneity") + coefficientsTable$addFootnote(.meMetaregressionHeterogeneityMessages(options)) + return() } .maCoefficientCorrelationMatrixTable <- function(jaspResults, dataset, options, parameter = "effectSize") { @@ -662,12 +677,21 @@ # predict the scale on the average value predScale <- predict(fit, newscale = colMeans(model.matrix(fit)$scale)[-1], level = 100 * options[["confidenceIntervalsLevel"]]) - confIntHeterogeneity <- data.frame( - par = c("\U1D70F", "\U1D70F\U00B2"), - est = exp(c(predScale[["pred"]] / 2, predScale[["pred"]])), - lCi = exp(c(predScale[["ci.lb"]] / 2, predScale[["ci.lb"]])), - uCi = exp(c(predScale[["ci.ub"]] / 2, predScale[["ci.ub"]])) - ) + if (options[["heterogeneityModelLink"]] == "log") { + confIntHeterogeneity <- data.frame( + par = c("\U1D70F", "\U1D70F\U00B2"), + est = exp(c(predScale[["pred"]] / 2, predScale[["pred"]])), + lCi = exp(c(predScale[["ci.lb"]] / 2, predScale[["ci.lb"]])), + uCi = exp(c(predScale[["ci.ub"]] / 2, predScale[["ci.ub"]])) + ) + } else if (options[["heterogeneityModelLink"]] == "identity") { + confIntHeterogeneity <- data.frame( + par = c("\U1D70F", "\U1D70F\U00B2"), + est = c(sqrt(predScale[["pred"]]), predScale[["pred"]]), + lCi = c(sqrt(predScale[["ci.lb"]]), predScale[["ci.lb"]]), + uCi = c(sqrt(predScale[["ci.ub"]]), predScale[["ci.ub"]]) + ) + } # keep only the requested parameters (other than tau and tau^2 are not possible) heterogeneityShow <- c( @@ -789,6 +813,7 @@ # extract options .maGetMethodOptions <- function(options) { + switch( options[["method"]], "equalEffects" = "EE", @@ -816,6 +841,39 @@ else return(tau2) } +.maGetControlOptions <- function(options) { + + if (.maIsMetaregressionHeterogeneity(options)) { + out <- list( + optimizer = options[["optimizerMethod"]], + iter.max = if (options[["optimizerMaximumIterations"]]) options[["optimizerMaximumIterationsValue"]], + rel.tol = if (options[["optimizerConvergenceRelativeTolerance"]]) options[["optimizerConvergenceRelativeToleranceValue"]] + ) + } else { + if (.maGetMethodOptions(options) %in% c("REML", "ML", "EB")) { + out <- list( + tau2.init = if (options[["optimizerInitialTau2"]]) options[["optimizerInitialTau2Value"]], + iter.max = if (options[["optimizerMaximumIterations"]]) options[["optimizerMaximumIterationsValue"]], + threshold = if (options[["optimizerConvergenceTolerance"]]) options[["optimizerConvergenceToleranceValue"]], + stepadj = if (options[["optimizerStepAdjustment"]]) options[["optimizerStepAdjustmentValue"]] + ) + } else if (.maGetMethodOptions(options) %in% c("PM", "PMM", "GENQM")) { + out <- list( + iter.max = if (options[["optimizerMaximumIterations"]]) options[["optimizerMaximumIterationsValue"]], + tol = if (options[["optimizerConvergenceTolerance"]]) options[["optimizerConvergenceToleranceValue"]], + tau2.min = if (options[["optimizerMinimumTau2"]]) options[["optimizerMinimumTau2Value"]], + tau2.max = if (options[["optimizerMaximumTau2"]]) options[["optimizerMaximumTau2Value"]] + ) + } else if (.maGetMethodOptions(options) %in% c("SD")) { + out <- list( + tau2.init = if (options[["optimizerInitialTau2"]]) options[["optimizerInitialTau2Value"]] + ) + } else { + out <- list() + } + } + return(out[!sapply(out, is.null)]) +} # misc .maVariableNames <- function(varNames, variables) { @@ -849,7 +907,7 @@ } # messages -.maFixedEffectTextMessage <- function(options) { +.maFixedEffectTextMessage <- function(options) { return(switch( options[["fixedEffectTest"]], "z" = gettext("Fixed effect tested using z-distribution."), @@ -857,7 +915,14 @@ "knha" = gettext("Fixed effect tested using Knapp and Hartung adjustment.") )) } -.maPooledEstimatesMessages <- function(fit, dataset, options) { +.meMetaregressionHeterogeneityMessages <- function(options) { + + if (options[["heterogeneityModelLink"]] == "log") + return(gettext("The heterogeneity model for \U1D70F\U00B2 is specified on the log scale.")) + else if (options[["heterogeneityModelLink"]] == "identity") + return(gettext("The heterogeneity model for \U1D70F\U00B2 is specified on the identity scale.")) +} +.maPooledEstimatesMessages <- function(fit, dataset, options) { messages <- NULL diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 150eb53c..4376e7bb 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -41,13 +41,13 @@ Form allowedColumns: ["scale"] } AssignedVariablesList - { + { name: "effectSizeStandardError" title: qsTr("Effect Size Standard Error") singleVariable: true allowedColumns: ["scale"] } - + DropDown { name: "method" @@ -82,13 +82,13 @@ Form } DropDown - { + { name: "fixedEffectTest" label: qsTr("Fixed effect test") startValue: "knha" values: [ "z", "t", "knha"] } - + AssignedVariablesList { name: "predictors" @@ -143,7 +143,7 @@ Form allowTypeChange:false } } - + CheckBox { name: "effectSizeModelIncludeIntercept" @@ -176,7 +176,7 @@ Form listViewType: JASP.Interaction allowTypeChange:false addAvailableVariablesToAssigned: false - } + } } CheckBox @@ -189,6 +189,7 @@ Form DropDown { name: "heterogeneityModelLink" + id: heterogeneityModelLink label: qsTr("Link") values: ["log", "identity"] } @@ -228,7 +229,7 @@ Form Group { - title: qsTr("Hetereogeneity") + title: qsTr("Heterogeneity") columns: 2 enabled: method.value != "fixedEffects" && method.value != "equalEffects" @@ -297,7 +298,7 @@ Form id: forestPlot name: "forestPlot" text: qsTr("Forest plot") - + CheckBox { name: "forestPlotLabel" @@ -316,7 +317,7 @@ Form { label: qsTr("Effect size (descending)") , value: "effectSizeDescending" } ] } - + } } @@ -326,6 +327,13 @@ Form { title: qsTr("Advanced") + CheckBox + { + name: "weightedEstimation" + text: qsTr("Weighted estimation") + checked: true + } + Group { title: qsTr("Clustering") @@ -386,7 +394,7 @@ Form { title: qsTr("Add Omibus Moderator Test") enabled: effectSizeModelTerms.count > 0 || heterogeneityModelTerms.count > 0 - + CheckBox { text: qsTr("Effect size coefficients") @@ -417,5 +425,173 @@ Form } } } + + Group + { + title: qsTr("Optimizer") + enabled: method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu" || + method.value == "sidikJonkman" + + DropDown + { + name: "optimizerMethod" + label: qsTr("Method") // TODO: switch default value on heterogeneityModelLink change + values: { + if (heterogeneityModelLink.value == "log") + ["nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] + else + ["constrOptim", "nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] + } + visible: heterogeneityModelTerms.count > 0 + } + + CheckBox + { + name: "optimizerInitialTau2" + text: qsTr("Initial 𝜏²") + checked: false + childrenOnSameRow: true + visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + method.value == "sidikJonkman") && heterogeneityModelTerms.count == 0 + + DoubleField + { + label: "" + name: "optimizerInitialTau2Value" + value: 1 + min: 0 + inclusive: JASP.None + } + } + + CheckBox + { + name: "optimizerMinimumTau2" + text: qsTr("Minimum 𝜏²") + checked: false + childrenOnSameRow: true + visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && + heterogeneityModelTerms.count == 0 + + DoubleField + { + label: "" + name: "optimizerMinimumTau2Value" + id: optimizerMinimumTau2Value + value: 1e-6 + min: 0 + max: optimizerMaximumTau2Value.value + } + } + + CheckBox + { + name: "optimizerMaximumTau2" + text: qsTr("Maximum 𝜏²") + checked: false + childrenOnSameRow: true + visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && + heterogeneityModelTerms.count == 0 + + DoubleField + { + label: "" + name: "optimizerMaximumTau2Value" + id: optimizerMaximumTau2Value + value: 100 + min: optimizerMinimumTau2Value.value + inclusive: JASP.None + } + } + + CheckBox + { + name: "optimizerMaximumIterations" + text: qsTr("Maximum iterations") + checked: false + childrenOnSameRow: true + visible: method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu" + + IntegerField + { + label: "" + name: "optimizerMaximumIterationsValue" + value: { + if (heterogeneityModelTerms.count == 0) + 100 + else + 1000 + } + min: 1 + inclusive: JASP.None + } + } + + CheckBox + { + name: "optimizerConvergenceTolerance" + text: qsTr("Convergence tolerance") + checked: false + childrenOnSameRow: true + visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && + heterogeneityModelTerms.count == 0 + + DoubleField + { + label: "" + name: "optimizerConvergenceToleranceValue" + value: { + if (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") + 1e-5 + else if (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") + 1e-4 + else + 1 + } + min: 0 + inclusive: JASP.None + } + } + + CheckBox + { + name: "optimizerConvergenceRelativeTolerance" + text: qsTr("Convergence relative tolerance") + checked: false + childrenOnSameRow: true + visible: heterogeneityModelTerms.count > 0 + + DoubleField + { + label: "" + name: "optimizerConvergenceRelativeToleranceValue" + value: 1e-8 + min: 0 + inclusive: JASP.None + } + } + + CheckBox + { + name: "optimizerStepAdjustment" + text: qsTr("Step adjustment") + checked: false + childrenOnSameRow: true + visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") && + heterogeneityModelTerms.count == 0 + + DoubleField + { + label: "" + name: "optimizerStepAdjustmentValue" + value: 1 + min: 0 + inclusive: JASP.None + } + } + } } -} \ No newline at end of file +} From de44b45eccc59691d169310d69fde2cc8055fcbe Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 17 Jun 2024 22:52:53 +0200 Subject: [PATCH 019/127] Update ClassicalMetaAnalysis.qml --- inst/qml/ClassicalMetaAnalysis.qml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 4376e7bb..10e87967 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -289,6 +289,12 @@ Form } } + Section + { + title: qsTr("Estimated Marginal Means") + + } + Section { title: qsTr("Plots") From cb46d78e49ab2010ffbc20dba03fbd571b71cfd2 Mon Sep 17 00:00:00 2001 From: FBartos Date: Tue, 18 Jun 2024 15:58:22 +0200 Subject: [PATCH 020/127] marginal means --- R/classicalmetaanalysiscommon.R | 295 +++++++++++++++++++++++++++-- inst/qml/ClassicalMetaAnalysis.qml | 146 ++++++++++++-- 2 files changed, 411 insertions(+), 30 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 85ffeebe..ae6eb41f 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -42,7 +42,9 @@ } } - + # estimated marginal means + .maEstimatedMarginalMeansTable(jaspResults, dataset, options, "effectSize") + .maEstimatedMarginalMeansTable(jaspResults, dataset, options, "heterogeneity") return() } @@ -261,7 +263,7 @@ # pooled estimates pooledEstimatesTable <- createJaspTable(gettext("Pooled Estimates")) pooledEstimatesTable$position <- 3 - pooledEstimatesTable$dependOn(c("heterogeneityTau", "heterogeneityTau2", "heterogeneityI2", "heterogeneityH2", "confidenceIntervals", "confidenceIntervalsLevel", "heterogeneityPredictionInterval")) + pooledEstimatesTable$dependOn(c("heterogeneityTau", "heterogeneityTau2", "heterogeneityI2", "heterogeneityH2", "confidenceIntervals", "confidenceIntervalsLevel", "predictionIntervals")) modelSummaryContainer[["pooledEstimatesTable"]] <- pooledEstimatesTable pooledEstimatesTable$addColumnInfo(name = "par", type = "string", title = "") @@ -271,7 +273,7 @@ pooledEstimatesTable$addColumnInfo(name = "lCi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) pooledEstimatesTable$addColumnInfo(name = "uCi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) } - if (options[["heterogeneityPredictionInterval"]]) { + if (options[["predictionIntervals"]]) { overtitleCi <- gettextf("%s%% PI", 100 * options[["confidenceIntervalsLevel"]]) pooledEstimatesTable$addColumnInfo(name = "lPi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) pooledEstimatesTable$addColumnInfo(name = "uPi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) @@ -565,9 +567,86 @@ return() } +.maEstimatedMarginalMeansTable <- function(jaspResults, dataset, options, parameter = "effectSize") { + + estimatedMarginalMeansContainer <- .maExtractEstimatedMarginalMeansContainer(jaspResults) + + if (!is.null(estimatedMarginalMeansContainer[[parameter]])) + return() + + if (parameter == "effectSize" && length(options[["estimatedMarginalMeansEffectSizeSelectedVariables"]]) == 0) + return() + if (parameter == "heterogeneity" && length(options[["estimatedMarginalMeansHeterogeneitySelectedVariables"]]) == 0) + return() + + fit <- .maExtractFit(jaspResults, options) + + estimatedMarginalMeansTable <- createJaspTable(switch( + parameter, + effectSize = gettext("Estimated Marginal Means: Effect Size"), + heterogeneity = gettext("Estimated Marginal Means: Heterogeneity") + )) + estimatedMarginalMeansTable$position <- switch( + parameter, + effectSize = 1, + heterogeneity = 2 + ) + estimatedMarginalMeansTable$dependOn(switch( + parameter, + effectSize = c("estimatedMarginalMeansEffectSizeSelectedVariables", "estimatedMarginalMeansEffectSizeTransformation", "estimatedMarginalMeansEffectSizeSdFactorCovariates", + "estimatedMarginalMeansEffectSizeTestAgainst", "estimatedMarginalMeansEffectSizeTestAgainstValue", "predictionIntervals"), + heterogeneity = c("estimatedMarginalMeansHeterogeneitySelectedVariables", "estimatedMarginalMeansHeterogeneityTransformation", "estimatedMarginalMeansHeterogeneitySdFactorCovariates") + )) + estimatedMarginalMeansContainer[[parameter]] <- estimatedMarginalMeansTable + + + if (is.null(fit) || jaspBase::isTryError(fit)) + return() + + + estimatedMarginalMeansTable$addColumnInfo(name = "variable", type = "string", title = gettext("Variable")) + estimatedMarginalMeansTable$addColumnInfo(name = "value", type = "string", title = gettext("Level")) + estimatedMarginalMeansTable$addColumnInfo(name = "est", type = "number", title = gettext("Estimate")) + + if (options[["confidenceIntervals"]]) { + overtitleCi <- gettextf("%s%% CI", 100 * options[["confidenceIntervalsLevel"]]) + estimatedMarginalMeansTable$addColumnInfo(name = "lCi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) + estimatedMarginalMeansTable$addColumnInfo(name = "uCi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) + } + + if (parameter == "effectSize") { + + if (options[["predictionIntervals"]]) { + overtitleCi <- gettextf("%s%% PI", 100 * options[["confidenceIntervalsLevel"]]) + estimatedMarginalMeansTable$addColumnInfo(name = "lPi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) + estimatedMarginalMeansTable$addColumnInfo(name = "uPi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) + } + + if (options[["estimatedMarginalMeansEffectSizeTestAgainst"]]) { + estimatedMarginalMeansTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("t") else gettext("z")) + if (.maIsMetaregressionFtest(options)) + estimatedMarginalMeansTable$addColumnInfo(name = "df", type = "number", title = gettext("df")) + + estimatedMarginalMeansTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) + } + } + + + selectedVariables <- switch( + parameter, + effectSize = unlist(options[["estimatedMarginalMeansEffectSizeSelectedVariables"]]), + heterogeneity = unlist(options[["estimatedMarginalMeansHeterogeneitySelectedVariables"]]) + ) + estimatedMarginalMeans <- do.call(rbind, lapply(selectedVariables, function(selectedVariable) + .maComputeMarginalMeansVariable(fit, options, dataset, selectedVariable, parameter))) + + estimatedMarginalMeansTable$setData(estimatedMarginalMeans) + + return() +} # containers/state functions -.maExtractFit <- function(jaspResults, options) { +.maExtractFit <- function(jaspResults, options) { if (is.null(jaspResults[["fit"]]$object)) return() @@ -579,7 +658,7 @@ return(jaspResults[["fit"]]$object[["fit"]]) } } -.maExtractModelSummaryContainer <- function(jaspResults) { +.maExtractModelSummaryContainer <- function(jaspResults) { if (!is.null(jaspResults[["modelSummaryContainer"]])) return(jaspResults[["modelSummaryContainer"]]) @@ -592,7 +671,7 @@ return(modelSummaryContainer) } -.maExtractMetaregressionContainer <- function(jaspResults) { +.maExtractMetaregressionContainer <- function(jaspResults) { if (!is.null(jaspResults[["metaregressionContainer"]])) return(jaspResults[["metaregressionContainer"]]) @@ -605,9 +684,22 @@ return(metaregressionContainer) } +.maExtractEstimatedMarginalMeansContainer <- function(jaspResults) { + + if (!is.null(jaspResults[["estimatedMarginalMeansContainer"]])) + return(jaspResults[["estimatedMarginalMeansContainer"]]) + + # create the output container + estimatedMarginalMeansContainer <- createJaspContainer(gettext("Meta-Regression Summary")) + estimatedMarginalMeansContainer$dependOn(c(.maDependencies, "confidenceIntervals", "confidenceIntervalsLevel")) + estimatedMarginalMeansContainer$position <- 3 + jaspResults[["estimatedMarginalMeansContainer"]] <- estimatedMarginalMeansContainer + + return(estimatedMarginalMeansContainer) +} # help compute functions -.maComputePooledEffect <- function(fit, options) { +.maComputePooledEffect <- function(fit, options) { if (!.maIsMetaregressionEffectSize(options)) { predictedEffect <- predict(fit, level = 100 * options[["confidenceIntervalsLevel"]]) @@ -646,14 +738,14 @@ "est", if (options[["confidenceIntervals"]]) "lCi", if (options[["confidenceIntervals"]]) "uCi", - if (options[["heterogeneityPredictionInterval"]]) "lPi", - if (options[["heterogeneityPredictionInterval"]]) "uPi" + if (options[["predictionIntervals"]]) "lPi", + if (options[["predictionIntervals"]]) "uPi" ) predictedEffect <- predictedEffect[,keepResults] return(as.list(predictedEffect)) } -.maComputePooledHeterogeneity <- function(fit, options) { +.maComputePooledHeterogeneity <- function(fit, options) { if (options[["fixParametersTau2"]]) { @@ -724,7 +816,7 @@ return(confIntHeterogeneity) } -.maOmnibusTest <- function(fit, options, parameter = "effectSize") { +.maOmnibusTest <- function(fit, options, parameter = "effectSize") { if (parameter == "effectSize") { row <- list( @@ -751,7 +843,7 @@ return(row) } -.maOmnibusTestCoefficients <- function(fit, options, parameter = "effectSize") { +.maOmnibusTestCoefficients <- function(fit, options, parameter = "effectSize") { if (parameter == "effectSize") { maxCoef <- nrow(fit$beta) @@ -788,6 +880,156 @@ return(row) } +.maGetMarginalMeansPredictorMatrix <- function(fit, options, dataset, selectedVariable, parameter) { + + variablesContinuous <- options[["predictors"]][options[["predictors.types"]] == "scale"] + variablesFactors <- options[["predictors"]][options[["predictors.types"]] == "nominal"] + + # extract the corresponding formula + formula <- switch( + parameter, + effectSize = fit[["formula.mods"]], + heterogeneity = fit[["formula.scale"]] + ) + + # select SD factor for covariates + sdFactor <- switch( + parameter, + effectSize = options[["estimatedMarginalMeansEffectSizeSdFactorCovariates"]], + heterogeneity = options[["estimatedMarginalMeansHeterogeneitySdFactorCovariates"]] + ) + + # extract the used variables + terms <- attr(terms(formula, data = fit[["data"]]), "term.labels") + variables <- terms[!grepl(":", terms)] + + # average across remaining variables + remainingVariables <- variables[variables != selectedVariable] + + ### create model matrix for the remaining predictors + # (use all factors for levels to average out the predictor matrix later) + predictorsRemaining <- list() + for (i in seq_along(remainingVariables)) { + if (remainingVariables[[i]] %in% variablesFactors) { + predictorsRemaining[[remainingVariables[i]]] <- factor(levels(dataset[[remainingVariables[[i]]]]), levels = levels(dataset[[remainingVariables[[i]]]])) + } else if (remainingVariables[[i]] %in% variablesContinuous) { + predictorsRemaining[[remainingVariables[i]]] <- mean(dataset[[remainingVariables[[i]]]]) + } + } + + # create complete model matrices including the specified variable + if (selectedVariable %in% variablesFactors) { + selectedPredictor <- factor(levels(dataset[[selectedVariable]]), levels = levels(dataset[[selectedVariable]])) + } else if (selectedVariable %in% variablesContinuous) { + selectedPredictor <- c( + mean(dataset[[selectedVariable]]) - sdFactor * sd(dataset[[selectedVariable]]), + mean(dataset[[selectedVariable]]), + mean(dataset[[selectedVariable]]) + sdFactor * sd(dataset[[selectedVariable]]) + ) + } + + # add the specified variable and pool across the combinations of the remaining values + outMatrix <- do.call(rbind, lapply(seq_along(selectedPredictor), function(i) { + predictorsRemaining[[selectedVariable]] <- selectedPredictor[i] + outMatrix <- model.matrix(formula, data = expand.grid(predictorsRemaining)) + return(colMeans(outMatrix)[-1]) + })) + + # keep information about the variable and levels + attr(outMatrix, "variable") <- selectedVariable + if (selectedVariable %in% variablesFactors) + attr(outMatrix, "at") <- selectedPredictor + else if (selectedVariable %in% variablesContinuous) + attr(outMatrix, "at") <- c( + gettextf("Mean - %1$sSD", sdFactor), + gettext("Mean"), + gettextf("Mean + %1$sSD", sdFactor)) + + return(outMatrix) +} +.maComputeMarginalMeansVariable <- function(fit, options, dataset, selectedVariable, parameter) { + + if (parameter == "effectSize") { + predictorMatrixEffectSize <- .maGetMarginalMeansPredictorMatrix(fit, options, dataset, selectedVariable, "effectSize") + + if (.maIsMetaregressionHeterogeneity(options)) { + + predictorMatrixHeterogeneity <- .maGetMarginalMeansPredictorMatrix(fit, options, dataset, selectedVariable, "heterogeneity") + computedMarginalMeans <- predict( + fit, + newmods = predictorMatrixEffectSize, + newscale = predictorMatrixHeterogeneity, + level = 100 * options[["confidenceIntervalsLevel"]] + ) + } else { + + computedMarginalMeans <- predict( + fit, + newmods = predictorMatrixEffectSize, + level = 100 * options[["confidenceIntervalsLevel"]] + ) + } + + # compute test against specified value + if (.maIsMetaregressionFtest(options)) { + computedMarginalMeans <- cbind(data.frame(computedMarginalMeans), "df" = computedMarginalMeans$ddf) + computedMarginalMeans$stat <- (computedMarginalMeans$pred - options[["estimatedMarginalMeansEffectSizeTestAgainstValue"]]) / computedMarginalMeans$se + computedMarginalMeans$pval <- 2 * pt(abs(computedMarginalMeans$stat), computedMarginalMeans$df, lower.tail = FALSE) + colnames(computedMarginalMeans) <- c("est", "se", "lCi", "uCi", "lPi", "uPi", "df", "stat", "pval") + } else { + computedMarginalMeans <- data.frame(computedMarginalMeans) + computedMarginalMeans$stat <- (computedMarginalMeans$pred - options[["estimatedMarginalMeansEffectSizeTestAgainstValue"]]) / computedMarginalMeans$se + computedMarginalMeans$pval <- 2 * pnorm(abs(computedMarginalMeans$stat), lower.tail = FALSE) + colnames(computedMarginalMeans) <- c("est", "se", "lCi", "uCi", "lPi", "uPi", "stat", "pval") + } + + # TODO: apply effect size transformation + .maGetEffectSizeTransformationOptions(options) + + # create full data frame + computedMarginalMeans <- cbind(data.frame("variable" = selectedVariable, "value" = attr(predictorMatrixEffectSize, "at")), computedMarginalMeans) + + } else if (parameter == "heterogeneity") { + + predictorMatrixHeterogeneity <- .maGetMarginalMeansPredictorMatrix(fit, options, dataset, selectedVariable, "heterogeneity") + + computedMarginalMeans <- predict( + fit, + newscale = predictorMatrixHeterogeneity, + level = 100 * options[["confidenceIntervalsLevel"]] + ) + + computedMarginalMeans <- data.frame(computedMarginalMeans) + colnames(computedMarginalMeans) <- c("est", "se", "lCi", "uCi") + + # apply link transform + if (options[["heterogeneityModelLink"]] == "log") { + computedMarginalMeans <- exp(computedMarginalMeans) + } + + # apply tau / tau2 transform + if (options[["estimatedMarginalMeansHeterogeneityTransformation"]] == "tau") + computedMarginalMeans <- sqrt(computedMarginalMeans) + + # create full data frame + computedMarginalMeans <- cbind(data.frame("variable" = selectedVariable, "value" = attr(predictorMatrixHeterogeneity, "at")), computedMarginalMeans) + } + + + # remove unnecessary columns + computedMarginalMeans <- computedMarginalMeans[,!colnames(computedMarginalMeans) %in% "se"] + + if (!options[["confidenceIntervals"]]) + computedMarginalMeans <- computedMarginalMeans[,!colnames(computedMarginalMeans) %in% c("lCi", "uCi")] + + if (!options[["predictionIntervals"]]) + computedMarginalMeans <- computedMarginalMeans[,!colnames(computedMarginalMeans) %in% c("lPi", "uPi")] + + if (!options[["estimatedMarginalMeansEffectSizeTestAgainst"]]) + computedMarginalMeans <- computedMarginalMeans[,!colnames(computedMarginalMeans) %in% c("df", "stat", "pval")] + + return(computedMarginalMeans) +} # check functions .maIsMetaregression <- function(options) { @@ -812,7 +1054,7 @@ } # extract options -.maGetMethodOptions <- function(options) { +.maGetMethodOptions <- function(options) { switch( options[["method"]], @@ -832,7 +1074,7 @@ NA ) } -.maGetFixedTau2Options <- function(options) { +.maGetFixedTau2Options <- function(options) { tau2 <- .parseRCodeInOptions(options[["fixParametersTau2Value"]]) @@ -841,7 +1083,7 @@ else return(tau2) } -.maGetControlOptions <- function(options) { +.maGetControlOptions <- function(options) { if (.maIsMetaregressionHeterogeneity(options)) { out <- list( @@ -874,7 +1116,28 @@ } return(out[!sapply(out, is.null)]) } +.maGetEffectSizeTransformationOptions <- function(options) { + switch( + options[["estimatedMarginalMeansEffectSizeTransformation"]], + none = NULL, + fishersZToCorrelation = metafor::transf.ztor, + exponential = exp, + logOddsToProportions = metafor::transf.logit, + logOddsToSmdNormal = metafor::transf.lnortod.norm, + logOddsToSmdLogistic = metafor::transf.lnortod.logis, + smdToLogOddsNormal = metafor::transf.dtolnor.norm, + smdToLogOddsLogistic = metafor::transf.dtolnor.logis, + hakstianAndWhalenInverseAlpha = metafor::transf.iahw, + bonettInverseAlpha = metafor::transf.iabt, + zToR2 = metafor::transf.ztor2, + smdToCohensU1 = metafor::transf.dtou1, + smdToCohensU2 = metafor::transf.dtou2, + smdToCohensU3 = metafor::transf.dtou3, + smdToCles = metafor::transf.dtocles, + stop("Unknown transformation") + ) +} # misc .maVariableNames <- function(varNames, variables) { @@ -937,7 +1200,7 @@ messages <- c(messages, gettext("The pooled effect size corresponds to the weighted average effect across studies.")) if (.maIsMetaregressionHeterogeneity(options)) - messages <- c(messages, gettext("The pooled heterogeneity estimate corresponds to the weighted average heterogeneity across studies.")) + messages <- c(messages, gettext("The pooled heterogeneity estimate corresponds to the heterogeneity at the average of predictor values.")) if (.maIsMetaregressionHeterogeneity(options) && (options[["heterogeneityI2"]] || options[["heterogeneityH2"]])) messages <- c(messages, gettext("The IΒ² and HΒ² statistics are not available for heterogeneity models.")) diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 10e87967..9c2d7eae 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -260,25 +260,28 @@ Form name: "heterogeneityH2" checked: false } + } + Group + { CheckBox { - text: qsTr("Prediction interval") - name: "heterogeneityPredictionInterval" - checked: false - } - } + name: "confidenceIntervals" + text: qsTr("Confidence intervals") + checked: true + childrenOnSameRow: true - CheckBox - { - name: "confidenceIntervals" - text: qsTr("Confidence intervals") - checked: true - childrenOnSameRow: true + CIField + { + name: "confidenceIntervalsLevel" + } + } - CIField + CheckBox { - name: "confidenceIntervalsLevel" + text: qsTr("Prediction intervals") + name: "predictionIntervals" + checked: true } } @@ -292,7 +295,122 @@ Form Section { title: qsTr("Estimated Marginal Means") - + + Group + { + title: qsTr("Effect size") + enabled: effectSizeModelTerms.count > 0 + + VariablesForm + { + preferredHeight: 250 + + AvailableVariablesList + { + name: "estimatedMarginalMeansEffectSizeModelVariables" + title: qsTr("Model variables") + source: [{ name: "effectSizeModelTerms", use: "noInteraction" }] + } + + AssignedVariablesList + { + id: estimatedMarginalMeansEffectSizeSelectedVariables + name: "estimatedMarginalMeansEffectSizeSelectedVariables" + title: qsTr("Selected variables") + allowTypeChange:false + } + } + + DropDown + { + name: "estimatedMarginalMeansEffectSizeTransformation" + label: qsTr("Effect size transformation") + values: [ + { label: qsTr("None") , value: "none" }, // NULL + { label: qsTr("Fisher's z to r") , value: "fishersZToCorrelation" }, // transf.ztor + { label: qsTr("Exponential") , value: "exponential" }, // exp + { label: qsTr("Log odds to proportions") , value: "logOddsToProportions" }, // transf.logit + { label: qsTr("Log odds to SMD (normal)") , value: "logOddsToSmdNormal" }, // transf.lnortod.norm + { label: qsTr("Log odds to SMD (logistic)") , value: "logOddsToSmdLogistic" }, // transf.lnortod.logis + { label: qsTr("SMD to log odds (normal)") , value: "smdToLogOddsNormal" }, // transf.dtolnor.norm + { label: qsTr("SMD to log odds (logistic)") , value: "smdToLogOddsLogistic" }, // transf.dtolnor.logis + { label: qsTr("Hakstian & Whalen inverse Ξ±") , value: "hakstianAndWhalenInverseAlpha"}, // transf.iahw + { label: qsTr("Bonett inverse Ξ±") , value: "bonettInverseAlpha" }, // transf.iabt + { label: qsTr("Z to RΒ²") , value: "zToR2" }, // transf.ztor2 + { label: qsTr("SMD to Cohen's U₁") , value: "smdToCohensU1" }, // transf.dtou1 + { label: qsTr("SMD to Cohen's Uβ‚‚") , value: "smdToCohensU2" }, // transf.dtou2 + { label: qsTr("SMD to Cohen's U₃") , value: "smdToCohensU3" }, // transf.dtou3 + { label: qsTr("SMD to CLES, Pr(supperiority)") , value: "smdToCles" }, // transf.dtocles + ] + } + + DoubleField + { + name: "estimatedMarginalMeansEffectSizeSdFactorCovariates" + label: qsTr("SD factor covariates") + defaultValue: 1 + min: 0 + enabled: estimatedMarginalMeansEffectSizeSelectedVariables.columnsTypes.includes("scale") + } + + CheckBox + { + name: "estimatedMarginalMeansEffectSizeTestAgainst" + label: qsTr("Test against") + childrenOnSameRow: true + + DoubleField + { + name: "estimatedMarginalMeansEffectSizeTestAgainstValue" + } + } + } + + Group + { + title: qsTr("Heterogeneity") + enabled: heterogeneityModelTerms.count > 0 + + VariablesForm + { + preferredHeight: 250 + + AvailableVariablesList + { + name: "estimatedMarginalHeterogeneityModelVariables" + title: qsTr("Model variables") + source: [{ name: "heterogeneityModelTerms", use: "noInteraction" }] + } + + AssignedVariablesList + { + id: estimatedMarginalMeansHeterogeneitySelectedVariables + name: "estimatedMarginalMeansHeterogeneitySelectedVariables" + title: qsTr("Selected variables") + allowTypeChange:false + } + } + + DropDown + { + name: "estimatedMarginalMeansHeterogeneityTransformation" + label: qsTr("Heterogeneity transformation") + values: [ + { label: qsTr("𝜏") , value: "tau" }, + { label: qsTr("𝜏²") , value: "tau2" } + ] + } + + DoubleField + { + name: "estimatedMarginalMeansHeterogeneitySdFactorCovariates" + label: qsTr("SD factor covariates") + defaultValue: 1 + min: 0 + enabled: estimatedMarginalMeansHeterogeneitySelectedVariables.columnsTypes.includes("scale") + } + } + } Section From e0286ec339dd435aed727cb1abe3647d6497969b Mon Sep 17 00:00:00 2001 From: FBartos Date: Tue, 18 Jun 2024 20:47:15 +0200 Subject: [PATCH 021/127] Update classicalmetaanalysiscommon.R --- R/classicalmetaanalysiscommon.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index ae6eb41f..f0585cf0 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -912,6 +912,7 @@ for (i in seq_along(remainingVariables)) { if (remainingVariables[[i]] %in% variablesFactors) { predictorsRemaining[[remainingVariables[i]]] <- factor(levels(dataset[[remainingVariables[[i]]]]), levels = levels(dataset[[remainingVariables[[i]]]])) + contrasts(predictorsRemaining[[remainingVariables[i]]]) <- contrasts(dataset[[remainingVariables[[i]]]]) } else if (remainingVariables[[i]] %in% variablesContinuous) { predictorsRemaining[[remainingVariables[i]]] <- mean(dataset[[remainingVariables[[i]]]]) } @@ -920,6 +921,7 @@ # create complete model matrices including the specified variable if (selectedVariable %in% variablesFactors) { selectedPredictor <- factor(levels(dataset[[selectedVariable]]), levels = levels(dataset[[selectedVariable]])) + contrasts(selectedPredictor) <- contrasts(dataset[[selectedVariable]]) } else if (selectedVariable %in% variablesContinuous) { selectedPredictor <- c( mean(dataset[[selectedVariable]]) - sdFactor * sd(dataset[[selectedVariable]]), From db160d6e5f4aa03d66626145a5ab19f172bd64a8 Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 19 Jun 2024 11:26:00 +0200 Subject: [PATCH 022/127] hotfix effect size calculation --- R/effectsizecomputation.R | 107 +++++++++++++++++++++++++++++++------- 1 file changed, 87 insertions(+), 20 deletions(-) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index 80d38b02..77058acf 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -1,13 +1,10 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { -# saveRDS(options, file = "C:/JASP/options.RDS") -# saveRDS(dataset, file = "C:/JASP/dataset.RDS") - - + # TODO: remove once Bruno fixes flattening and renaming + options <- .HOTFIX_flatten_options(options) dataset <- .escReadDataset(dataset, options) - return(NULL) dataOutput <- .escComputeEffectSizes(dataset, options) .escComputeSummaryTable(jaspResults, dataset, options, dataOutput) @@ -33,17 +30,15 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { # all possible variables selectedVariables <- options[["variables"]][[i]] - # remove auxiliary objects - selectedVariables <- selectedVariables[!names(selectedVariables) %in% c("value")] - - # remove Frequency/event cell adjustment - selectedVariables <- selectedVariables[!names(selectedVariables) %in% c("add", "to", "dropStudiesWithNoCasesOrEvents", "samplingVarianceType")] + # extract variable inputs + # TODO: remove once variable inputs are properly flattened + selectedVariables <- c( + unlist(selectedVariables[.escVariableInputs]), + if(length(selectedVariables[["confidenceInterval"]]) != 0) selectedVariables[["confidenceInterval"]][[1]] + ) # remove empty variables - selectedVariables <- selectedVariables[!(selectedVariables == "" | lengths(selectedVariables) == 0)] - - # unlist - selectedVariables <- unname(unlist(selectedVariables)) + selectedVariables <- selectedVariables[!selectedVariables == ""] return(selectedVariables) }) @@ -130,10 +125,10 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { # set the data computeSummary$setData(computeSummaryData) - if (nrow(dataset == sum(computeSummaryData[["computed"]]))) - addFootnote(computeSummary, gettext("Note: Effect sizes were successfully computed for each data entry.")) + if (nrow(dataset) == sum(computeSummaryData[["computed"]])) + computeSummary$addFootnote(gettext("Effect sizes were successfully computed for each data entry.")) else - addFootnote(computeSummary, gettextf( + computeSummary$addFootnote(gettextf( "Note: Effect sizes were successfully computed for %1$i out of %2$i data entries.", sum(computeSummaryData[["computed"]]), nrow(dataset))) @@ -141,7 +136,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { computeErrors <- attr(dataOutput, "errors") for (i in seq_along(computeErrors)) { - addFootnote(computeSummary, with(computeErrors[[i]], gettextf("Error in step %1$i: %2$s", step, error))) + computeSummary$addFootnote(computeErrors[[i]]$error, symbol = gettextf("Error in step %1$i:", computeErrors[[i]]$step)) } return() @@ -784,8 +779,6 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { # remove new lines errorMessage <- gsub("\\n ", "", errorMessage) - errorMessage <- attr(newDataOutput, "condition")$message - if (grepl("via the appropriate arguments", errorMessage)) { # split the message at 'via the appropriate arguments' @@ -822,3 +815,77 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { return(inputs) } +.escVariableInputs <- c( + "group1OutcomePlus", + "time1OutcomePlus", + "outcomePlusPlus", + "cronbachsAlpha", + "homozygousDominantAlleles", + "group1OutcomeMinus", + "time1OutcomeMinus", + "outcomePlusMinus", + "heterozygousAlleles", + "group2OutcomePlus", + "time2OutcomePlus", + "outcomeMinusPlus", + "homozygousRecessiveAlleles", + "group2OutcomeMinus", + "time2OutcomeMinus", + "outcomeMinusMinus", + "outcomePlusPlusAndPlusMinus", + "outcomeMinusPlusAndMinusMinus", + "eventsGroup1", + "events", + "nonEvents", + "items", + "predictors", + "eventsGroup2", + "personTimeGroup1", + "personTime", + "personTimeGroup2", + "meanGroup1", + "meanTime1", + "meanGroup2", + "meanTime2", + "mean", + "sdGroup1", + "sdTime1", + "sdGroup2", + "sdTime2", + "sd", + "sampleSizeGroup1", + "sampleSizeGroup2", + "correlation", + "proportionPlusPlus", + "sampleSize", + "cohensD", + "rSquared", + "tStatistic", + "fStatistic", + "semipartialCorrelation", + "pValue", + "effectSize", + "standardError", + "samplingVariance", + "samplingVarianceTypeMixed" +) + +.HOTFIX_flatten_options <- function(options) { + + for(i in seq_along(options[["variables"]])) { + options[["variables"]][[i]][.escVariableInputs] <- lapply(options[["variables"]][[i]][.escVariableInputs], function(x) x[["value"]]) + + to_decode <- .escVariableInputs[sapply(options[["variables"]][[i]][.escVariableInputs], function(x) x != "")] + if(length(to_decode) != 0) { + for(j in seq_along(to_decode)) { + options[["variables"]][[i]][[to_decode[j]]] <- .encodeColNamesLax(options[["variables"]][[i]][[to_decode[j]]]) + } + } + + if(length(options[["variables"]][["confidenceInterval"]]) != 0) { + options[["variables"]][["confidenceInterval"]][[1]] <- .encodeColNamesLax(options[["variables"]][["confidenceInterval"]][[1]]) + } + } + + return(options) +} From 28e95f01d6f47c4f297f55364b511d92f0157dde Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 19 Jun 2024 15:58:15 +0200 Subject: [PATCH 023/127] add adjusted estimates --- R/classicalmetaanalysiscommon.R | 105 ++++++++++++++++++++++++----- inst/qml/ClassicalMetaAnalysis.qml | 36 ++++++++++ 2 files changed, 123 insertions(+), 18 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index f0585cf0..fb372caa 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -594,8 +594,10 @@ estimatedMarginalMeansTable$dependOn(switch( parameter, effectSize = c("estimatedMarginalMeansEffectSizeSelectedVariables", "estimatedMarginalMeansEffectSizeTransformation", "estimatedMarginalMeansEffectSizeSdFactorCovariates", - "estimatedMarginalMeansEffectSizeTestAgainst", "estimatedMarginalMeansEffectSizeTestAgainstValue", "predictionIntervals"), - heterogeneity = c("estimatedMarginalMeansHeterogeneitySelectedVariables", "estimatedMarginalMeansHeterogeneityTransformation", "estimatedMarginalMeansHeterogeneitySdFactorCovariates") + "estimatedMarginalMeansEffectSizeTestAgainst", "estimatedMarginalMeansEffectSizeTestAgainstValue", "predictionIntervals", + "estimatedMarginalMeansEffectSizeAddAdjustedEstimate"), + heterogeneity = c("estimatedMarginalMeansHeterogeneitySelectedVariables", "estimatedMarginalMeansHeterogeneityTransformation", "estimatedMarginalMeansHeterogeneitySdFactorCovariates", + "estimatedMarginalMeansHeterogeneityAddAdjustedEstimate") )) estimatedMarginalMeansContainer[[parameter]] <- estimatedMarginalMeansTable @@ -634,14 +636,24 @@ selectedVariables <- switch( parameter, - effectSize = unlist(options[["estimatedMarginalMeansEffectSizeSelectedVariables"]]), - heterogeneity = unlist(options[["estimatedMarginalMeansHeterogeneitySelectedVariables"]]) + effectSize = c( + if (options[["estimatedMarginalMeansEffectSizeAddAdjustedEstimate"]]) "", + unlist(options[["estimatedMarginalMeansEffectSizeSelectedVariables"]]) + ), + heterogeneity = c( + if (options[["estimatedMarginalMeansHeterogeneityAddAdjustedEstimate"]]) "", + unlist(options[["estimatedMarginalMeansHeterogeneitySelectedVariables"]]) + ) ) estimatedMarginalMeans <- do.call(rbind, lapply(selectedVariables, function(selectedVariable) .maComputeMarginalMeansVariable(fit, options, dataset, selectedVariable, parameter))) estimatedMarginalMeansTable$setData(estimatedMarginalMeans) + estimatedMarginalMeansMessages <- .maEstimatedMarginalMeansMessages(options, parameter) + for (i in seq_along(estimatedMarginalMeansMessages)) + estimatedMarginalMeansTable$addFootnote(estimatedMarginalMeansMessages[i]) + return() } @@ -931,14 +943,24 @@ } # add the specified variable and pool across the combinations of the remaining values - outMatrix <- do.call(rbind, lapply(seq_along(selectedPredictor), function(i) { - predictorsRemaining[[selectedVariable]] <- selectedPredictor[i] - outMatrix <- model.matrix(formula, data = expand.grid(predictorsRemaining)) - return(colMeans(outMatrix)[-1]) - })) + if (selectedVariable == "") { + # empty string creates overall adjusted estimate + outMatrix <- colMeans(model.matrix(formula, data = expand.grid(predictorsRemaining)))[-1] + } else { + outMatrix <- do.call(rbind, lapply(seq_along(selectedPredictor), function(i) { + predictorsRemaining[[selectedVariable]] <- selectedPredictor[i] + outMatrix <- model.matrix(formula, data = expand.grid(predictorsRemaining)) + return(colMeans(outMatrix)[-1]) + })) + } + # keep information about the variable and levels - attr(outMatrix, "variable") <- selectedVariable + if (selectedVariable == "") + attr(outMatrix, "variable") <- gettext("Adjusted Estimate") + else + attr(outMatrix, "variable") <- selectedVariable + if (selectedVariable %in% variablesFactors) attr(outMatrix, "at") <- selectedPredictor else if (selectedVariable %in% variablesContinuous) @@ -946,6 +968,8 @@ gettextf("Mean - %1$sSD", sdFactor), gettext("Mean"), gettextf("Mean + %1$sSD", sdFactor)) + else + attr(outMatrix, "at") <- "" return(outMatrix) } @@ -985,11 +1009,14 @@ colnames(computedMarginalMeans) <- c("est", "se", "lCi", "uCi", "lPi", "uPi", "stat", "pval") } - # TODO: apply effect size transformation - .maGetEffectSizeTransformationOptions(options) + # apply effect size transformation + if (options[["estimatedMarginalMeansEffectSizeTransformation"]] != "none") + computedMarginalMeans[,c("est", "lCi", "uCi", "lPi", "uPi")] <- do.call( + .maGetEffectSizeTransformationOptions(options[["estimatedMarginalMeansEffectSizeTransformation"]]), + list(computedMarginalMeans[,c("est", "lCi", "uCi", "lPi", "uPi")])) # create full data frame - computedMarginalMeans <- cbind(data.frame("variable" = selectedVariable, "value" = attr(predictorMatrixEffectSize, "at")), computedMarginalMeans) + computedMarginalMeans <- cbind(data.frame("variable" = attr(predictorMatrixEffectSize, "variable"), "value" = attr(predictorMatrixEffectSize, "at")), computedMarginalMeans) } else if (parameter == "heterogeneity") { @@ -1014,7 +1041,7 @@ computedMarginalMeans <- sqrt(computedMarginalMeans) # create full data frame - computedMarginalMeans <- cbind(data.frame("variable" = selectedVariable, "value" = attr(predictorMatrixHeterogeneity, "at")), computedMarginalMeans) + computedMarginalMeans <- cbind(data.frame("variable" = attr(predictorMatrixHeterogeneity, "variable"), "value" = attr(predictorMatrixHeterogeneity, "at")), computedMarginalMeans) } @@ -1118,10 +1145,10 @@ } return(out[!sapply(out, is.null)]) } -.maGetEffectSizeTransformationOptions <- function(options) { +.maGetEffectSizeTransformationOptions <- function(effectSizeTransformation) { switch( - options[["estimatedMarginalMeansEffectSizeTransformation"]], + effectSizeTransformation, none = NULL, fishersZToCorrelation = metafor::transf.ztor, exponential = exp, @@ -1137,9 +1164,33 @@ smdToCohensU2 = metafor::transf.dtou2, smdToCohensU3 = metafor::transf.dtou3, smdToCles = metafor::transf.dtocles, - stop("Unknown transformation") + stop(paste0("Unknown effect size transformation: ", effectSizeTransformation)) ) } + +# options names +.maGetOptionsNameEffectSizeTransformation <- function(effectSizeTransformation) { + + return(switch( + effectSizeTransformation, + "none" = NULL, + "fishersZToCorrelation" = gettext("Fisher's z to r"), + "exponential" = gettext("Exponential"), + "logOddsToProportions" = gettext("Log odds to proportions"), + "logOddsToSmdNormal" = gettext("Log odds to SMD (normal)"), + "logOddsToSmdLogistic" = gettext("Log odds to SMD (logistic)"), + "smdToLogOddsNormal" = gettext("SMD to log odds (normal)"), + "smdToLogOddsLogistic" = gettext("SMD to log odds (logistic)"), + "hakstianAndWhalenInverseAlpha" = gettext("Hakstian & Whalen inverse Ξ±"), + "bonettInverseAlpha" = gettext("Bonett inverse Ξ±"), + "zToR2" = gettext("Z to RΒ²"), + "smdToCohensU1" = gettext("SMD to Cohen's U₁"), + "smdToCohensU2" = gettext("SMD to Cohen's Uβ‚‚"), + "smdToCohensU3" = gettext("SMD to Cohen's U₃"), + "smdToCles" = gettext("SMD to CLES, Pr(supperiority)") + )) +} + # misc .maVariableNames <- function(varNames, variables) { @@ -1171,13 +1222,15 @@ })) } + # messages .maFixedEffectTextMessage <- function(options) { return(switch( options[["fixedEffectTest"]], "z" = gettext("Fixed effect tested using z-distribution."), "t" = gettext("Fixed effect tested using t-distribution."), - "knha" = gettext("Fixed effect tested using Knapp and Hartung adjustment.") + "knha" = gettext("Fixed effect tested using Knapp and Hartung adjustment."), + stop(paste0("Unknown fixed effect test.", options[["fixedEffectTest"]])) )) } .meMetaregressionHeterogeneityMessages <- function(options) { @@ -1212,3 +1265,19 @@ return(messages) } +.maEstimatedMarginalMeansMessages <- function(options, parameter) { + + messages <- gettext("Each marginal mean estimate is averaged across the levels of the remaining predictors.") + + if (parameter == "effectSize" && options[["estimatedMarginalMeansEffectSizeTransformation"]] != "none") + messages <- c(messages, gettextf("The estimates and intervals are transformed using %1$s transformation.", .maGetOptionsNameEffectSizeTransformation(options[["estimatedMarginalMeansEffectSizeTransformation"]]))) + + if (parameter == "heterogeneity") + messages <- c(messages, gettextf("The estimates and intervals correspond to %1$s.", switch( + options[["estimatedMarginalMeansHeterogeneityTransformation"]], + "tau" = gettext("\U1D70F"), + "tau2" = gettext("\U1D70F\U00B2") + ))) + + return(messages) +} diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 9c2d7eae..e841a3d5 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -283,6 +283,30 @@ Form name: "predictionIntervals" checked: true } +/* TODO: add with fixed width (now it's too wide!) + DropDown + { + name: "transformPooledEstimate" + label: qsTr("Transform pooled estimate") + values: [ + { label: qsTr("None") , value: "none" }, // NULL + { label: qsTr("Fisher's z to r") , value: "fishersZToCorrelation" }, // transf.ztor + { label: qsTr("Exponential") , value: "exponential" }, // exp + { label: qsTr("Log odds to proportions") , value: "logOddsToProportions" }, // transf.logit + { label: qsTr("Log odds to SMD (normal)") , value: "logOddsToSmdNormal" }, // transf.lnortod.norm + { label: qsTr("Log odds to SMD (logistic)") , value: "logOddsToSmdLogistic" }, // transf.lnortod.logis + { label: qsTr("SMD to log odds (normal)") , value: "smdToLogOddsNormal" }, // transf.dtolnor.norm + { label: qsTr("SMD to log odds (logistic)") , value: "smdToLogOddsLogistic" }, // transf.dtolnor.logis + { label: qsTr("Hakstian & Whalen inverse Ξ±") , value: "hakstianAndWhalenInverseAlpha"}, // transf.iahw + { label: qsTr("Bonett inverse Ξ±") , value: "bonettInverseAlpha" }, // transf.iabt + { label: qsTr("Z to RΒ²") , value: "zToR2" }, // transf.ztor2 + { label: qsTr("SMD to Cohen's U₁") , value: "smdToCohensU1" }, // transf.dtou1 + { label: qsTr("SMD to Cohen's Uβ‚‚") , value: "smdToCohensU2" }, // transf.dtou2 + { label: qsTr("SMD to Cohen's U₃") , value: "smdToCohensU3" }, // transf.dtou3 + { label: qsTr("SMD to CLES, Pr(supperiority)") , value: "smdToCles" }, // transf.dtocles + ] + } +*/ } CheckBox @@ -321,6 +345,12 @@ Form } } + CheckBox + { + name: "estimatedMarginalMeansEffectSizeAddAdjustedEstimate" + label: qsTr("Add adjusted estimate") + } + DropDown { name: "estimatedMarginalMeansEffectSizeTransformation" @@ -391,6 +421,12 @@ Form } } + CheckBox + { + name: "estimatedMarginalMeansHeterogeneityAddAdjustedEstimate" + label: qsTr("Add adjusted estimate") + } + DropDown { name: "estimatedMarginalMeansHeterogeneityTransformation" From fa026120046a43d122d2ad9d611ac762ecc5107f Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 19 Jun 2024 18:59:40 +0200 Subject: [PATCH 024/127] forest plot --- R/classicalmetaanalysis.R | 5 +- R/classicalmetaanalysiscommon.R | 27 +- R/forestplot.R | 62 +++++ inst/qml/ClassicalMetaAnalysis.qml | 397 ++++++++++++++++++++++++++--- 4 files changed, 442 insertions(+), 49 deletions(-) create mode 100644 R/forestplot.R diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 722c4afb..d3744ba7 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -44,7 +44,7 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { .maDependencies <- c( "effectSize", "effectSizeStandardError", "effectSizeModelTerms", "effectSizeModelIncludeIntercept", "heterogeneityModelTerms", "heterogeneityModelIncludeIntercept", "predictors", "predictors.types", - "clustering", "studyLabel", + "clustering", "method", "fixedEffectTest", "confidenceIntervalsLevel", "clusteringUseClubSandwich", "clusteringSmallSampleCorrection", "fixParametersTau2", "fixParametersTau2Value", @@ -76,8 +76,7 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { dataset <- .readDataSetToEnd( columns.as.factor = c( if (length(predictorsNominal) > 0) predictorsNominal, - if (options[["clustering"]] != "") options[["clustering"]], - if (options[["studyLabel"]] != "") options[["studyLabel"]] + if (options[["clustering"]] != "") options[["clustering"]] ), columns.as.numeric = c( options[["effectSize"]], diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index fb372caa..8f06f985 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -86,10 +86,6 @@ data = dataset ) - # add labels if specified - if (options[["studyLabel"]] != "") - rmaInput$slab <- as.name(options[["studyLabel"]]) - # add formulas if specified rmaInput$mods <- .maGetFormula(options[["effectSizeModelTerms"]], options[["effectSizeModelIncludeIntercept"]]) rmaInput$scale <- .maGetFormula(options[["heterogeneityModelTerms"]], options[["heterogeneityModelIncludeIntercept"]]) @@ -263,7 +259,8 @@ # pooled estimates pooledEstimatesTable <- createJaspTable(gettext("Pooled Estimates")) pooledEstimatesTable$position <- 3 - pooledEstimatesTable$dependOn(c("heterogeneityTau", "heterogeneityTau2", "heterogeneityI2", "heterogeneityH2", "confidenceIntervals", "confidenceIntervalsLevel", "predictionIntervals")) + pooledEstimatesTable$dependOn(c("heterogeneityTau", "heterogeneityTau2", "heterogeneityI2", "heterogeneityH2", + "confidenceIntervals", "confidenceIntervalsLevel", "predictionIntervals", "transformEffectSize")) modelSummaryContainer[["pooledEstimatesTable"]] <- pooledEstimatesTable pooledEstimatesTable$addColumnInfo(name = "par", type = "string", title = "") @@ -593,7 +590,7 @@ ) estimatedMarginalMeansTable$dependOn(switch( parameter, - effectSize = c("estimatedMarginalMeansEffectSizeSelectedVariables", "estimatedMarginalMeansEffectSizeTransformation", "estimatedMarginalMeansEffectSizeSdFactorCovariates", + effectSize = c("estimatedMarginalMeansEffectSizeSelectedVariables", "transformEffectSize", "estimatedMarginalMeansEffectSizeSdFactorCovariates", "estimatedMarginalMeansEffectSizeTestAgainst", "estimatedMarginalMeansEffectSizeTestAgainstValue", "predictionIntervals", "estimatedMarginalMeansEffectSizeAddAdjustedEstimate"), heterogeneity = c("estimatedMarginalMeansHeterogeneitySelectedVariables", "estimatedMarginalMeansHeterogeneityTransformation", "estimatedMarginalMeansHeterogeneitySdFactorCovariates", @@ -745,6 +742,13 @@ colnames(predictedEffect) <- c("est", "se", "lCi", "uCi", "lPi", "uPi") predictedEffect$par <- "Effect Size" + # apply effect size transformation + if (options[["transformEffectSize"]] != "none") + predictedEffect[,c("est", "lCi", "uCi", "lPi", "uPi")] <- do.call( + .maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), + list(predictedEffect[,c("est", "lCi", "uCi", "lPi", "uPi")])) + + # remove non-requested columns keepResults <- c( "par", "est", @@ -1010,9 +1014,9 @@ } # apply effect size transformation - if (options[["estimatedMarginalMeansEffectSizeTransformation"]] != "none") + if (options[["transformEffectSize"]] != "none") computedMarginalMeans[,c("est", "lCi", "uCi", "lPi", "uPi")] <- do.call( - .maGetEffectSizeTransformationOptions(options[["estimatedMarginalMeansEffectSizeTransformation"]]), + .maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), list(computedMarginalMeans[,c("est", "lCi", "uCi", "lPi", "uPi")])) # create full data frame @@ -1251,6 +1255,9 @@ messages <- c(messages, gettextf("%1$i clusters with min/median/max %2$i/%3$i/%4$i estimates.", fit[["n"]], min(fit[["tcl"]]), median(fit[["tcl"]]), max(fit[["tcl"]]))) } + if (options[["transformEffectSize"]] != "none") + messages <- c(messages, gettextf("The pooled effect size is transformed using %1$s transformation.", .maGetOptionsNameEffectSizeTransformation(options[["transformEffectSize"]]))) + if (.maIsMetaregressionEffectSize(options)) messages <- c(messages, gettext("The pooled effect size corresponds to the weighted average effect across studies.")) @@ -1269,8 +1276,8 @@ messages <- gettext("Each marginal mean estimate is averaged across the levels of the remaining predictors.") - if (parameter == "effectSize" && options[["estimatedMarginalMeansEffectSizeTransformation"]] != "none") - messages <- c(messages, gettextf("The estimates and intervals are transformed using %1$s transformation.", .maGetOptionsNameEffectSizeTransformation(options[["estimatedMarginalMeansEffectSizeTransformation"]]))) + if (parameter == "effectSize" && options[["transformEffectSize"]] != "none") + messages <- c(messages, gettextf("The estimates and intervals are transformed using %1$s transformation.", .maGetOptionsNameEffectSizeTransformation(options[["transformEffectSize"]]))) if (parameter == "heterogeneity") messages <- c(messages, gettextf("The estimates and intervals correspond to %1$s.", switch( diff --git a/R/forestplot.R b/R/forestplot.R new file mode 100644 index 00000000..8b3f5f47 --- /dev/null +++ b/R/forestplot.R @@ -0,0 +1,62 @@ +if(FALSE){ + + + + + ### extract effect sizes and variances from the fitted object + dfForrest <- data.frame( + yi = fit[["yi"]], + sei = sqrt(fit[["vi"]]), + weights = weights(fit) + ) + + # add CI using normal approximation + dfForrest$lCi <- dfForrest$yi - 1.96 * dfForrest$sei + dfForrest$uCi <- dfForrest$yi + 1.96 * dfForrest$sei + + + ### add variables used for either color, shape, order or Left panel information + additionalVariables <- c( + if (length(options[["forestPlotLeftPanelVariablesSelected"]]) > 0) unlist(options[["forestPlotLeftPanelVariablesSelected"]]), + if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], + if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]] + ) + if (length(additionalVariables) > 0) + dfForrest <- cbind(dfForrest, dataset[,additionalVariables,drop=FALSE]) + + + # add y-axis coordinates for plotting + dfForrest$yPos <- seq(nrow(dfForrest)) + + # mapping by + plotForrest <- ggplot2::ggplot(data = dfForrest) + + ggplot2::geom_point( + mapping = ggplot2::aes( + x = yi, + y = yPos +# color = if (options[["forestPlotMappingColor"]] != "") !!rlang::sym(options[["forestPlotMappingColor"]]), +# shape = if (options[["forestPlotMappingShape"]] != "") as.name(options[["forestPlotMappingShape"]]), + ), + color = if (options[["forestPlotMappingColor"]] != "") dfForrest[[options[["forestPlotMappingColor"]]]] else options[["forestPlotAuxiliaryPlotColor"]], + size = dfForrest[["weights"]] * options[["forestPlotRelativeSizeEstimates"]], + shape = if (options[["forestPlotMappingShape"]] == "") 15 + ) + + ggplot2::geom_errorbarh( + mapping = ggplot2::aes( + xmin = lCi, + xmax = uCi, + y = yPos), + height = 0) + plotForrest + + ggplot2::geom_vline( + xintercept = 0, + linetype = "dashed") + + require(gridExtra) + plot1 <- qplot(1) + plot2 <- qplot(1) + grid.arrange(plot1, plot2, ncol=2) + + +} diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index e841a3d5..f828060f 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -26,7 +26,7 @@ Form { VariablesForm { - preferredHeight: 425 * preferencesModel.uiScale + preferredHeight: 400 * preferencesModel.uiScale AvailableVariablesList { @@ -105,14 +105,6 @@ Form singleVariable: true allowedColumns: ["nominal"] } - - AssignedVariablesList - { - name: "studyLabel" - title: qsTr("Study Label") - singleVariable: true - suggestedColumns: ["nominal"] - } } Section @@ -283,11 +275,11 @@ Form name: "predictionIntervals" checked: true } -/* TODO: add with fixed width (now it's too wide!) + DropDown - { - name: "transformPooledEstimate" - label: qsTr("Transform pooled estimate") + {//TODO: make shorter or across both rows? + name: "transformEffectSize" + label: qsTr("Transform effect size") values: [ { label: qsTr("None") , value: "none" }, // NULL { label: qsTr("Fisher's z to r") , value: "fishersZToCorrelation" }, // transf.ztor @@ -306,7 +298,6 @@ Form { label: qsTr("SMD to CLES, Pr(supperiority)") , value: "smdToCles" }, // transf.dtocles ] } -*/ } CheckBox @@ -350,7 +341,7 @@ Form name: "estimatedMarginalMeansEffectSizeAddAdjustedEstimate" label: qsTr("Add adjusted estimate") } - +/* DropDown { name: "estimatedMarginalMeansEffectSizeTransformation" @@ -373,7 +364,7 @@ Form { label: qsTr("SMD to CLES, Pr(supperiority)") , value: "smdToCles" }, // transf.dtocles ] } - +*/ DoubleField { name: "estimatedMarginalMeansEffectSizeSdFactorCovariates" @@ -391,7 +382,8 @@ Form DoubleField { - name: "estimatedMarginalMeansEffectSizeTestAgainstValue" + name: "estimatedMarginalMeansEffectSizeTestAgainstValue" + defaultValue: 0 } } } @@ -451,34 +443,367 @@ Form Section { - title: qsTr("Plots") + title: qsTr("Forest Plot") + columns:2 CheckBox { id: forestPlot name: "forestPlot" text: qsTr("Forest plot") + } + + VariablesForm + { + preferredHeight: 150 * preferencesModel.uiScale + + AvailableVariablesList + { + name: "forestPlotLeftPanelVariablesAll" + } + + AssignedVariablesList + { + name: "forestPlotLeftPanelVariablesSelected" + title: qsTr("Left Panel Variables") //TODO: make the VariablesForm title + allowedColumns: ["nominal"] + } + } + + ComponentsList + { + name: "forestPlotLeftPanelVariableSettings" + source: "forestPlotLeftPanelVariablesSelected" + headerLabels: [qsTr("Title"), qsTr("Column width")] + + rowComponent: RowLayout + { + Text + { + text: rowValue + Layout.preferredWidth: 100 * preferencesModel.uiScale + elide: Text.ElideRight + } + + TextField + { + label: "" + name: "title" + value: "" + fieldWidth: 100 * preferencesModel.uiScale + useExternalBorder: false + showBorder: true + } + + DoubleField + { + label: "" + name: "width" + value: "1" + min: 0 + inclusive: JASP.None + fieldWidth: 40 * preferencesModel.uiScale + useExternalBorder: false + showBorder: true + } + } + } + + Group + { + title: qsTr("Mapping") + + DropDown + { + name: "forestPlotMappingColor" + label: qsTr("Color") + addEmptyValue: true + source: "forestPlotLeftPanelVariablesAll" + } + + DropDown + { + name: "forestPlotMappingShape" + label: qsTr("Shape") + addEmptyValue: true + source: "forestPlotLeftPanelVariablesAll" + } + } + + Group + { + title: qsTr("Order") + + DropDown + { + name: "forestPlotOrderBy" + label: qsTr("By") + addEmptyValue: true + source: "forestPlotLeftPanelVariablesAll" + } + + CheckBox + { + name: "forestPlotAscending" + text: qsTr("Ascending") + } + } + + + Group + { + title: qsTr("Right Panel") + + CheckBox + { + name: "forestPlotRightPanelEstimate" + text: qsTr("Estimate") + checked: true + } + + CheckBox + { + name: "forestPlotRightPanelConfidenceInterval" + text: qsTr("Confidence interval") + checked: true + } + + CheckBox + { + name: "forestPlotRightPanelWeights" + text: qsTr("Weights") + } + + IntegerField + { + name: "forestPlotRightPanelDigits" + text: qsTr("Digits") + min: 1 + value: 2 + inclusive: JASP.None + } + } + + + Group + { + title: qsTr("Model Information") + + CheckBox + { + name: "forestPlotPredictedEffects" + text: qsTr("Predicted effects") + checked: false + + CheckBox + { + name: "forestPlotPredictedEffectsPredictionInterval" + text: qsTr("Prediction interval") + checked: false + } + } + + CheckBox + { + name: "forestPlotPooledEffectSizeEstimate" + text: qsTr("Pooled effect size estimate") + checked: true + + CheckBox + { + name: "forestPlotPooledEffectSizeEstimatePredictionInterval" + text: qsTr("Prediction interval") + } + } + + CheckBox + { + name: "forestPlotResidualHeterogeneityTest" + text: qsTr("Residual heterogeneity test") + checked: true + } + + CheckBox + { + name: "forestPlotResidualHeterogeneityEstimate" + text: qsTr("Residual heterogeneity estimate") + enabled: method.value != "fixedEffects" || method.value != "equalEffects" + checked: true + } + + CheckBox + { + name: "forestPlotEffectSizeModerationTest" + text: qsTr("Effect size moderation test") + enabled: effectSizeModelTerms.count > 0 + checked: true + } CheckBox { - name: "forestPlotLabel" - text: qsTr("Show labels") + name: "forestPlotHeterogeneityModerationTest" + text: qsTr("Heterogeneity moderation test") + enabled: heterogeneityModelTerms.count > 0 + checked: true + } + } + + Group + { + title: qsTr("Relative Size") + + DoubleField + { + name: "forestPlotRelativeSizeEstimates" + text: qsTr("Estimates") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeText" + text: qsTr("Text") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeRow" + text: qsTr("Row") + defaultValue: 1 + min: 0 + inclusive: JASP.None } + } + + Group + { + title: qsTr("Auxiliary") DropDown { - name: "forestPlotOrder" - label: qsTr("Ordering") - currentIndex: 1 - values: [ - { label: qsTr("Year (ascending)") , value: "yearAscending" }, - { label: qsTr("Year (descending)") , value: "yearDescending" }, - { label: qsTr("Effect size (ascending)") , value: "effectSizeAscending" }, - { label: qsTr("Effect size (descending)") , value: "effectSizeDescending" } - ] + name: "forestPlotAuxiliaryPlotColor" + label: qsTr("Color") + values: [ + { label: qsTr("Black") , value: "black"}, + { label: qsTr("Blue") , value: "blue" }, + { label: qsTr("Red") , value: "red" } + ] + } + + CheckBox + { + name: "forestPlotAuxiliaryAddVerticalLine" + text: qsTr("Add vertical line") + + DoubleField + { + name: "forestPlotAuxiliaryAddVerticalLineValue" + defaultValue: 0 + negativeValues: true + } + } + + TextField + { + name: "forestPlotAuxiliaryEffectLabel" + text: qsTr("X-axis label") + value: "Effect Size" + } + + CheckBox + { + name: "forestPlotAuxiliarySetXAxisLimit" + text: qsTr("X-axis limits") + childrenOnSameRow: true + + DoubleField + { + name: "forestPlotAuxiliarySetXAxisLimitLower" + id: forestPlotAuxiliarySetXAxisLimitLower + text: qsTr("Lower") + defaultValue: -1 + negativeValues: true + max: forestPlotAuxiliarySetXAxisLimitUpper + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotAuxiliarySetXAxisLimitUpper" + id: forestPlotAuxiliarySetXAxisLimitUpper + text: qsTr("Upper") + defaultValue: 1 + min: forestPlotAuxiliarySetXAxisLimitLower + inclusive: JASP.None + } + } + } + + + + Group + { + columns: 2 + enabled: effectSizeModelTerms.count > 0 + + CheckBox + { + name: "forestPlotAddEstimatedMarginalMeans" + text: qsTr("Add Estimated Marginal Means") + } + + VariablesForm + { + + preferredHeight: 250 + + AvailableVariablesList + { + name: "forestPlotEstimatedMarginalMeansModelVariables" + title: qsTr("Model variables") + source: [{ name: "effectSizeModelTerms", use: "noInteraction" }] + } + + AssignedVariablesList + { + id: forestPlotEstimatedMarginalMeansSelectedVariables + name: "forestPlotEstimatedMarginalMeansSelectedVariables" + title: qsTr("Selected variables") + allowTypeChange:false + } + } + + CheckBox + { + name: "forestPlotEstimatedMarginalMeansAddAdjustedEstimate" + label: qsTr("Add adjusted estimate") } + CheckBox + { + name: "forestPlotEstimatedMarginalMeansTermsTest" + label: qsTr("Terms test") + } + + CheckBox + { + name: "forestPlotEstimatedMarginalMeansCoefficientTests" + label: qsTr("Coefficient test") + + DoubleField + { + name: "forestPlotEstimatedMarginalMeansCoefficientTestsAgainst" + text: qsTr("Against") + defaultValue: 0 + } + } } + } MA.ClassicalMetaAnalysisDiagnostics{} @@ -618,8 +943,8 @@ Form DoubleField { label: "" - name: "optimizerInitialTau2Value" - value: 1 + name: "optimizerInitialTau2Value" + defaultValue: 1 min: 0 inclusive: JASP.None } @@ -639,7 +964,7 @@ Form label: "" name: "optimizerMinimumTau2Value" id: optimizerMinimumTau2Value - value: 1e-6 + defaultValue: 1e-6 min: 0 max: optimizerMaximumTau2Value.value } @@ -659,7 +984,7 @@ Form label: "" name: "optimizerMaximumTau2Value" id: optimizerMaximumTau2Value - value: 100 + defaultValue: 100 min: optimizerMinimumTau2Value.value inclusive: JASP.None } @@ -703,7 +1028,7 @@ Form { label: "" name: "optimizerConvergenceToleranceValue" - value: { + defaultValue: { if (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") 1e-5 else if (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") @@ -728,7 +1053,7 @@ Form { label: "" name: "optimizerConvergenceRelativeToleranceValue" - value: 1e-8 + defaultValue: 1e-8 min: 0 inclusive: JASP.None } @@ -747,7 +1072,7 @@ Form { label: "" name: "optimizerStepAdjustmentValue" - value: 1 + defaultValue: 1 min: 0 inclusive: JASP.None } From 7ab00fc58dfd4e416cba4c7f243e9c551fc729a0 Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 19 Jun 2024 23:26:30 +0200 Subject: [PATCH 025/127] update forest plot --- R/classicalmetaanalysis.R | 22 +++++- R/classicalmetaanalysiscommon.R | 4 +- R/forestplot.R | 136 ++++++++++++++++++++++++-------- 3 files changed, 123 insertions(+), 39 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index d3744ba7..3491f98c 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -69,14 +69,23 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { if (!is.null(dataset)) return(dataset) + # model data predictorsNominal <- options[["predictors"]][options[["predictors.types"]] == "nominal"] predictorsScale <- options[["predictors"]][options[["predictors.types"]] == "scale"] + # forest plotting data + forestPlotVariables <- c( + if (length(options[["forestPlotLeftPanelVariablesSelected"]]) > 0) unlist(options[["forestPlotLeftPanelVariablesSelected"]]), + if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], + if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]] + ) + # load data dataset <- .readDataSetToEnd( columns.as.factor = c( if (length(predictorsNominal) > 0) predictorsNominal, - if (options[["clustering"]] != "") options[["clustering"]] + if (options[["clustering"]] != "") options[["clustering"]], + forestPlotVariables ), columns.as.numeric = c( options[["effectSize"]], @@ -86,7 +95,16 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { )) # omit NAs - dataset <- na.omit(dataset) + omitOnVariables <- c( + options[["effectSize"]], + options[["effectSizeStandardError"]], + if (options[["clustering"]] != "") options[["clustering"]], + if (length(predictorsNominal) > 0) predictorsNominal, + if (length(predictorsScale) > 0) predictorsScale + ) + anyNaByRows <- apply(dataset[,omitOnVariables], 1, function(x) anyNA(x)) + dataset <- dataset[!anyNaByRows,] + attr(dataset, "NAs") <- sum(anyNaByRows) return(dataset) } diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 8f06f985..f12f0988 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -1267,8 +1267,8 @@ if (.maIsMetaregressionHeterogeneity(options) && (options[["heterogeneityI2"]] || options[["heterogeneityH2"]])) messages <- c(messages, gettext("The IΒ² and HΒ² statistics are not available for heterogeneity models.")) - if (length(attr(dataset, "na.action")) > 0) - messages <- c(messages, gettextf("%1$i observations were ommited due to missing values.", length(attr(dataset, "na.action")))) + if (attr(dataset, "NAs") > 0) + messages <- c(messages, gettextf("%1$i observations were ommited due to missing values.", attr(dataset, "NAs"))) return(messages) } diff --git a/R/forestplot.R b/R/forestplot.R index 8b3f5f47..000fd97b 100644 --- a/R/forestplot.R +++ b/R/forestplot.R @@ -5,14 +5,58 @@ if(FALSE){ ### extract effect sizes and variances from the fitted object dfForrest <- data.frame( - yi = fit[["yi"]], - sei = sqrt(fit[["vi"]]), - weights = weights(fit) + effectSize = fit[["yi"]], + standardError = sqrt(fit[["vi"]]), + weights = weights(fit), + id = seq_along(fit[["yi"]]) ) # add CI using normal approximation - dfForrest$lCi <- dfForrest$yi - 1.96 * dfForrest$sei - dfForrest$uCi <- dfForrest$yi + 1.96 * dfForrest$sei + dfForrest$lCi <- dfForrest$effectSize - 1.96 * dfForrest$standardError + dfForrest$uCi <- dfForrest$effectSize + 1.96 * dfForrest$standardError + + # transform effect size when requested + if (options[["transformEffectSize"]] != "none") + dfForrest[,c("effectSize", "lCi", "uCi")] <- do.call( + .maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), + list(dfForrest[,c("effectSize", "lCi", "uCi")])) + + xRange <- range(dfForrest$lCi, dfForrest$uCi) + + # add y-axis coordinates for plotting + dfForrest$yPos <- seq(nrow(dfForrest)) * options[["forestPlotRelativeSizeRow"]] + + ### add prediction intervals + if (options[["forestPlotPredictedEffects"]]) { + + fitPrediction <- data.frame(predict(fit)) + + # replicate the prediction for each estimate if the predictions are the same (no moderators) + if (nrow(fitPrediction) == 1) + fitPrediction <- do.call(rbind, replicate(nrow(dfForrest), fitPrediction, simplify = FALSE)) + + fitPrediction$id <- dfForrest$id + fitPrediction$yPos <- dfForrest$yPos + + # create prediction diamond coordinates for each estimate + fitPrediction <- do.call(rbind, lapply(1:nrow(fitPrediction), function(i) { + data.frame( + id = fitPrediction$id[i], + xPrediction = c(fitPrediction$pi.lb[i], fitPrediction$pred[i], fitPrediction$pi.ub[i], fitPrediction$pred[i]), + yPrediction = c(fitPrediction$yPos[i], fitPrediction$yPos[i] - 1/3, fitPrediction$yPos[i], fitPrediction$yPos[i] + 1/3) + ) + })) + + fitPrediction <- merge(fitPrediction, dfForrest, by = "id") + + # transform effect size when requested + if (options[["transformEffectSize"]] != "none") + fitPrediction[,"xPrediction"] <- do.call( + .maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), + list(fitPrediction[,"xPrediction"])) + + xRange <- range(c(xRange, range(fitPrediction$xPrediction))) + } ### add variables used for either color, shape, order or Left panel information @@ -25,38 +69,60 @@ if(FALSE){ dfForrest <- cbind(dfForrest, dataset[,additionalVariables,drop=FALSE]) - # add y-axis coordinates for plotting - dfForrest$yPos <- seq(nrow(dfForrest)) - - # mapping by - plotForrest <- ggplot2::ggplot(data = dfForrest) + - ggplot2::geom_point( - mapping = ggplot2::aes( - x = yi, - y = yPos -# color = if (options[["forestPlotMappingColor"]] != "") !!rlang::sym(options[["forestPlotMappingColor"]]), -# shape = if (options[["forestPlotMappingShape"]] != "") as.name(options[["forestPlotMappingShape"]]), - ), - color = if (options[["forestPlotMappingColor"]] != "") dfForrest[[options[["forestPlotMappingColor"]]]] else options[["forestPlotAuxiliaryPlotColor"]], - size = dfForrest[["weights"]] * options[["forestPlotRelativeSizeEstimates"]], - shape = if (options[["forestPlotMappingShape"]] == "") 15 - ) + - ggplot2::geom_errorbarh( - mapping = ggplot2::aes( - xmin = lCi, - xmax = uCi, - y = yPos), - height = 0) - plotForrest - ggplot2::geom_vline( - xintercept = 0, - linetype = "dashed") + ### make the forest plot + plotForrest <- ggplot2::ggplot(data = dfForrest) - require(gridExtra) - plot1 <- qplot(1) - plot2 <- qplot(1) - grid.arrange(plot1, plot2, ncol=2) + + ### add prediction intervals + # dispatch the aes call based on mapping: + aesCall <- list( + x = as.name("xPrediction"), + y = as.name("yPrediction"), + group = as.name("id"), + fill = if (options[["forestPlotMappingColor"]] != "") as.name(options[["forestPlotMappingColor"]]) + ) + geomCall <- list( + data = fitPrediction, + mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), + fill = if (options[["forestPlotMappingColor"]] == "") "grey20", + alpha = 0.8 + ) + plotForrest <- plotForrest + do.call(ggplot2::geom_polygon, geomCall[!sapply(geomCall, is.null)]) + + + ### add estimates + # dispatch the aes call based on mapping: + aesCall <- list( + x = as.name("effectSize"), + y = as.name("yPos"), + color = if (options[["forestPlotMappingColor"]] != "") as.name(options[["forestPlotMappingColor"]]), + shape = if (options[["forestPlotMappingShape"]] != "") as.name(options[["forestPlotMappingShape"]]) + ) + geomCall <- list( + mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), + color = if (options[["forestPlotMappingColor"]] == "") options[["forestPlotAuxiliaryPlotColor"]], + shape = if (options[["forestPlotMappingShape"]] == "") 15, + size = dfForrest[["weights"]] * options[["forestPlotRelativeSizeEstimates"]] + ) + plotForrest <- plotForrest + do.call(ggplot2::geom_point, geomCall[!sapply(geomCall, is.null)]) + # change scale for shapes to full shapes if used + if (options[["forestPlotMappingShape"]] != "") + plotForrest <- plotForrest + ggplot2::scale_shape_manual(values = rep(c(15:18, 21:25), length.out = length(unique(dfForrest[[options[["forestPlotMappingShape"]]]])))) + ### add CIs + plotForrest <- plotForrest + ggplot2::geom_errorbarh( + mapping = ggplot2::aes( + xmin = lCi, + xmax = uCi, + y = yPos + ), + height = 0 + ) + + + + + plotForrest } From 753c909b1e04950cb3aec0f4fbf7ff5051b9af91 Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 20 Jun 2024 17:52:56 +0200 Subject: [PATCH 026/127] forest plot progress --- R/classicalmetaanalysis.R | 8 +- R/classicalmetaanalysiscommon.R | 306 +++++++++++++--- R/forestplot.R | 546 ++++++++++++++++++++++++----- inst/qml/ClassicalMetaAnalysis.qml | 313 ++++++++++------- 4 files changed, 894 insertions(+), 279 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 3491f98c..5fd68b87 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -75,10 +75,16 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { # forest plotting data forestPlotVariables <- c( - if (length(options[["forestPlotLeftPanelVariablesSelected"]]) > 0) unlist(options[["forestPlotLeftPanelVariablesSelected"]]), + if (length(options[["forestPlotStudyInformationSelectedVariables"]]) > 0) unlist(options[["forestPlotStudyInformationSelectedVariables"]]), if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]] ) + # remove variables already specified in the model + forestPlotVariables <- setdiff( + forestPlotVariables, + c(predictorsNominal, predictorsScale, options[["effectSize"]], options[["effectSizeStandardError"]], options[["clustering"]]) + ) + # load data dataset <- .readDataSetToEnd( diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index f12f0988..dd0cf4d9 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -28,7 +28,7 @@ # meta-regression tables if (.maIsMetaregression(options)) { - if (options[["metaregressionTermsTests"]]) { + if (options[["metaregressionTermTests"]]) { .maTermsTable(jaspResults, dataset, options, "effectSize") .maTermsTable(jaspResults, dataset, options, "heterogeneity") } @@ -154,7 +154,7 @@ residualHeterogeneityTable$position <- 1 modelSummaryContainer[["residualHeterogeneityTable"]] <- residualHeterogeneityTable - residualHeterogeneityTable$addColumnInfo(name = "qstat", type = "number", title = gettext("QE")) + residualHeterogeneityTable$addColumnInfo(name = "qstat", type = "number", title = gettext("Q\U2091")) residualHeterogeneityTable$addColumnInfo(name = "df", type = "integer", title = gettext("df")) residualHeterogeneityTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) @@ -201,7 +201,7 @@ modelSummaryContainer[["moderatorsTable"]] <- moderatorsTable moderatorsTable$addColumnInfo(name = "parameter", type = "string", title = gettext("Parameter")) - moderatorsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("QM")) + moderatorsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("Q\U2098")) moderatorsTable$addColumnInfo(name = "df1", type = "integer", title = if(.maIsMetaregressionFtest(options)) gettext("df\U2081") else gettext("df")) if (.maIsMetaregressionFtest(options)) moderatorsTable$addColumnInfo(name = "df2", type = "number", title = gettext("df\U2082")) @@ -356,11 +356,11 @@ effectSize = 1, heterogeneity = 2 ) - termsTable$dependOn("metaregressionTermsTests") + termsTable$dependOn("metaregressionTermTests") metaregressionContainer[[paste0(parameter, "TermsTable")]] <- termsTable termsTable$addColumnInfo(name = "term", type = "string", title = "") - termsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("QM")) + termsTable$addColumnInfo(name = "stat", type = "number", title = if(.maIsMetaregressionFtest(options)) gettext("F") else gettext("Q\U2098")) termsTable$addColumnInfo(name = "df1", type = "integer", title = if(.maIsMetaregressionFtest(options)) gettext("df\U2081") else gettext("df")) if (.maIsMetaregressionFtest(options)) { termsTable$addColumnInfo(name = "df2", type = "number", title = gettext("df\U2082")) @@ -377,24 +377,9 @@ return() terms <- attr(terms(fit[["formula.mods"]], data = fit[["data"]]),"term.labels") - termsIndex <- attr(model.matrix(fit[["formula.mods"]], data = fit[["data"]]), "assign") - termsTests <- do.call(rbind.data.frame, lapply(seq_along(terms), function(i) { - - termsAnova <- anova(fit, btt = seq_along(termsIndex)[termsIndex == i]) - - out <- list( - term = .maVariableNames(terms[i], options[["predictors"]]), - stat = termsAnova[["QM"]], - df1 = termsAnova[["QMdf"]][1], - pval = termsAnova[["QMp"]] - ) - - if (.maIsMetaregressionFtest(options)) - out$df2 <- termsAnova[["QMdf"]][2] - - return(out) - })) - + termsTests <- do.call(rbind.data.frame, lapply(terms, function(term) + .maTermTests(fit, options, term, parameter = "effectSize") + )) termsTable$setData(termsTests) } else if (parameter == "heterogeneity") { @@ -403,24 +388,9 @@ return() terms <- attr(terms(fit[["formula.scale"]], data = fit[["data"]]),"term.labels") - termsIndex <- attr(model.matrix(fit[["formula.scale"]], data = fit[["data"]]), "assign") - termsTests <- do.call(rbind.data.frame, lapply(seq_along(terms), function(i) { - - termsAnova <- anova(fit, btt = seq_along(termsIndex)[termsIndex == i]) - - out <- list( - term = .maVariableNames(terms[i], options[["predictors"]]), - stat = termsAnova[["QM"]], - df1 = termsAnova[["QMdf"]][1], - pval = termsAnova[["QMp"]] - ) - - if (.maIsMetaregressionFtest(options)) - out$df2 <- termsAnova[["QMdf"]][2] - - return(out) - })) - + termsTests <- do.call(rbind.data.frame, lapply(terms, function(term) + .maTermTests(fit, options, term, parameter = "heterogeneity") + )) termsTable$setData(termsTests) } @@ -643,7 +613,11 @@ ) ) estimatedMarginalMeans <- do.call(rbind, lapply(selectedVariables, function(selectedVariable) - .maComputeMarginalMeansVariable(fit, options, dataset, selectedVariable, parameter))) + .maComputeMarginalMeansVariable(fit, options, dataset, selectedVariable, options[["estimatedMarginalMeansEffectSizeTestAgainstValue"]], parameter))) + + # drop non-required columns + if (parameter == "effectSize" && !options[["estimatedMarginalMeansEffectSizeTestAgainst"]]) + estimatedMarginalMeans <- estimatedMarginalMeans[,!colnames(estimatedMarginalMeans) %in% c("df", "stat", "pval")] estimatedMarginalMeansTable$setData(estimatedMarginalMeans) @@ -761,6 +735,64 @@ predictedEffect <- predictedEffect[,keepResults] return(as.list(predictedEffect)) } +.maComputePooledEffectPlot <- function(fit, options) { + + if (!.maIsMetaregressionEffectSize(options)) { + predictedEffect <- predict(fit) + } else { + if (.maIsMetaregressionHeterogeneity(options)) { + predictedEffect <- predict( + fit, + newmods = colMeans(model.matrix(fit)$location)[-1], + newscale = colMeans(model.matrix(fit)$scale)[-1] + ) + } else { + predictedEffect <- predict( + fit, + newmods = colMeans(model.matrix(fit))[-1] + ) + } + } + + # compute test against specified value + if (.maIsMetaregressionFtest(options)) { + predictedEffect <- cbind(data.frame(predictedEffect), "df" = predictedEffect$ddf) + predictedEffect$stat <- (predictedEffect$pred - 0) / predictedEffect$se + predictedEffect$pval <- 2 * pt(abs(predictedEffect$stat), predictedEffect$df, lower.tail = FALSE) + + # add empty prediction interval for FE and EE + if (.maGetMethodOptions(options) %in% c("FE", "EE")) { + predictedEffect$pi.lb <- predictedEffect$ci.lb + predictedEffect$pi.ub <- predictedEffect$ci.ub + } + + colnames(predictedEffect) <- c("est", "se", "lCi", "uCi", "lPi", "uPi", "df", "stat", "pval") + } else { + predictedEffect <- data.frame(predictedEffect) + predictedEffect$stat <- (predictedEffect$pred - 0) / predictedEffect$se + predictedEffect$pval <- 2 * pnorm(abs(predictedEffect$stat), lower.tail = FALSE) + + # add empty prediction interval for FE and EE + if (.maGetMethodOptions(options) %in% c("FE", "EE")) { + predictedEffect$pi.lb <- predictedEffect$ci.lb + predictedEffect$pi.ub <- predictedEffect$ci.ub + } + + colnames(predictedEffect) <- c("est", "se", "lCi", "uCi", "lPi", "uPi", "stat", "pval") + } + + # fix column names + predictedEffect$par <- "Effect Size" + + # apply effect size transformation + if (options[["transformEffectSize"]] != "none") + predictedEffect[,c("est", "lCi", "uCi", "lPi", "uPi")] <- do.call( + .maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), + list(predictedEffect[,c("est", "lCi", "uCi", "lPi", "uPi")])) + + + return(as.list(predictedEffect)) +} .maComputePooledHeterogeneity <- function(fit, options) { if (options[["fixParametersTau2"]]) { @@ -832,6 +864,45 @@ return(confIntHeterogeneity) } +.maComputePooledHeterogeneityPlot <- function(fit, options) { + + if (options[["fixParametersTau2"]]) { + + confIntHeterogeneity <- list( + est = sqrt(.maGetFixedTau2Options(options)), + lCi = NA, + uCi = NA + ) + + } else if (.maIsMetaregressionHeterogeneity(options)) { + + # no confint support + # predict the scale on the average value + predScale <- predict(fit, newscale = colMeans(model.matrix(fit)$scale)[-1], level = 100 * options[["confidenceIntervalsLevel"]]) + + if (options[["heterogeneityModelLink"]] == "log") { + confIntHeterogeneity <- data.frame( + est = exp(predScale[["pred"]] / 2), + lCi = exp(predScale[["ci.lb"]] / 2), + uCi = exp(predScale[["ci.ub"]] / 2) + ) + } else if (options[["heterogeneityModelLink"]] == "identity") { + confIntHeterogeneity <- data.frame( + est = sqrt(predScale[["pred"]]), + lCi = sqrt(predScale[["ci.lb"]]), + uCi = sqrt(predScale[["ci.ub"]]) + ) + } + + } else { + + confIntHeterogeneity <- confint(fit) + confIntHeterogeneity <- data.frame(confIntHeterogeneity[["random"]])[2,] + colnames(confIntHeterogeneity) <- c("est", "lCi", "uCi") + } + + return(confIntHeterogeneity) +} .maOmnibusTest <- function(fit, options, parameter = "effectSize") { if (parameter == "effectSize") { @@ -896,6 +967,31 @@ return(row) } +.maTermTests <- function(fit, options, term, parameter = "effectSize") { + + # obtain terms indicies + if (parameter == "effectSize") { + terms <- attr(terms(fit[["formula.mods"]], data = fit[["data"]]),"term.labels") + termsIndex <- attr(model.matrix(fit[["formula.mods"]], data = fit[["data"]]), "assign") + termsAnova <- anova(fit, btt = seq_along(termsIndex)[termsIndex == which(terms == term)]) + } else if (parameter == "heterogeneity") { + terms <- attr(terms(fit[["formula.scale"]], data = fit[["data"]]),"term.labels") + termsIndex <- attr(model.matrix(fit[["formula.scale"]], data = fit[["data"]]), "assign") + termsAnova <- anova(fit, att = seq_along(termsIndex)[termsIndex == which(terms == term)]) + } + + out <- list( + term = .maVariableNames(term, options[["predictors"]]), + stat = termsAnova[["QM"]], + df1 = termsAnova[["QMdf"]][1], + pval = termsAnova[["QMp"]] + ) + + if (.maIsMetaregressionFtest(options)) + out$df2 <- termsAnova[["QMdf"]][2] + + return(out) +} .maGetMarginalMeansPredictorMatrix <- function(fit, options, dataset, selectedVariable, parameter) { variablesContinuous <- options[["predictors"]][options[["predictors.types"]] == "scale"] @@ -977,7 +1073,7 @@ return(outMatrix) } -.maComputeMarginalMeansVariable <- function(fit, options, dataset, selectedVariable, parameter) { +.maComputeMarginalMeansVariable <- function(fit, options, dataset, selectedVariable, testAgainst = 0, parameter) { if (parameter == "effectSize") { predictorMatrixEffectSize <- .maGetMarginalMeansPredictorMatrix(fit, options, dataset, selectedVariable, "effectSize") @@ -1003,12 +1099,12 @@ # compute test against specified value if (.maIsMetaregressionFtest(options)) { computedMarginalMeans <- cbind(data.frame(computedMarginalMeans), "df" = computedMarginalMeans$ddf) - computedMarginalMeans$stat <- (computedMarginalMeans$pred - options[["estimatedMarginalMeansEffectSizeTestAgainstValue"]]) / computedMarginalMeans$se + computedMarginalMeans$stat <- (computedMarginalMeans$pred - testAgainst) / computedMarginalMeans$se computedMarginalMeans$pval <- 2 * pt(abs(computedMarginalMeans$stat), computedMarginalMeans$df, lower.tail = FALSE) colnames(computedMarginalMeans) <- c("est", "se", "lCi", "uCi", "lPi", "uPi", "df", "stat", "pval") } else { computedMarginalMeans <- data.frame(computedMarginalMeans) - computedMarginalMeans$stat <- (computedMarginalMeans$pred - options[["estimatedMarginalMeansEffectSizeTestAgainstValue"]]) / computedMarginalMeans$se + computedMarginalMeans$stat <- (computedMarginalMeans$pred - testAgainst) / computedMarginalMeans$se computedMarginalMeans$pval <- 2 * pnorm(abs(computedMarginalMeans$stat), lower.tail = FALSE) colnames(computedMarginalMeans) <- c("est", "se", "lCi", "uCi", "lPi", "uPi", "stat", "pval") } @@ -1058,9 +1154,6 @@ if (!options[["predictionIntervals"]]) computedMarginalMeans <- computedMarginalMeans[,!colnames(computedMarginalMeans) %in% c("lPi", "uPi")] - if (!options[["estimatedMarginalMeansEffectSizeTestAgainst"]]) - computedMarginalMeans <- computedMarginalMeans[,!colnames(computedMarginalMeans) %in% c("df", "stat", "pval")] - return(computedMarginalMeans) } @@ -1225,6 +1318,123 @@ })) } +.maPrintQTest <- function(fit) { + + return(sprintf("Heterogeneity: Q(%1$i) = %2$.2f, %3$s", fit[["k"]] - fit[["p"]], fit[["QE"]], .maPrintPValue(fit[["QEp"]]))) +} +.maPrintModerationTest <- function(fit, options, parameter) { + + out <- .maOmnibusTest(fit, options, parameter) + outPrint <- .maPrintTermTest(out, testStatistic = TRUE) + + if (parameter == "effectSize") + return(gettextf("Moderation: %1$s", outPrint)) + else if (parameter == "effectSize") + return(gettextf("Moderation (Heterogeneity): %1$s", outPrint)) +} +.maPrintHeterogeneityEstimate <- function(fit, options, digits, keepText) { + + out <- .maComputePooledHeterogeneityPlot(fit, options) + + if (keepText) + prefix <- gettext("Heterogeneity: ") + else + prefix <- paste0(rep(" ", nchar(gettext("Heterogeneity: "))), collapse = "") + + return(sprintf(paste0( + "%1$s \U1D70F = ", + "%2$.", digits, "f", + " [", + "%3$.", digits, "f", + ", ", + "%4$.", digits, "f", + "]" + ), prefix, out$est, out$lCi, out$uCi)) +} +.maPrintTermTest <- function(out, testStatistic = TRUE) { + + if (testStatistic) { + if (!is.null(out[["df2"]])) { + return(sprintf("F(%1$i, %2$.2f) = %3$.2f, %4$s", out[["df1"]], out[["df2"]], out[["stat"]], .maPrintPValue(out[["pval"]]))) + } else { + return(sprintf("Q\U2098(%1$i) = %2$.2f, %3$s", out[["df1"]], out[["stat"]], .maPrintPValue(out[["pval"]]))) + } + } else { + return(.maPrintPValue(out[["pval"]])) + } +} +.maPrintCoefficientTest <- function(out, testStatistic = TRUE) { + + if (testStatistic) { + if (!is.null(out[["df"]])) { + return(sprintf("t(%1$.2f) = %2$.2f, %3$s", out[["df"]], out[["stat"]], .maPrintPValue(out[["pval"]]))) + } else { + return(sprintf("z = %1$.2f, %2$s", out[["df1"]], out[["stat"]], .maPrintPValue(out[["pval"]]))) + } + } else { + return(.maPrintPValue(out[["pval"]])) + } +} +.maPrintPValue <- function(pValue) { + if (pValue < 0.001) { + return("p < 0.001") + } else { + return(sprintf("p = %.3f", pValue)) + } +} +.maPrintEstimateAndInterval <- function(est, lCi, uCi, digits) { + return(sprintf(paste0( + .maAddSpaceForPositiveValue(est), "%1$.", digits, "f", + " [", + .maAddSpaceForPositiveValue(lCi), "%2$.", digits, "f", + ", ", + .maAddSpaceForPositiveValue(uCi), "%3$.", digits, "f", + "]"), est, lCi, uCi)) +} +.maPrintPredictionInterval <- function(est, lCi, uCi, digits) { + return(sprintf(paste0( + " ", "%1$.", digits, "f", + " [", + .maAddSpaceForPositiveValue(lCi), "%2$.", digits, "f", + ", ", + .maAddSpaceForPositiveValue(uCi), "%3$.", digits, "f", + "]"), est, lCi, uCi)) +} +.maAddSpaceForPositiveValue <- function(value) { + if (value >= 0) + return(" ") + else + return("") +} +.maMakeDiamondDataFrame <- function(est, lCi, uCi, row, id, adj = 1/3) { + return(data.frame( + id = id, + x = c(lCi, est, uCi, est), + y = c(row, row-adj, row, row+adj), + type = "diamond", + mapColor = NA + )) +} +.maMakeRectangleDataFrame <- function(lCi, uCi, row, id, adj = 1/4) { + return(data.frame( + id = id, + x = c(lCi, uCi, uCi, lCi), + y = c(row-adj, row-adj, row+adj, row+adj), + type = "rectangle", + mapColor = NA + )) +} +.maGetMaxDigitsBeforeDecimal <- function(x) { + + dPos <- floor(log10(x[x >= 0])) + 1 + dNeg <- floor(log10(-x[x < 0])) + 2 # (+2 because of minus sign) + + # account for missing zeros + dPos[dPos == 0] <- 1 + dNeg[dNeg == 0] <- 1 + + return(max(c(dPos, dNeg))) +} # messages diff --git a/R/forestplot.R b/R/forestplot.R index 000fd97b..582c2135 100644 --- a/R/forestplot.R +++ b/R/forestplot.R @@ -1,128 +1,482 @@ if(FALSE){ + # extract common options + relativeRowSize <- options[["forestPlotRelativeSizeRow"]] + # keep track of added rows across marginal means and model estimates: + tempRow <- 1 + additionalInformation <- list() + additionalObjects <- list() + ### Study information panel ---- + if (options[["forestPlotStudyInformation"]]) { - ### extract effect sizes and variances from the fitted object - dfForrest <- data.frame( - effectSize = fit[["yi"]], - standardError = sqrt(fit[["vi"]]), - weights = weights(fit), - id = seq_along(fit[["yi"]]) - ) + ### extract effect sizes and variances from the fitted object + dfForrest <- data.frame( + effectSize = fit[["yi"]], + standardError = sqrt(fit[["vi"]]), + weights = weights(fit), + id = seq_along(fit[["yi"]]) + ) - # add CI using normal approximation - dfForrest$lCi <- dfForrest$effectSize - 1.96 * dfForrest$standardError - dfForrest$uCi <- dfForrest$effectSize + 1.96 * dfForrest$standardError + # add CI using normal approximation + dfForrest$lCi <- dfForrest$effectSize - 1.96 * dfForrest$standardError + dfForrest$uCi <- dfForrest$effectSize + 1.96 * dfForrest$standardError - # transform effect size when requested - if (options[["transformEffectSize"]] != "none") - dfForrest[,c("effectSize", "lCi", "uCi")] <- do.call( - .maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), - list(dfForrest[,c("effectSize", "lCi", "uCi")])) + # transform effect size when requested + if (options[["transformEffectSize"]] != "none") + dfForrest[,c("effectSize", "lCi", "uCi")] <- do.call( + .maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), + list(dfForrest[,c("effectSize", "lCi", "uCi")])) + + xRangeStudyInformationPanel <- range(c(dfForrest$lCi, dfForrest$uCi)) + + # add y-axis coordinates for plotting + dfForrest$row <- seq(nrow(dfForrest)) + + # add variables used for either color, shape, order or Left panel information + additionalVariables <- c( + if (length(options[["forestPlotStudyInformationSelectedVariables"]]) > 0) unlist(options[["forestPlotStudyInformationSelectedVariables"]]), + if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], + if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]] + ) + if (length(additionalVariables) > 0) + dfForrest <- cbind(dfForrest, dataset[,additionalVariables,drop=FALSE]) - xRange <- range(dfForrest$lCi, dfForrest$uCi) + ### add predicted effects + if (options[["forestPlotStudyInformationPredictedEffects"]]) { - # add y-axis coordinates for plotting - dfForrest$yPos <- seq(nrow(dfForrest)) * options[["forestPlotRelativeSizeRow"]] + fitPrediction <- data.frame(predict(fit)) - ### add prediction intervals - if (options[["forestPlotPredictedEffects"]]) { + # replicate the prediction for each estimate if the predictions are the same (no moderators) + if (nrow(fitPrediction) == 1) + fitPrediction <- do.call(rbind, replicate(nrow(dfForrest), fitPrediction, simplify = FALSE)) - fitPrediction <- data.frame(predict(fit)) + fitPrediction$id <- dfForrest$id + fitPrediction$row <- dfForrest$row - # replicate the prediction for each estimate if the predictions are the same (no moderators) - if (nrow(fitPrediction) == 1) - fitPrediction <- do.call(rbind, replicate(nrow(dfForrest), fitPrediction, simplify = FALSE)) + # create prediction diamond coordinates for each estimate + fitPrediction <- do.call(rbind, lapply(1:nrow(fitPrediction), function(i) { + with(fitPrediction[i,], .maMakeDiamondDataFrame(est = pred,lCi = pi.lb, uCi = pi.ub, row = row, id = id)) + })) - fitPrediction$id <- dfForrest$id - fitPrediction$yPos <- dfForrest$yPos + fitPrediction <- merge(fitPrediction, dfForrest[,!colnames(dfForrest) %in% c("effectSize", "standardError", "weights", "lCi", "uCi")], by = "id") + + # transform effect size when requested + if (options[["transformEffectSize"]] != "none") + fitPrediction[,"xPrediction"] <- do.call( + .maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), + list(fitPrediction[,"xPrediction"])) + + xRangeStudyInformationPanel <- range(c(xRangeStudyInformationPanel, range(fitPrediction$x))) + + # adjust y-coordinates + fitPrediction$y <- fitPrediction$y * relativeRowSize + } + + # adjust y-coordinates + dfForrest$y <- dfForrest$row * relativeRowSize + + } else { + xRangeStudyInformationPanel <- NA + } - # create prediction diamond coordinates for each estimate - fitPrediction <- do.call(rbind, lapply(1:nrow(fitPrediction), function(i) { - data.frame( - id = fitPrediction$id[i], - xPrediction = c(fitPrediction$pi.lb[i], fitPrediction$pred[i], fitPrediction$pi.ub[i], fitPrediction$pred[i]), - yPrediction = c(fitPrediction$yPos[i], fitPrediction$yPos[i] - 1/3, fitPrediction$yPos[i], fitPrediction$yPos[i] + 1/3) + + ### Estimated marginal means panel ---- + + ### compute and add marginal estimates + if (options[["forestPlotEstimatedMarginalMeans"]]) { + + # terms and levels information + estimatedMarginalMeansTestsStaistics <- options[["forestPlotAuxiliaryTestsInformation"]] == "statisticAndPValue" + estimatedMarginalMeansVariables <- unlist(options[["forestPlotEstimatedMarginalMeansSelectedVariables"]]) + + # statistics position adjustment + estimatedMarginalMeansTermsTestsRight <- options[["forestPlotEstimatedMarginalMeansTermTests"]] && options[["forestPlotRightPanel"]] + estimatedMarginalMeansTermsTestsLeft <- options[["forestPlotEstimatedMarginalMeansTermTests"]] && !options[["forestPlotRightPanel"]] + + estimatedMarginalMeansCoefficientTestsRight <- options[["forestPlotEstimatedMarginalMeansCoefficientTests"]] && options[["forestPlotRightPanel"]] + estimatedMarginalMeansCoefficientTestsBelow <- options[["forestPlotEstimatedMarginalMeansCoefficientTests"]] && !options[["forestPlotRightPanel"]] && options[["forestPlotPredictionIntervals"]] + estimatedMarginalMeansCoefficientTestsLeft <- options[["forestPlotEstimatedMarginalMeansCoefficientTests"]] && !options[["forestPlotRightPanel"]] && !options[["forestPlotPredictionIntervals"]] + + # add header + if (length(estimatedMarginalMeansVariables) > 0) { + + additionalInformation[[tempRow]] <- data.frame( + "label" = gettext("Estimated Marginal Means"), + "row" = tempRow, + "est" = NA, + "lCi" = NA, + "uCi" = NA, + "test" = "", + "print" = "bold" ) - })) + tempRow <- tempRow + 1 + } - fitPrediction <- merge(fitPrediction, dfForrest, by = "id") + # add marginal estimates + for (i in seq_along(estimatedMarginalMeansVariables)) { - # transform effect size when requested - if (options[["transformEffectSize"]] != "none") - fitPrediction[,"xPrediction"] <- do.call( - .maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), - list(fitPrediction[,"xPrediction"])) + tempTermTest <- .maTermTests(fit, options, estimatedMarginalMeansVariables[i]) + tempEstimatedMarginalMeans <- .maComputeMarginalMeansVariable(fit, options, dataset, estimatedMarginalMeansVariables[i], options[["forestPlotEstimatedMarginalMeansCoefficientTestsAgainst"]] , "effectSize") + tempTestText <- .maPrintTermTest(tempTermTest, estimatedMarginalMeansTestsStaistics) + + # add term information + additionalInformation[[tempRow]] <- data.frame( + "label" = if (estimatedMarginalMeansTermsTestsLeft) paste0(estimatedMarginalMeansVariables[i], ": ", tempTestText) else estimatedMarginalMeansVariables[i], + "row" = tempRow, + "est" = NA, + "lCi" = NA, + "uCi" = NA, + "test" = if (estimatedMarginalMeansTermsTestsRight) tempTestText else "", + "print" = NA + ) + tempRow <- tempRow + 1 + + # add levels information + for (j in 1:nrow(tempEstimatedMarginalMeans)) { + + tempCoefficientTest <- .maPrintCoefficientTest(tempEstimatedMarginalMeans[j,], estimatedMarginalMeansTestsStaistics) + + additionalInformation[[tempRow]] <- data.frame( + "label" = if (estimatedMarginalMeansCoefficientTestsLeft) paste0(tempEstimatedMarginalMeans$value[j], ": ", tempCoefficientTest) else tempEstimatedMarginalMeans$value[j], + "row" = tempRow, + "est" = tempEstimatedMarginalMeans$est[j], + "lCi" = tempEstimatedMarginalMeans$lCi[j], + "uCi" = tempEstimatedMarginalMeans$uCi[j], + "test" = if (estimatedMarginalMeansCoefficientTestsRight) tempCoefficientTest else "", + "print" = "italic" + ) + additionalObjects[[tempRow]] <- with(tempEstimatedMarginalMeans[j,], .maMakeDiamondDataFrame(est = est, lCi = lCi, uCi = uCi, row = tempRow, id = tempRow)) + additionalObjects[[tempRow]]$mapColor <- if(options[["forestPlotMappingColor"]] == estimatedMarginalMeansVariables[i]) tempEstimatedMarginalMeans$value[j] else NA + tempRow <- tempRow + 1 + + + if (options[["forestPlotPredictionIntervals"]] || estimatedMarginalMeansCoefficientTestsBelow) { + + additionalInformation[[tempRow]] <- data.frame( + "label" = if (estimatedMarginalMeansCoefficientTestsBelow) tempCoefficientTest else "", + "row" = tempRow, + "est" = NA, + "lCi" = if (options[["forestPlotPredictionIntervals"]]) tempEstimatedMarginalMeans$lPi[j] else NA, + "uCi" = if (options[["forestPlotPredictionIntervals"]]) tempEstimatedMarginalMeans$uPi[j] else NA, + "test" = "", + "print" = NA + ) + if (options[["forestPlotPredictionIntervals"]]) { + additionalObjects[[tempRow]] <- with(tempEstimatedMarginalMeans[j,], .maMakeRectangleDataFrame(lCi = lPi, uCi = uPi, row = tempRow, id = tempRow)) + additionalObjects[[tempRow]]$mapColor <- if(options[["forestPlotMappingColor"]] == estimatedMarginalMeansVariables[i]) tempEstimatedMarginalMeans$value[j] else NA + } + + + tempRow <- tempRow + 1 + } + } + + # add empty row + tempRow <- tempRow + 1 + } + + # add adjusted effect size estimate + if (options[["forestPlotEstimatedMarginalMeansAdjustedEffectSizeEstimate"]]) { + + tempEstimatedMarginalMeans <- .maComputeMarginalMeansVariable(fit, options, dataset, "", options[["forestPlotEstimatedMarginalMeansCoefficientTestsAgainst"]] , "effectSize") + tempCoefficientTest <- .maPrintCoefficientTest(tempEstimatedMarginalMeans, options[["forestPlotAuxiliaryTestsInformation"]] == "statisticAndPValue") + + additionalInformation[[tempRow]] <- data.frame( + "label" = if (estimatedMarginalMeansCoefficientTestsLeft) paste0(gettext("Adjusted Estimate"), ": ", tempCoefficientTest) else gettext("Adjusted Estimate"), + "row" = tempRow, + "est" = tempEstimatedMarginalMeans$est, + "lCi" = tempEstimatedMarginalMeans$lCi, + "uCi" = tempEstimatedMarginalMeans$uCi, + "test" = if (estimatedMarginalMeansCoefficientTestsRight) tempCoefficientTest else "", + "print" = NA + ) + additionalObjects[[tempRow]] <- with(tempEstimatedMarginalMeans, .maMakeDiamondDataFrame(est = est, lCi = lCi, uCi = uCi, row = tempRow, id = tempRow)) + tempRow <- tempRow + 1 + + if (options[["forestPlotPredictionIntervals"]] || estimatedMarginalMeansCoefficientTestsBelow) { + + additionalInformation[[tempRow]] <- data.frame( + "label" = if(estimatedMarginalMeansCoefficientTestsBelow) tempCoefficientTest else "", + "row" = tempRow, + "est" = NA, + "lCi" = if (options[["forestPlotPredictionIntervals"]]) tempEstimatedMarginalMeans$lPi else NA, + "uCi" = if (options[["forestPlotPredictionIntervals"]]) tempEstimatedMarginalMeans$uPi else NA, + "test" = "", + "print" = NA + ) + + if (options[["forestPlotPredictionIntervals"]]) + additionalObjects[[tempRow]] <- with(tempEstimatedMarginalMeans, .maMakeRectangleDataFrame(lCi = lPi, uCi = uPi, row = tempRow, id = tempRow)) + + tempRow <- tempRow + 1 + } + } + } + + + ### Model information panel ---- + # - residual heterogeneity test + # - moderation tests + # - pooled estimate + if (options[["forestPlotModelInformation"]]) { + + if (any(unlist(options[c( + "forestPlotResidualHeterogeneityTest", "forestPlotResidualHeterogeneityEstimate", + "forestPlotEffectSizeModerationTest", + "forestPlotHeterogeneityModerationTest", + "forestPlotPooledEffectSizeEstimate" + )]))) { + # add Header + additionalInformation[[tempRow]] <- data.frame( + "label" = gettext("Model Information"), + "row" = tempRow, + "est" = NA, + "lCi" = NA, + "uCi" = NA, + "test" = "", + "print" = "bold" + ) + tempRow <- tempRow + 1 + } - xRange <- range(c(xRange, range(fitPrediction$xPrediction))) + if (options[["forestPlotResidualHeterogeneityTest"]]) { + additionalInformation[[tempRow]] <- data.frame( + "label" = .maPrintQTest(fit), + "row" = tempRow, + "est" = NA, + "lCi" = NA, + "uCi" = NA, + "test" = "", + "print" = NA + ) + tempRow <- tempRow + 1 + } + + if (!.maGetMethodOptions(options) %in% c("FE", "EE") && options[["forestPlotResidualHeterogeneityEstimate"]]) { + additionalInformation[[tempRow]] <- data.frame( + "label" = .maPrintHeterogeneityEstimate(fit, options, digits = options[["forestPlotAuxiliaryDigits"]], keepText = !options[["forestPlotResidualHeterogeneityTest"]]), + "row" = tempRow, + "est" = NA, + "lCi" = NA, + "uCi" = NA, + "test" = "", + "print" = NA + ) + tempRow <- tempRow + 1 + } + + if (.maIsMetaregressionEffectSize(options) && options[["forestPlotEffectSizeModerationTest"]]) { + additionalInformation[[tempRow]] <- data.frame( + "label" = .maPrintModerationTest(fit, options, par = "effectSize"), + "row" = tempRow, + "est" = NA, + "lCi" = NA, + "uCi" = NA, + "test" = "", + "print" = NA + ) + tempRow <- tempRow + 1 + } + + if (.maIsMetaregressionHeterogeneity(options) && options[["forestPlotHeterogeneityModerationTest"]]) { + additionalInformation[[tempRow]] <- data.frame( + "label" = .maPrintModerationTest(fit, options, par = "heterogeneity"), + "row" = tempRow, + "est" = NA, + "lCi" = NA, + "uCi" = NA, + "test" = "", + "print" = NA + ) + tempRow <- tempRow + 1 + } + + if (options[["forestPlotPooledEffectSizeEstimate"]]) { + + pooledEffectSizeTestsRight <- options[["forestPlotPooledEffectSizeTest"]] && options[["forestPlotRightPanel"]] + pooledEffectSizeTestsBelow <- options[["forestPlotPooledEffectSizeTest"]] && !options[["forestPlotRightPanel"]] && options[["forestPlotPredictionIntervals"]] + pooledEffectSizeTestsLeft <- options[["forestPlotPooledEffectSizeTest"]] && !options[["forestPlotRightPanel"]] && !options[["forestPlotPredictionIntervals"]] + + tempPooledEstimate <- .maComputePooledEffectPlot(fit, options) + tempTestText <- .maPrintCoefficientTest(tempPooledEstimate, options[["forestPlotAuxiliaryTestsInformation"]] == "statisticAndPValue") + + additionalInformation[[tempRow]] <- data.frame( + "label" = if (pooledEffectSizeTestsLeft) paste0(gettext("Pooled Estimate"), ": ", tempTestText) else gettext("Pooled Estimate"), + "row" = tempRow, + "est" = tempPooledEstimate$est, + "lCi" = tempPooledEstimate$lCi, + "uCi" = tempPooledEstimate$uCi, + "test" = if (pooledEffectSizeTestsRight) tempTestText else "", + "print" = NA + ) + additionalObjects[[tempRow]] <- with(tempEstimatedMarginalMeans, .maMakeDiamondDataFrame(est = est, lCi = lCi, uCi = uCi, row = tempRow, id = tempRow)) + tempRow <- tempRow + 1 + + if (pooledEffectSizeTestsBelow || options[["forestPlotPredictionIntervals"]]) { + additionalInformation[[tempRow]] <- data.frame( + "label" = if (pooledEffectSizeTestsBelow) tempTestText else "", + "row" = tempRow, + "est" = NA, + "lCi" = if (options[["forestPlotPredictionIntervals"]]) tempPooledEstimate$lPi else NA, + "uCi" = if (options[["forestPlotPredictionIntervals"]]) tempPooledEstimate$uPi else NA, + "test" = "", + "print" = NA + ) + + if (options[["forestPlotPredictionIntervals"]]) + additionalObjects[[tempRow]] <- with(tempEstimatedMarginalMeans, .maMakeRectangleDataFrame(lCi = lPi, uCi = uPi, row = tempRow, id = tempRow)) + + tempRow <- tempRow + 1 + } + } + + + } + + + ### Merge results from estimated marginal means and information panel ---- + if (length(additionalInformation) > 0) { + + # merge additional information + additionalInformation <- do.call(rbind, additionalInformation) + additionalObjects <- do.call(rbind, additionalObjects[!sapply(additionalObjects, is.null)]) + + # adjust y-coordinates + additionalInformation$y <- -additionalInformation$row * relativeRowSize + additionalObjects$y <- -additionalObjects$y * relativeRowSize + + xRangeAddedPanels <- range(c(additionalInformation$lCi, additionalInformation$uCi, additionalObjects$x), na.rm = TRUE) + } else { + xRangeAddedPanels <- NA } + # specify x-axis limits + if (options[["forestPlotAuxiliarySetXAxisLimit"]]) { + xBreaks <- jaspGraphs::getPrettyAxisBreaks(c(options[["forestPlotAuxiliarySetXAxisLimitLower"]], options[["forestPlotAuxiliarySetXAxisLimitUpper"]])) + } else { + xBreaks <- jaspGraphs::getPrettyAxisBreaks(range(c(xRangeStudyInformationPanel, xRangeAddedPanels), na.rm = TRUE)) + } + xRange <- range(xBreaks) + + # specify y-axis limits + if (options[["forestPlotStudyInformation"]]) { + yRange <- c(0, max(dfForrest$y) + relativeRowSize) + } else { + yRange <- c(0, 0) + } + if (length(additionalInformation) > 0) { + yRange[1] <- min(additionalInformation$y) - relativeRowSize + } + if (length(additionalInformation) > 0) { + yRange[1] <- min(c(additionalObjects$y, yRange)) + } + + ### Make the forest plot ---- + plotForrest <- ggplot2::ggplot() - ### add variables used for either color, shape, order or Left panel information - additionalVariables <- c( - if (length(options[["forestPlotLeftPanelVariablesSelected"]]) > 0) unlist(options[["forestPlotLeftPanelVariablesSelected"]]), - if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], - if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]] - ) - if (length(additionalVariables) > 0) - dfForrest <- cbind(dfForrest, dataset[,additionalVariables,drop=FALSE]) - - - - ### make the forest plot - plotForrest <- ggplot2::ggplot(data = dfForrest) - - - ### add prediction intervals - # dispatch the aes call based on mapping: - aesCall <- list( - x = as.name("xPrediction"), - y = as.name("yPrediction"), - group = as.name("id"), - fill = if (options[["forestPlotMappingColor"]] != "") as.name(options[["forestPlotMappingColor"]]) - ) - geomCall <- list( - data = fitPrediction, - mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), - fill = if (options[["forestPlotMappingColor"]] == "") "grey20", - alpha = 0.8 - ) - plotForrest <- plotForrest + do.call(ggplot2::geom_polygon, geomCall[!sapply(geomCall, is.null)]) - - - ### add estimates - # dispatch the aes call based on mapping: - aesCall <- list( - x = as.name("effectSize"), - y = as.name("yPos"), - color = if (options[["forestPlotMappingColor"]] != "") as.name(options[["forestPlotMappingColor"]]), - shape = if (options[["forestPlotMappingShape"]] != "") as.name(options[["forestPlotMappingShape"]]) - ) - geomCall <- list( + # study information panel estimates + if (options[["forestPlotStudyInformation"]]) { + + # add prediction intervals + if (options[["forestPlotStudyInformationPredictedEffects"]]) { + # dispatch the aes call based on mapping + aesCall <- list( + x = as.name("x"), + y = as.name("y"), + group = as.name("id"), + fill = if (options[["forestPlotMappingColor"]] != "") as.name(options[["forestPlotMappingColor"]]) + ) + geomCall <- list( + data = fitPrediction, + mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), + fill = if (options[["forestPlotMappingColor"]] == "") "grey20", + alpha = 0.8 + ) + plotForrest <- plotForrest + do.call(ggplot2::geom_polygon, geomCall[!sapply(geomCall, is.null)]) + } + + ### add estimates + # dispatch the aes call based on mapping: + aesCall <- list( + x = as.name("effectSize"), + y = as.name("y"), + color = if (options[["forestPlotMappingColor"]] != "") as.name(options[["forestPlotMappingColor"]]), + shape = if (options[["forestPlotMappingShape"]] != "") as.name(options[["forestPlotMappingShape"]]) + ) + geomCall <- list( + data = dfForrest, mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), color = if (options[["forestPlotMappingColor"]] == "") options[["forestPlotAuxiliaryPlotColor"]], shape = if (options[["forestPlotMappingShape"]] == "") 15, size = dfForrest[["weights"]] * options[["forestPlotRelativeSizeEstimates"]] - ) - plotForrest <- plotForrest + do.call(ggplot2::geom_point, geomCall[!sapply(geomCall, is.null)]) - # change scale for shapes to full shapes if used - if (options[["forestPlotMappingShape"]] != "") - plotForrest <- plotForrest + ggplot2::scale_shape_manual(values = rep(c(15:18, 21:25), length.out = length(unique(dfForrest[[options[["forestPlotMappingShape"]]]])))) + ) + plotForrest <- plotForrest + do.call(ggplot2::geom_point, geomCall[!sapply(geomCall, is.null)]) + + # change scale for shapes to full shapes if used + if (options[["forestPlotMappingShape"]] != "") + plotForrest <- plotForrest + ggplot2::scale_shape_manual(values = rep(c(15:18, 21:25), length.out = length(unique(dfForrest[[options[["forestPlotMappingShape"]]]])))) + + + ### add CIs + plotForrest <- plotForrest + ggplot2::geom_errorbarh( + data = dfForrest, + mapping = ggplot2::aes( + xmin = lCi, + xmax = uCi, + y = y + ), + height = 0 + ) + + } + + # add additional information + if (length(additionalInformation) > 0) { + + # dispatch the aes call based on color mapping + if (any(!is.na(additionalObjects$mapColor))) { + plotForrest <- plotForrest + ggplot2::geom_polygon( + data = additionalObjects[is.na(additionalObjects$mapColor),], + mapping = ggplot2::aes( + x = x, + y = y, + group = id, + fill = mapColor + ) + ) + } + + if (any(is.na(additionalObjects$mapColor))) { + plotForrest <- plotForrest + ggplot2::geom_polygon( + data = additionalObjects[is.na(additionalObjects$mapColor),], + mapping = ggplot2::aes( + x = x, + y = y, + group = id, + ) + ) + } + } + + # add vertical line + if (options[["forestPlotAuxiliaryAddVerticalLine"]]) + plotForrest <- plotForrest + ggplot2::geom_vline(xintercept = options[["forestPlotAuxiliaryAddVerticalLineValue"]], linetype = "dashed") + + # fix plotting range + plotForrest <- plotForrest + jaspGraphs::scale_x_continuous( + name = options[["forestPlotAuxiliaryEffectLabel"]], + breaks = xBreaks, + limits = xRange + ) + ggplot2::ylim(yRange) + # plotForrest <- plotForrest + jaspGraphs::geom_rangeframe(sides = "b") + jaspGraphs::themeJaspRaw() - ### add CIs - plotForrest <- plotForrest + ggplot2::geom_errorbarh( - mapping = ggplot2::aes( - xmin = lCi, - xmax = uCi, - y = yPos - ), - height = 0 - ) + ### Make the left information panel ---- + plotLeft <- ggplot2::ggplot() + ggplot2::xlim(xRange) + ggplot2::ylim(yRange) - plotForrest } diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index f828060f..0c56a882 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -36,6 +36,7 @@ Form AssignedVariablesList { name: "effectSize" + id: effectSize title: qsTr("Effect Size") singleVariable: true allowedColumns: ["scale"] @@ -43,6 +44,7 @@ Form AssignedVariablesList { name: "effectSizeStandardError" + id: effectSizeStandardError title: qsTr("Effect Size Standard Error") singleVariable: true allowedColumns: ["scale"] @@ -199,8 +201,8 @@ Form CheckBox { - name: "metaregressionTermsTests" - text: qsTr("Terms tests") + name: "metaregressionTermTests" + text: qsTr("Term tests") checked: true } @@ -448,33 +450,35 @@ Form CheckBox { - id: forestPlot - name: "forestPlot" - text: qsTr("Forest plot") + id: forestPlotStudyInformation + name: "forestPlotStudyInformation" + text: qsTr("Study information") } VariablesForm { preferredHeight: 150 * preferencesModel.uiScale + enabled: forestPlotStudyInformation.checked AvailableVariablesList { - name: "forestPlotLeftPanelVariablesAll" + name: "forestPlotStudyInformationAllVariables" } AssignedVariablesList { - name: "forestPlotLeftPanelVariablesSelected" - title: qsTr("Left Panel Variables") //TODO: make the VariablesForm title + name: "forestPlotStudyInformationSelectedVariables" + title: qsTr("Selected Variables") //TODO: make the VariablesForm title allowedColumns: ["nominal"] } } ComponentsList { - name: "forestPlotLeftPanelVariableSettings" - source: "forestPlotLeftPanelVariablesSelected" - headerLabels: [qsTr("Title"), qsTr("Column width")] + name: "forestPlotStudyInformationSelectedVariablesSettings" + source: "forestPlotStudyInformationSelectedVariables" + enabled: forestPlotStudyInformation.checked + headerLabels: [qsTr("Title"), qsTr("Column width"), qsTr("Alignment")] rowComponent: RowLayout { @@ -506,114 +510,136 @@ Form useExternalBorder: false showBorder: true } - } - } - - Group - { - title: qsTr("Mapping") - DropDown - { - name: "forestPlotMappingColor" - label: qsTr("Color") - addEmptyValue: true - source: "forestPlotLeftPanelVariablesAll" - } - - DropDown - { - name: "forestPlotMappingShape" - label: qsTr("Shape") - addEmptyValue: true - source: "forestPlotLeftPanelVariablesAll" + DropDown + { + label: "" + name: "alignment" + values: [ + { label: qsTr("Left") , value: "left" }, + { label: qsTr("Center") , value: "center" }, + { label: qsTr("Right") , value: "right" } + ] + fieldWidth: 40 * preferencesModel.uiScale + useExternalBorder: false + showBorder: true + } } } Group { - title: qsTr("Order") + title: qsTr("Order") + enabled: forestPlotStudyInformation.checked DropDown { - name: "forestPlotOrderBy" + name: "forestPlotStudyInformationOrderBy" label: qsTr("By") addEmptyValue: true - source: "forestPlotLeftPanelVariablesAll" + source: "allVariables" } CheckBox { - name: "forestPlotAscending" + name: "forestPlotStudyInformationOrderAscending" text: qsTr("Ascending") } } + CheckBox + { + name: "forestPlotStudyInformationPredictedEffects" + text: qsTr("Predicted effects") + enabled: effectSize.count == 1 && effectSizeStandardError.count == 1 + checked: false + } - Group + Divider { } + + CheckBox { - title: qsTr("Right Panel") + name: "forestPlotEstimatedMarginalMeans" + id: forestPlotEstimatedMarginalMeans + text: qsTr("Estimated marginal means") + enabled: effectSizeModelTerms.count > 0 + } - CheckBox - { - name: "forestPlotRightPanelEstimate" - text: qsTr("Estimate") - checked: true - } + VariablesForm + { + preferredHeight: 250 + enabled: forestPlotEstimatedMarginalMeans.checked - CheckBox + AvailableVariablesList { - name: "forestPlotRightPanelConfidenceInterval" - text: qsTr("Confidence interval") - checked: true + name: "forestPlotEstimatedMarginalMeansModelVariables" + title: qsTr("Model variables") + source: [{ name: "effectSizeModelTerms", use: "noInteraction" }] } - CheckBox + AssignedVariablesList { - name: "forestPlotRightPanelWeights" - text: qsTr("Weights") + id: forestPlotEstimatedMarginalMeansSelectedVariables + name: "forestPlotEstimatedMarginalMeansSelectedVariables" + title: qsTr("Selected variables") + allowTypeChange:false } + } - IntegerField - { - name: "forestPlotRightPanelDigits" - text: qsTr("Digits") - min: 1 - value: 2 - inclusive: JASP.None - } + CheckBox + { + name: "forestPlotEstimatedMarginalMeansAdjustedEffectSizeEstimate" + label: qsTr("Adjusted effect size estimate") + enabled: forestPlotEstimatedMarginalMeans.checked } + CheckBox + { + name: "forestPlotEstimatedMarginalMeansTermTests" + id: forestPlotEstimatedMarginalMeansTermTests + enabled: forestPlotEstimatedMarginalMeans.checked + label: qsTr("Term tests") + checked: true + } - Group + CheckBox { - title: qsTr("Model Information") + name: "forestPlotEstimatedMarginalMeansCoefficientTests" + id: forestPlotEstimatedMarginalMeansCoefficientTests + enabled: forestPlotEstimatedMarginalMeans.checked + label: qsTr("Coefficient tests") + checked: true - CheckBox + DoubleField { - name: "forestPlotPredictedEffects" - text: qsTr("Predicted effects") - checked: false - - CheckBox - { - name: "forestPlotPredictedEffectsPredictionInterval" - text: qsTr("Prediction interval") - checked: false - } + name: "forestPlotEstimatedMarginalMeansCoefficientTestsAgainst" + text: qsTr("Against") + defaultValue: 0 } + } + + Divider { } + + CheckBox + { + name: "forestPlotModelInformation" + id: forestPlotModelInformation + enabled: effectSize.count == 1 && effectSizeStandardError.count == 1 + text: qsTr("Model information") + columns: 2 CheckBox { name: "forestPlotPooledEffectSizeEstimate" text: qsTr("Pooled effect size estimate") checked: true + } - CheckBox - { - name: "forestPlotPooledEffectSizeEstimatePredictionInterval" - text: qsTr("Prediction interval") - } + CheckBox + { + name: "forestPlotPooledEffectSizeTest" + text: qsTr("Pooled effect size test") + checked: true } CheckBox @@ -627,7 +653,7 @@ Form { name: "forestPlotResidualHeterogeneityEstimate" text: qsTr("Residual heterogeneity estimate") - enabled: method.value != "fixedEffects" || method.value != "equalEffects" + enabled: (method.value != "fixedEffects" || method.value != "equalEffects") checked: true } @@ -648,6 +674,63 @@ Form } } + + Divider {} + + Text + { + text: qsTr("Settings") + } + + CheckBox + { + name: "forestPlotPredictionIntervals" + text: qsTr("Prediction intervals") + checked: true + } + + Group + { + title: qsTr("Mapping") + + DropDown + { + name: "forestPlotMappingColor" + label: qsTr("Color") + addEmptyValue: true + source: "allVariables" + } + + DropDown + { + name: "forestPlotMappingShape" + label: qsTr("Shape") + addEmptyValue: true + source: "allVariables" + } + } + + CheckBox + { + name: "forestPlotRightPanel" + text: qsTr("Right Panel") + checked: true + + CheckBox + { + name: "forestPlotRightPanelEstimate" + text: qsTr("Estimates and confidence intervals") + checked: true + } + + CheckBox + { + name: "forestPlotRightPanelWeights" + text: qsTr("Weights") + enabled: forestPlotStudyInformation.checked + } + } + Group { title: qsTr("Relative Size") @@ -684,6 +767,25 @@ Form { title: qsTr("Auxiliary") + IntegerField + { + name: "forestPlotAuxiliaryDigits" + text: qsTr("Digits") + min: 1 + value: 2 + inclusive: JASP.None + } + + DropDown + { + label: qsTr("Tests information") + name: "forestPlotAuxiliaryTestsInformation" + values: [ + { label: qsTr("Statistic and p-value") , value: "statisticAndPValue" }, + { label: qsTr("P-value") , value: "pValue" } + ] + } + DropDown { name: "forestPlotAuxiliaryPlotColor" @@ -746,63 +848,6 @@ Form - Group - { - columns: 2 - enabled: effectSizeModelTerms.count > 0 - - CheckBox - { - name: "forestPlotAddEstimatedMarginalMeans" - text: qsTr("Add Estimated Marginal Means") - } - - VariablesForm - { - - preferredHeight: 250 - - AvailableVariablesList - { - name: "forestPlotEstimatedMarginalMeansModelVariables" - title: qsTr("Model variables") - source: [{ name: "effectSizeModelTerms", use: "noInteraction" }] - } - - AssignedVariablesList - { - id: forestPlotEstimatedMarginalMeansSelectedVariables - name: "forestPlotEstimatedMarginalMeansSelectedVariables" - title: qsTr("Selected variables") - allowTypeChange:false - } - } - - CheckBox - { - name: "forestPlotEstimatedMarginalMeansAddAdjustedEstimate" - label: qsTr("Add adjusted estimate") - } - - CheckBox - { - name: "forestPlotEstimatedMarginalMeansTermsTest" - label: qsTr("Terms test") - } - - CheckBox - { - name: "forestPlotEstimatedMarginalMeansCoefficientTests" - label: qsTr("Coefficient test") - - DoubleField - { - name: "forestPlotEstimatedMarginalMeansCoefficientTestsAgainst" - text: qsTr("Against") - defaultValue: 0 - } - } - } } From 0211489c7cb73e7d4c8001ab87b4848643feef62 Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 21 Jun 2024 08:19:24 +0200 Subject: [PATCH 027/127] forest --- R/forestplot.R | 94 +++++++++++++++++++++++++++++- inst/qml/ClassicalMetaAnalysis.qml | 28 ++++++--- 2 files changed, 111 insertions(+), 11 deletions(-) diff --git a/R/forestplot.R b/R/forestplot.R index 582c2135..81e09e0e 100644 --- a/R/forestplot.R +++ b/R/forestplot.R @@ -43,6 +43,9 @@ if(FALSE){ if (length(additionalVariables) > 0) dfForrest <- cbind(dfForrest, dataset[,additionalVariables,drop=FALSE]) + # combine left panel information + leftPanelStudyInformation <- do.call(rbind.data.frame, options[["forestPlotStudyInformationSelectedVariablesSettings"]]) + ### add predicted effects if (options[["forestPlotStudyInformationPredictedEffects"]]) { @@ -362,7 +365,7 @@ if(FALSE){ # specify y-axis limits if (options[["forestPlotStudyInformation"]]) { - yRange <- c(0, max(dfForrest$y) + relativeRowSize) + yRange <- c(0, max(dfForrest$y) + relativeRowSize + any(leftPanelStudyInformation$title != "")) } else { yRange <- c(0, 0) } @@ -438,7 +441,7 @@ if(FALSE){ # dispatch the aes call based on color mapping if (any(!is.na(additionalObjects$mapColor))) { plotForrest <- plotForrest + ggplot2::geom_polygon( - data = additionalObjects[is.na(additionalObjects$mapColor),], + data = additionalObjects[!is.na(additionalObjects$mapColor),], mapping = ggplot2::aes( x = x, y = y, @@ -474,7 +477,92 @@ if(FALSE){ # plotForrest <- plotForrest + jaspGraphs::geom_rangeframe(sides = "b") + jaspGraphs::themeJaspRaw() ### Make the left information panel ---- - plotLeft <- ggplot2::ggplot() + ggplot2::xlim(xRange) + ggplot2::ylim(yRange) + if (length(options[["forestPlotStudyInformationSelectedVariablesSettings"]]) > 0 || length(additionalInformation) > 0) { + + # determine number of columns and study information + leftPanelStudyInformation <- do.call(rbind.data.frame, options[["forestPlotStudyInformationSelectedVariablesSettings"]]) + + columnsAdd <- max(c( + if (length(additionalInformation) > 0) 1, + if (!is.null(leftPanelStudyInformation)) sum(leftPanelStudyInformation$width) + )) + + xRangeLeftPanel <- c(0, columnsAdd) + + + plotLeft <- ggplot2::ggplot() + ggplot2::ylim(yRange) + ggplot2::xlim(xRangeLeftPanel) + + if (!is.null(leftPanelStudyInformation)) { + + # compute study information coordinates + leftPanelStudyInformation$y <- (max(dfForrest$row) + 1) * relativeRowSize + leftPanelStudyInformation$xStart <- c(0, cumsum(leftPanelStudyInformation$width[-length(leftPanelStudyInformation$width)])) + leftPanelStudyInformation$xEnd <- cumsum(leftPanelStudyInformation$width) + leftPanelStudyInformation$x <- ifelse( + leftPanelStudyInformation$alignment == "left", leftPanelStudyInformation$xStart, ifelse( + leftPanelStudyInformation$alignment == "middle", (leftPanelStudyInformation$xStart + leftPanelStudyInformation$xEnd) / 2, leftPanelStudyInformation$xEnd + )) + + # add titles + plotLeft <- plotLeft + ggplot2::geom_text( + data = leftPanelStudyInformation, + mapping = ggplot2::aes( + x = 0, + y = y, + label = title, + hjust = alignment + ), + vjust = "midle", + fontface = "bold" + ) + + # add information + if (any(leftPanelStudyInformation$value == options[["forestPlotMappingColor"]])) { + leftPanelStudyDataColored <- data.frame( + x = leftPanelStudyInformation$x[leftPanelStudyInformation$value == options[["forestPlotMappingColor"]]], + y = dfForrest$y, + label = dfForrest[[options[["forestPlotMappingColor"]]]], + alignment = leftPanelStudyInformation$alignment[leftPanelStudyInformation$value == options[["forestPlotMappingColor"]]] + ) + plotLeft <- plotLeft + ggplot2::geom_text( + data = leftPanelStudyDataColored, + mapping = ggplot2::aes( + x = x, + y = y, + label = label, + hjust = alignment, + color = label + ), + vjust = "midle", + ) + } + if (any(leftPanelStudyInformation$value != options[["forestPlotMappingColor"]])) { + tempVariables <- leftPanelStudyInformation$value[leftPanelStudyInformation$value != options[["forestPlotMappingColor"]]] + leftPanelStudyData <- do.call(rbind.data.frame, lapply(tempVariables, function(variable) { + data.frame( + x = leftPanelStudyInformation$x[leftPanelStudyInformation$value == tempVariables], + y = dfForrest$y, + label = dfForrest[[tempVariables]], + alignment = leftPanelStudyInformation$alignment[leftPanelStudyInformation$value == tempVariables] + ) + })) + plotLeft <- plotLeft + ggplot2::geom_text( + data = leftPanelStudyData, + mapping = ggplot2::aes( + x = x, + y = y, + label = label, + hjust = alignment + ), + vjust = "midle", + ) + } + + } + + + } + diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 0c56a882..fb6246ca 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -478,7 +478,7 @@ Form name: "forestPlotStudyInformationSelectedVariablesSettings" source: "forestPlotStudyInformationSelectedVariables" enabled: forestPlotStudyInformation.checked - headerLabels: [qsTr("Title"), qsTr("Column width"), qsTr("Alignment")] + headerLabels: [qsTr("Title"), qsTr("Width"), qsTr("Alignment")] rowComponent: RowLayout { @@ -494,7 +494,7 @@ Form label: "" name: "title" value: "" - fieldWidth: 100 * preferencesModel.uiScale + fieldWidth: 120 * preferencesModel.uiScale useExternalBorder: false showBorder: true } @@ -517,7 +517,7 @@ Form name: "alignment" values: [ { label: qsTr("Left") , value: "left" }, - { label: qsTr("Center") , value: "center" }, + { label: qsTr("Middle") , value: "middle" }, { label: qsTr("Right") , value: "right" } ] fieldWidth: 40 * preferencesModel.uiScale @@ -537,7 +537,6 @@ Form name: "forestPlotStudyInformationOrderBy" label: qsTr("By") addEmptyValue: true - source: "allVariables" } CheckBox @@ -698,7 +697,6 @@ Form name: "forestPlotMappingColor" label: qsTr("Color") addEmptyValue: true - source: "allVariables" } DropDown @@ -706,7 +704,6 @@ Form name: "forestPlotMappingShape" label: qsTr("Shape") addEmptyValue: true - source: "allVariables" } } @@ -799,8 +796,9 @@ Form CheckBox { - name: "forestPlotAuxiliaryAddVerticalLine" - text: qsTr("Add vertical line") + name: "forestPlotAuxiliaryAddVerticalLine" + text: qsTr("Add vertical line") + childrenOnSameRow: true DoubleField { @@ -810,6 +808,20 @@ Form } } + CheckBox + { + name: "forestPlotAuxiliaryAddVerticalLine2" + text: qsTr("Add vertical line (2)") + childrenOnSameRow: true + + DoubleField + { + name: "forestPlotAuxiliaryAddVerticalLineValue2" + defaultValue: 0 + negativeValues: true + } + } + TextField { name: "forestPlotAuxiliaryEffectLabel" From fba4d33b4c4e57e62d298e03037e25bd24894f0d Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 21 Jun 2024 15:46:17 +0200 Subject: [PATCH 028/127] update --- R/classicalmetaanalysiscommon.R | 6 +- R/forestplot.R | 167 ++++++++--- inst/qml/ClassicalMetaAnalysis.qml | 447 +++++++++++++++++------------ inst/qml/EffectSizeComputation.qml | 15 +- 4 files changed, 400 insertions(+), 235 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index dd0cf4d9..f211c8ff 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -1339,10 +1339,10 @@ if (keepText) prefix <- gettext("Heterogeneity: ") else - prefix <- paste0(rep(" ", nchar(gettext("Heterogeneity: "))), collapse = "") + prefix <- "" # paste0(rep(" ", nchar(gettext("Heterogeneity: "))), collapse = "") return(sprintf(paste0( - "%1$s \U1D70F = ", + "%1$s tau = ", "%2$.", digits, "f", " [", "%3$.", digits, "f", @@ -1415,7 +1415,7 @@ mapColor = NA )) } -.maMakeRectangleDataFrame <- function(lCi, uCi, row, id, adj = 1/4) { +.maMakeRectangleDataFrame <- function(lCi, uCi, row, id, adj = 1/5) { return(data.frame( id = id, x = c(lCi, uCi, uCi, lCi), diff --git a/R/forestplot.R b/R/forestplot.R index 81e09e0e..377c7d9a 100644 --- a/R/forestplot.R +++ b/R/forestplot.R @@ -112,7 +112,7 @@ if(FALSE){ "lCi" = NA, "uCi" = NA, "test" = "", - "print" = "bold" + "face" = "bold" ) tempRow <- tempRow + 1 } @@ -132,7 +132,7 @@ if(FALSE){ "lCi" = NA, "uCi" = NA, "test" = if (estimatedMarginalMeansTermsTestsRight) tempTestText else "", - "print" = NA + "face" = NA ) tempRow <- tempRow + 1 @@ -148,7 +148,7 @@ if(FALSE){ "lCi" = tempEstimatedMarginalMeans$lCi[j], "uCi" = tempEstimatedMarginalMeans$uCi[j], "test" = if (estimatedMarginalMeansCoefficientTestsRight) tempCoefficientTest else "", - "print" = "italic" + "face" = "italic" ) additionalObjects[[tempRow]] <- with(tempEstimatedMarginalMeans[j,], .maMakeDiamondDataFrame(est = est, lCi = lCi, uCi = uCi, row = tempRow, id = tempRow)) additionalObjects[[tempRow]]$mapColor <- if(options[["forestPlotMappingColor"]] == estimatedMarginalMeansVariables[i]) tempEstimatedMarginalMeans$value[j] else NA @@ -158,13 +158,13 @@ if(FALSE){ if (options[["forestPlotPredictionIntervals"]] || estimatedMarginalMeansCoefficientTestsBelow) { additionalInformation[[tempRow]] <- data.frame( - "label" = if (estimatedMarginalMeansCoefficientTestsBelow) tempCoefficientTest else "", + "label" = if (estimatedMarginalMeansCoefficientTestsBelow) tempCoefficientTest else NA, "row" = tempRow, "est" = NA, "lCi" = if (options[["forestPlotPredictionIntervals"]]) tempEstimatedMarginalMeans$lPi[j] else NA, "uCi" = if (options[["forestPlotPredictionIntervals"]]) tempEstimatedMarginalMeans$uPi[j] else NA, "test" = "", - "print" = NA + "face" = NA ) if (options[["forestPlotPredictionIntervals"]]) { additionalObjects[[tempRow]] <- with(tempEstimatedMarginalMeans[j,], .maMakeRectangleDataFrame(lCi = lPi, uCi = uPi, row = tempRow, id = tempRow)) @@ -193,7 +193,7 @@ if(FALSE){ "lCi" = tempEstimatedMarginalMeans$lCi, "uCi" = tempEstimatedMarginalMeans$uCi, "test" = if (estimatedMarginalMeansCoefficientTestsRight) tempCoefficientTest else "", - "print" = NA + "face" = NA ) additionalObjects[[tempRow]] <- with(tempEstimatedMarginalMeans, .maMakeDiamondDataFrame(est = est, lCi = lCi, uCi = uCi, row = tempRow, id = tempRow)) tempRow <- tempRow + 1 @@ -201,13 +201,13 @@ if(FALSE){ if (options[["forestPlotPredictionIntervals"]] || estimatedMarginalMeansCoefficientTestsBelow) { additionalInformation[[tempRow]] <- data.frame( - "label" = if(estimatedMarginalMeansCoefficientTestsBelow) tempCoefficientTest else "", + "label" = if(estimatedMarginalMeansCoefficientTestsBelow) tempCoefficientTest else NA, "row" = tempRow, "est" = NA, "lCi" = if (options[["forestPlotPredictionIntervals"]]) tempEstimatedMarginalMeans$lPi else NA, "uCi" = if (options[["forestPlotPredictionIntervals"]]) tempEstimatedMarginalMeans$uPi else NA, "test" = "", - "print" = NA + "face" = NA ) if (options[["forestPlotPredictionIntervals"]]) @@ -239,7 +239,7 @@ if(FALSE){ "lCi" = NA, "uCi" = NA, "test" = "", - "print" = "bold" + "face" = "bold" ) tempRow <- tempRow + 1 } @@ -252,7 +252,7 @@ if(FALSE){ "lCi" = NA, "uCi" = NA, "test" = "", - "print" = NA + "face" = NA ) tempRow <- tempRow + 1 } @@ -265,7 +265,7 @@ if(FALSE){ "lCi" = NA, "uCi" = NA, "test" = "", - "print" = NA + "face" = NA ) tempRow <- tempRow + 1 } @@ -278,7 +278,7 @@ if(FALSE){ "lCi" = NA, "uCi" = NA, "test" = "", - "print" = NA + "face" = NA ) tempRow <- tempRow + 1 } @@ -291,7 +291,7 @@ if(FALSE){ "lCi" = NA, "uCi" = NA, "test" = "", - "print" = NA + "face" = NA ) tempRow <- tempRow + 1 } @@ -312,24 +312,24 @@ if(FALSE){ "lCi" = tempPooledEstimate$lCi, "uCi" = tempPooledEstimate$uCi, "test" = if (pooledEffectSizeTestsRight) tempTestText else "", - "print" = NA + "face" = NA ) - additionalObjects[[tempRow]] <- with(tempEstimatedMarginalMeans, .maMakeDiamondDataFrame(est = est, lCi = lCi, uCi = uCi, row = tempRow, id = tempRow)) + additionalObjects[[tempRow]] <- with(tempPooledEstimate, .maMakeDiamondDataFrame(est = est, lCi = lCi, uCi = uCi, row = tempRow, id = tempRow)) tempRow <- tempRow + 1 if (pooledEffectSizeTestsBelow || options[["forestPlotPredictionIntervals"]]) { additionalInformation[[tempRow]] <- data.frame( - "label" = if (pooledEffectSizeTestsBelow) tempTestText else "", + "label" = if (pooledEffectSizeTestsBelow) tempTestText else NA, "row" = tempRow, "est" = NA, "lCi" = if (options[["forestPlotPredictionIntervals"]]) tempPooledEstimate$lPi else NA, "uCi" = if (options[["forestPlotPredictionIntervals"]]) tempPooledEstimate$uPi else NA, "test" = "", - "print" = NA + "face" = NA ) if (options[["forestPlotPredictionIntervals"]]) - additionalObjects[[tempRow]] <- with(tempEstimatedMarginalMeans, .maMakeRectangleDataFrame(lCi = lPi, uCi = uPi, row = tempRow, id = tempRow)) + additionalObjects[[tempRow]] <- with(tempPooledEstimate, .maMakeRectangleDataFrame(lCi = lPi, uCi = uPi, row = tempRow, id = tempRow)) tempRow <- tempRow + 1 } @@ -377,7 +377,7 @@ if(FALSE){ } ### Make the forest plot ---- - plotForrest <- ggplot2::ggplot() + plotForest <- ggplot2::ggplot() # study information panel estimates if (options[["forestPlotStudyInformation"]]) { @@ -397,7 +397,7 @@ if(FALSE){ fill = if (options[["forestPlotMappingColor"]] == "") "grey20", alpha = 0.8 ) - plotForrest <- plotForrest + do.call(ggplot2::geom_polygon, geomCall[!sapply(geomCall, is.null)]) + plotForest <- plotForest + do.call(ggplot2::geom_polygon, geomCall[!sapply(geomCall, is.null)]) } ### add estimates @@ -415,15 +415,15 @@ if(FALSE){ shape = if (options[["forestPlotMappingShape"]] == "") 15, size = dfForrest[["weights"]] * options[["forestPlotRelativeSizeEstimates"]] ) - plotForrest <- plotForrest + do.call(ggplot2::geom_point, geomCall[!sapply(geomCall, is.null)]) + plotForest <- plotForest + do.call(ggplot2::geom_point, geomCall[!sapply(geomCall, is.null)]) # change scale for shapes to full shapes if used if (options[["forestPlotMappingShape"]] != "") - plotForrest <- plotForrest + ggplot2::scale_shape_manual(values = rep(c(15:18, 21:25), length.out = length(unique(dfForrest[[options[["forestPlotMappingShape"]]]])))) + plotForest <- plotForest + ggplot2::scale_shape_manual(values = rep(c(15:18, 21:25), length.out = length(unique(dfForrest[[options[["forestPlotMappingShape"]]]])))) ### add CIs - plotForrest <- plotForrest + ggplot2::geom_errorbarh( + plotForest <- plotForest + ggplot2::geom_errorbarh( data = dfForrest, mapping = ggplot2::aes( xmin = lCi, @@ -440,7 +440,7 @@ if(FALSE){ # dispatch the aes call based on color mapping if (any(!is.na(additionalObjects$mapColor))) { - plotForrest <- plotForrest + ggplot2::geom_polygon( + plotForest <- plotForest + ggplot2::geom_polygon( data = additionalObjects[!is.na(additionalObjects$mapColor),], mapping = ggplot2::aes( x = x, @@ -452,7 +452,7 @@ if(FALSE){ } if (any(is.na(additionalObjects$mapColor))) { - plotForrest <- plotForrest + ggplot2::geom_polygon( + plotForest <- plotForest + ggplot2::geom_polygon( data = additionalObjects[is.na(additionalObjects$mapColor),], mapping = ggplot2::aes( x = x, @@ -465,23 +465,29 @@ if(FALSE){ # add vertical line if (options[["forestPlotAuxiliaryAddVerticalLine"]]) - plotForrest <- plotForrest + ggplot2::geom_vline(xintercept = options[["forestPlotAuxiliaryAddVerticalLineValue"]], linetype = "dashed") + plotForest <- plotForest + ggplot2::geom_vline(xintercept = options[["forestPlotAuxiliaryAddVerticalLineValue"]], linetype = "dashed") + if (options[["forestPlotAuxiliaryAddVerticalLine2"]]) + plotForest <- plotForest + ggplot2::geom_vline(xintercept = options[["forestPlotAuxiliaryAddVerticalLineValue2"]], linetype = "dotted") - # fix plotting range - plotForrest <- plotForrest + jaspGraphs::scale_x_continuous( - name = options[["forestPlotAuxiliaryEffectLabel"]], - breaks = xBreaks, - limits = xRange - ) + ggplot2::ylim(yRange) - - # plotForrest <- plotForrest + jaspGraphs::geom_rangeframe(sides = "b") + jaspGraphs::themeJaspRaw() ### Make the left information panel ---- if (length(options[["forestPlotStudyInformationSelectedVariablesSettings"]]) > 0 || length(additionalInformation) > 0) { - # determine number of columns and study information + ### determine number of columns and study information leftPanelStudyInformation <- do.call(rbind.data.frame, options[["forestPlotStudyInformationSelectedVariablesSettings"]]) + # compute the total character width + maxChars <- 0 + if (length(leftPanelStudyInformation) != 0) + leftPanelStudyInformationChars <- apply(dfForrest[,leftPanelStudyInformation$value], 2, function(x) max(nchar(x), na.rm = TRUE)) + else + leftPanelStudyInformationChars <- 0 + if (length(additionalInformation) != 0) + additionalInformationChars <- max(nchar(additionalInformation$label), na.rm = TRUE) + else + additionalInformationChars <- 0 + + columnsAdd <- max(c( if (length(additionalInformation) > 0) 1, if (!is.null(leftPanelStudyInformation)) sum(leftPanelStudyInformation$width) @@ -490,9 +496,12 @@ if(FALSE){ xRangeLeftPanel <- c(0, columnsAdd) - plotLeft <- ggplot2::ggplot() + ggplot2::ylim(yRange) + ggplot2::xlim(xRangeLeftPanel) - if (!is.null(leftPanelStudyInformation)) { + + plotLeft <- ggplot2::ggplot() + + ### add the subplots + if (length(leftPanelStudyInformation) > 0) { # compute study information coordinates leftPanelStudyInformation$y <- (max(dfForrest$row) + 1) * relativeRowSize @@ -512,6 +521,7 @@ if(FALSE){ label = title, hjust = alignment ), + size = 11 * options[["forestPlotRelativeSizeText"]], vjust = "midle", fontface = "bold" ) @@ -533,6 +543,7 @@ if(FALSE){ hjust = alignment, color = label ), + size = 11 * options[["forestPlotRelativeSizeText"]], vjust = "midle", ) } @@ -540,10 +551,10 @@ if(FALSE){ tempVariables <- leftPanelStudyInformation$value[leftPanelStudyInformation$value != options[["forestPlotMappingColor"]]] leftPanelStudyData <- do.call(rbind.data.frame, lapply(tempVariables, function(variable) { data.frame( - x = leftPanelStudyInformation$x[leftPanelStudyInformation$value == tempVariables], + x = leftPanelStudyInformation$x[leftPanelStudyInformation$value == variable], y = dfForrest$y, - label = dfForrest[[tempVariables]], - alignment = leftPanelStudyInformation$alignment[leftPanelStudyInformation$value == tempVariables] + label = dfForrest[[variable]], + alignment = leftPanelStudyInformation$alignment[leftPanelStudyInformation$value == variable] ) })) plotLeft <- plotLeft + ggplot2::geom_text( @@ -554,17 +565,93 @@ if(FALSE){ label = label, hjust = alignment ), + size = 11 * options[["forestPlotRelativeSizeText"]], vjust = "midle", ) } } + if (length(additionalInformation) > 0) { + + # subset left panel information only + leftPanelAdditionalInformation <- additionalInformation[!is.na(additionalInformation$label),] + leftPanelAdditionalInformation$x <- 2 + leftPanelAdditionalInformation$face[is.na(leftPanelAdditionalInformation$face)] <- "plain" + + # add titles + plotLeft <- plotLeft + ggplot2::geom_text( + data = leftPanelAdditionalInformation, + mapping = ggplot2::aes( + x = x, + y = y, + label = label, + fontface = face + ), + size = 11 * options[["forestPlotRelativeSizeText"]], + hjust = "right", + vjust = "midle", + ) + } + + } + ### adjust axis, themes, and labels + # fix plotting range + plotForest1 <- plotForest + ggplot2::scale_x_continuous( + name = options[["forestPlotAuxiliaryEffectLabel"]], + breaks = xBreaks, + limits = xRange, + expand = c(0,0) + ) + ggplot2::scale_y_continuous( + limits = yRange, + expand = c(0,0) + ) + ggplot2::theme( + axis.line.y = ggplot2::element_blank(), + axis.line.x = ggplot2::element_line(color = "black"), + axis.text.y = ggplot2::element_blank(), + axis.text.x = ggplot2::element_text(color = "black", size = 12 * options[["forestPlotRelativeSizeAxisLabels"]]), + axis.ticks.y = ggplot2::element_blank(), + axis.title.y = ggplot2::element_blank(), + axis.title.x = ggplot2::element_text(color = "black", size = 12 * options[["forestPlotRelativeSizeAxisLabels"]]), + legend.position = "none", + panel.background = ggplot2::element_blank(), + panel.border = ggplot2::element_blank(), + panel.grid.major = ggplot2::element_blank(), + panel.grid.minor = ggplot2::element_blank(), + plot.background = ggplot2::element_blank() + ) + + plotLeft1 <- plotLeft + ggplot2::scale_x_continuous( + name = options[["forestPlotAuxiliaryEffectLabel"]], + breaks = xBreaks, + limits = xRangeLeftPanel, + expand = c(0,0) + ) + ggplot2::scale_y_continuous( + limits = yRange, + expand = c(0,0) + ) + ggplot2::theme( + axis.line = ggplot2::element_blank(), + axis.text.y = ggplot2::element_blank(), + axis.text.x = ggplot2::element_text(color = NA, size = 12 * options[["forestPlotRelativeSizeAxisLabels"]]), + axis.ticks = ggplot2::element_blank(), + axis.title.y = ggplot2::element_blank(), + axis.title.x = ggplot2::element_text(color = NA, size = 12 * options[["forestPlotRelativeSizeAxisLabels"]]), + legend.position = "none", + panel.background = ggplot2::element_blank(), + panel.border = ggplot2::element_blank(), + panel.grid.major = ggplot2::element_blank(), + panel.grid.minor = ggplot2::element_blank(), + plot.background = ggplot2::element_blank() + ) + + + gridExtra ::grid.arrange(plotLeft1, plotForest1, nrow = 1) + } diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index fb6246ca..9b75de74 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -193,65 +193,66 @@ Form Section { title: qsTr("Statistics") + columns: 2 Group { - title: qsTr("Meta-Regression") - enabled: predictors.count > 0 + title: qsTr("Heterogeneity") + columns: 2 + enabled: method.value != "fixedEffects" && method.value != "equalEffects" CheckBox { - name: "metaregressionTermTests" - text: qsTr("Term tests") + text: qsTr("𝜏") + name: "heterogeneityTau" checked: true } CheckBox { - name: "metaregressionCoefficientEstimates" - text: qsTr("Coefficient estimates") + text: qsTr("𝜏²") + name: "heterogeneityTau2" checked: true } CheckBox { - name: "metaregressionCoefficientCorrelationMatrix" - text: qsTr("Coefficient correlation matrix") + text: qsTr("IΒ²") + name: "heterogeneityI2" + checked: false + } + + CheckBox + { + text: qsTr("HΒ²") + name: "heterogeneityH2" checked: false } } Group { - title: qsTr("Heterogeneity") - columns: 2 - enabled: method.value != "fixedEffects" && method.value != "equalEffects" + title: qsTr("Meta-Regression") + enabled: predictors.count > 0 CheckBox { - text: qsTr("𝜏") - name: "heterogeneityTau" + name: "metaregressionTermTests" + text: qsTr("Term tests") checked: true } CheckBox { - text: qsTr("𝜏²") - name: "heterogeneityTau2" + name: "metaregressionCoefficientEstimates" + text: qsTr("Coefficient estimates") checked: true } CheckBox { - text: qsTr("IΒ²") - name: "heterogeneityI2" - checked: false - } - - CheckBox - { - text: qsTr("HΒ²") - name: "heterogeneityH2" + name: "metaregressionCoefficientCorrelationMatrix" + text: qsTr("Coefficient correlation matrix") checked: false } } @@ -282,6 +283,7 @@ Form {//TODO: make shorter or across both rows? name: "transformEffectSize" label: qsTr("Transform effect size") + setLabelAbove: true values: [ { label: qsTr("None") , value: "none" }, // NULL { label: qsTr("Fisher's z to r") , value: "fishersZToCorrelation" }, // transf.ztor @@ -311,7 +313,8 @@ Form Section { - title: qsTr("Estimated Marginal Means") + title: qsTr("Estimated Marginal Means") + columns: 1 Group { @@ -338,54 +341,37 @@ Form } } - CheckBox - { - name: "estimatedMarginalMeansEffectSizeAddAdjustedEstimate" - label: qsTr("Add adjusted estimate") - } -/* - DropDown - { - name: "estimatedMarginalMeansEffectSizeTransformation" - label: qsTr("Effect size transformation") - values: [ - { label: qsTr("None") , value: "none" }, // NULL - { label: qsTr("Fisher's z to r") , value: "fishersZToCorrelation" }, // transf.ztor - { label: qsTr("Exponential") , value: "exponential" }, // exp - { label: qsTr("Log odds to proportions") , value: "logOddsToProportions" }, // transf.logit - { label: qsTr("Log odds to SMD (normal)") , value: "logOddsToSmdNormal" }, // transf.lnortod.norm - { label: qsTr("Log odds to SMD (logistic)") , value: "logOddsToSmdLogistic" }, // transf.lnortod.logis - { label: qsTr("SMD to log odds (normal)") , value: "smdToLogOddsNormal" }, // transf.dtolnor.norm - { label: qsTr("SMD to log odds (logistic)") , value: "smdToLogOddsLogistic" }, // transf.dtolnor.logis - { label: qsTr("Hakstian & Whalen inverse Ξ±") , value: "hakstianAndWhalenInverseAlpha"}, // transf.iahw - { label: qsTr("Bonett inverse Ξ±") , value: "bonettInverseAlpha" }, // transf.iabt - { label: qsTr("Z to RΒ²") , value: "zToR2" }, // transf.ztor2 - { label: qsTr("SMD to Cohen's U₁") , value: "smdToCohensU1" }, // transf.dtou1 - { label: qsTr("SMD to Cohen's Uβ‚‚") , value: "smdToCohensU2" }, // transf.dtou2 - { label: qsTr("SMD to Cohen's U₃") , value: "smdToCohensU3" }, // transf.dtou3 - { label: qsTr("SMD to CLES, Pr(supperiority)") , value: "smdToCles" }, // transf.dtocles - ] - } -*/ - DoubleField - { - name: "estimatedMarginalMeansEffectSizeSdFactorCovariates" - label: qsTr("SD factor covariates") - defaultValue: 1 - min: 0 - enabled: estimatedMarginalMeansEffectSizeSelectedVariables.columnsTypes.includes("scale") - } - - CheckBox + Group { - name: "estimatedMarginalMeansEffectSizeTestAgainst" - label: qsTr("Test against") - childrenOnSameRow: true + columns: 2 DoubleField { - name: "estimatedMarginalMeansEffectSizeTestAgainstValue" - defaultValue: 0 + name: "estimatedMarginalMeansEffectSizeSdFactorCovariates" + label: qsTr("SD factor covariates") + defaultValue: 1 + min: 0 + enabled: estimatedMarginalMeansEffectSizeSelectedVariables.columnsTypes.includes("scale") + Layout.preferredWidth: 350 * jaspTheme.uiScale + } + + CheckBox + { + name: "estimatedMarginalMeansEffectSizeAddAdjustedEstimate" + label: qsTr("Add adjusted estimate") + } + + CheckBox + { + name: "estimatedMarginalMeansEffectSizeTestAgainst" + label: qsTr("Test against") + childrenOnSameRow: true + + DoubleField + { + name: "estimatedMarginalMeansEffectSizeTestAgainstValue" + defaultValue: 0 + } } } } @@ -415,38 +401,43 @@ Form } } - CheckBox + Group { - name: "estimatedMarginalMeansHeterogeneityAddAdjustedEstimate" - label: qsTr("Add adjusted estimate") - } + columns: 2 - DropDown - { - name: "estimatedMarginalMeansHeterogeneityTransformation" - label: qsTr("Heterogeneity transformation") - values: [ - { label: qsTr("𝜏") , value: "tau" }, - { label: qsTr("𝜏²") , value: "tau2" } - ] - } + DoubleField + { + name: "estimatedMarginalMeansHeterogeneitySdFactorCovariates" + label: qsTr("SD factor covariates") + defaultValue: 1 + min: 0 + enabled: estimatedMarginalMeansHeterogeneitySelectedVariables.columnsTypes.includes("scale") + Layout.preferredWidth: 350 * jaspTheme.uiScale + } - DoubleField - { - name: "estimatedMarginalMeansHeterogeneitySdFactorCovariates" - label: qsTr("SD factor covariates") - defaultValue: 1 - min: 0 - enabled: estimatedMarginalMeansHeterogeneitySelectedVariables.columnsTypes.includes("scale") + CheckBox + { + name: "estimatedMarginalMeansHeterogeneityAddAdjustedEstimate" + label: qsTr("Add adjusted estimate") + } + + DropDown + { + name: "estimatedMarginalMeansHeterogeneityTransformation" + label: qsTr("Heterogeneity transformation") + values: [ + { label: qsTr("𝜏") , value: "tau" }, + { label: qsTr("𝜏²") , value: "tau2" } + ] + } } } - } Section { - title: qsTr("Forest Plot") - columns:2 + title: qsTr("Forest Plot") + columns: 1 CheckBox { @@ -468,7 +459,8 @@ Form AssignedVariablesList { name: "forestPlotStudyInformationSelectedVariables" - title: qsTr("Selected Variables") //TODO: make the VariablesForm title + id: forestPlotStudyInformationSelectedVariables + title: qsTr("Selected Variables") allowedColumns: ["nominal"] } } @@ -478,6 +470,7 @@ Form name: "forestPlotStudyInformationSelectedVariablesSettings" source: "forestPlotStudyInformationSelectedVariables" enabled: forestPlotStudyInformation.checked + visible: forestPlotStudyInformationSelectedVariables.count > 0 headerLabels: [qsTr("Title"), qsTr("Width"), qsTr("Alignment")] rowComponent: RowLayout @@ -529,30 +522,37 @@ Form Group { - title: qsTr("Order") enabled: forestPlotStudyInformation.checked + columns: 2 - DropDown + CheckBox { - name: "forestPlotStudyInformationOrderBy" - label: qsTr("By") - addEmptyValue: true + name: "forestPlotStudyInformationPredictedEffects" + text: qsTr("Predicted effects") + enabled: effectSize.count == 1 && effectSizeStandardError.count == 1 + checked: false + Layout.preferredWidth: 300 * jaspTheme.uiScale } - CheckBox + Group { - name: "forestPlotStudyInformationOrderAscending" - text: qsTr("Ascending") + title: qsTr("Order") + DropDown + { + name: "forestPlotStudyInformationOrderBy" + label: qsTr("By") + addEmptyValue: true + } + + CheckBox + { + name: "forestPlotStudyInformationOrderAscending" + text: qsTr("Ascending") + } } } - CheckBox - { - name: "forestPlotStudyInformationPredictedEffects" - text: qsTr("Predicted effects") - enabled: effectSize.count == 1 && effectSizeStandardError.count == 1 - checked: false - } + Divider { } @@ -585,38 +585,49 @@ Form } } - CheckBox + Group { - name: "forestPlotEstimatedMarginalMeansAdjustedEffectSizeEstimate" - label: qsTr("Adjusted effect size estimate") - enabled: forestPlotEstimatedMarginalMeans.checked - } + columns: 2 - CheckBox - { - name: "forestPlotEstimatedMarginalMeansTermTests" - id: forestPlotEstimatedMarginalMeansTermTests - enabled: forestPlotEstimatedMarginalMeans.checked - label: qsTr("Term tests") - checked: true - } + Group + { + CheckBox + { + name: "forestPlotEstimatedMarginalMeansTermTests" + id: forestPlotEstimatedMarginalMeansTermTests + enabled: forestPlotEstimatedMarginalMeans.checked + label: qsTr("Term tests") + checked: true + Layout.preferredWidth: 350 * jaspTheme.uiScale + } - CheckBox - { - name: "forestPlotEstimatedMarginalMeansCoefficientTests" - id: forestPlotEstimatedMarginalMeansCoefficientTests - enabled: forestPlotEstimatedMarginalMeans.checked - label: qsTr("Coefficient tests") - checked: true + CheckBox + { + name: "forestPlotEstimatedMarginalMeansCoefficientTests" + id: forestPlotEstimatedMarginalMeansCoefficientTests + enabled: forestPlotEstimatedMarginalMeans.checked + label: qsTr("Coefficient tests") + checked: true + + DoubleField + { + name: "forestPlotEstimatedMarginalMeansCoefficientTestsAgainst" + text: qsTr("Against") + defaultValue: 0 + } + } + + } - DoubleField + CheckBox { - name: "forestPlotEstimatedMarginalMeansCoefficientTestsAgainst" - text: qsTr("Against") - defaultValue: 0 + name: "forestPlotEstimatedMarginalMeansAdjustedEffectSizeEstimate" + label: qsTr("Adjusted effect size estimate") + enabled: forestPlotEstimatedMarginalMeans.checked } } + Divider { } CheckBox @@ -625,13 +636,19 @@ Form id: forestPlotModelInformation enabled: effectSize.count == 1 && effectSizeStandardError.count == 1 text: qsTr("Model information") + } + + Group + { + enabled: forestPlotModelInformation.checked columns: 2 CheckBox { name: "forestPlotPooledEffectSizeEstimate" text: qsTr("Pooled effect size estimate") - checked: true + checked: true + Layout.preferredWidth: 300 * jaspTheme.uiScale } CheckBox @@ -681,82 +698,124 @@ Form text: qsTr("Settings") } - CheckBox - { - name: "forestPlotPredictionIntervals" - text: qsTr("Prediction intervals") - checked: true - } - Group { - title: qsTr("Mapping") + columns: 2 - DropDown + CheckBox { - name: "forestPlotMappingColor" - label: qsTr("Color") - addEmptyValue: true + name: "forestPlotPredictionIntervals" + text: qsTr("Prediction intervals") + checked: true + Layout.preferredWidth: 300 * jaspTheme.uiScale } - DropDown + Group { - name: "forestPlotMappingShape" - label: qsTr("Shape") - addEmptyValue: true - } - } + title: qsTr("Mapping") - CheckBox - { - name: "forestPlotRightPanel" - text: qsTr("Right Panel") - checked: true + DropDown + { + name: "forestPlotMappingColor" + label: qsTr("Color") + addEmptyValue: true + } - CheckBox - { - name: "forestPlotRightPanelEstimate" - text: qsTr("Estimates and confidence intervals") - checked: true + DropDown + { + name: "forestPlotMappingShape" + label: qsTr("Shape") + addEmptyValue: true + } } CheckBox { - name: "forestPlotRightPanelWeights" - text: qsTr("Weights") - enabled: forestPlotStudyInformation.checked - } - } + name: "forestPlotRightPanel" + text: qsTr("Right Panel") + checked: true - Group - { - title: qsTr("Relative Size") + CheckBox + { + name: "forestPlotRightPanelEstimate" + text: qsTr("Estimates and confidence intervals") + checked: true + } - DoubleField - { - name: "forestPlotRelativeSizeEstimates" - text: qsTr("Estimates") - defaultValue: 1 - min: 0 - inclusive: JASP.None + CheckBox + { + name: "forestPlotRightPanelWeights" + text: qsTr("Weights") + enabled: forestPlotStudyInformation.checked + } } - DoubleField + Group { - name: "forestPlotRelativeSizeText" - text: qsTr("Text") - defaultValue: 1 - min: 0 - inclusive: JASP.None - } + title: qsTr("Relative Size") - DoubleField - { - name: "forestPlotRelativeSizeRow" - text: qsTr("Row") - defaultValue: 1 - min: 0 - inclusive: JASP.None + DoubleField + { + name: "forestPlotRelativeSizeEstimates" + text: qsTr("Estimates") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeText" + text: qsTr("Text") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeAxisLabels" + text: qsTr("Axis labels") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeRow" + text: qsTr("Row") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeLeftPanel" + text: qsTr("Left panel") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeMiddlePanel" + text: qsTr("Middle panel") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeRightPanel" + text: qsTr("Right panel") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } } } @@ -856,6 +915,14 @@ Form inclusive: JASP.None } } + + + CheckBox + { + name: "forestPlotAuxiliaryGuessTextWidth" + text: qsTr("Guess text width") + checked: true + } } diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index bc55f36f..1e463251 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -263,9 +263,20 @@ Form VariablesForm { - removeInvisibles: true - preferredWidth: parent.width - 2 * jaspTheme.contentMargin // TODO: dynamically set proper height + removeInvisibles: true + preferredWidth: parent.width - 6 * jaspTheme.contentMargin + preferredHeight: (function() { + if (effectSizeValue == "SMD" || effectSizeValue == "D2ORL" || effectSizeValue == "D2ORN") { + return 500 * preferencesModel.uiScale + } else if (effectSizeValue == "CVR" || effectSizeValue == "VR") { + return 250 * preferencesModel.uiScale + } else if (measurementValue == "quantitative") { + return 350 * preferencesModel.uiScale + } else { + return 350 * preferencesModel.uiScale + } + })() AvailableVariablesList { From f01f2472d71ee6d88b3b120dbfdbd845f12d8c08 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sat, 22 Jun 2024 12:37:36 +0200 Subject: [PATCH 029/127] update forest plot --- R/classicalmetaanalysis.R | 58 ++++- R/classicalmetaanalysiscommon.R | 86 ++++++- R/forestplot.R | 362 ++++++++++++++++++++++------- inst/qml/ClassicalMetaAnalysis.qml | 244 +++++++++---------- 4 files changed, 533 insertions(+), 217 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 5fd68b87..ed0f8fe4 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -15,11 +15,6 @@ # along with this program. If not, see . # -# This is a temporary fix -# TODO: remove it when R will solve this problem! -gettextf <- function(fmt, ..., domain = NULL) { - return(sprintf(gettext(fmt, domain = domain), ...)) -} ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { @@ -55,7 +50,55 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "optimizerMaximumIterations", "optimizerMaximumIterationsValue", "optimizerConvergenceTolerance", "optimizerConvergenceToleranceValue", "optimizerConvergenceRelativeTolerance", "optimizerConvergenceRelativeToleranceValue", "optimizerStepAdjustment", "optimizerStepAdjustmentValue" ) - +.maForestPlotDependencies <- c( + .maDependencies, + "forestPlotStudyInformation", + "forestPlotStudyInformationAllVariables", + "forestPlotStudyInformationSelectedVariables", + "forestPlotStudyInformationSelectedVariablesSettings", + "forestPlotStudyInformationPredictedEffects", + "forestPlotStudyInformationStudyWeights", + "forestPlotStudyInformationOrderBy", + "forestPlotStudyInformationOrderAscending", + "forestPlotEstimatedMarginalMeans", + "forestPlotEstimatedMarginalMeansModelVariables", + "forestPlotEstimatedMarginalMeansSelectedVariables", + "forestPlotEstimatedMarginalMeansTermTests", + "forestPlotEstimatedMarginalMeansCoefficientTests", + "forestPlotEstimatedMarginalMeansCoefficientTestsAgainst", + "forestPlotEstimatedMarginalMeansAdjustedEffectSizeEstimate", + "forestPlotModelInformation", + "forestPlotPooledEffectSizeEstimate", + "forestPlotPooledEffectSizeTest", + "forestPlotResidualHeterogeneityTest", + "forestPlotResidualHeterogeneityEstimate", + "forestPlotEffectSizeModerationTest", + "forestPlotHeterogeneityModerationTest", + "forestPlotPredictionIntervals", + "forestPlotEstimatesAndConfidenceIntervals", + "forestPlotTestsInRightPanel", + "forestPlotMappingColor", + "forestPlotMappingShape", + "forestPlotRelativeSizeEstimates", + "forestPlotRelativeSizeText", + "forestPlotRelativeSizeAxisLabels", + "forestPlotRelativeSizeRow", + "forestPlotRelativeSizeLeftPanel", + "forestPlotRelativeSizeMiddlePanel", + "forestPlotRelativeSizeRightPanel", + "forestPlotAuxiliaryAdjustWidthBasedOnText", + "forestPlotAuxiliaryDigits", + "forestPlotAuxiliaryTestsInformation", + "forestPlotAuxiliaryPlotColor", + "forestPlotAuxiliaryAddVerticalLine", + "forestPlotAuxiliaryAddVerticalLineValue", + "forestPlotAuxiliaryAddVerticalLine2", + "forestPlotAuxiliaryAddVerticalLineValue2", + "forestPlotAuxiliaryEffectLabel", + "forestPlotAuxiliarySetXAxisLimit", + "forestPlotAuxiliarySetXAxisLimitLower", + "forestPlotAuxiliarySetXAxisLimitUpper" +) .maReady <- function(options) { inputReady <- options[["effectSize"]] != "" && options[["effectSizeStandardError"]] != "" @@ -77,7 +120,8 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { forestPlotVariables <- c( if (length(options[["forestPlotStudyInformationSelectedVariables"]]) > 0) unlist(options[["forestPlotStudyInformationSelectedVariables"]]), if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], - if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]] + if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]], + if (options[["forestPlotStudyInformationOrderBy"]] != "") options[["forestPlotStudyInformationOrderBy"]] ) # remove variables already specified in the model forestPlotVariables <- setdiff( diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index f211c8ff..6fed9250 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -46,6 +46,10 @@ .maEstimatedMarginalMeansTable(jaspResults, dataset, options, "effectSize") .maEstimatedMarginalMeansTable(jaspResults, dataset, options, "heterogeneity") + # forest plot + #.maUltimateForestPlot(jaspResults, dataset, options) + + return() } @@ -627,6 +631,56 @@ return() } +.maUltimateForestPlot <- function(jaspResults, dataset, options) { + + if (!is.null(jaspResults[["forestPlot"]])) + return() + + if (!any(c( + options[["forestPlotStudyInformation"]], + (options[["forestPlotEstimatedMarginalMeans"]] && ( + length(options[["forestPlotEstimatedMarginalMeansSelectedVariables"]]) > 0 || + options[["forestPlotEstimatedMarginalMeansAdjustedEffectSizeEstimate"]] + )), + options[["forestPlotModelInformation"]] + ))) + return() + + # try execute! + fit <- .maExtractFit(jaspResults, options) + out <- try(.maMakeTheUltimateForestPlot(fit, dataset, options)) + + if (jaspBase::isTryError(out)) { + forestPlot <- createJaspPlot("Forest Plot") + forestPlot$position <- 4 + forestPlot$dependOn(.maForestPlotDependencies) + forestPlot$setError(out) + jaspResults[["forestPlot"]] <- forestPlot + return() + } + + # try adjusting height and width + height <- (attr(out, "rows") + 3) * 40 + if (attr(out, "isPanel")) + width <- 500 + else + width <- 500 + 500 * attr(out, "panelRatio") + + attr(plotOut, "nCharsLeft") + attr(plotOut, "nCharsRight") + + forestPlot <- createJaspPlot( + plot = out, + title = gettext("Forest Plot"), + width = width, + height = height + ) + forestPlot$position <- 4 + forestPlot$dependOn(.maForestPlotDependencies) + jaspResults[["forestPlot"]] <- forestPlot + + return() +} + # containers/state functions .maExtractFit <- function(jaspResults, options) { @@ -1424,18 +1478,38 @@ mapColor = NA )) } -.maGetMaxDigitsBeforeDecimal <- function(x) { +.maGetDigitsBeforeDecimal <- function(x) { - dPos <- floor(log10(x[x >= 0])) + 1 - dNeg <- floor(log10(-x[x < 0])) + 2 # (+2 because of minus sign) + dNAs <- is.na(x) + dPos <- floor(log10(x[!dNAs & x >= 0])) + 1 + dNeg <- floor(log10(-x[!dNAs & x < 0])) + 2 # account for missing zeros - dPos[dPos == 0] <- 1 - dNeg[dNeg == 0] <- 1 + dPos[dPos <= 1] <- 1 + dNeg[dNeg <= 1] <- 2 # (+2 because of minus sign) + + nDigits <- rep(NA, length(x)) + nDigits[!dNAs & x >= 0] <- dPos + nDigits[!dNAs & x < 0] <- dNeg - return(max(c(dPos, dNeg))) + return(nDigits) } +.maFormatDigits <- function(x, digits) { + + xOut <- rep("", length(x)) + xNa <- is.na(x) + # compute the character width + nDigits <- .maGetDigitsBeforeDecimal(x[!xNa]) + nDigitsMax <- max(nDigits, na.rm = TRUE) + addDigits <- nDigitsMax - nDigits + + # add the missing widths + xOut[!xNa] <- sprintf(paste0("%1$s%2$.", digits,"f"), sapply(addDigits, function(i) paste(rep(" ", i), collapse = "")), x[!xNa]) + xOut[ xNa] <- paste(rep(" ", nDigitsMax + 1 + digits), collapse = "") + + return(xOut) +} # messages .maFixedEffectTextMessage <- function(options) { diff --git a/R/forestplot.R b/R/forestplot.R index 377c7d9a..5e0c00a8 100644 --- a/R/forestplot.R +++ b/R/forestplot.R @@ -1,4 +1,4 @@ -if(FALSE){ +.maMakeTheUltimateForestPlot <- function(fit, dataset, options) { # extract common options relativeRowSize <- options[["forestPlotRelativeSizeRow"]] @@ -31,9 +31,6 @@ if(FALSE){ xRangeStudyInformationPanel <- range(c(dfForrest$lCi, dfForrest$uCi)) - # add y-axis coordinates for plotting - dfForrest$row <- seq(nrow(dfForrest)) - # add variables used for either color, shape, order or Left panel information additionalVariables <- c( if (length(options[["forestPlotStudyInformationSelectedVariables"]]) > 0) unlist(options[["forestPlotStudyInformationSelectedVariables"]]), @@ -46,6 +43,16 @@ if(FALSE){ # combine left panel information leftPanelStudyInformation <- do.call(rbind.data.frame, options[["forestPlotStudyInformationSelectedVariablesSettings"]]) + # re-order + if (options[["forestPlotStudyInformationOrderBy"]] != "") { + dfForrest <- dfForrest[order( + dfForrest[,options[["forestPlotStudyInformationOrderBy"]]], + decreasing = options[["forestPlotStudyInformationOrderAscending"]]),] + } + + # add y-axis coordinates for plotting + dfForrest$row <- seq(nrow(dfForrest)) + ### add predicted effects if (options[["forestPlotStudyInformationPredictedEffects"]]) { @@ -81,6 +88,7 @@ if(FALSE){ dfForrest$y <- dfForrest$row * relativeRowSize } else { + dfForrest <- NULL xRangeStudyInformationPanel <- NA } @@ -95,27 +103,24 @@ if(FALSE){ estimatedMarginalMeansVariables <- unlist(options[["forestPlotEstimatedMarginalMeansSelectedVariables"]]) # statistics position adjustment - estimatedMarginalMeansTermsTestsRight <- options[["forestPlotEstimatedMarginalMeansTermTests"]] && options[["forestPlotRightPanel"]] - estimatedMarginalMeansTermsTestsLeft <- options[["forestPlotEstimatedMarginalMeansTermTests"]] && !options[["forestPlotRightPanel"]] + estimatedMarginalMeansTermsTestsRight <- options[["forestPlotEstimatedMarginalMeansTermTests"]] && options[["forestPlotTestsInRightPanel"]] + estimatedMarginalMeansTermsTestsLeft <- options[["forestPlotEstimatedMarginalMeansTermTests"]] && !options[["forestPlotTestsInRightPanel"]] - estimatedMarginalMeansCoefficientTestsRight <- options[["forestPlotEstimatedMarginalMeansCoefficientTests"]] && options[["forestPlotRightPanel"]] - estimatedMarginalMeansCoefficientTestsBelow <- options[["forestPlotEstimatedMarginalMeansCoefficientTests"]] && !options[["forestPlotRightPanel"]] && options[["forestPlotPredictionIntervals"]] - estimatedMarginalMeansCoefficientTestsLeft <- options[["forestPlotEstimatedMarginalMeansCoefficientTests"]] && !options[["forestPlotRightPanel"]] && !options[["forestPlotPredictionIntervals"]] + estimatedMarginalMeansCoefficientTestsRight <- options[["forestPlotEstimatedMarginalMeansCoefficientTests"]] && options[["forestPlotTestsInRightPanel"]] + estimatedMarginalMeansCoefficientTestsBelow <- options[["forestPlotEstimatedMarginalMeansCoefficientTests"]] && !options[["forestPlotTestsInRightPanel"]] && options[["forestPlotPredictionIntervals"]] + estimatedMarginalMeansCoefficientTestsLeft <- options[["forestPlotEstimatedMarginalMeansCoefficientTests"]] && !options[["forestPlotTestsInRightPanel"]] && !options[["forestPlotPredictionIntervals"]] # add header - if (length(estimatedMarginalMeansVariables) > 0) { - - additionalInformation[[tempRow]] <- data.frame( - "label" = gettext("Estimated Marginal Means"), - "row" = tempRow, - "est" = NA, - "lCi" = NA, - "uCi" = NA, - "test" = "", - "face" = "bold" - ) - tempRow <- tempRow + 1 - } + additionalInformation[[tempRow]] <- data.frame( + "label" = gettext("Estimated Marginal Means"), + "row" = tempRow, + "est" = NA, + "lCi" = NA, + "uCi" = NA, + "test" = "", + "face" = "bold" + ) + tempRow <- tempRow + 1 # add marginal estimates for (i in seq_along(estimatedMarginalMeansVariables)) { @@ -216,6 +221,8 @@ if(FALSE){ tempRow <- tempRow + 1 } } + + tempRow <- tempRow + 1 } @@ -298,9 +305,9 @@ if(FALSE){ if (options[["forestPlotPooledEffectSizeEstimate"]]) { - pooledEffectSizeTestsRight <- options[["forestPlotPooledEffectSizeTest"]] && options[["forestPlotRightPanel"]] - pooledEffectSizeTestsBelow <- options[["forestPlotPooledEffectSizeTest"]] && !options[["forestPlotRightPanel"]] && options[["forestPlotPredictionIntervals"]] - pooledEffectSizeTestsLeft <- options[["forestPlotPooledEffectSizeTest"]] && !options[["forestPlotRightPanel"]] && !options[["forestPlotPredictionIntervals"]] + pooledEffectSizeTestsRight <- options[["forestPlotPooledEffectSizeTest"]] && options[["forestPlotTestsInRightPanel"]] + pooledEffectSizeTestsBelow <- options[["forestPlotPooledEffectSizeTest"]] && !options[["forestPlotTestsInRightPanel"]] && options[["forestPlotPredictionIntervals"]] + pooledEffectSizeTestsLeft <- options[["forestPlotPooledEffectSizeTest"]] && !options[["forestPlotTestsInRightPanel"]] && !options[["forestPlotPredictionIntervals"]] tempPooledEstimate <- .maComputePooledEffectPlot(fit, options) tempTestText <- .maPrintCoefficientTest(tempPooledEstimate, options[["forestPlotAuxiliaryTestsInformation"]] == "statisticAndPValue") @@ -476,37 +483,45 @@ if(FALSE){ ### determine number of columns and study information leftPanelStudyInformation <- do.call(rbind.data.frame, options[["forestPlotStudyInformationSelectedVariablesSettings"]]) - # compute the total character width - maxChars <- 0 - if (length(leftPanelStudyInformation) != 0) - leftPanelStudyInformationChars <- apply(dfForrest[,leftPanelStudyInformation$value], 2, function(x) max(nchar(x), na.rm = TRUE)) - else + ### compute the total character width + if (options[["forestPlotStudyInformation"]] && length(leftPanelStudyInformation) != 0) { + leftPanelStudyInformationChars <- rbind( + nchar(leftPanelStudyInformation$title), + apply(dfForrest[,leftPanelStudyInformation$value, drop = FALSE], 2, function(x) max(nchar(x), na.rm = TRUE))) + leftPanelStudyInformationChars <- apply(leftPanelStudyInformationChars, 2, max) + 2 + maxCharsLeft <- sum(leftPanelStudyInformationChars) + } else { leftPanelStudyInformationChars <- 0 - if (length(additionalInformation) != 0) + maxCharsLeft <- 0 + } + if (length(additionalInformation) != 0) { additionalInformationChars <- max(nchar(additionalInformation$label), na.rm = TRUE) - else + maxCharsLeft <- max(c(maxCharsLeft, additionalInformationChars)) + } else { additionalInformationChars <- 0 + } - - columnsAdd <- max(c( - if (length(additionalInformation) > 0) 1, - if (!is.null(leftPanelStudyInformation)) sum(leftPanelStudyInformation$width) - )) - - xRangeLeftPanel <- c(0, columnsAdd) - - - - + ### start plotting plotLeft <- ggplot2::ggplot() ### add the subplots - if (length(leftPanelStudyInformation) > 0) { + if (options[["forestPlotStudyInformation"]] && length(leftPanelStudyInformation) > 0) { + + # split the columns + if (options[["forestPlotAuxiliaryAdjustWidthBasedOnText"]]) { + leftPanelRelativeWidths <- c(maxCharsLeft - sum(leftPanelStudyInformationChars), leftPanelStudyInformationChars) + leftPanelRelativeWidths[2:length(leftPanelRelativeWidths)] <- leftPanelRelativeWidths[2:length(leftPanelRelativeWidths)] * leftPanelStudyInformation$width + leftPanelRelativeWidths <- leftPanelRelativeWidths / sum(leftPanelRelativeWidths) + leftPanelStudyInformation$xStart <- cumsum(leftPanelRelativeWidths[-length(leftPanelRelativeWidths)]) + leftPanelStudyInformation$xEnd <- cumsum(leftPanelRelativeWidths)[-1] + } else { + leftPanelRelativeWidths <- leftPanelStudyInformation$width / sum(leftPanelStudyInformation$width) + leftPanelStudyInformation$xStart <- c(0, cumsum(leftPanelRelativeWidths[-length(leftPanelRelativeWidths)])) + leftPanelStudyInformation$xEnd <- cumsum(leftPanelRelativeWidths) + } # compute study information coordinates leftPanelStudyInformation$y <- (max(dfForrest$row) + 1) * relativeRowSize - leftPanelStudyInformation$xStart <- c(0, cumsum(leftPanelStudyInformation$width[-length(leftPanelStudyInformation$width)])) - leftPanelStudyInformation$xEnd <- cumsum(leftPanelStudyInformation$width) leftPanelStudyInformation$x <- ifelse( leftPanelStudyInformation$alignment == "left", leftPanelStudyInformation$xStart, ifelse( leftPanelStudyInformation$alignment == "middle", (leftPanelStudyInformation$xStart + leftPanelStudyInformation$xEnd) / 2, leftPanelStudyInformation$xEnd @@ -516,12 +531,12 @@ if(FALSE){ plotLeft <- plotLeft + ggplot2::geom_text( data = leftPanelStudyInformation, mapping = ggplot2::aes( - x = 0, + x = x, y = y, label = title, hjust = alignment ), - size = 11 * options[["forestPlotRelativeSizeText"]], + size = 4 * options[["forestPlotRelativeSizeText"]], vjust = "midle", fontface = "bold" ) @@ -543,7 +558,7 @@ if(FALSE){ hjust = alignment, color = label ), - size = 11 * options[["forestPlotRelativeSizeText"]], + size = 4 * options[["forestPlotRelativeSizeText"]], vjust = "midle", ) } @@ -565,7 +580,7 @@ if(FALSE){ label = label, hjust = alignment ), - size = 11 * options[["forestPlotRelativeSizeText"]], + size = 4 * options[["forestPlotRelativeSizeText"]], vjust = "midle", ) } @@ -576,7 +591,7 @@ if(FALSE){ # subset left panel information only leftPanelAdditionalInformation <- additionalInformation[!is.na(additionalInformation$label),] - leftPanelAdditionalInformation$x <- 2 + leftPanelAdditionalInformation$x <- 1 leftPanelAdditionalInformation$face[is.na(leftPanelAdditionalInformation$face)] <- "plain" # add titles @@ -588,29 +603,131 @@ if(FALSE){ label = label, fontface = face ), - size = 11 * options[["forestPlotRelativeSizeText"]], + size = 4 * options[["forestPlotRelativeSizeText"]], hjust = "right", vjust = "midle", ) } + } else { + plotLeft <- NULL + } + ### Make the right information panel ---- + if (.maForestPlotMakeRightPannel(options, additionalInformation)) { + + # estimates and confidence intervales + if (options[["forestPlotEstimatesAndConfidenceIntervals"]]) { + + ### join the est and Cis for the right panel + rightPanelCis <- rbind( + if (options[["forestPlotStudyInformation"]]) { + tempDf <- dfForrest[,c("y", "effectSize", "lCi", "uCi")] + colnames(tempDf) <- c("y", "est", "lCi", "uCi") + tempDf + }, + if (length(additionalInformation) > 0) additionalInformation[,c("y", "est", "lCi", "uCi")] + ) + # remove all NAs + rightPanelCis <- rightPanelCis[!apply(rightPanelCis[,2:4], 1, function(x) all(is.na(x))),] + # adjust the number formatings + for (colName in c("est", "lCi", "uCi")) { + rightPanelCis[!is.na(rightPanelCis[,colName]),colName] <- .maFormatDigits( + rightPanelCis[!is.na(rightPanelCis[,colName]),colName], + options[["forestPlotAuxiliaryDigits"]]) + } + + # deal with PIs and CIs separately + rightPanelCis$label <- NA + rightPanelCis$label[ is.na(rightPanelCis$est)] <- with(rightPanelCis[ is.na(rightPanelCis$est), ], paste0("PI [", lCi, ", ", uCi, "]")) + rightPanelCis$label[!is.na(rightPanelCis$est)] <- with(rightPanelCis[!is.na(rightPanelCis$est), ], paste0(est, " [", lCi, ", ", uCi, "]")) + + } else { + rightPanelCis <- NULL + } + + ### tests and weights right panel + rightPanelTestsAndWeights <- rbind( + if (options[["forestPlotStudyInformation"]] && length(options[["forestPlotStudyInformationSelectedVariablesSettings"]]) > 0 && options[["forestPlotStudyInformationStudyWeights"]]) { + tempDf <- dfForrest[,c("y", "weights")] + tempDf$label <- paste0(sprintf(paste0("%1$.", options[["forestPlotAuxiliaryDigits"]], "f"), tempDf$weights), " %") + tempDf[,c("y", "label")] + }, + if (length(additionalInformation) > 0) { + tempDf <- additionalInformation[,c("y", "test")] + colnames(tempDf) <- c("y", "label") + tempDf + } + ) + rightPanelTestsAndWeights <- rightPanelTestsAndWeights[rightPanelTestsAndWeights$label != "",] + if (nrow(rightPanelTestsAndWeights) == 0) + rightPanelTestsAndWeights <- NULL + + ### compute the total character width + if (!is.null(rightPanelCis)) { + maxCharsRightCis <- max(nchar(rightPanelCis$label)) + } else { + maxCharsRightCis <- 0 + } + if (length(rightPanelTestsAndWeights) != 0) { + maxCharsRightAdd <- max(nchar(rightPanelTestsAndWeights$label)) + } else { + maxCharsRightAdd <- 0 + } + maxCharsRight <- maxCharsRightCis + maxCharsRightAdd + 2 - } - ### adjust axis, themes, and labels + ### start plotting + plotRight <- ggplot2::ggplot() + ### add the subplots + if (!is.null(rightPanelCis)) { + + rightPanelCis$x <- maxCharsRightCis / maxCharsRight + + # add titles + plotRight <- plotRight + ggplot2::geom_text( + data = rightPanelCis, + mapping = ggplot2::aes( + x = x, + y = y, + label = label + ), + hjust = "right", + family = "mono", + size = 4 * options[["forestPlotRelativeSizeText"]] + ) + } + + if (length(rightPanelTestsAndWeights) > 0) { + + rightPanelTestsAndWeights$x <- (maxCharsRightCis + 2) / maxCharsRight + + # add titles + plotRight <- plotRight + ggplot2::geom_text( + data = rightPanelTestsAndWeights, + mapping = ggplot2::aes( + x = x, + y = y, + label = label + ), + hjust = "left", + family = "mono", + size = 4 * options[["forestPlotRelativeSizeText"]] + ) + } + } else { + plotRight <- NULL + } + + ### adjust axis, themes, and labels ---- # fix plotting range - plotForest1 <- plotForest + ggplot2::scale_x_continuous( - name = options[["forestPlotAuxiliaryEffectLabel"]], - breaks = xBreaks, - limits = xRange, - expand = c(0,0) - ) + ggplot2::scale_y_continuous( - limits = yRange, - expand = c(0,0) - ) + ggplot2::theme( + plotForest <- plotForest + ggplot2::coord_cartesian( + xlim = xRange, + ylim = yRange, + expand = FALSE + ) + ggplot2::xlab(options[["forestPlotAuxiliaryEffectLabel"]]) + ggplot2::theme( axis.line.y = ggplot2::element_blank(), axis.line.x = ggplot2::element_line(color = "black"), axis.text.y = ggplot2::element_blank(), @@ -626,32 +743,105 @@ if(FALSE){ plot.background = ggplot2::element_blank() ) - plotLeft1 <- plotLeft + ggplot2::scale_x_continuous( - name = options[["forestPlotAuxiliaryEffectLabel"]], - breaks = xBreaks, - limits = xRangeLeftPanel, - expand = c(0,0) - ) + ggplot2::scale_y_continuous( - limits = yRange, - expand = c(0,0) - ) + ggplot2::theme( - axis.line = ggplot2::element_blank(), - axis.text.y = ggplot2::element_blank(), - axis.text.x = ggplot2::element_text(color = NA, size = 12 * options[["forestPlotRelativeSizeAxisLabels"]]), - axis.ticks = ggplot2::element_blank(), - axis.title.y = ggplot2::element_blank(), - axis.title.x = ggplot2::element_text(color = NA, size = 12 * options[["forestPlotRelativeSizeAxisLabels"]]), - legend.position = "none", - panel.background = ggplot2::element_blank(), - panel.border = ggplot2::element_blank(), - panel.grid.major = ggplot2::element_blank(), - panel.grid.minor = ggplot2::element_blank(), - plot.background = ggplot2::element_blank() - ) + if (!is.null(plotLeft)) { + plotLeft <- plotLeft + ggplot2::coord_cartesian( + xlim = c(0,1), + ylim = yRange, + expand = FALSE + ) + ggplot2::xlab("") + ggplot2::theme( + axis.line = ggplot2::element_blank(), + axis.text.y = ggplot2::element_blank(), + axis.text.x = ggplot2::element_text(color = NA, size = 12 * options[["forestPlotRelativeSizeAxisLabels"]]), + axis.ticks = ggplot2::element_blank(), + axis.title.y = ggplot2::element_blank(), + axis.title.x = ggplot2::element_text(color = NA, size = 12 * options[["forestPlotRelativeSizeAxisLabels"]]), + legend.position = "none", + panel.background = ggplot2::element_blank(), + panel.border = ggplot2::element_blank(), + panel.grid.major = ggplot2::element_blank(), + panel.grid.minor = ggplot2::element_blank(), + plot.background = ggplot2::element_blank() + ) + } + if (!is.null(plotRight)) { + plotRight <- plotRight + ggplot2::coord_cartesian( + xlim = c(0,1), + ylim = yRange, + expand = FALSE + ) + ggplot2::xlab("") + ggplot2::theme( + axis.line = ggplot2::element_blank(), + axis.text.y = ggplot2::element_blank(), + axis.text.x = ggplot2::element_text(color = NA, size = 12 * options[["forestPlotRelativeSizeAxisLabels"]]), + axis.ticks = ggplot2::element_blank(), + axis.title.y = ggplot2::element_blank(), + axis.title.x = ggplot2::element_text(color = NA, size = 12 * options[["forestPlotRelativeSizeAxisLabels"]]), + legend.position = "none", + panel.background = ggplot2::element_blank(), + panel.border = ggplot2::element_blank(), + panel.grid.major = ggplot2::element_blank(), + panel.grid.minor = ggplot2::element_blank(), + plot.background = ggplot2::element_blank() + ) + } - gridExtra ::grid.arrange(plotLeft1, plotForest1, nrow = 1) + ### adjust panel plot widths + plotsWidths <- c( + if (!is.null(plotLeft)) options[["forestPlotRelativeSizeLeftPanel"]], + options[["forestPlotRelativeSizeMiddlePanel"]], + if (!is.null(plotRight)) options[["forestPlotRelativeSizeRightPanel"]] + ) + if (options[["forestPlotAuxiliaryAdjustWidthBasedOnText"]] && length(plotsWidths) == 3) { + plotsWidths[1] <- plotsWidths[1] * maxCharsLeft / maxCharsRight + plotsWidths[3] <- plotsWidths[3] * maxCharsRight / maxCharsLeft + } + # compute ratio of main panel to side panels + if (length(plotsWidths) != 1) { + panelRatio <- sum(c( + if (!is.null(plotLeft)) options[["forestPlotRelativeSizeLeftPanel"]] else 0, + if (!is.null(plotRight)) options[["forestPlotRelativeSizeRightPanel"]] else 0 + )) / options[["forestPlotRelativeSizeMiddlePanel"]] + } + if (length(plotsWidths) == 1) { + plotOut <- plotForest + attr(plotOut, "isPanel") <- FALSE + attr(plotOut, "rows") <- tempRow + max(dfForrest$row) + } else { + plotsCall <- list() + if (!is.null(plotLeft)) + plotsCall <- c(plotsCall, list(plotLeft)) + plotsCall <- c(plotsCall, list(plotForest)) + if (!is.null(plotRight)) + plotsCall <- c(plotsCall, list(plotRight)) + plotsCall$widths <- plotsWidths + plotsCall$nrow <- 1 + plotOut <- do.call(gridExtra::grid.arrange, plotsCall) +# plotOut <- jaspGraphsPlot$new(subplots = list( +# if (!is.null(plotLeft)) plotLeft, +# plotForest, +# if (!is.null(plotRight)) plotRight), +# layout = matrix(1:length(plotsWidths), nrow = 1), widths = plotsWidths) + attr(plotOut, "isPanel") <- TRUE + attr(plotOut, "panelRatio") <- panelRatio + attr(plotOut, "rows") <- tempRow + if(!is.null(dfForrest)) max(dfForrest$row) else 0 + } + return(list()) +} +.maForestPlotMakeRightPannel <- function(options, additionalInformation) { + + if (!options[["forestPlotStudyInformation"]] && length(additionalInformation) == 0) + return(FALSE) + if (options[["forestPlotEstimatesAndConfidenceIntervals"]]) + return(TRUE) + if (options[["forestPlotStudyInformation"]] && options[["forestPlotStudyInformationStudyWeights"]]) + return(TRUE) + if (length(additionalInformation) != 0 && + (options[["forestPlotEstimatedMarginalMeansTermTests"]] || options[["forestPlotEstimatedMarginalMeansCoefficientTests"]]) && + options[["forestPlotTestsInRightPanel"]]) + return(TRUE) + else + return(FALSE) } diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 9b75de74..c1254e58 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -525,13 +525,23 @@ Form enabled: forestPlotStudyInformation.checked columns: 2 - CheckBox + Group { - name: "forestPlotStudyInformationPredictedEffects" - text: qsTr("Predicted effects") - enabled: effectSize.count == 1 && effectSizeStandardError.count == 1 - checked: false - Layout.preferredWidth: 300 * jaspTheme.uiScale + CheckBox + { + name: "forestPlotStudyInformationPredictedEffects" + text: qsTr("Predicted effects") + enabled: effectSize.count == 1 && effectSizeStandardError.count == 1 + checked: false + Layout.preferredWidth: 300 * jaspTheme.uiScale + } + + CheckBox + { + name: "forestPlotStudyInformationStudyWeights" + text: qsTr("Study weights") + enabled: forestPlotStudyInformation.checked + } } Group @@ -702,12 +712,30 @@ Form { columns: 2 - CheckBox + + Group { - name: "forestPlotPredictionIntervals" - text: qsTr("Prediction intervals") - checked: true - Layout.preferredWidth: 300 * jaspTheme.uiScale + CheckBox + { + name: "forestPlotPredictionIntervals" + text: qsTr("Prediction intervals") + checked: true + Layout.preferredWidth: 300 * jaspTheme.uiScale + } + + CheckBox + { + name: "forestPlotEstimatesAndConfidenceIntervals" + text: qsTr("Estimates and confidence intervals") + checked: true + } + + CheckBox + { + name: "forestPlotTestsInRightPanel" + text: qsTr("Tests in right panel") + checked: false + } } Group @@ -728,27 +756,8 @@ Form addEmptyValue: true } } + - CheckBox - { - name: "forestPlotRightPanel" - text: qsTr("Right Panel") - checked: true - - CheckBox - { - name: "forestPlotRightPanelEstimate" - text: qsTr("Estimates and confidence intervals") - checked: true - } - - CheckBox - { - name: "forestPlotRightPanelWeights" - text: qsTr("Weights") - enabled: forestPlotStudyInformation.checked - } - } Group { @@ -816,116 +825,115 @@ Form min: 0 inclusive: JASP.None } - } - } - Group - { - title: qsTr("Auxiliary") - - IntegerField - { - name: "forestPlotAuxiliaryDigits" - text: qsTr("Digits") - min: 1 - value: 2 - inclusive: JASP.None - } - - DropDown - { - label: qsTr("Tests information") - name: "forestPlotAuxiliaryTestsInformation" - values: [ - { label: qsTr("Statistic and p-value") , value: "statisticAndPValue" }, - { label: qsTr("P-value") , value: "pValue" } - ] + CheckBox + { + name: "forestPlotAuxiliaryAdjustWidthBasedOnText" + text: qsTr("Adjust width based on text") + checked: true + } } - DropDown + Group { - name: "forestPlotAuxiliaryPlotColor" - label: qsTr("Color") - values: [ - { label: qsTr("Black") , value: "black"}, - { label: qsTr("Blue") , value: "blue" }, - { label: qsTr("Red") , value: "red" } - ] - } + title: qsTr("Auxiliary") - CheckBox - { - name: "forestPlotAuxiliaryAddVerticalLine" - text: qsTr("Add vertical line") - childrenOnSameRow: true + IntegerField + { + name: "forestPlotAuxiliaryDigits" + text: qsTr("Digits") + min: 1 + value: 2 + inclusive: JASP.None + } - DoubleField + DropDown { - name: "forestPlotAuxiliaryAddVerticalLineValue" - defaultValue: 0 - negativeValues: true + label: qsTr("Tests information") + name: "forestPlotAuxiliaryTestsInformation" + values: [ + { label: qsTr("Statistic and p-value") , value: "statisticAndPValue" }, + { label: qsTr("P-value") , value: "pValue" } + ] } - } - CheckBox - { - name: "forestPlotAuxiliaryAddVerticalLine2" - text: qsTr("Add vertical line (2)") - childrenOnSameRow: true + DropDown + { + name: "forestPlotAuxiliaryPlotColor" + label: qsTr("Color") + values: [ + { label: qsTr("Black") , value: "black"}, + { label: qsTr("Blue") , value: "blue" }, + { label: qsTr("Red") , value: "red" } + ] + } - DoubleField + CheckBox { - name: "forestPlotAuxiliaryAddVerticalLineValue2" - defaultValue: 0 - negativeValues: true + name: "forestPlotAuxiliaryAddVerticalLine" + text: qsTr("Add vertical line") + childrenOnSameRow: true + + DoubleField + { + name: "forestPlotAuxiliaryAddVerticalLineValue" + defaultValue: 0 + negativeValues: true + } } - } - TextField - { - name: "forestPlotAuxiliaryEffectLabel" - text: qsTr("X-axis label") - value: "Effect Size" - } + CheckBox + { + name: "forestPlotAuxiliaryAddVerticalLine2" + text: qsTr("Add vertical line (2)") + childrenOnSameRow: true - CheckBox - { - name: "forestPlotAuxiliarySetXAxisLimit" - text: qsTr("X-axis limits") - childrenOnSameRow: true + DoubleField + { + name: "forestPlotAuxiliaryAddVerticalLineValue2" + defaultValue: 0 + negativeValues: true + } + } - DoubleField + TextField { - name: "forestPlotAuxiliarySetXAxisLimitLower" - id: forestPlotAuxiliarySetXAxisLimitLower - text: qsTr("Lower") - defaultValue: -1 - negativeValues: true - max: forestPlotAuxiliarySetXAxisLimitUpper - inclusive: JASP.None + name: "forestPlotAuxiliaryEffectLabel" + text: qsTr("X-axis label") + value: "Effect Size" } - DoubleField + CheckBox { - name: "forestPlotAuxiliarySetXAxisLimitUpper" - id: forestPlotAuxiliarySetXAxisLimitUpper - text: qsTr("Upper") - defaultValue: 1 - min: forestPlotAuxiliarySetXAxisLimitLower - inclusive: JASP.None + name: "forestPlotAuxiliarySetXAxisLimit" + text: qsTr("X-axis limits") + childrenOnSameRow: true + + DoubleField + { + name: "forestPlotAuxiliarySetXAxisLimitLower" + id: forestPlotAuxiliarySetXAxisLimitLower + text: qsTr("Lower") + defaultValue: -1 + negativeValues: true + max: forestPlotAuxiliarySetXAxisLimitUpper + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotAuxiliarySetXAxisLimitUpper" + id: forestPlotAuxiliarySetXAxisLimitUpper + text: qsTr("Upper") + defaultValue: 1 + min: forestPlotAuxiliarySetXAxisLimitLower + inclusive: JASP.None + } } - } - - CheckBox - { - name: "forestPlotAuxiliaryGuessTextWidth" - text: qsTr("Guess text width") - checked: true } - } - + } } From 2690707b59d65c194e2896b4edc546191afe450d Mon Sep 17 00:00:00 2001 From: FBartos Date: Sat, 22 Jun 2024 16:44:10 +0200 Subject: [PATCH 030/127] effect size computation --- R/effectsizecomputation.R | 102 +++++++++++++++++++---------- inst/qml/EffectSizeComputation.qml | 68 +++++++++++++++---- 2 files changed, 121 insertions(+), 49 deletions(-) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index 77058acf..6f5767fc 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -5,6 +5,8 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { options <- .HOTFIX_flatten_options(options) dataset <- .escReadDataset(dataset, options) + saveRDS(options, file = "C:/JASP/options.RDS") + saveRDS(dataset, file = "C:/JASP/dataset.RDS") dataOutput <- .escComputeEffectSizes(dataset, options) .escComputeSummaryTable(jaspResults, dataset, options, dataOutput) @@ -59,18 +61,25 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { effectSizeType <- options[["effectSizeType"]][[i]] variables <- options[["variables"]][[i]] - # set escalc input - escalcInput <- c( - .escGetEscalcDataOptions(dataset, effectSizeType, variables), - .escGetEscalcAdjustFrequenciesOptions(effectSizeType, variables), - .escGetEscalcVtypeOption(effectSizeType, variables), - measure = if (effectSizeType[["effectSize"]] == "reportedEffectSizes") "GEN" else effectSizeType[["effectSize"]], - replace = i == 1, - add.measure = TRUE, - data = if (!is.null(dataOutput)) list(dataOutput) - ) + # dispatch + if (!.escReportedEffectSizesReady(variables)) { + newDataOutput <- try(stop(gettext("Cannot compute outcomes. Chech that all of the required information is specified via the appropriate arguments (i.e. an Effect Size and either Standard Error, Sampling Variance, or 95% Confidence Interval)."))) + } else { + # set escalc input + escalcInput <- c( + .escGetEscalcDataOptions(dataset, effectSizeType, variables), + .escGetEscalcAdjustFrequenciesOptions(effectSizeType, variables), + .escGetEscalcVtypeOption(effectSizeType, variables), + measure = if (effectSizeType[["design"]] == "reportedEffectSizes") "GEN" else effectSizeType[["effectSize"]], + replace = i == 1, + add.measure = TRUE, + data = if (!is.null(dataOutput)) list(dataOutput) + ) + + newDataOutput <- try(do.call(metafor::escalc, escalcInput)) + } + - newDataOutput <- try(do.call(metafor::escalc, escalcInput)) if (inherits(newDataOutput, "try-error")) { errors[[paste0("i",i)]] <- list( @@ -129,7 +138,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { computeSummary$addFootnote(gettext("Effect sizes were successfully computed for each data entry.")) else computeSummary$addFootnote(gettextf( - "Note: Effect sizes were successfully computed for %1$i out of %2$i data entries.", + "Effect sizes were successfully computed for %1$i out of %2$i data entries.", sum(computeSummaryData[["computed"]]), nrow(dataset))) } @@ -269,7 +278,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { pi = dataset[[variables[["pValue"]]]] ) } else if (measurement == "binary") { - if (effectSize %in% c("OR", "YUQ", "YUY", "RTET")) { + if (effectSize %in% c("OR", "YUQ", "YUY", "RTET", "ZTET")) { inputs <- list( ai = dataset[[variables[["outcomePlusPlus"]]]], bi = dataset[[variables[["outcomePlusMinus"]]]], @@ -285,9 +294,10 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { ci = dataset[[variables[["outcomeMinusPlus"]]]], di = dataset[[variables[["outcomeMinusMinus"]]]], n1i = dataset[[variables[["outcomePlusPlusAndPlusMinus"]]]], - n2i = dataset[[variables[["outcomeMinusPlusAndMinusMinus"]]]], - vtype = if(length(variables[["samplingVarianceTypeMixed"]]) != 0) dataset[[variables[["samplingVarianceTypeMixed"]]]] else NULL + n2i = dataset[[variables[["outcomeMinusPlusAndMinusMinus"]]]] ) + if (variables[["samplingVarianceTypeMixed"]] != "") + inputs$vtype <- dataset[[variables[["samplingVarianceTypeMixed"]]]] } } else if (measurement == "mixed") { if (effectSize %in% c("RBIS", "ZBIS")) { @@ -312,9 +322,10 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { n2i = dataset[[variables[["sampleSizeGroup2"]]]], ti = dataset[[variables[["tStatistic"]]]], pi = dataset[[variables[["pValue"]]]], - di = dataset[[variables[["cohensD"]]]], - vtype = if(length(variables[["samplingVarianceTypeMixed"]]) != 0) dataset[[variables[["samplingVarianceTypeMixed"]]]] else NULL + di = dataset[[variables[["cohensD"]]]] ) + if (variables[["samplingVarianceTypeMixed"]] != "") + inputs$vtype <- dataset[[variables[["samplingVarianceTypeMixed"]]]] } } } else if (design == "singleGroup") { @@ -347,7 +358,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { } else if (design == "repeatedMeasures") { if (measurement == "quantitative") { if (effectSize %in% c("MC", "SMCR", "SMCRH", "SMCRP", "SMCRPH", "ROMC")) { - input <- list( + inputs <- list( m1i = dataset[[variables[["meanTime1"]]]], m2i = dataset[[variables[["meanTime2"]]]], sd1i = dataset[[variables[["sdTime1"]]]], @@ -356,7 +367,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { ri = dataset[[variables[["correlation"]]]] ) } else if (effectSize == "SMCC") { - input <- list( + inputs <- list( m1i = dataset[[variables[["meanTime1"]]]], m2i = dataset[[variables[["meanTime2"]]]], sd1i = dataset[[variables[["sdTime1"]]]], @@ -368,7 +379,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { di = dataset[[variables[["cohensD"]]]] ) } else if (effectSize %in% c("CVRC", "VRC")) { - input <- list( + inputs <- list( sd1i = dataset[[variables[["sdTime1"]]]], sd2i = dataset[[variables[["sdTime2"]]]], ni = dataset[[variables[["sampleSize"]]]], @@ -440,8 +451,8 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { yi = dataset[[variables[["effectSize"]]]], sei = dataset[[variables[["standardError"]]]], vi = dataset[[variables[["samplingVariance"]]]], - lci = dataset[[variables[["confidenceInterval"]][[1]][1]]], - uci = dataset[[variables[["confidenceInterval"]][[1]][2]]] + lci = if (length(variables[["confidenceInterval"]]) != 0) dataset[[variables[["confidenceInterval"]][[1]][1]]], + uci = if (length(variables[["confidenceInterval"]]) != 0) dataset[[variables[["confidenceInterval"]][[1]][2]]] ) inputs <- .escReportedEffectSizesInput(inputs) } @@ -494,12 +505,11 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { # Conditions for when vtype is appropriate if ((design == "independentGroups" && measurement == "quantitative" && effectSize %in% c("MD", "SMD", "SMD1", "ROM")) || (design == "variableAssociation" && measurement == "quantitative") || - (design == "variableAssociation" && measurement == "binary") || - (design == "variableAssociation" && measurement == "mixed") || - (design == "other" && measurement == "modelFit")) { - return(list( - vtype = variables[["samplingVarianceType"]] - )) + (design == "variableAssociation" && measurement == "binary" && effectSize %in% c("PHI", "ZHI")) || + (design == "variableAssociation" && measurement == "mixed" && effectSize %in% c("RPB", "ZPB")) || + (design == "other" && measurement == "modelFit") && + variables[["samplingVarianceType"]] != "mixed") { + return(list(vtype = variables[["samplingVarianceType"]])) } else { return(NULL) } @@ -598,7 +608,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { pi = "P-Value" ) } else if (measurement == "binary") { - if (effectSize %in% c("OR", "YUQ", "YUY", "RTET")) { + if (effectSize %in% c("OR", "YUQ", "YUY", "RTET", "ZTET")) { inputs <- list( ai = "Outcome +/+", bi = "Outcome +/-", @@ -615,7 +625,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { di = "Outcome -/-", n1i = "Outcome +/+ and +/-", n2i = "Outcome -/+ and -/-", - vtype = if(length(variables[["samplingVarianceTypeMixed"]]) != 0) "samplingVarianceTypeMixed" else NULL + vtype = "Sampling Variance Type Mixed" ) } } else if (measurement == "mixed") { @@ -642,7 +652,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { ti = "T-Statistic", pi = "P-Value", di = "Cohen's d", - vtype = if(length(variables[["samplingVarianceTypeMixed"]]) != 0) "samplingVarianceTypeMixed" else NULL + vtype = "Sampling Variance Type Mixed" ) } } @@ -802,11 +812,25 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { } .escReportedEffectSizesInput <- function(inputs) { + inputs <- inputs[!sapply(inputs, is.null)] + inputs <- do.call(cbind.data.frame, inputs) + + if (is.null(inputs$sei)) + inputs$sei <- NA + if (is.null(inputs$vi)) + inputs$vi <- NA + if (is.null(inputs$uci)) + inputs$uci <- NA + if (is.null(inputs$lci)) + inputs$lci <- NA + # add standard error when missing and CI is available - inputs$sei[[is.na(inputs$sei)]] <- (inputs$uci[[is.na(inputs$sei)]] - inputs$lci[[is.na(inputs$sei)]]) / (2 * stats::qnorm(0.975)) + if (length((inputs$uci[is.na(inputs$sei)] - inputs$lci[is.na(inputs$sei)]) ) != 0) + inputs$sei[is.na(inputs$sei)] <- (inputs$uci[is.na(inputs$sei)] - inputs$lci[is.na(inputs$sei)]) / (2 * stats::qnorm(0.975)) # add variance when missing and standard error is available - inputs$vi[[is.na(input$vi)]] <- inputs$sei[[is.na(inputs$vi)]]^2 + if (length(inputs$sei[is.na(inputs$vi)]) != 0) + inputs$vi[is.na(inputs$vi)] <- inputs$sei[is.na(inputs$vi)]^2 # remove sei and cis inputs$sei <- NULL @@ -815,6 +839,14 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { return(inputs) } +.escReportedEffectSizesReady <- function(variables){ + if (variables[["effectSize"]] == "") + return(FALSE) + else if (length(variables[["confidenceInterval"]]) == 0 && variables[["standardError"]] == "" && variables[["samplingVariance"]] == "") + return(FALSE) + else + return(TRUE) +} .escVariableInputs <- c( "group1OutcomePlus", "time1OutcomePlus", @@ -882,8 +914,8 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { } } - if(length(options[["variables"]][["confidenceInterval"]]) != 0) { - options[["variables"]][["confidenceInterval"]][[1]] <- .encodeColNamesLax(options[["variables"]][["confidenceInterval"]][[1]]) + if(length(options[["variables"]][[i]][["confidenceInterval"]]) != 0) { + options[["variables"]][[i]][["confidenceInterval"]][[1]] <- .encodeColNamesLax(options[["variables"]][["confidenceInterval"]][[1]]) } } diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index 1e463251..1ca26a83 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -110,11 +110,35 @@ Form id: effectSize name: "effectSize" visible: design.value != "reportedEffectSizes" + indexDefaultValue: (function() { + if (design.value == "independentGroups" && measurement.value == "quantitative") + return 1; + else if (design.value == "independentGroups" && measurement.value == "binary") + return 1; + else if (design.value == "variableAssociation" && measurement.value == "quantitative") + return 2; + else if (design.value == "variableAssociation" && measurement.value == "mixed") + return 2; + else if (design.value == "singleGroup") + return 1; + else if (design.value == "repeatedMeasures" && measurement.value == "quantitative") + return 1; + else if (design.value == "repeatedMeasures" && measurement.value == "binary") + return 1; + else if (design.value == "other" && measurement.value == "reliability") + return 1; + else if (design.value == "other" && measurement.value == "partialCorrelation") + return 1; + else if (design.value == "other" && measurement.value == "modelFit") + return 1; + else + return 0; + })() values: (function() { if (design.value == "independentGroups" && measurement.value == "quantitative") { return [ { label: qsTr("MD"), value: "MD"}, - { label: qsTr("SMD"), value: "SMD"}, // TODO: make default + { label: qsTr("SMD"), value: "SMD"}, { label: qsTr("SMDH"), value: "SMDH"}, { label: qsTr("SMD1"), value: "SMD1"}, { label: qsTr("SMD1H"), value: "SMD1H"}, @@ -125,7 +149,7 @@ Form } else if (design.value == "independentGroups" && measurement.value == "binary") { return [ { label: qsTr("RR"), value: "RR"}, - { label: qsTr("OR"), value: "OR"}, // TODO: make default + { label: qsTr("OR"), value: "OR"}, { label: qsTr("RD"), value: "RD"}, { label: qsTr("AS"), value: "AS"}, { label: qsTr("PETO"), value: "PETO"} @@ -148,7 +172,7 @@ Form return [ { label: qsTr("COR"), value: "COR"}, { label: qsTr("UCOR"), value: "UCOR"}, - { label: qsTr("ZCOR"), value: "ZCOR"} // TODO: make default + { label: qsTr("ZCOR"), value: "ZCOR"} ]; } else if (design.value == "variableAssociation" && measurement.value == "binary") { return [ @@ -164,7 +188,7 @@ Form return [ { label: qsTr("RPB"), value: "RPB"}, { label: qsTr("RBIS"), value: "RBIS"}, - { label: qsTr("ZPB"), value: "ZPB"}, // TODO: make default + { label: qsTr("ZPB"), value: "ZPB"}, { label: qsTr("ZBIS"), value: "ZBIS"} ]; } else if (design.value == "singleGroup" && measurement.value == "quantitative") { @@ -193,7 +217,7 @@ Form } else if (design.value == "repeatedMeasures" && measurement.value == "quantitative") { return [ { label: qsTr("MC"), value: "MC"}, - { label: qsTr("SMCC"), value: "SMCC"}, // TODO: make default + { label: qsTr("SMCC"), value: "SMCC"}, { label: qsTr("SMCR"), value: "SMCR"}, { label: qsTr("SMCRH"), value: "SMCRH"}, { label: qsTr("SMCRP"), value: "SMCRP"}, @@ -223,14 +247,14 @@ Form } else if (design.value == "other" && measurement.value == "partialCorrelation") { return [ { label: qsTr("PCOR"), value: "PCOR"}, - { label: qsTr("ZPCOR"), value: "ZPCOR"}, // TODO: make default + { label: qsTr("ZPCOR"), value: "ZPCOR"}, { label: qsTr("SPCOR"), value: "SPCOR"}, { label: qsTr("ZSPCOR"), value: "ZSPCOR"} ]; } else if (design.value == "other" && measurement.value == "modelFit") { return [ { label: qsTr("R2"), value: "R2"}, - { label: qsTr("ZR2"), value: "ZR2"} // TODO: make default + { label: qsTr("ZR2"), value: "ZR2"} ]; } else if (design.value == "other" && measurement.value == "heterozygosity") { return [ @@ -267,14 +291,30 @@ Form removeInvisibles: true preferredWidth: parent.width - 6 * jaspTheme.contentMargin preferredHeight: (function() { - if (effectSizeValue == "SMD" || effectSizeValue == "D2ORL" || effectSizeValue == "D2ORN") { - return 500 * preferencesModel.uiScale - } else if (effectSizeValue == "CVR" || effectSizeValue == "VR") { - return 250 * preferencesModel.uiScale - } else if (measurementValue == "quantitative") { - return 350 * preferencesModel.uiScale + if ((designValue == "variableAssociation" && measurementValue == "mixed" && samplingVarianceType.value == "mixed")) { + return 11 * 50 * preferencesModel.uiScale + } else if (effectSizeValue == "SMD" || effectSizeValue == "D2ORL" || effectSizeValue == "D2ORN" || effectSizeValue == "SMCC" || + (designValue == "variableAssociation" && measurementValue == "mixed")) { + return 10 * 50 * preferencesModel.uiScale + } else if (effectSizeValue == "CVR" || effectSizeValue == "VR" || effectSizeValue == "CVRC" || effectSizeValue == "VRC" || + (designValue == "independentGroups" && measurementValue == "countsPerTime") || + (designValue == "repeatedMeasures" && measurementValue == "binary") || + (designValue == "variableAssociation" && measurementValue == "quantitative") || + (designValue == "reportedEffectSizes")) { + return 5 * 50 * preferencesModel.uiScale + } else if (effectSizeValue == "SDLN" || (designValue == "singleGroup" && measurementValue == "countsPerTime")) { + return 3 * 50 * preferencesModel.uiScale + } else if (effectSizeValue == "SMD1" || effectSizeValue == "SMCR" || effectSizeValue == "PCOR" || effectSizeValue == "ZPCOR" || + (designValue == "other" && measurementValue == "modelFit")) { + return 6 * 50 * preferencesModel.uiScale + } else if ((designValue == "independentGroups" && measurementValue == "quantitative") || + (designValue == "other" && measurementValue == "partialCorrelation")) { + return 7 * 50 * preferencesModel.uiScale + } else if ((designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary")) || + (designValue == "other" && (measurementValue == "reliability" || measurementValue == "heterozygosity"))) { + return 4 * 50 * preferencesModel.uiScale } else { - return 350 * preferencesModel.uiScale + return 7 * 50 * preferencesModel.uiScale } })() From c418fb350865273d9855d1c54e594f7dd9b988cc Mon Sep 17 00:00:00 2001 From: FBartos Date: Sat, 22 Jun 2024 22:53:52 +0200 Subject: [PATCH 031/127] add bubble plot --- R/classicalmetaanalysis.R | 15 +- R/classicalmetaanalysiscommon.R | 397 +++++++++++++++++++++++++---- R/forestplot.R | 1 - inst/qml/ClassicalMetaAnalysis.qml | 151 +++++++++-- 4 files changed, 501 insertions(+), 63 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index ed0f8fe4..3281e802 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -51,7 +51,7 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "optimizerConvergenceRelativeTolerance", "optimizerConvergenceRelativeToleranceValue", "optimizerStepAdjustment", "optimizerStepAdjustmentValue" ) .maForestPlotDependencies <- c( - .maDependencies, + .maDependencies, "transformEffectSize", "confidenceIntervalsLevel", "forestPlotStudyInformation", "forestPlotStudyInformationAllVariables", "forestPlotStudyInformationSelectedVariables", @@ -99,6 +99,19 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "forestPlotAuxiliarySetXAxisLimitLower", "forestPlotAuxiliarySetXAxisLimitUpper" ) +.maBubblePlotDependencies <- c( + .maDependencies, "transformEffectSize", "confidenceIntervalsLevel", + "bubblePlotSelectedVariable", + "bubblePlotSeparateLines", + "bubblePlotSeparatePlots", + "bubblePlotSdFactorCovariates", + "bubblePlotBubbleSize", + "bubblePlotRelativeBubbleSize", + "bubblePlotCondifenceIntervals", + "bubblePlotCondifenceIntervalsTransparency", + "bubblePlotPredictionIntervals", + "bubblePlotPredictionIntervalsTransparency" +) .maReady <- function(options) { inputReady <- options[["effectSize"]] != "" && options[["effectSizeStandardError"]] != "" diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 6fed9250..e121bbf3 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -46,9 +46,9 @@ .maEstimatedMarginalMeansTable(jaspResults, dataset, options, "effectSize") .maEstimatedMarginalMeansTable(jaspResults, dataset, options, "heterogeneity") - # forest plot + # plots #.maUltimateForestPlot(jaspResults, dataset, options) - + .maBubblePlot(jaspResults, dataset, options) return() } @@ -680,7 +680,68 @@ return() } +.maBubblePlot <- function(jaspResults, dataset, options) { +# TODO: effect size transformation, separate plots, legend + if (!is.null(jaspResults[["bubblePlot"]])) + return() + + if (length(options[["bubblePlotSelectedVariable"]]) == 0) + return() + + fit <- .maExtractFit(jaspResults, options) + + if (length(options[["bubblePlotSeparatePlots"]]) > 0) { + bubblePlotContainer <- createJaspContainer(gettext("Bubble Plots")) + bubblePlotContainer$dependOn(.maBubblePlotDependencies) + bubblePlotContainer$position <- 5 + jaspResults[["bubblePlot"]] <- bubblePlotContainer + } else { + bubblePlot <- createJaspPlot(gettext("Bubble Plot"), width = 450, height = 350) + bubblePlot$dependOn(.maBubblePlotDependencies) + bubblePlot$position <- 5 + jaspResults[["bubblePlot"]] <- bubblePlot + } + # make bubble plots + dfPlot <- .maMakeBubblePlotDataset(fit, options, dataset) + + if (attr(dfPlot, "separatePlots") == "") { + tempPlots <- list(.maMakeBubblePlot(fit, options, dfPlot)) + } else { + tempPlots <- lapply(unique(dfPlot[["separatePlots"]]), function(lvl) { + .maMakeBubblePlot(fit, options, dfPlot[dfPlot[["separatePlots"]] == lvl,]) + }) + } + + yRange <- do.call(rbind, lapply(tempPlots, attr, which = "yRange")) + yRange <- c(min(yRange[, 1]), max(yRange[, 2])) + yRange <- range(jaspGraphs::getPrettyAxisBreaks(yRange)) + + tempPlots <- lapply(tempPlots, function(plot) { + plot + jaspGraphs::scale_x_continuous( + name = attr(dfPlot, "selectedVariable"), + breaks = jaspGraphs::getPrettyAxisBreaks(attr(dfPlot, "xRange")), + limits = attr(dfPlot, "xRange") + ) + jaspGraphs::scale_y_continuous( + name = if (options[["transformEffectSize"]] == "none") gettext("Effect Size") else .maGetOptionsNameEffectSizeTransformation(options[["transformEffectSize"]]), + breaks = jaspGraphs::getPrettyAxisBreaks(yRange), + limits = yRange + ) + jaspGraphs::geom_rangeframe() + jaspGraphs::themeJaspRaw() + }) + + if (length(options[["bubblePlotSeparatePlots"]]) > 0) { + for (i in seq_along(tempPlots)) { + bubblePlot <- createJaspPlot(gettextf("%1$s (%2$s)", attr(dfPlot, "separatePlots"), unique(dfPlot[["separatePlots"]])[i]), width = 450, height = 350) + bubblePlot$position <- i + bubblePlot$plotObject <- tempPlots[[i]] + bubblePlotContainer[[i]] <- bubblePlot + } + } else { + bubblePlot$plotObject <- tempPlots[[1]] + } + + return() +} # containers/state functions .maExtractFit <- function(jaspResults, options) { @@ -1046,7 +1107,7 @@ return(out) } -.maGetMarginalMeansPredictorMatrix <- function(fit, options, dataset, selectedVariable, parameter) { +.maGetMarginalMeansPredictorMatrix <- function(fit, options, dataset, selectedVariables, trendVarible = NULL, trendSequence = NULL, sdFactor, parameter) { variablesContinuous <- options[["predictors"]][options[["predictors.types"]] == "scale"] variablesFactors <- options[["predictors"]][options[["predictors.types"]] == "nominal"] @@ -1058,19 +1119,12 @@ heterogeneity = fit[["formula.scale"]] ) - # select SD factor for covariates - sdFactor <- switch( - parameter, - effectSize = options[["estimatedMarginalMeansEffectSizeSdFactorCovariates"]], - heterogeneity = options[["estimatedMarginalMeansHeterogeneitySdFactorCovariates"]] - ) - # extract the used variables terms <- attr(terms(formula, data = fit[["data"]]), "term.labels") variables <- terms[!grepl(":", terms)] # average across remaining variables - remainingVariables <- variables[variables != selectedVariable] + remainingVariables <- setdiff(variables, c(selectedVariables, trendVarible)) ### create model matrix for the remaining predictors # (use all factors for levels to average out the predictor matrix later) @@ -1085,56 +1139,98 @@ } # create complete model matrices including the specified variable - if (selectedVariable %in% variablesFactors) { - selectedPredictor <- factor(levels(dataset[[selectedVariable]]), levels = levels(dataset[[selectedVariable]])) - contrasts(selectedPredictor) <- contrasts(dataset[[selectedVariable]]) - } else if (selectedVariable %in% variablesContinuous) { - selectedPredictor <- c( - mean(dataset[[selectedVariable]]) - sdFactor * sd(dataset[[selectedVariable]]), - mean(dataset[[selectedVariable]]), - mean(dataset[[selectedVariable]]) + sdFactor * sd(dataset[[selectedVariable]]) - ) + predictorsSelected <- list() + if (length(selectedVariables) > 0) { + for (selectedVariable in selectedVariables) { + if (selectedVariable %in% variablesFactors) { + predictorsSelected[[selectedVariable]] <- factor(levels(dataset[[selectedVariable]]), levels = levels(dataset[[selectedVariable]])) + contrasts(predictorsSelected[[selectedVariable]]) <- contrasts(dataset[[selectedVariable]]) + } else if (selectedVariable %in% variablesContinuous) { + predictorsSelected[[selectedVariable]] <- c( + mean(dataset[[selectedVariable]]) - sdFactor * sd(dataset[[selectedVariable]]), + mean(dataset[[selectedVariable]]), + mean(dataset[[selectedVariable]]) + sdFactor * sd(dataset[[selectedVariable]]) + ) + } + } + } + + + # create model matrix for the trend variable + if (length(trendVarible) != 0) { + predictorsSelected[[trendVarible]] <- trendSequence } # add the specified variable and pool across the combinations of the remaining values - if (selectedVariable == "") { + if (length(selectedVariables) == 1 && selectedVariables == "") { # empty string creates overall adjusted estimate outMatrix <- colMeans(model.matrix(formula, data = expand.grid(predictorsRemaining)))[-1] } else { - outMatrix <- do.call(rbind, lapply(seq_along(selectedPredictor), function(i) { - predictorsRemaining[[selectedVariable]] <- selectedPredictor[i] - outMatrix <- model.matrix(formula, data = expand.grid(predictorsRemaining)) - return(colMeans(outMatrix)[-1]) + predictorsSelectedGrid <- expand.grid(predictorsSelected) + outMatrix <- do.call(rbind, lapply(1:nrow(predictorsSelectedGrid), function(i) { + colMeans(model.matrix(formula, data = expand.grid(c(predictorsRemaining, predictorsSelectedGrid[i,,drop = FALSE]))))[-1] })) } # keep information about the variable and levels - if (selectedVariable == "") + if (length(selectedVariables) == 1 && selectedVariables == "") { + + # add intercept attr(outMatrix, "variable") <- gettext("Adjusted Estimate") - else - attr(outMatrix, "variable") <- selectedVariable - - if (selectedVariable %in% variablesFactors) - attr(outMatrix, "at") <- selectedPredictor - else if (selectedVariable %in% variablesContinuous) - attr(outMatrix, "at") <- c( - gettextf("Mean - %1$sSD", sdFactor), - gettext("Mean"), - gettextf("Mean + %1$sSD", sdFactor)) - else - attr(outMatrix, "at") <- "" + attr(outMatrix, gettext("Adjusted Estimate")) <- "" + + } else { + + # selected variables grid + attr(outMatrix, "selectedGrid") <- predictorsSelectedGrid + + # add remaining variables + attr(outMatrix, "variable") <- c(selectedVariables, trendVarible) + + for (selectedVariable in selectedVariables) { + if (selectedVariable %in% variablesFactors) { + attr(outMatrix, selectedVariable) <- predictorsSelected[[selectedVariable]] + } else if (selectedVariable %in% variablesContinuous) { + attr(outMatrix, selectedVariable) <- c( + gettextf("Mean - %1$sSD", sdFactor), + gettext("Mean"), + gettextf("Mean + %1$sSD", sdFactor)) + } + } + } + + if (length(trendVarible) != 0) { + attr(outMatrix, "trend") <- trendVarible + attr(outMatrix, "trend") <- trendSequence + } return(outMatrix) + } .maComputeMarginalMeansVariable <- function(fit, options, dataset, selectedVariable, testAgainst = 0, parameter) { if (parameter == "effectSize") { - predictorMatrixEffectSize <- .maGetMarginalMeansPredictorMatrix(fit, options, dataset, selectedVariable, "effectSize") + + predictorMatrixEffectSize <- .maGetMarginalMeansPredictorMatrix( + fit = fit, + options = options, + dataset = dataset, + selectedVariables = selectedVariable, + sdFactor = options[["estimatedMarginalMeansEffectSizeSdFactorCovariates"]], + parameter = "effectSize" + ) if (.maIsMetaregressionHeterogeneity(options)) { - predictorMatrixHeterogeneity <- .maGetMarginalMeansPredictorMatrix(fit, options, dataset, selectedVariable, "heterogeneity") + predictorMatrixHeterogeneity <- .maGetMarginalMeansPredictorMatrix( + fit = fit, + options = options, + dataset = dataset, + selectedVariables = selectedVariable, + sdFactor = options[["estimatedMarginalMeansEffectSizeSdFactorCovariates"]], + parameter = "heterogeneity" + ) computedMarginalMeans <- predict( fit, newmods = predictorMatrixEffectSize, @@ -1170,11 +1266,22 @@ list(computedMarginalMeans[,c("est", "lCi", "uCi", "lPi", "uPi")])) # create full data frame - computedMarginalMeans <- cbind(data.frame("variable" = attr(predictorMatrixEffectSize, "variable"), "value" = attr(predictorMatrixEffectSize, "at")), computedMarginalMeans) + computedMarginalMeans <- data.frame( + "variable" = attr(predictorMatrixEffectSize, "variable"), + "value" = attr(predictorMatrixEffectSize, attr(predictorMatrixEffectSize, "variable")), + computedMarginalMeans + ) } else if (parameter == "heterogeneity") { - predictorMatrixHeterogeneity <- .maGetMarginalMeansPredictorMatrix(fit, options, dataset, selectedVariable, "heterogeneity") + predictorMatrixHeterogeneity <- .maGetMarginalMeansPredictorMatrix( + fit = fit, + options = options, + dataset = dataset, + selectedVariables = selectedVariable, + sdFactor = options[["estimatedMarginalMeansHeterogeneitySdFactorCovariates"]], + parameter = "heterogeneity" + ) computedMarginalMeans <- predict( fit, @@ -1195,7 +1302,11 @@ computedMarginalMeans <- sqrt(computedMarginalMeans) # create full data frame - computedMarginalMeans <- cbind(data.frame("variable" = attr(predictorMatrixHeterogeneity, "variable"), "value" = attr(predictorMatrixHeterogeneity, "at")), computedMarginalMeans) + computedMarginalMeans <- data.frame( + "variable" = attr(predictorMatrixHeterogeneity, "variable"), + "value" = attr(predictorMatrixHeterogeneity, attr(predictorMatrixHeterogeneity, "variable")), + computedMarginalMeans + ) } @@ -1210,6 +1321,185 @@ return(computedMarginalMeans) } +.maMakeBubblePlotDataset <- function(fit, options, dataset) { + + # extract options + separateLines <- unlist(options[["bubblePlotSeparateLines"]]) + separatePlots <- unlist(options[["bubblePlotSeparatePlots"]]) + selectedVariable <- options[["bubblePlotSelectedVariable"]][[1]][["variable"]] + + # create nice plotting range + xRange <- range(jaspGraphs::getPrettyAxisBreaks(range(dataset[[selectedVariable]]))) + trendSequence <- seq(xRange[1], xRange[2], length.out = 101) + + predictorMatrixEffectSize <- .maGetMarginalMeansPredictorMatrix( + fit = fit, + options = options, + dataset = dataset, + selectedVariables = c(separateLines, separatePlots), + sdFactor = options[["bubblePlotSdFactorCovariates"]], + trendVarible = selectedVariable, + trendSequence = trendSequence, + parameter = "effectSize" + ) + + if (.maIsMetaregressionHeterogeneity(options)) { + + predictorMatrixHeterogeneity <- .maGetMarginalMeansPredictorMatrix( + fit = fit, + options = options, + dataset = dataset, + selectedVariables = c(separateLines, separatePlots), + sdFactor = options[["bubblePlotSdFactorCovariates"]], + trendVarible = selectedVariable, + trendSequence = trendSequence, + parameter = "heterogeneity" + ) + + computedMarginalMeans <- predict( + fit, + newmods = predictorMatrixEffectSize, + newscale = predictorMatrixHeterogeneity, + level = 100 * options[["confidenceIntervalsLevel"]] + ) + } else { + + computedMarginalMeans <- predict( + fit, + newmods = predictorMatrixEffectSize, + level = 100 * options[["confidenceIntervalsLevel"]] + ) + } + + ### modify and rename selectedGrid + selectedGrid <- attr(predictorMatrixEffectSize, "selectedGrid") + selectedGrid$selectedVariable <- selectedGrid[,selectedVariable] + + if (length(separateLines) == 1) { + selectedGrid$separateLines <- selectedGrid[,separateLines] + } else if (length(separateLines) > 1) { + selectedGrid$separateLines <- apply(selectedGrid[,separateLines], 1, function(x) paste(x, collapse = " | ")) + } + + if (length(separatePlots) == 1) { + selectedGrid$separatePlots <- selectedGrid[,separatePlots] + } else if (length(separatePlots) > 1) { + selectedGrid$separateFigures <- apply(selectedGrid[,separatePlots], 1, function(x) paste(x, collapse = " | ")) + } + + selectedGrid <- selectedGrid[,setdiff(names(selectedGrid), c(selectedVariable, separateLines, separatePlots)),drop = FALSE] + + ### modify marginal means + computedMarginalMeans <- data.frame(computedMarginalMeans) + colnames(computedMarginalMeans) <- c("y", "se", "lCi", "uCi", "lPi", "uPi") + + ### merge and add attributes + dfPlot <- cbind.data.frame(selectedGrid, computedMarginalMeans) + + attr(dfPlot, "selectedVariable") <- selectedVariable + attr(dfPlot, "separateLines") <- paste(separateLines, collapse = " | ") + attr(dfPlot, "separatePlots") <- paste(separatePlots, collapse = " | ") + attr(dfPlot, "variablesLines") <- separateLines + attr(dfPlot, "variablesPlots") <- separatePlots + attr(dfPlot, "xRange") <- xRange + + return(dfPlot) +} +.maMakeBubblePlot <- function(fit, options, dfPlot) { + + bubblePlot <- ggplot2::ggplot() + yRange <- NULL + + hasSeparateLines <- attr(dfPlot, "separateLines") != "" + + ### add prediction bads + if (options[["bubblePlotPredictionIntervals"]]) { + aesCall <- list( + x = as.name("selectedVariable"), + y = as.name("y"), + fill = if (hasSeparateLines) as.name("separateLines"), + group = if (hasSeparateLines) as.name("separateLines") + ) + dfPiBands <- .maBubblePlotMakeConfidenceBands(dfPlot, lCi = "lPi", uCi = "uPi") + geomCall <- list( + data = dfPiBands, + mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), + alpha = options[["bubblePlotPredictionIntervalsTransparency"]] + ) + bubblePlot <- bubblePlot + do.call(ggplot2::geom_polygon, geomCall) + yRange <- range(c(yRange, dfPiBands$y)) + } + + ### add confidence bands + if (options[["bubblePlotCondifenceIntervals"]]) { + aesCall <- list( + x = as.name("selectedVariable"), + y = as.name("y"), + fill = if (hasSeparateLines) as.name("separateLines"), + group = if (hasSeparateLines) as.name("separateLines") + ) + dfCiBands <- .maBubblePlotMakeConfidenceBands(dfPlot) + geomCall <- list( + data = dfCiBands, + mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), + alpha = options[["bubblePlotCondifenceIntervalsTransparency"]] + ) + bubblePlot <- bubblePlot + do.call(ggplot2::geom_polygon, geomCall) + yRange <- range(c(yRange, dfCiBands$y)) + } + + ### add predictiction line + aesCall <- list( + x = as.name("selectedVariable"), + y = as.name("y"), + color = if (hasSeparateLines) as.name("separateLines") + ) + geomCall <- list( + data = dfPlot, + mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]) + ) + bubblePlot <- bubblePlot + do.call(jaspGraphs::geom_line, geomCall) + yRange <- range(c(yRange, dfPlot$pred)) + + ### add studies as bubbles + dfStudies <- data.frame( + effectSize = fit[["yi"]], + inverseVariance = 1/fit[["vi"]], + weight = weights(fit), + selectedVariable = fit[["data"]][[attr(dfPlot, "selectedVariable")]] + ) + variablesLines <- attr(dfPlot, "variablesLines") + if (length(variablesLines) == 1) { + dfStudies$separateLines <- fit[["data"]][,variablesLines] + } else if (length(variablesLines) > 1) { + dfStudies$separateLines <- apply(fit[["data"]][,variablesLines], 1, function(x) paste(x, collapse = " | ")) + } + + aesCall <- list( + x = as.name("selectedVariable"), + y = as.name("effectSize"), + size = switch( + options[["bubblePlotBubbleSize"]], + "weight" = as.name("weight"), + "inverseVariance" = as.name("inverseVariance"), + "equal" = NULL + ), + color = if (hasSeparateLines) as.name("separateLines"), + fill = if (hasSeparateLines) as.name("separateLines") + ) + geomCall <- list( + data = dfStudies, + mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), + show.legend = FALSE + ) + bubblePlot <- bubblePlot + do.call(jaspGraphs::geom_point, geomCall) + yRange <- range(c(yRange, dfStudies[["effectSize"]])) + + + attr(bubblePlot, "yRange") <- yRange + return(bubblePlot) +} + # check functions .maIsMetaregression <- function(options) { @@ -1510,6 +1800,27 @@ return(xOut) } +.maBubblePlotMakeConfidenceBands <- function(dfPlot, lCi = "lCi", uCi = "uCi") { + + if (!is.null(dfPlot[["separateLines"]])) { + dfBands <- do.call(rbind, lapply(unique(dfPlot[["separateLines"]]), function(lvl) { + dfSubset <- dfPlot[dfPlot[["separateLines"]] == lvl,] + dfPolygon <- data.frame( + selectedVariable = c(dfSubset$selectedVariable, rev(dfSubset$selectedVariable)), + y = c(dfSubset[[lCi]], rev(dfSubset[[uCi]])) + ) + dfPolygon$separateLines <- lvl + return(dfPolygon) + })) + } else { + dfBands <- data.frame( + selectedVariable = c(dfPlot$selectedVariable, rev(dfPlot$selectedVariable)), + y = c(dfPlot[[lCi]], rev(dfPlot[[uCi]])) + ) + } + + return(dfBands) +} # messages .maFixedEffectTextMessage <- function(options) { diff --git a/R/forestplot.R b/R/forestplot.R index 5e0c00a8..86aa27ac 100644 --- a/R/forestplot.R +++ b/R/forestplot.R @@ -829,7 +829,6 @@ return(list()) } - .maForestPlotMakeRightPannel <- function(options, additionalInformation) { if (!options[["forestPlotStudyInformation"]] && length(additionalInformation) == 0) diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index c1254e58..3be2b5c4 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -323,7 +323,7 @@ Form VariablesForm { - preferredHeight: 250 + preferredHeight: 250 * preferencesModel.uiScale AvailableVariablesList { @@ -383,7 +383,7 @@ Form VariablesForm { - preferredHeight: 250 + preferredHeight: 250 * preferencesModel.uiScale AvailableVariablesList { @@ -576,7 +576,7 @@ Form VariablesForm { - preferredHeight: 250 + preferredHeight: 250 * preferencesModel.uiScale enabled: forestPlotEstimatedMarginalMeans.checked AvailableVariablesList @@ -938,37 +938,152 @@ Form } - MA.ClassicalMetaAnalysisDiagnostics{} - Section { - title: qsTr("Advanced") + title: qsTr("Bubble Plot") - CheckBox + VariablesForm { - name: "weightedEstimation" - text: qsTr("Weighted estimation") - checked: true + preferredHeight: 200 * preferencesModel.uiScale + + AvailableVariablesList + { + name: "bubblePlotModelVariables" + title: qsTr("Model variables") + source: [{ name: "effectSizeModelTerms", use: "noInteraction" }] + } + + AssignedVariablesList + { + name: "bubblePlotSelectedVariable" + title: qsTr("Selected variable") + singleVariable: true + allowTypeChange:false + } + + AssignedVariablesList + { + name: "bubblePlotSeparateLines" + id: bubblePlotSeparateLines + title: qsTr("Separate Lines") + allowTypeChange:false + } + + AssignedVariablesList + { + name: "bubblePlotSeparatePlots" + id: bubblePlotSeparatePlots + title: qsTr("Separate Plots") + allowTypeChange:false + } } Group { - title: qsTr("Clustering") - enabled: clustering.count == 1 + columns: 2 - CheckBox + Group { - name: "clusteringUseClubSandwich" - text: qsTr("Use clubSandwich") - checked: true + DoubleField + { + name: "bubblePlotSdFactorCovariates" + label: qsTr("SD factor covariates") + defaultValue: 1 + min: 0 + enabled: bubblePlotSeparateLines.columnsTypes.includes("scale") || bubblePlotSeparatePlots.columnsTypes.includes("scale") + Layout.preferredWidth: 350 * jaspTheme.uiScale + } + + DropDown + { + name: "bubblePlotBubbleSize" + label: qsTr("Bubble size") + values: [ + { label: qsTr("Weight") , value: "weight"}, + { label: qsTr("Inverse variance") , value: "inverseVariance" }, + { label: qsTr("Equal") , value: "equal" } + ] + } + + DoubleField + { + name: "bubblePlotRelativeBubbleSize" + label: qsTr("Relative bubble size") + } } + Group + { + CheckBox + { + name: "bubblePlotCondifenceIntervals" + label: qsTr("Condifence intervals") + + DoubleField + { + name: "bubblePlotCondifenceIntervalsTransparency" + label: qsTr("Transparency") + defaultValue: 0.30 + min: 0 + max: 1 + inclusive: JASP.None + } + } + + CheckBox + { + name: "bubblePlotPredictionIntervals" + label: qsTr("Prediction intervals") + + DoubleField + { + name: "bubblePlotPredictionIntervalsTransparency" + label: qsTr("Transparency") + defaultValue: 0.10 + min: 0 + max: 1 + inclusive: JASP.None + } + } + } + } + + } + + MA.ClassicalMetaAnalysisDiagnostics{} + + Section + { + title: qsTr("Advanced") + + Group + { CheckBox { - name: "clusteringSmallSampleCorrection" - text: qsTr("Small sample correction") + name: "weightedEstimation" + text: qsTr("Weighted estimation") checked: true } + + Group + { + title: qsTr("Clustering") + enabled: clustering.count == 1 + + CheckBox + { + name: "clusteringUseClubSandwich" + text: qsTr("Use clubSandwich") + checked: true + } + + CheckBox + { + name: "clusteringSmallSampleCorrection" + text: qsTr("Small sample correction") + checked: true + } + } } Group From 352c3003a6d9fd4071f262a4adde91d18c9d8835 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 23 Jun 2024 10:15:12 +0200 Subject: [PATCH 032/127] finish bubble plot --- R/classicalmetaanalysis.R | 12 ++- R/classicalmetaanalysiscommon.R | 163 +++++++++++++++++++++-------- inst/qml/ClassicalMetaAnalysis.qml | 103 +++++++++++++++--- 3 files changed, 219 insertions(+), 59 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 3281e802..b9ab38ac 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -105,12 +105,18 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "bubblePlotSeparateLines", "bubblePlotSeparatePlots", "bubblePlotSdFactorCovariates", - "bubblePlotBubbleSize", - "bubblePlotRelativeBubbleSize", + "bubblePlotBubblesSize", + "bubblePlotBubblesRelativeSize", + "bubblePlotBubblesTransparency", + "bubblePlotBubblesJitter", "bubblePlotCondifenceIntervals", "bubblePlotCondifenceIntervalsTransparency", "bubblePlotPredictionIntervals", - "bubblePlotPredictionIntervalsTransparency" + "bubblePlotPredictionIntervalsTransparency", + "colorPallete", + "bubblePlotTheme", + "bubblePlotLegendPosition", + "bubblePlotRelativeSizeText" ) .maReady <- function(options) { diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index e121bbf3..abe40963 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -15,6 +15,11 @@ # along with this program. If not, see . # +# TODO: +# Bubble plot +# - binning of continuous covariates (requires returning continous levels returned in gridMatrix) +# - allow factors as dependent variables + .ClassicalMetaAnalysisCommon <- function(jaspResults, dataset, options, ...) { .maFitModel(jaspResults, dataset, options) @@ -646,12 +651,17 @@ ))) return() - # try execute! fit <- .maExtractFit(jaspResults, options) + + # stop on error + if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) + return() + + # try execute! out <- try(.maMakeTheUltimateForestPlot(fit, dataset, options)) if (jaspBase::isTryError(out)) { - forestPlot <- createJaspPlot("Forest Plot") + forestPlot <- createJaspPlot(title = gettext("Forest Plot")) forestPlot$position <- 4 forestPlot$dependOn(.maForestPlotDependencies) forestPlot$setError(out) @@ -681,7 +691,7 @@ return() } .maBubblePlot <- function(jaspResults, dataset, options) { -# TODO: effect size transformation, separate plots, legend + if (!is.null(jaspResults[["bubblePlot"]])) return() @@ -690,13 +700,22 @@ fit <- .maExtractFit(jaspResults, options) + # stop on error + if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) + return() + + # set dimensions + width <- if (length(options[["bubblePlotSeparateLines"]]) == 0 || options[["bubblePlotLegendPosition"]] == "none") 450 else 550 + height <- 350 + + # create containers / figure if (length(options[["bubblePlotSeparatePlots"]]) > 0) { - bubblePlotContainer <- createJaspContainer(gettext("Bubble Plots")) + bubblePlotContainer <- createJaspContainer(title = gettext("Bubble Plots")) bubblePlotContainer$dependOn(.maBubblePlotDependencies) bubblePlotContainer$position <- 5 jaspResults[["bubblePlot"]] <- bubblePlotContainer } else { - bubblePlot <- createJaspPlot(gettext("Bubble Plot"), width = 450, height = 350) + bubblePlot <- createJaspPlot(title = gettext("Bubble Plot"), width = width, height = height) bubblePlot$dependOn(.maBubblePlotDependencies) bubblePlot$position <- 5 jaspResults[["bubblePlot"]] <- bubblePlot @@ -709,32 +728,25 @@ tempPlots <- list(.maMakeBubblePlot(fit, options, dfPlot)) } else { tempPlots <- lapply(unique(dfPlot[["separatePlots"]]), function(lvl) { - .maMakeBubblePlot(fit, options, dfPlot[dfPlot[["separatePlots"]] == lvl,]) + .maMakeBubblePlot(fit, options, dfPlot[dfPlot[["separatePlots"]] == lvl,], separatePlotsLvl = lvl) }) } + # modify all generated plots simultaneously yRange <- do.call(rbind, lapply(tempPlots, attr, which = "yRange")) yRange <- c(min(yRange[, 1]), max(yRange[, 2])) yRange <- range(jaspGraphs::getPrettyAxisBreaks(yRange)) tempPlots <- lapply(tempPlots, function(plot) { - plot + jaspGraphs::scale_x_continuous( - name = attr(dfPlot, "selectedVariable"), - breaks = jaspGraphs::getPrettyAxisBreaks(attr(dfPlot, "xRange")), - limits = attr(dfPlot, "xRange") - ) + jaspGraphs::scale_y_continuous( - name = if (options[["transformEffectSize"]] == "none") gettext("Effect Size") else .maGetOptionsNameEffectSizeTransformation(options[["transformEffectSize"]]), - breaks = jaspGraphs::getPrettyAxisBreaks(yRange), - limits = yRange - ) + jaspGraphs::geom_rangeframe() + jaspGraphs::themeJaspRaw() + .maAddBubblePlotTheme(plot, options, dfPlot, yRange) }) if (length(options[["bubblePlotSeparatePlots"]]) > 0) { for (i in seq_along(tempPlots)) { - bubblePlot <- createJaspPlot(gettextf("%1$s (%2$s)", attr(dfPlot, "separatePlots"), unique(dfPlot[["separatePlots"]])[i]), width = 450, height = 350) + bubblePlot <- createJaspPlot(title = gettextf("%1$s (%2$s)", attr(dfPlot, "separatePlots"), unique(dfPlot[["separatePlots"]])[i]), width = width, height = height) bubblePlot$position <- i bubblePlot$plotObject <- tempPlots[[i]] - bubblePlotContainer[[i]] <- bubblePlot + bubblePlotContainer[[paste0("plot", i)]] <- bubblePlot } } else { bubblePlot$plotObject <- tempPlots[[1]] @@ -1374,19 +1386,10 @@ ### modify and rename selectedGrid selectedGrid <- attr(predictorMatrixEffectSize, "selectedGrid") selectedGrid$selectedVariable <- selectedGrid[,selectedVariable] - - if (length(separateLines) == 1) { - selectedGrid$separateLines <- selectedGrid[,separateLines] - } else if (length(separateLines) > 1) { - selectedGrid$separateLines <- apply(selectedGrid[,separateLines], 1, function(x) paste(x, collapse = " | ")) - } - - if (length(separatePlots) == 1) { - selectedGrid$separatePlots <- selectedGrid[,separatePlots] - } else if (length(separatePlots) > 1) { - selectedGrid$separateFigures <- apply(selectedGrid[,separatePlots], 1, function(x) paste(x, collapse = " | ")) - } - + # collapse factor levels if multiple selected + selectedGrid <- .maMergeVariablesLevels(selectedGrid, separateLines, "separateLines") + selectedGrid <- .maMergeVariablesLevels(selectedGrid, separatePlots, "separatePlots") + # remove original names selectedGrid <- selectedGrid[,setdiff(names(selectedGrid), c(selectedVariable, separateLines, separatePlots)),drop = FALSE] ### modify marginal means @@ -1405,12 +1408,13 @@ return(dfPlot) } -.maMakeBubblePlot <- function(fit, options, dfPlot) { +.maMakeBubblePlot <- function(fit, options, dfPlot, separatePlotsLvl = NULL) { bubblePlot <- ggplot2::ggplot() yRange <- NULL hasSeparateLines <- attr(dfPlot, "separateLines") != "" + hasSeparatePlots <- attr(dfPlot, "separatePlots") != "" ### add prediction bads if (options[["bubblePlotPredictionIntervals"]]) { @@ -1421,6 +1425,7 @@ group = if (hasSeparateLines) as.name("separateLines") ) dfPiBands <- .maBubblePlotMakeConfidenceBands(dfPlot, lCi = "lPi", uCi = "uPi") + dfPiBands[["y"]] <- do.call(.maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), list(dfPiBands[["y"]])) geomCall <- list( data = dfPiBands, mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), @@ -1439,6 +1444,7 @@ group = if (hasSeparateLines) as.name("separateLines") ) dfCiBands <- .maBubblePlotMakeConfidenceBands(dfPlot) + dfCiBands[["y"]] <- do.call(.maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), list(dfCiBands[["y"]])) geomCall <- list( data = dfCiBands, mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), @@ -1454,6 +1460,7 @@ y = as.name("y"), color = if (hasSeparateLines) as.name("separateLines") ) + dfPlot[["y"]] <- do.call(.maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), list(dfPlot[["y"]])) geomCall <- list( data = dfPlot, mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]) @@ -1464,29 +1471,40 @@ ### add studies as bubbles dfStudies <- data.frame( effectSize = fit[["yi"]], - inverseVariance = 1/fit[["vi"]], - weight = weights(fit), + inverseVariance = 1/fit[["vi"]] * options[["bubblePlotBubblesRelativeSize"]], + weight = weights(fit) * options[["bubblePlotBubblesRelativeSize"]], + constant = rep(options[["bubblePlotBubblesRelativeSize"]], nrow(fit[["data"]])), selectedVariable = fit[["data"]][[attr(dfPlot, "selectedVariable")]] ) - variablesLines <- attr(dfPlot, "variablesLines") - if (length(variablesLines) == 1) { - dfStudies$separateLines <- fit[["data"]][,variablesLines] - } else if (length(variablesLines) > 1) { - dfStudies$separateLines <- apply(fit[["data"]][,variablesLines], 1, function(x) paste(x, collapse = " | ")) - } + + # add separate lines and plots + if (hasSeparateLines) + dfStudies[attr(dfPlot, "variablesLines")] <- fit[["data"]][attr(dfPlot, "variablesLines")] + if (hasSeparatePlots) + dfStudies[attr(dfPlot, "variablesPlots")] <- fit[["data"]][attr(dfPlot, "variablesPlots")] + + # make same encoding + dfStudies <- .maMergeVariablesLevels(dfStudies, variablesLines <- attr(dfPlot, "variablesLines"), "separateLines") + dfStudies <- .maMergeVariablesLevels(dfStudies, variablesLines <- attr(dfPlot, "variablesPlots"), "separatePlots") + + # subset original data across plots + if (!is.null(separatePlotsLvl)) + dfStudies <- dfStudies[dfStudies$separatePlots == separatePlotsLvl,] aesCall <- list( x = as.name("selectedVariable"), y = as.name("effectSize"), size = switch( - options[["bubblePlotBubbleSize"]], + options[["bubblePlotBubblesSize"]], "weight" = as.name("weight"), "inverseVariance" = as.name("inverseVariance"), "equal" = NULL ), color = if (hasSeparateLines) as.name("separateLines"), - fill = if (hasSeparateLines) as.name("separateLines") + fill = if (hasSeparateLines) as.name("separateLines"), + alpha = options[["bubblePlotBubblesTransparency"]] ) + dfStudies[["effectSize"]] <- do.call(.maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), list(dfStudies[["effectSize"]])) geomCall <- list( data = dfStudies, mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), @@ -1495,11 +1513,64 @@ bubblePlot <- bubblePlot + do.call(jaspGraphs::geom_point, geomCall) yRange <- range(c(yRange, dfStudies[["effectSize"]])) + # add color palette + bubblePlot <- bubblePlot + + jaspGraphs::scale_JASPcolor_discrete(options[["colorPalette"]]) + + jaspGraphs::scale_JASPfill_discrete(options[["colorPalette"]]) attr(bubblePlot, "yRange") <- yRange return(bubblePlot) } +.maAddBubblePlotTheme <- function(plot, options, dfPlot, yRange) { + + plot <- plot + + jaspGraphs::scale_x_continuous( + name = attr(dfPlot, "selectedVariable"), + breaks = jaspGraphs::getPrettyAxisBreaks(attr(dfPlot, "xRange")), + limits = attr(dfPlot, "xRange") + ) + + jaspGraphs::scale_y_continuous( + name = if (options[["transformEffectSize"]] == "none") gettext("Effect Size") else .maGetOptionsNameEffectSizeTransformation(options[["transformEffectSize"]]), + breaks = jaspGraphs::getPrettyAxisBreaks(yRange), + limits = yRange + ) + + ggplot2::labs(fill = attr(dfPlot, "separateLines"), color = attr(dfPlot, "separateLines")) + if (options[["bubblePlotTheme"]] == "jasp") { + + plot <- plot + + jaspGraphs::geom_rangeframe() + + jaspGraphs::themeJaspRaw(legend.position = if (attr(dfPlot, "separateLines") == "") "none" else options[["bubblePlotLegendPosition"]]) + + } else { + + plot <- plot + + switch( + options[["bubblePlotTheme"]], + "whiteBackground" = ggplot2::theme_bw() + ggplot2::theme(legend.position = "bottom"), + "light" = ggplot2::theme_light() + ggplot2::theme(legend.position = "bottom"), + "minimal" = ggplot2::theme_minimal() + ggplot2::theme(legend.position = "bottom"), + "pubr" = jaspGraphs::themePubrRaw(legend = options[["bubblePlotLegendPosition"]]), + "apa" = jaspGraphs::themeApaRaw(legend.pos = switch( + options[["bubblePlotLegendPosition"]], + "none" = "none", + "bottom" = "bottommiddle", + "right" = "bottomright", + "top" = "topmiddle", + "left" = "bottomleft" + )) + ) + + plot <- plot + ggplot2::theme( + legend.text = ggplot2::element_text(size = ggplot2::rel(options[["bubblePlotRelativeSizeText"]])), + legend.title = ggplot2::element_text(size = ggplot2::rel(options[["bubblePlotRelativeSizeText"]])), + axis.text = ggplot2::element_text(size = ggplot2::rel(options[["bubblePlotRelativeSizeText"]])), + axis.title = ggplot2::element_text(size = ggplot2::rel(options[["bubblePlotRelativeSizeText"]])), + legend.position = if (attr(dfPlot, "separateLines") == "") "none" else options[["bubblePlotLegendPosition"]]) + } + + return(plot) +} # check functions .maIsMetaregression <- function(options) { @@ -1590,7 +1661,7 @@ switch( effectSizeTransformation, - none = NULL, + none = function(x) x, fishersZToCorrelation = metafor::transf.ztor, exponential = exp, logOddsToProportions = metafor::transf.logit, @@ -1821,6 +1892,14 @@ return(dfBands) } +.maMergeVariablesLevels <- function(df, variables, mergedName) { + if (length(variables) == 1) { + df[[mergedName]] <- df[,variables] + } else if (length(variables) > 1) { + df[[mergedName]] <- apply(df[,variables], 1, function(x) paste(x, collapse = " | ")) + } + return(df) +} # messages .maFixedEffectTextMessage <- function(options) { diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 3be2b5c4..7f1df0ad 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -956,6 +956,7 @@ Form AssignedVariablesList { name: "bubblePlotSelectedVariable" + id: bubblePlotSelectedVariable title: qsTr("Selected variable") singleVariable: true allowTypeChange:false @@ -991,24 +992,48 @@ Form defaultValue: 1 min: 0 enabled: bubblePlotSeparateLines.columnsTypes.includes("scale") || bubblePlotSeparatePlots.columnsTypes.includes("scale") - Layout.preferredWidth: 350 * jaspTheme.uiScale + Layout.preferredWidth: 300 * jaspTheme.uiScale } - DropDown + Group { - name: "bubblePlotBubbleSize" - label: qsTr("Bubble size") - values: [ - { label: qsTr("Weight") , value: "weight"}, - { label: qsTr("Inverse variance") , value: "inverseVariance" }, - { label: qsTr("Equal") , value: "equal" } - ] - } + title: qsTr("Bubles") - DoubleField - { - name: "bubblePlotRelativeBubbleSize" - label: qsTr("Relative bubble size") + DropDown + { + name: "bubblePlotBubblesSize" + label: qsTr("Size") + values: [ + { label: qsTr("Weight") , value: "weight"}, + { label: qsTr("Inverse variance") , value: "inverseVariance" }, + { label: qsTr("Equal") , value: "equal" } + ] + } + + DoubleField + { + name: "bubblePlotBubblesRelativeSize" + label: qsTr("Relative size") + } + + DoubleField + { + name: "bubblePlotBubblesTransparency" + label: qsTr("Transparency") + defaultValue: 0.90 + min: 0 + max: 1 + inclusive: JASP.None + } + + DoubleField + { + enabled: bubblePlotSelectedVariable.columnsTypes.includes("nominal") + name: "bubblePlotBubblesJitter" + label: qsTr("Jitter") + defaultValue: 0.1 + min: 0 + } } } @@ -1018,6 +1043,7 @@ Form { name: "bubblePlotCondifenceIntervals" label: qsTr("Condifence intervals") + checked: true DoubleField { @@ -1034,6 +1060,7 @@ Form { name: "bubblePlotPredictionIntervals" label: qsTr("Prediction intervals") + checked: true DoubleField { @@ -1046,6 +1073,54 @@ Form } } } + + Group + { + + ColorPalette{} + + DropDown + { + name: "bubblePlotTheme" + id: bubblePlotTheme + label: qsTr("Theme") + startValue: "jasp" + values: + [ + { label: "JASP", value: "jasp"}, + { label: qsTr("White background"), value: "whiteBackground"}, + { label: qsTr("Light"), value: "light"}, + { label: qsTr("Minimal") , value: "minimal"}, + { label: "APA", value: "apa"}, + { label: "pubr", value: "pubr"} + ] + } + + DoubleField + { + enabled: bubblePlotTheme.value != "jasp" + name: "bubblePlotRelativeSizeText" + label: qsTr("Relative text size") + defaultValue: 1.5 + min: 0 + inclusive: JASP.None + } + + DropDown + { + name: "bubblePlotLegendPosition" + label: qsTr("Legend position") + startValue: "right" + values: + [ + { label: qsTr("None"), value: "none"}, + { label: qsTr("Bottom"), value: "bottom"}, + { label: qsTr("Right"), value: "right"}, + { label: qsTr("Top"), value: "top"}, + { label: qsTr("Left"), value: "left"} + ] + } + } } } From 3b516eef787b6971b4e23c2a366f8734f379f901 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 23 Jun 2024 11:14:16 +0200 Subject: [PATCH 033/127] add metafor R code display --- R/classicalmetaanalysiscommon.R | 97 +++++++++++++++++++++++++++++- inst/qml/ClassicalMetaAnalysis.qml | 7 +++ 2 files changed, 103 insertions(+), 1 deletion(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index abe40963..279710ca 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -55,6 +55,11 @@ #.maUltimateForestPlot(jaspResults, dataset, options) .maBubblePlot(jaspResults, dataset, options) + + # additional + if (options[["showMetaforRCode"]]) + .maShowMetaforRCode(jaspResults, options) + return() } @@ -79,7 +84,9 @@ return(as.formula(formula, env = parent.frame(1))) } .maFitModel <- function(jaspResults, dataset, options) { - + # --------------------------------------------------------------------------- # + # when updating don't forget to update the '.maMakeMetaforCallText' function! # + # --------------------------------------------------------------------------- # if (!.maReady(options) || !is.null(jaspResults[["fit"]])) return() @@ -754,6 +761,21 @@ return() } +.maShowMetaforRCode <- function(jaspResults, options) { + + if (!.maReady(options) || !is.null(jaspResults[["metaforRCode"]])) + return() + + metaforRCode <- createJaspHtml(title = gettext("Metafor R Code")) + metaforRCode$dependOn(c(.maDependencies, "showMetaforRCode")) + metaforRCode$position <- 99 + + metaforRCode$text <- .maTransformToHtml(.maMakeMetaforCallText(options)) + + jaspResults[['metaforRCode']] <- metaforRCode + + return() +} # containers/state functions .maExtractFit <- function(jaspResults, options) { @@ -1571,6 +1593,65 @@ return(plot) } +.maMakeMetaforCallText <- function(options) { + + rmaInput <- list( + yi = as.name(options[["effectSize"]]), + sei = as.name(options[["effectSizeStandardError"]]), + data = as.name("dataset") + ) + + # add formulas if specified + rmaInput$mods <- .maGetFormula(options[["effectSizeModelTerms"]], options[["effectSizeModelIncludeIntercept"]]) + rmaInput$scale <- .maGetFormula(options[["heterogeneityModelTerms"]], options[["heterogeneityModelIncludeIntercept"]]) + + # specify method and fixed effect terms test + rmaInput$method <- paste0("'", .maGetMethodOptions(options), "'") + rmaInput$test <- paste0("'", options[["fixedEffectTest"]], "'") + + if (!options[["weightedEstimation"]]) + rmaInput$weighted <- FALSE + + # add fixed parameters if needed + if (options[["fixParametersWeights"]]) + rmaInput$weights <- as.name(options[["fixParametersWeightsVariable"]]) + if (options[["fixParametersTau2"]]) + rmaInput$tau2 <- .maGetFixedTau2Options(options) + + # add link function if needed + if (.maIsMetaregressionHeterogeneity(options)) + rmaInput$link <- paste0("'", options[["heterogeneityModelLink"]], "'") + + # add control options if needed + control <- .maGetControlOptions(options) + if (length(control) != 0) + rmaInput$control <- control + + # additional input + rmaInput$level <- 100 * options[["confidenceIntervalsLevel"]] + + ### fit the model + fit <- paste0("fit <- rma(\n\t", paste(names(rmaInput), "=", rmaInput, collapse = ",\n\t"), "\n)") + + # add clustering if specified + if (options[["clustering"]] != "") { + + robustInput <- list( + cluster = as.name(options[["clustering"]]), + clubSandwich = options[["clusteringUseClubSandwich"]], + adjust = options[["clusteringSmallSampleCorrection"]] + ) + + fit <- paste0( + fit, "\n\n", + "fit <- robust(\n", + "\tfit,\n\t", + paste(names(robustInput), "=", robustInput, collapse = ",\n\t"), "\n)" + ) + } + + return(fit) +} # check functions .maIsMetaregression <- function(options) { @@ -1900,6 +1981,20 @@ } return(df) } +.maTransformToHtml <- function(rCode) { + + # Replace special characters with HTML entities + htmlCode <- gsub("&", "&", rCode) + htmlCode <- gsub("<", "<", htmlCode) + htmlCode <- gsub(">", ">", htmlCode) + + # Wrap the code in
 and  tags
+  htmlCode <- paste0(
+    "
", htmlCode, "\n
" + ) + + return(htmlCode) +} # messages .maFixedEffectTextMessage <- function(options) { diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 7f1df0ad..c3f66f10 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -1133,6 +1133,13 @@ Form Group { + + CheckBox + { + name: "showMetaforRCode" + text: qsTr("Show metafor R code") + } + CheckBox { name: "weightedEstimation" From 4b9d35d4a478fc426d1c69f78acfd9ad37e4c5f3 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 23 Jun 2024 12:16:30 +0200 Subject: [PATCH 034/127] forest plot fixes --- R/classicalmetaanalysiscommon.R | 22 ++++++++++++++-------- R/forestplot.R | 17 +++++++++-------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 279710ca..53d8ee4f 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -16,9 +16,15 @@ # # TODO: +# Estimated Marginal Means +# - add variable interactions +# - specify and test contrasts # Bubble plot # - binning of continuous covariates (requires returning continous levels returned in gridMatrix) # - allow factors as dependent variables +# AIC/BIC Model-averaging +# Generic +# - allow different covariates factoring across all settings .ClassicalMetaAnalysisCommon <- function(jaspResults, dataset, options, ...) { @@ -52,7 +58,7 @@ .maEstimatedMarginalMeansTable(jaspResults, dataset, options, "heterogeneity") # plots - #.maUltimateForestPlot(jaspResults, dataset, options) + .maUltimateForestPlot(jaspResults, dataset, options) .maBubblePlot(jaspResults, dataset, options) @@ -665,34 +671,34 @@ return() # try execute! - out <- try(.maMakeTheUltimateForestPlot(fit, dataset, options)) + plotOut <- try(.maMakeTheUltimateForestPlot(fit, dataset, options)) - if (jaspBase::isTryError(out)) { + if (jaspBase::isTryError(plotOut)) { forestPlot <- createJaspPlot(title = gettext("Forest Plot")) forestPlot$position <- 4 forestPlot$dependOn(.maForestPlotDependencies) - forestPlot$setError(out) + forestPlot$setError(plotOut) jaspResults[["forestPlot"]] <- forestPlot return() } # try adjusting height and width - height <- (attr(out, "rows") + 3) * 40 - if (attr(out, "isPanel")) + height <- 200 + (attr(plotOut, "rows")) * 10 + if (!attr(plotOut, "isPanel")) width <- 500 else - width <- 500 + 500 * attr(out, "panelRatio") + width <- 500 + 500 * attr(plotOut, "panelRatio") attr(plotOut, "nCharsLeft") + attr(plotOut, "nCharsRight") forestPlot <- createJaspPlot( - plot = out, title = gettext("Forest Plot"), width = width, height = height ) forestPlot$position <- 4 forestPlot$dependOn(.maForestPlotDependencies) + forestPlot$plotObject <- plotOut jaspResults[["forestPlot"]] <- forestPlot return() diff --git a/R/forestplot.R b/R/forestplot.R index 86aa27ac..4b6477f5 100644 --- a/R/forestplot.R +++ b/R/forestplot.R @@ -96,7 +96,9 @@ ### Estimated marginal means panel ---- ### compute and add marginal estimates - if (options[["forestPlotEstimatedMarginalMeans"]]) { + if (options[["forestPlotEstimatedMarginalMeans"]] && ( + length(options[["forestPlotEstimatedMarginalMeansSelectedVariables"]]) > 0 || options[["forestPlotEstimatedMarginalMeansAdjustedEffectSizeEstimate"]] + )) { # terms and levels information estimatedMarginalMeansTestsStaistics <- options[["forestPlotAuxiliaryTestsInformation"]] == "statisticAndPValue" @@ -342,7 +344,6 @@ } } - } @@ -648,7 +649,7 @@ ### tests and weights right panel rightPanelTestsAndWeights <- rbind( - if (options[["forestPlotStudyInformation"]] && length(options[["forestPlotStudyInformationSelectedVariablesSettings"]]) > 0 && options[["forestPlotStudyInformationStudyWeights"]]) { + if (options[["forestPlotStudyInformation"]] > 0 && options[["forestPlotStudyInformationStudyWeights"]]) { tempDf <- dfForrest[,c("y", "weights")] tempDf$label <- paste0(sprintf(paste0("%1$.", options[["forestPlotAuxiliaryDigits"]], "f"), tempDf$weights), " %") tempDf[,c("y", "label")] @@ -660,7 +661,7 @@ } ) rightPanelTestsAndWeights <- rightPanelTestsAndWeights[rightPanelTestsAndWeights$label != "",] - if (nrow(rightPanelTestsAndWeights) == 0) + if (length(rightPanelTestsAndWeights) == 0 || nrow(rightPanelTestsAndWeights) == 0) rightPanelTestsAndWeights <- NULL ### compute the total character width @@ -792,8 +793,8 @@ if (!is.null(plotRight)) options[["forestPlotRelativeSizeRightPanel"]] ) if (options[["forestPlotAuxiliaryAdjustWidthBasedOnText"]] && length(plotsWidths) == 3) { - plotsWidths[1] <- plotsWidths[1] * maxCharsLeft / maxCharsRight - plotsWidths[3] <- plotsWidths[3] * maxCharsRight / maxCharsLeft + plotsWidths[1] <- plotsWidths[1] * 2 * maxCharsLeft / (maxCharsRight + maxCharsLeft) + plotsWidths[3] <- plotsWidths[3] * 2 * maxCharsRight / (maxCharsRight + maxCharsLeft) } # compute ratio of main panel to side panels if (length(plotsWidths) != 1) { @@ -816,7 +817,7 @@ plotsCall <- c(plotsCall, list(plotRight)) plotsCall$widths <- plotsWidths plotsCall$nrow <- 1 - plotOut <- do.call(gridExtra::grid.arrange, plotsCall) + plotOut <- do.call(gridExtra::arrangeGrob, plotsCall) # plotOut <- jaspGraphsPlot$new(subplots = list( # if (!is.null(plotLeft)) plotLeft, # plotForest, @@ -827,7 +828,7 @@ attr(plotOut, "rows") <- tempRow + if(!is.null(dfForrest)) max(dfForrest$row) else 0 } - return(list()) + return(plotOut) } .maForestPlotMakeRightPannel <- function(options, additionalInformation) { From 089880806fe13f6f8366c90b7bca3f859d99e1ce Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 23 Jun 2024 13:22:25 +0200 Subject: [PATCH 035/127] add VIF --- R/classicalmetaanalysiscommon.R | 107 +++++++ inst/qml/ClassicalMetaAnalysis.qml | 462 ++++++++++++++++------------- 2 files changed, 361 insertions(+), 208 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 53d8ee4f..d4742111 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -61,6 +61,11 @@ .maUltimateForestPlot(jaspResults, dataset, options) .maBubblePlot(jaspResults, dataset, options) + # diagnostics + if (.maIsMetaregression(options) && options[["diagnosticsVarianceInflationFactor"]]) { + .maVarianceInflationTable(jaspResults, dataset, options, "effectSize") + .maVarianceInflationTable(jaspResults, dataset, options, "heterogeneity") + } # additional if (options[["showMetaforRCode"]]) @@ -782,6 +787,44 @@ return() } +.maVarianceInflationTable <- function(jaspResults, dataset, options, parameter = "effectSize") { + + varianceInflationContainer <- .maExtractVarianceInflationContainer(jaspResults) + + if (!is.null(varianceInflationContainer[[parameter]])) + return() + + if (parameter == "heterogeneity" && !.maIsMetaregressionHeterogeneity(options)) + return() + + fit <- .maExtractFit(jaspResults, options) + + termsTable <- createJaspTable(switch( + parameter, + effectSize = gettext("Effect Size Meta-Regression Variance Inflation"), + heterogeneity = gettext("Heterogeneity Meta-Regression Variance Inflation") + )) + termsTable$position <- switch( + parameter, + effectSize = 1, + heterogeneity = 2 + ) + varianceInflationContainer[[parameter]] <- termsTable + + termsTable$addColumnInfo(name = "term", type = "string", title = "") + if (options[["diagnosticsVarianceInflationFactorAggregate"]]) + termsTable$addColumnInfo(name = "m", type = "integer", title = gettext("Parameters")) + + termsTable$addColumnInfo(name = "vif", type = "number", title = gettext("VIF")) + termsTable$addColumnInfo(name = "sif", type = "number", title = gettext("SIF")) + + if (is.null(fit) || jaspBase::isTryError(fit)) + return() + + termsTable$setData(.maComputeVifSummary(fit, options, parameter)) + + return() +} # containers/state functions .maExtractFit <- function(jaspResults, options) { @@ -835,6 +878,19 @@ return(estimatedMarginalMeansContainer) } +.maExtractVarianceInflationContainer <- function(jaspResults) { + + if (!is.null(jaspResults[["varianceInflationContainer"]])) + return(jaspResults[["varianceInflationContainer"]]) + + # create the output container + varianceInflationContainer <- createJaspContainer(gettext("Variance Inflation Summary")) + varianceInflationContainer$dependOn(c(.maDependencies, "diagnosticsVarianceInflationFactor", "diagnosticsVarianceInflationFactorAggregate")) + varianceInflationContainer$position <- 6 + jaspResults[["varianceInflationContainer"]] <- varianceInflationContainer + + return(varianceInflationContainer) +} # help compute functions .maComputePooledEffect <- function(fit, options) { @@ -1658,6 +1714,39 @@ return(fit) } +.maComputeVifSummary <- function(fit, options, parameter = "effectSize") { + + if (options[["diagnosticsVarianceInflationFactorAggregate"]]) { + + # obtain terms indicies + if (parameter == "effectSize") { + terms <- attr(terms(fit[["formula.mods"]], data = fit[["data"]]),"term.labels") + termsIndex <- attr(model.matrix(fit[["formula.mods"]], data = fit[["data"]]), "assign") + tableVif <- do.call(rbind, lapply(seq_along(terms), function(i) { + cbind.data.frame( + term = terms[i], + .maExtractVifResults(metafor::vif(fit, btt = seq_along(termsIndex)[termsIndex == i]), options, parameter) + ) + })) + } else if (parameter == "heterogeneity") { + terms <- attr(terms(fit[["formula.scale"]], data = fit[["data"]]),"term.labels") + termsIndex <- attr(model.matrix(fit[["formula.scale"]], data = fit[["data"]]), "assign") + tableVif <- do.call(rbind, lapply(seq_along(terms), function(i) { + cbind.data.frame( + term = terms[i], + .maExtractVifResults(metafor::vif(fit, att = seq_along(termsIndex)[termsIndex == i]), options, parameter) + ) + })) + } + + } else { + + tableVif <- .maExtractVifResults(metafor::vif(fit), options, parameter) + tableVif$term <- .maVariableNames(rownames(tableVif), options[["predictors"]]) + } + + return(tableVif) +} # check functions .maIsMetaregression <- function(options) { @@ -2001,6 +2090,24 @@ return(htmlCode) } +.maExtractVifResults <- function(vifResults, options, parameter) { + + if (.maIsMetaregressionHeterogeneity(options)) + vifResults <- vifResults[[switch( + parameter, + "effectSize" = "beta", + "heterogeneity" = "alpha" + )]] + + vifResults <- data.frame(vifResults) + + if (options[["diagnosticsVarianceInflationFactorAggregate"]]) + vifResults <- vifResults[,c("m", "vif", "sif"),drop = FALSE] + else + vifResults <- vifResults[,c("vif", "sif"),drop = FALSE] + + return(vifResults) +} # messages .maFixedEffectTextMessage <- function(options) { diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index c3f66f10..83ac0090 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -1125,285 +1125,331 @@ Form } - MA.ClassicalMetaAnalysisDiagnostics{} - Section { - title: qsTr("Advanced") + title: qsTr("Diagnostics") + columns: 1 Group { - - CheckBox - { - name: "showMetaforRCode" - text: qsTr("Show metafor R code") - } - - CheckBox - { - name: "weightedEstimation" - text: qsTr("Weighted estimation") - checked: true - } + columns: 2 Group { - title: qsTr("Clustering") - enabled: clustering.count == 1 - CheckBox { - name: "clusteringUseClubSandwich" - text: qsTr("Use clubSandwich") - checked: true + name: "diagnosticsVarianceInflationFactor" + text: qsTr("Variace inflation factor") + Layout.preferredWidth: 300 * jaspTheme.uiScale + enabled: predictors.count > 0 + + CheckBox + { + name: "diagnosticsVarianceInflationFactorAggregate" + text: qsTr("Aggregate by terms") + checked: true + } } CheckBox { - name: "clusteringSmallSampleCorrection" - text: qsTr("Small sample correction") - checked: true + name: "diagnosticsCaseWiseDiagnostics" + text: qsTr("Case wise diagnostics") } } + + CheckBox + { + name: "diagnosticsProfilePlot" + text: qsTr("Profile plot") + } } + } + + Section + { + title: qsTr("Advanced") + columns: 1 Group { - title: qsTr("Fix Parameters") + columns: 2 - CheckBox + Group { - name: "fixParametersTau2" - text: qsTr("𝜏²") - enabled: heterogeneityModelTerms.count == 0 - childrenOnSameRow: true - FormulaField + CheckBox { - label: "" - name: "fixParametersTau2Value" - value: "1" - min: 0 - inclusive: JASP.None + name: "showMetaforRCode" + text: qsTr("Show metafor R code") + Layout.preferredWidth: 300 * jaspTheme.uiScale } - } - - CheckBox - { - name: "fixParametersWeights" - text: qsTr("Weights") - childrenOnSameRow: true - DropDown + CheckBox { - label: "" - name: "fixParametersWeightsVariable" - source: "allVariables" + name: "weightedEstimation" + text: qsTr("Weighted estimation") + checked: true } - } - } - Group - { - title: qsTr("Add Omibus Moderator Test") - enabled: effectSizeModelTerms.count > 0 || heterogeneityModelTerms.count > 0 + Group + { + title: qsTr("Clustering") + enabled: clustering.count == 1 - CheckBox - { - text: qsTr("Effect size coefficients") - name: "addOmnibusModeratorTestEffectSizeCoefficients" - enabled: effectSizeModelTerms.count > 0 - childrenOnSameRow: false + CheckBox + { + name: "clusteringUseClubSandwich" + text: qsTr("Use clubSandwich") + checked: true + } - TextField - { - label: "" - name: "addOmnibusModeratorTestEffectSizeCoefficientsValues" - value: "c(1, 2)" + CheckBox + { + name: "clusteringSmallSampleCorrection" + text: qsTr("Small sample correction") + checked: true + } } } - CheckBox + Group { - text: qsTr("Heterogeneity coefficients") - name: "addOmnibusModeratorTestHeterogeneityCoefficients" - enabled: heterogeneityModelTerms.count > 0 - childrenOnSameRow: false + title: qsTr("Fix Parameters") - TextField + CheckBox { - label: "" - name: "addOmnibusModeratorTestHeterogeneityCoefficientsValues" - value: "c(1, 2)" + name: "fixParametersTau2" + text: qsTr("𝜏²") + enabled: heterogeneityModelTerms.count == 0 + childrenOnSameRow: true + + FormulaField + { + label: "" + name: "fixParametersTau2Value" + value: "1" + min: 0 + inclusive: JASP.None + } } - } - } - Group - { - title: qsTr("Optimizer") - enabled: method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || - method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu" || - method.value == "sidikJonkman" + CheckBox + { + name: "fixParametersWeights" + text: qsTr("Weights") + childrenOnSameRow: true - DropDown - { - name: "optimizerMethod" - label: qsTr("Method") // TODO: switch default value on heterogeneityModelLink change - values: { - if (heterogeneityModelLink.value == "log") - ["nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] - else - ["constrOptim", "nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] - } - visible: heterogeneityModelTerms.count > 0 + DropDown + { + label: "" + name: "fixParametersWeightsVariable" + source: "allVariables" + } + } } - CheckBox + Group { - name: "optimizerInitialTau2" - text: qsTr("Initial 𝜏²") - checked: false - childrenOnSameRow: true - visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || - method.value == "sidikJonkman") && heterogeneityModelTerms.count == 0 + title: qsTr("Add Omibus Moderator Test") + enabled: effectSizeModelTerms.count > 0 || heterogeneityModelTerms.count > 0 - DoubleField + CheckBox { - label: "" - name: "optimizerInitialTau2Value" - defaultValue: 1 - min: 0 - inclusive: JASP.None - } - } + text: qsTr("Effect size coefficients") + name: "addOmnibusModeratorTestEffectSizeCoefficients" + enabled: effectSizeModelTerms.count > 0 + childrenOnSameRow: false - CheckBox - { - name: "optimizerMinimumTau2" - text: qsTr("Minimum 𝜏²") - checked: false - childrenOnSameRow: true - visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && - heterogeneityModelTerms.count == 0 + TextField + { + label: "" + name: "addOmnibusModeratorTestEffectSizeCoefficientsValues" + value: "c(1, 2)" + } + } - DoubleField + CheckBox { - label: "" - name: "optimizerMinimumTau2Value" - id: optimizerMinimumTau2Value - defaultValue: 1e-6 - min: 0 - max: optimizerMaximumTau2Value.value + text: qsTr("Heterogeneity coefficients") + name: "addOmnibusModeratorTestHeterogeneityCoefficients" + enabled: heterogeneityModelTerms.count > 0 + childrenOnSameRow: false + + TextField + { + label: "" + name: "addOmnibusModeratorTestHeterogeneityCoefficientsValues" + value: "c(1, 2)" + } } } - CheckBox + Group { - name: "optimizerMaximumTau2" - text: qsTr("Maximum 𝜏²") - checked: false - childrenOnSameRow: true - visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && - heterogeneityModelTerms.count == 0 + title: qsTr("Optimizer") + enabled: method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu" || + method.value == "sidikJonkman" - DoubleField + DropDown { - label: "" - name: "optimizerMaximumTau2Value" - id: optimizerMaximumTau2Value - defaultValue: 100 - min: optimizerMinimumTau2Value.value - inclusive: JASP.None + name: "optimizerMethod" + label: qsTr("Method") // TODO: switch default value on heterogeneityModelLink change + values: { + if (heterogeneityModelLink.value == "log") + ["nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] + else + ["constrOptim", "nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] + } + visible: heterogeneityModelTerms.count > 0 } - } - - CheckBox - { - name: "optimizerMaximumIterations" - text: qsTr("Maximum iterations") - checked: false - childrenOnSameRow: true - visible: method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || - method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu" - IntegerField + CheckBox { - label: "" - name: "optimizerMaximumIterationsValue" - value: { - if (heterogeneityModelTerms.count == 0) - 100 - else - 1000 + name: "optimizerInitialTau2" + text: qsTr("Initial 𝜏²") + checked: false + childrenOnSameRow: true + visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + method.value == "sidikJonkman") && heterogeneityModelTerms.count == 0 + + DoubleField + { + label: "" + name: "optimizerInitialTau2Value" + defaultValue: 1 + min: 0 + inclusive: JASP.None } - min: 1 - inclusive: JASP.None } - } - CheckBox - { - name: "optimizerConvergenceTolerance" - text: qsTr("Convergence tolerance") - checked: false - childrenOnSameRow: true - visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || - method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && - heterogeneityModelTerms.count == 0 + CheckBox + { + name: "optimizerMinimumTau2" + text: qsTr("Minimum 𝜏²") + checked: false + childrenOnSameRow: true + visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && + heterogeneityModelTerms.count == 0 - DoubleField + DoubleField + { + label: "" + name: "optimizerMinimumTau2Value" + id: optimizerMinimumTau2Value + defaultValue: 1e-6 + min: 0 + max: optimizerMaximumTau2Value.value + } + } + + CheckBox { - label: "" - name: "optimizerConvergenceToleranceValue" - defaultValue: { - if (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") - 1e-5 - else if (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") - 1e-4 - else - 1 + name: "optimizerMaximumTau2" + text: qsTr("Maximum 𝜏²") + checked: false + childrenOnSameRow: true + visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && + heterogeneityModelTerms.count == 0 + + DoubleField + { + label: "" + name: "optimizerMaximumTau2Value" + id: optimizerMaximumTau2Value + defaultValue: 100 + min: optimizerMinimumTau2Value.value + inclusive: JASP.None } - min: 0 - inclusive: JASP.None } - } - CheckBox - { - name: "optimizerConvergenceRelativeTolerance" - text: qsTr("Convergence relative tolerance") - checked: false - childrenOnSameRow: true - visible: heterogeneityModelTerms.count > 0 + CheckBox + { + name: "optimizerMaximumIterations" + text: qsTr("Maximum iterations") + checked: false + childrenOnSameRow: true + visible: method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu" - DoubleField + IntegerField + { + label: "" + name: "optimizerMaximumIterationsValue" + value: { + if (heterogeneityModelTerms.count == 0) + 100 + else + 1000 + } + min: 1 + inclusive: JASP.None + } + } + + CheckBox { - label: "" - name: "optimizerConvergenceRelativeToleranceValue" - defaultValue: 1e-8 - min: 0 - inclusive: JASP.None + name: "optimizerConvergenceTolerance" + text: qsTr("Convergence tolerance") + checked: false + childrenOnSameRow: true + visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && + heterogeneityModelTerms.count == 0 + + DoubleField + { + label: "" + name: "optimizerConvergenceToleranceValue" + defaultValue: { + if (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") + 1e-5 + else if (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") + 1e-4 + else + 1 + } + min: 0 + inclusive: JASP.None + } } - } - CheckBox - { - name: "optimizerStepAdjustment" - text: qsTr("Step adjustment") - checked: false - childrenOnSameRow: true - visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") && - heterogeneityModelTerms.count == 0 + CheckBox + { + name: "optimizerConvergenceRelativeTolerance" + text: qsTr("Convergence relative tolerance") + checked: false + childrenOnSameRow: true + visible: heterogeneityModelTerms.count > 0 - DoubleField + DoubleField + { + label: "" + name: "optimizerConvergenceRelativeToleranceValue" + defaultValue: 1e-8 + min: 0 + inclusive: JASP.None + } + } + + CheckBox { - label: "" - name: "optimizerStepAdjustmentValue" - defaultValue: 1 - min: 0 - inclusive: JASP.None + name: "optimizerStepAdjustment" + text: qsTr("Step adjustment") + checked: false + childrenOnSameRow: true + visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") && + heterogeneityModelTerms.count == 0 + + DoubleField + { + label: "" + name: "optimizerStepAdjustmentValue" + defaultValue: 1 + min: 0 + inclusive: JASP.None + } } } } From 9d0463e45e5e32b882b9c2afa70973a779fed647 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 23 Jun 2024 14:03:54 +0200 Subject: [PATCH 036/127] fix sizing --- R/classicalmetaanalysis.R | 2 +- R/classicalmetaanalysiscommon.R | 38 ++++++++++++++++++++---------- inst/qml/ClassicalMetaAnalysis.qml | 7 ++++-- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index b9ab38ac..6572491f 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -113,7 +113,7 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "bubblePlotCondifenceIntervalsTransparency", "bubblePlotPredictionIntervals", "bubblePlotPredictionIntervalsTransparency", - "colorPallete", + "colorPalette", "bubblePlotTheme", "bubblePlotLegendPosition", "bubblePlotRelativeSizeText" diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index d4742111..ffbb8f1b 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -1185,21 +1185,33 @@ terms <- attr(terms(fit[["formula.mods"]], data = fit[["data"]]),"term.labels") termsIndex <- attr(model.matrix(fit[["formula.mods"]], data = fit[["data"]]), "assign") termsAnova <- anova(fit, btt = seq_along(termsIndex)[termsIndex == which(terms == term)]) + + out <- list( + term = .maVariableNames(term, options[["predictors"]]), + stat = termsAnova[["QM"]], + df1 = termsAnova[["QMdf"]][1], + pval = termsAnova[["QMp"]] + ) + + if (.maIsMetaregressionFtest(options)) + out$df2 <- termsAnova[["QMdf"]][2] + } else if (parameter == "heterogeneity") { terms <- attr(terms(fit[["formula.scale"]], data = fit[["data"]]),"term.labels") termsIndex <- attr(model.matrix(fit[["formula.scale"]], data = fit[["data"]]), "assign") termsAnova <- anova(fit, att = seq_along(termsIndex)[termsIndex == which(terms == term)]) - } - out <- list( - term = .maVariableNames(term, options[["predictors"]]), - stat = termsAnova[["QM"]], - df1 = termsAnova[["QMdf"]][1], - pval = termsAnova[["QMp"]] - ) + out <- list( + term = .maVariableNames(term, options[["predictors"]]), + stat = termsAnova[["QS"]], + df1 = termsAnova[["QSdf"]][1], + pval = termsAnova[["QSp"]] + ) - if (.maIsMetaregressionFtest(options)) - out$df2 <- termsAnova[["QMdf"]][2] + if (.maIsMetaregressionFtest(options)) + out$df2 <- termsAnova[["QSdf"]][2] + + } return(out) } @@ -1555,8 +1567,8 @@ ### add studies as bubbles dfStudies <- data.frame( effectSize = fit[["yi"]], - inverseVariance = 1/fit[["vi"]] * options[["bubblePlotBubblesRelativeSize"]], - weight = weights(fit) * options[["bubblePlotBubblesRelativeSize"]], + inverseVariance = 1/fit[["vi"]], + weight = weights(fit), constant = rep(options[["bubblePlotBubblesRelativeSize"]], nrow(fit[["data"]])), selectedVariable = fit[["data"]][[attr(dfPlot, "selectedVariable")]] ) @@ -1582,7 +1594,7 @@ options[["bubblePlotBubblesSize"]], "weight" = as.name("weight"), "inverseVariance" = as.name("inverseVariance"), - "equal" = NULL + "equal" = as.name("constant") ), color = if (hasSeparateLines) as.name("separateLines"), fill = if (hasSeparateLines) as.name("separateLines"), @@ -1594,7 +1606,7 @@ mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), show.legend = FALSE ) - bubblePlot <- bubblePlot + do.call(jaspGraphs::geom_point, geomCall) + bubblePlot <- bubblePlot + do.call(jaspGraphs::geom_point, geomCall) + ggplot2::scale_size(range = c(1, 6 * options[["bubblePlotBubblesRelativeSize"]])) yRange <- range(c(yRange, dfStudies[["effectSize"]])) # add color palette diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 83ac0090..37505016 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -1012,8 +1012,11 @@ Form DoubleField { - name: "bubblePlotBubblesRelativeSize" - label: qsTr("Relative size") + name: "bubblePlotBubblesRelativeSize" + label: qsTr("Relative size") + defaultValue: 1 + min: 0 + inclusive: JASP.None } DoubleField From 77d764a842689894a9ae593b20b07f564c142f57 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 23 Jun 2024 14:27:37 +0200 Subject: [PATCH 037/127] fixes --- R/classicalmetaanalysiscommon.R | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index ffbb8f1b..34162f86 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -347,17 +347,26 @@ modelSummaryContainer[["fitMeasuresTable"]] <- fitMeasuresTable - fitMeasuresTable$addColumnInfo(name = "ll", title = gettext("Log Lik."), type = "number") - fitMeasuresTable$addColumnInfo(name = "dev", title = gettext("Deviance"), type = "number") - fitMeasuresTable$addColumnInfo(name = "AIC", title = gettext("AIC"), type = "number") - fitMeasuresTable$addColumnInfo(name = "BIC", title = gettext("BIC"), type = "number") - fitMeasuresTable$addColumnInfo(name = "AICc", title = gettext("AICc"), type = "number") + fitMeasuresTable$addColumnInfo(name = "model", title = "", type = "string") + fitMeasuresTable$addColumnInfo(name = "ll", title = gettext("Log Lik."), type = "number") + fitMeasuresTable$addColumnInfo(name = "dev", title = gettext("Deviance"), type = "number") + fitMeasuresTable$addColumnInfo(name = "AIC", title = gettext("AIC"), type = "number") + fitMeasuresTable$addColumnInfo(name = "BIC", title = gettext("BIC"), type = "number") + fitMeasuresTable$addColumnInfo(name = "AICc", title = gettext("AICc"), type = "number") + + if (.maIsMetaregressionEffectSize(options)) + fitMeasuresTable$addColumnInfo(name = "R2", title = gettext("R\U00B2"), type = "number") # stop on error if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) return() - fitMeasuresTable$setData(t(fit[["fit.stats"]])) + fitSummary <- cbind("model" = colnames(fit[["fit.stats"]]), data.frame(t(fit[["fit.stats"]]))) + + if (.maIsMetaregressionEffectSize(options)) + fitSummary$R2 <- fit[["R2"]] + + fitMeasuresTable$setData(fitSummary) return() } @@ -1489,6 +1498,10 @@ selectedGrid <- selectedGrid[,setdiff(names(selectedGrid), c(selectedVariable, separateLines, separatePlots)),drop = FALSE] ### modify marginal means + if (.maGetMethodOptions(options) %in% c("EE", "FE")) { + computedMarginalMeans$pi.lb <- computedMarginalMeans$ci.lb + computedMarginalMeans$pi.ub <- computedMarginalMeans$ci.ub + } computedMarginalMeans <- data.frame(computedMarginalMeans) colnames(computedMarginalMeans) <- c("y", "se", "lCi", "uCi", "lPi", "uPi") @@ -1606,7 +1619,8 @@ mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), show.legend = FALSE ) - bubblePlot <- bubblePlot + do.call(jaspGraphs::geom_point, geomCall) + ggplot2::scale_size(range = c(1, 6 * options[["bubblePlotBubblesRelativeSize"]])) + bubblePlot <- bubblePlot + do.call(jaspGraphs::geom_point, geomCall) + + ggplot2::scale_size(range = c(1.5, 10) * options[["bubblePlotBubblesRelativeSize"]]) yRange <- range(c(yRange, dfStudies[["effectSize"]])) # add color palette From c882b40f3fd28a14e76dea714a9fa1b0ee8630ff Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 23 Jun 2024 21:33:10 +0200 Subject: [PATCH 038/127] add diagnostics --- R/classicalmetaanalysis.R | 14 +- R/classicalmetaanalysiscommon.R | 254 +++++++++++++++++++++++++++-- inst/qml/ClassicalMetaAnalysis.qml | 53 +++++- 3 files changed, 302 insertions(+), 19 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 6572491f..ffe88f65 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -48,7 +48,8 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "optimizerMethod", "optimizerInitialTau2", "optimizerInitialTau2Value", "optimizerMinimumTau2", "optimizerMinimumTau2Value", "optimizerMaximumTau2", "optimizerMaximumTau2Value", "optimizerMaximumIterations", "optimizerMaximumIterationsValue", "optimizerConvergenceTolerance", "optimizerConvergenceToleranceValue", - "optimizerConvergenceRelativeTolerance", "optimizerConvergenceRelativeToleranceValue", "optimizerStepAdjustment", "optimizerStepAdjustmentValue" + "optimizerConvergenceRelativeTolerance", "optimizerConvergenceRelativeToleranceValue", "optimizerStepAdjustment", "optimizerStepAdjustmentValue", + "diagnosticsCasewiseDiagnosticsRerunWithoutInfluentialCases" ) .maForestPlotDependencies <- c( .maDependencies, "transformEffectSize", "confidenceIntervalsLevel", @@ -136,15 +137,16 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { predictorsScale <- options[["predictors"]][options[["predictors.types"]] == "scale"] # forest plotting data - forestPlotVariables <- c( + additionalVariables <- c( if (length(options[["forestPlotStudyInformationSelectedVariables"]]) > 0) unlist(options[["forestPlotStudyInformationSelectedVariables"]]), if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]], - if (options[["forestPlotStudyInformationOrderBy"]] != "") options[["forestPlotStudyInformationOrderBy"]] + if (options[["forestPlotStudyInformationOrderBy"]] != "") options[["forestPlotStudyInformationOrderBy"]], + if (options[["diagnosticsCasewiseDiagnosticsIncludeLabelVariable"]] != "") options[["diagnosticsCasewiseDiagnosticsIncludeLabelVariable"]] ) # remove variables already specified in the model - forestPlotVariables <- setdiff( - forestPlotVariables, + additionalVariables <- setdiff( + additionalVariables, c(predictorsNominal, predictorsScale, options[["effectSize"]], options[["effectSizeStandardError"]], options[["clustering"]]) ) @@ -154,7 +156,7 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { columns.as.factor = c( if (length(predictorsNominal) > 0) predictorsNominal, if (options[["clustering"]] != "") options[["clustering"]], - forestPlotVariables + additionalVariables ), columns.as.numeric = c( options[["effectSize"]], diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 34162f86..90748b41 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -28,8 +28,15 @@ .ClassicalMetaAnalysisCommon <- function(jaspResults, dataset, options, ...) { + # fit the model .maFitModel(jaspResults, dataset, options) + # # remove influential observations and refit the model if requested + # if (options[["diagnosticsCasewiseDiagnostics"]] && options[["diagnosticsCasewiseDiagnosticsRerunWithoutInfluentialCases"]]) { + # dataset <- .maRemoveInfluentialObservations(jaspResults, dataset, options) + # .maFitModel(jaspResults, dataset, options, objectName = "fitNoInfluence") + # } + # model summary .maResidualHeterogeneityTable(jaspResults, dataset, options) .maModeratorsTable(jaspResults, dataset, options) @@ -66,6 +73,11 @@ .maVarianceInflationTable(jaspResults, dataset, options, "effectSize") .maVarianceInflationTable(jaspResults, dataset, options, "heterogeneity") } + if (options[["diagnosticsCasewiseDiagnostics"]]) { + .maCasewiseDiagnosticsTable(jaspResults, dataset, options) + .maCasewiseDiagnosticsExportColumns(jaspResults, dataset, options) + } + # additional if (options[["showMetaforRCode"]]) @@ -75,7 +87,7 @@ } # fitting functions -.maGetFormula <- function(modelTerms, includeIntercept) { +.maGetFormula <- function(modelTerms, includeIntercept) { predictors <- unlist(lapply(modelTerms, function(x) { if (length(x[["components"]]) > 1) @@ -94,17 +106,17 @@ return(as.formula(formula, env = parent.frame(1))) } -.maFitModel <- function(jaspResults, dataset, options) { +.maFitModel <- function(jaspResults, dataset, options, objectName = "fit") { # --------------------------------------------------------------------------- # # when updating don't forget to update the '.maMakeMetaforCallText' function! # # --------------------------------------------------------------------------- # - if (!.maReady(options) || !is.null(jaspResults[["fit"]])) + if (!.maReady(options) || !is.null(jaspResults[[objectName]])) return() # create the output container fitContainer <- createJaspState() fitContainer$dependOn(.maDependencies) - jaspResults[["fit"]] <- fitContainer + jaspResults[[objectName]] <- fitContainer # specify the effect size and outcome rmaInput <- list( @@ -158,13 +170,35 @@ } # return the results - jaspResults[["fit"]]$object <- list( + jaspResults[[objectName]]$object <- list( fit = fit, fitClustered = fitClustered ) return() } +.maRemoveInfluentialObservations <- function(jaspResults, dataset, options) { + + if (!.maReady(options) || !is.null(jaspResults[["fit"]])) + return() + + fit <- .maExtractFit(jaspResults, options) + + if (jaspBase::isTryError(fit)) + return() + + # remove influential observations + influenceResults <- influence.rma.uni(fit) + influentialObservation <- influenceResults$inf$inf == "*" + + dataset <- dataset[!influentialObservation, ] + attr(dataset, "influentialObservations") <- sum(influentialObservation) + + if (nrow(dataset) == 0) + return(.quitAnalysis(gettext("All observations were removed as influential."))) + + return(dataset) +} # output tables .maResidualHeterogeneityTable <- function(jaspResults, dataset, options) { @@ -316,7 +350,7 @@ if (!.maGetMethodOptions(options) %in% c("EE", "FE")) { # requires non-clustered fit - pooledHeterogeneity <- .maComputePooledHeterogeneity(jaspResults[["fit"]]$object[["fit"]], options) + pooledHeterogeneity <- .maComputePooledHeterogeneity(.maExtractFit(jaspResults, options, nonClustered = TRUE), options) if (nrow(pooledHeterogeneity) > 0) { for (i in 1:nrow(pooledHeterogeneity)) @@ -834,18 +868,180 @@ return() } +.maCasewiseDiagnosticsTable <- function(jaspResults, dataset, options) { + + if (!is.null(jaspResults[["casewiseDiagnosticsTable"]])) + return() + + fit <- .maExtractFit(jaspResults, options) + + # stop on error + if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) + return() + + # extract precomputed diagnostics if done before: + if (!is.null(jaspResults[["diagnosticsResults"]])) { + + diagnosticsResults <- jaspResults[["diagnosticsResults"]]$object + + influenceResultsDfbs <- diagnosticsResults[["influenceResultsDfbs"]] + influenceResultsInf <- diagnosticsResults[["influenceResultsInf"]] + + } else { + + # create the output container + fitContainer <- createJaspState() + fitContainer$dependOn(.maDependencies) + jaspResults[["diagnosticsResults"]] <- fitContainer + + # extract results + influenceResults <- influence(fit) + influenceResultsDfbs <- data.frame(influenceResults$dfbs) + influenceResultsInf <- data.frame(influenceResults$inf) + influenceResultsInf$tau.del <- sqrt(influenceResultsInf$tau2.del) + influenceResultsInf$inf[influenceResultsInf$inf == "*"] <- "Yes" + + jaspResults[["diagnosticsResults"]]$object <- list( + "influenceResultsDfbs" = influenceResultsDfbs, + "influenceResultsInf" = influenceResultsInf + ) + } + + # extract fit data + fitData <- fit[["data"]] + + # fit measures table + casewiseDiagnosticsTable <- createJaspTable(gettext("Casewise Diagnostics Table")) + casewiseDiagnosticsTable$position <- 7 + casewiseDiagnosticsTable$dependOn(c(.maDependencies, "diagnosticsCasewiseDiagnostics", "diagnosticsCasewiseDiagnosticsShowInfluentialOnly", + "diagnosticsCasewiseDiagnosticsIncludeLabel", "diagnosticsCasewiseDiagnosticsIncludeLabelVariable", + "diagnosticsCasewiseDiagnosticsIncludePredictors", + "diagnosticsCasewiseDiagnosticsDifferenceInCoefficients")) + jaspResults[["casewiseDiagnosticsTable"]] <- casewiseDiagnosticsTable + + if (options[["diagnosticsCasewiseDiagnosticsShowInfluentialOnly"]] && sum(influenceResultsInf$inf != "Yes") == 0) { + casewiseDiagnosticsTable$addFootnote(gettext("No influential cases found.")) + return() + } + + if (options[["diagnosticsCasewiseDiagnosticsIncludeLabel"]]) { + influenceResultsInf$label <- dataset[[options[["diagnosticsCasewiseDiagnosticsIncludeLabelVariable"]]]] + casewiseDiagnosticsTable$addColumnInfo(name = "label", type = "string", title = gettext("Label")) + } + + if (options[["diagnosticsCasewiseDiagnosticsIncludePredictors"]]) { + for (var in colnames(fitData)) { + casewiseDiagnosticsTable$addColumnInfo(name = paste0("pred_", var), type = .maGetVariableColumnType(var, options), title = var, overtitle = gettext("Predictor")) + } + colnames(fitData) <- paste0("pred_", colnames(fitData)) + influenceResultsInf <- cbind(fitData, influenceResultsInf) + } + + casewiseDiagnosticsTable$addColumnInfo(name = "rstudent", title = gettext("Standardized Residual"), type = "number") + casewiseDiagnosticsTable$addColumnInfo(name = "dffits", title = gettext("DFFITS"), type = "number") + casewiseDiagnosticsTable$addColumnInfo(name = "cook.d", title = gettext("Cook's Distance"), type = "number") + casewiseDiagnosticsTable$addColumnInfo(name = "cov.r", title = gettext("Covariance ratio"), type = "number") + casewiseDiagnosticsTable$addColumnInfo(name = "tau.del", title = gettext("\U1D70F"), type = "number", overtitle = gettext("Leave One Out")) + casewiseDiagnosticsTable$addColumnInfo(name = "tau2.del", title = gettext("\U1D70F\U00B2"), type = "number", overtitle = gettext("Leave One Out")) + casewiseDiagnosticsTable$addColumnInfo(name = "QE.del", title = gettext("Q\U2091"), type = "number", overtitle = gettext("Leave One Out")) + casewiseDiagnosticsTable$addColumnInfo(name = "hat", title = gettext("Hat"), type = "number") + casewiseDiagnosticsTable$addColumnInfo(name = "weight", title = gettext("Weight"), type = "number") + + if (options[["diagnosticsCasewiseDiagnosticsDifferenceInCoefficients"]]) { + for (par in colnames(influenceResultsDfbs)) { + casewiseDiagnosticsTable$addColumnInfo(name = par, title = .maVariableNames(par, options[["predictors"]]), type = "number", overtitle = gettext("Difference in coefficients")) + } + influenceResultsInf <- cbind(influenceResultsInf, influenceResultsDfbs) + } + + casewiseDiagnosticsTable$addColumnInfo(name = "inf", title = gettext("Influential"), type = "string") + + if (options[["diagnosticsCasewiseDiagnosticsShowInfluentialOnly"]]) + influenceResultsInf <- influenceResultsInf[influenceResultsInf$inf == "Yes",,drop=FALSE] + + casewiseDiagnosticsTable$setData(influenceResultsInf) + + return() +} +.maCasewiseDiagnosticsExportColumns <- function(jaspResults, dataset, options) { + + if (!options[["diagnosticsCasewiseDiagnosticsExportToDataset"]]) + return() + + # extract diagnostics already computed in '.maCasewiseDiagnosticsTable' + diagnosticsResults <- jaspResults[["diagnosticsResults"]]$object + + influenceResultsDfbs <- diagnosticsResults[["influenceResultsDfbs"]] + influenceResultsInf <- diagnosticsResults[["influenceResultsInf"]] + + # export columns: + if (options[["diagnosticsCasewiseDiagnosticsExportToDatasetInfluentialIndicatorOnly"]]) { + + columnName <- "Diagnostics: Influential" + if (jaspBase:::columnExists(columnName) && !jaspBase:::columnIsMine(columnName)) + .quitAnalysis(gettextf("Column name %s already exists in the dataset.", columnName)) + + jaspResults[[columnName]] <- createJaspColumn(columnName = columnName, dependencies = .maDependencies) + jaspResults[[columnName]]$setNominal(influenceResultsInf[["inf"]]) + + } else { + + # export diagnostics + for (diagnosticName in colnames(influenceResultsInf)) { + + columnName <- paste0("Diagnostics: ", .maCasewiseDiagnosticsExportColumnsNames(diagnosticName)) + + if (jaspBase:::columnExists(columnName) && !jaspBase:::columnIsMine(columnName)) + .quitAnalysis(gettextf("Column name %s already exists in the dataset.", columnName)) + + jaspResults[[columnName]] <- createJaspColumn(columnName = columnName, dependencies = .maDependencies) + if (diagnosticName == "inf") { + jaspResults[[columnName]]$setNominal(influenceResultsInf[[diagnosticName]]) + } else { + jaspResults[[columnName]]$setScale(influenceResultsInf[[diagnosticName]]) + } + } + + # export change in coefficients + if (options[["diagnosticsCasewiseDiagnosticsDifferenceInCoefficients"]]) { + + for (diagnosticName in colnames(influenceResultsDfbs)) { + + columnName <- decodeColNames(paste0("Difference in coefficients: ", .maVariableNames(diagnosticName, options[["predictors"]]))) + + if (jaspBase:::columnExists(columnName) && !jaspBase:::columnIsMine(columnName)) + .quitAnalysis(gettextf("Column name %s already exists in the dataset.", columnName)) + + jaspResults[[columnName]] <- createJaspColumn(columnName = columnName, dependencies = .maDependencies) + jaspResults[[columnName]]$setScale(influenceResultsDfbs[[diagnosticName]]) + } + } + + } + + return() +} # containers/state functions -.maExtractFit <- function(jaspResults, options) { +.maExtractFit <- function(jaspResults, options, nonClustered = FALSE) { if (is.null(jaspResults[["fit"]]$object)) return() - # extract clustered model if specified - if (options[["clustering"]] != "") { - return(jaspResults[["fit"]]$object[["fitClustered"]]) + if (!is.null(jaspResults[["fitNoInfluence"]]$object)) { + # extract clustered model if specified + if (options[["clustering"]] == "" || nonClustered) { + return(jaspResults[["fitNoInfluence"]]$object[["fit"]]) + } else { + return(jaspResults[["fitNoInfluence"]]$object[["fitClustered"]]) + } } else { - return(jaspResults[["fit"]]$object[["fit"]]) + # extract clustered model if specified + if (options[["clustering"]] == "" || nonClustered) { + return(jaspResults[["fit"]]$object[["fit"]]) + } else { + return(jaspResults[["fit"]]$object[["fitClustered"]]) + } } } .maExtractModelSummaryContainer <- function(jaspResults) { @@ -901,6 +1097,7 @@ return(varianceInflationContainer) } + # help compute functions .maComputePooledEffect <- function(fit, options) { @@ -1904,6 +2101,22 @@ "smdToCles" = gettext("SMD to CLES, Pr(supperiority)") )) } +.maCasewiseDiagnosticsExportColumnsNames <- function(columnName) { + + return(switch( + columnName, + "rstudent" = "Standardized Residual", + "dffits" = "DFFITS", + "cook.d" = "Cook's Distance", + "cov.r" = "Covariance Ratio", + "tau.del" = "Tau", + "tau2.del" = "Tau2 LOO", + "QE.del" = "QE LOO", + "hat" = "Hat", + "weight" = "Weight", + "inf" = "Influential" + )) +} # misc .maVariableNames <- function(varNames, variables) { @@ -2134,6 +2347,22 @@ return(vifResults) } +.maGetVariableColumnType <- function(variable, options) { + + if (variable %in% c(options[["effectSize"]], options[["effectSizeStandardError"]])) { + return("number") + } else if (variable == options[["clustering"]]) { + return("string") + } else if (variable %in% options[["predictors"]]){ + return(switch( + options[["predictors.types"]][variable == options[["predictors"]]], + "scale" = "number", + "nominal" = "string" + )) + } else { + return("string") + } +} # messages .maFixedEffectTextMessage <- function(options) { @@ -2178,6 +2407,9 @@ if (attr(dataset, "NAs") > 0) messages <- c(messages, gettextf("%1$i observations were ommited due to missing values.", attr(dataset, "NAs"))) + if (!is.null(attr(dataset, "influentialObservations")) && attr(dataset, "influentialObservations") > 0) + messages <- c(messages, gettextf("%1$i influential observations were detected and removed.", attr(dataset, "influentialObservations"))) + return(messages) } .maEstimatedMarginalMeansMessages <- function(options, parameter) { diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 37505016..8a5d1c70 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -1156,8 +1156,57 @@ Form CheckBox { - name: "diagnosticsCaseWiseDiagnostics" - text: qsTr("Case wise diagnostics") + name: "diagnosticsCasewiseDiagnostics" + text: qsTr("Casewise diagnostics") + + CheckBox + { + name: "diagnosticsCasewiseDiagnosticsShowInfluentialOnly" + text: qsTr("Show influential only") + } + + CheckBox + { + name: "diagnosticsCasewiseDiagnosticsIncludeLabel" + text: qsTr("Include label") + + DropDown + { + name: "diagnosticsCasewiseDiagnosticsIncludeLabelVariable" + } + } + + CheckBox + { + name: "diagnosticsCasewiseDiagnosticsIncludePredictors" + text: qsTr("Include predictors") + } + + CheckBox + { + name: "diagnosticsCasewiseDiagnosticsDifferenceInCoefficients" + text: qsTr("Difference in coefficients") + } + + CheckBox + { + name: "diagnosticsCasewiseDiagnosticsExportToDataset" + text: qsTr("Export to dataset") + + CheckBox + { + name: "diagnosticsCasewiseDiagnosticsExportToDatasetInfluentialIndicatorOnly" + text: qsTr("Influential indicator only") + checked: true + } + } + + CheckBox + { + name: "diagnosticsCasewiseDiagnosticsRerunWithoutInfluentialCases" + text: qsTr("Rerun without influential cases") + visible: false + } } } From 31bd84929240c2b68c832aad9241ccce3043ecec Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 23 Jun 2024 21:33:56 +0200 Subject: [PATCH 039/127] Update classicalmetaanalysiscommon.R --- R/classicalmetaanalysiscommon.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 90748b41..7fe1008c 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -23,6 +23,8 @@ # - binning of continuous covariates (requires returning continous levels returned in gridMatrix) # - allow factors as dependent variables # AIC/BIC Model-averaging +# Diagnostics +# - model re-run on presence of influential cases # Generic # - allow different covariates factoring across all settings From 043feb785de886d85a1fdd2a6cfa3f2dcfe5e7b4 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 23 Jun 2024 22:15:08 +0200 Subject: [PATCH 040/127] add profile likelihood plot --- R/classicalmetaanalysis.R | 4 +- R/classicalmetaanalysiscommon.R | 66 ++++++++++++++++++++++++++++++ inst/qml/ClassicalMetaAnalysis.qml | 11 +++-- 3 files changed, 76 insertions(+), 5 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index ffe88f65..d3c04bdd 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -137,13 +137,13 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { predictorsScale <- options[["predictors"]][options[["predictors.types"]] == "scale"] # forest plotting data - additionalVariables <- c( + additionalVariables <- unique(c( if (length(options[["forestPlotStudyInformationSelectedVariables"]]) > 0) unlist(options[["forestPlotStudyInformationSelectedVariables"]]), if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]], if (options[["forestPlotStudyInformationOrderBy"]] != "") options[["forestPlotStudyInformationOrderBy"]], if (options[["diagnosticsCasewiseDiagnosticsIncludeLabelVariable"]] != "") options[["diagnosticsCasewiseDiagnosticsIncludeLabelVariable"]] - ) + )) # remove variables already specified in the model additionalVariables <- setdiff( additionalVariables, diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 7fe1008c..61d28007 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -79,6 +79,8 @@ .maCasewiseDiagnosticsTable(jaspResults, dataset, options) .maCasewiseDiagnosticsExportColumns(jaspResults, dataset, options) } + if (options[["diagnosticsPlotsProfileLikelihood"]]) + .maProfileLikelihoodPlot(jaspResults, dataset, options) # additional @@ -1023,6 +1025,70 @@ return() } +.maProfileLikelihoodPlot <- function(jaspResults, dataset, options) { + + if (!is.null(jaspResults[["profileLikelihoodPlot"]])) + return() + + fit <- .maExtractFit(jaspResults, options) + + # stop on error + if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) + return() + + # create plot + profileLikelihoodPlot <- createJaspPlot(title = gettext("Profile Likelihood Plot"), width = 400, height = 320) + profileLikelihoodPlot$dependOn(c(.maDependencies, "diagnosticsPlotsProfileLikelihood")) + profileLikelihoodPlot$position <- 8 + jaspResults[["profileLikelihoodPlot"]] <- profileLikelihoodPlot + + if (.maIsMetaregressionHeterogeneity(options)) { + profileLikelihoodPlot$setError(gettext("Profile likelihood is not available for models that contain meta-regression on heterogeneity.")) + return() + } + + # obtain profile likelihood + xTicks <- jaspGraphs::getPrettyAxisBreaks(c(0, 2*fit[["tau2"]])) + dfProfile <- try(profile(fit, xlim = range(xTicks), plot = FALSE, progbar = FALSE)) + if (jaspBase::isTryError(dfProfile)) { + profileLikelihoodPlot$setError(dfProfile) + return() + } + + yTicks <- jaspGraphs::getPrettyAxisBreaks(c(min(dfProfile$ll), max(dfProfile$ll))) + + # create plot + plotOut <- ggplot2::ggplot( + data = data.frame( + x = dfProfile$tau2, + y = dfProfile$ll + ), + ggplot2::aes( + x = x, + y = y) + ) + + jaspGraphs::geom_line() + + jaspGraphs::geom_point() + + ggplot2::geom_line( + data = data.frame( + x = rep(fit[["tau2"]], 2), + y = range(yTicks)), + linetype = "dotted") + + ggplot2::geom_line( + data = data.frame( + x = range(xTicks), + y = rep(max(dfProfile$ll), 2)), + linetype = "dotted") + + ggplot2::labs(x = expression(tau^2), y = gettext("Profile Likelihood")) + + jaspGraphs::scale_x_continuous(breaks = xTicks, limits = range(xTicks)) + + jaspGraphs::scale_y_continuous(breaks = yTicks, limits = range(yTicks)) + + jaspGraphs::geom_rangeframe() + + jaspGraphs::themeJaspRaw() + + profileLikelihoodPlot$plotObject <- plotOut + + return() +} # containers/state functions .maExtractFit <- function(jaspResults, options, nonClustered = FALSE) { diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 8a5d1c70..4c11625c 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -1210,10 +1210,15 @@ Form } } - CheckBox + Group { - name: "diagnosticsProfilePlot" - text: qsTr("Profile plot") + title: qsTr("Plots") + + CheckBox + { + name: "diagnosticsPlotsProfileLikelihood" + text: qsTr("Profile likelihood") + } } } } From fceee8e4d5111a6f58debcbe28d14191b93c5281 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 23 Jun 2024 22:41:22 +0200 Subject: [PATCH 041/127] baujat plot --- R/classicalmetaanalysis.R | 5 +- R/classicalmetaanalysiscommon.R | 76 ++++++++++++++++++++++++++++++ inst/qml/ClassicalMetaAnalysis.qml | 19 ++++++++ 3 files changed, 98 insertions(+), 2 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index d3c04bdd..a0b610eb 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -141,8 +141,9 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { if (length(options[["forestPlotStudyInformationSelectedVariables"]]) > 0) unlist(options[["forestPlotStudyInformationSelectedVariables"]]), if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]], - if (options[["forestPlotStudyInformationOrderBy"]] != "") options[["forestPlotStudyInformationOrderBy"]], - if (options[["diagnosticsCasewiseDiagnosticsIncludeLabelVariable"]] != "") options[["diagnosticsCasewiseDiagnosticsIncludeLabelVariable"]] + if (options[["forestPlotStudyInformationOrderBy"]] != "") options[["forestPlotStudyInformationOrderBy"]], + if (options[["diagnosticsCasewiseDiagnosticsIncludeLabel"]]) options[["diagnosticsCasewiseDiagnosticsIncludeLabelVariable"]], + if (options[["diagnosticsPlotsBaujatIncludeLabel"]]) options[["diagnosticsPlotsBaujatIncludeLabelVariable"]] )) # remove variables already specified in the model additionalVariables <- setdiff( diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 61d28007..5ebe8fde 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -81,6 +81,8 @@ } if (options[["diagnosticsPlotsProfileLikelihood"]]) .maProfileLikelihoodPlot(jaspResults, dataset, options) + if (options[["diagnosticsPlotsBaujat"]]) + .maBaujatPlot(jaspResults, dataset, options) # additional @@ -1089,6 +1091,72 @@ return() } +.maBaujatPlot <- function(jaspResults, dataset, options) { + + if (!is.null(jaspResults[["baujatPlot"]])) + return() + + fit <- .maExtractFit(jaspResults, options) + + # stop on error + if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) + return() + + # create plot + baujatPlot <- createJaspPlot(title = gettext("Baujat Plot"), width = 400, height = 320) + baujatPlot$dependOn(c(.maDependencies, "diagnosticsPlotsBaujat", "diagnosticsPlotsBaujatIncludeLabel", "diagnosticsPlotsBaujatIncludeLabelVariable")) + baujatPlot$position <- 9 + jaspResults[["baujatPlot"]] <- baujatPlot + + # if (.maIsMetaregressionHeterogeneity(options)) { + # baujatPlot$setError(gettext("Baujat plot is not available for models that contain meta-regression on heterogeneity.")) + # return() + # } + + # obtain Baujat plot + dfBaujat <- try(.maSuppressPlot(metafor::baujat(fit))) + + if (jaspBase::isTryError(dfBaujat)) { + dfBaujat$setError(dfBaujat) + return() + } + if (options[["diagnosticsPlotsBaujatIncludeLabel"]]) + dfBaujat$label <- dataset[[options[["diagnosticsPlotsBaujatIncludeLabelVariable"]]]] + + xTicks <- jaspGraphs::getPrettyAxisBreaks(range(dfBaujat$x)) + yTicks <- jaspGraphs::getPrettyAxisBreaks(range(dfBaujat$y)) + + + aesCall <- list( + x = as.name("x"), + y = as.name("y"), + label = if (options[["diagnosticsPlotsBaujatIncludeLabel"]]) as.name("label") + ) + geomCall <- list( + data = dfBaujat, + mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]) + ) + + # create plot + plotOut <- do.call(ggplot2::ggplot, geomCall) + + jaspGraphs::geom_point( + size = if (options[["diagnosticsPlotsBaujatIncludeLabel"]]) 2 else 3 + ) + + if (options[["diagnosticsPlotsBaujatIncludeLabel"]]) + plotOut + ggplot2::geom_text(hjust = 0, vjust = 0) + + plotOut <- plotOut + + ggplot2::labs(x = gettext("Squared Pearson Residual"), y = gettext("Influence on Fitted Value")) + + jaspGraphs::scale_x_continuous(breaks = xTicks, limits = range(xTicks)) + + jaspGraphs::scale_y_continuous(breaks = yTicks, limits = range(yTicks)) + + jaspGraphs::geom_rangeframe() + + jaspGraphs::themeJaspRaw() + + baujatPlot$plotObject <- plotOut + + return() +} # containers/state functions .maExtractFit <- function(jaspResults, options, nonClustered = FALSE) { @@ -2431,6 +2499,14 @@ return("string") } } +.maSuppressPlot <- function(plotExpression) { + temp <- tempfile() + pdf(file = temp) + dfOut <- plotExpression + dev.off() + unlink(temp) + return(dfOut) +} # messages .maFixedEffectTextMessage <- function(options) { diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 4c11625c..2808721a 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -1169,6 +1169,7 @@ Form { name: "diagnosticsCasewiseDiagnosticsIncludeLabel" text: qsTr("Include label") + childrenOnSameRow: true DropDown { @@ -1219,6 +1220,24 @@ Form name: "diagnosticsPlotsProfileLikelihood" text: qsTr("Profile likelihood") } + + CheckBox + { + name: "diagnosticsPlotsBaujat" + text: qsTr("Baujat") + + CheckBox + { + name: "diagnosticsPlotsBaujatIncludeLabel" + text: qsTr("Include label") + childrenOnSameRow: true + + DropDown + { + name: "diagnosticsPlotsBaujatIncludeLabelVariable" + } + } + } } } } From 9ca78bc424301c80d7eeb9dea34a5e8de113eab5 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 24 Jun 2024 10:11:19 +0200 Subject: [PATCH 042/127] fix forest plot --- DESCRIPTION | 3 ++- R/classicalmetaanalysis.R | 5 ++-- R/classicalmetaanalysiscommon.R | 41 +++++++++++++++++++----------- R/forestplot.R | 27 ++++++++++---------- inst/qml/ClassicalMetaAnalysis.qml | 38 ++++++++------------------- 5 files changed, 54 insertions(+), 60 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 47f83b72..b769eb85 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -29,7 +29,8 @@ Imports: metamisc (>= 0.2.5), ggmcmc, pema, - clubSandwich + clubSandwich, + patchwork Remotes: jasp-stats/jaspBase, jasp-stats/jaspGraphs diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index a0b610eb..3cfd1284 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -138,12 +138,11 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { # forest plotting data additionalVariables <- unique(c( + if (options[["studyLabels"]] != "") options[["studyLabels"]], if (length(options[["forestPlotStudyInformationSelectedVariables"]]) > 0) unlist(options[["forestPlotStudyInformationSelectedVariables"]]), if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]], - if (options[["forestPlotStudyInformationOrderBy"]] != "") options[["forestPlotStudyInformationOrderBy"]], - if (options[["diagnosticsCasewiseDiagnosticsIncludeLabel"]]) options[["diagnosticsCasewiseDiagnosticsIncludeLabelVariable"]], - if (options[["diagnosticsPlotsBaujatIncludeLabel"]]) options[["diagnosticsPlotsBaujatIncludeLabelVariable"]] + if (options[["forestPlotStudyInformationOrderBy"]] != "") options[["forestPlotStudyInformationOrderBy"]] )) # remove variables already specified in the model additionalVariables <- setdiff( diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 5ebe8fde..3d2ead2e 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -727,7 +727,7 @@ # try execute! plotOut <- try(.maMakeTheUltimateForestPlot(fit, dataset, options)) - if (jaspBase::isTryError(plotOut)) { + if (inherits(plotOut, "try-error")) { forestPlot <- createJaspPlot(title = gettext("Forest Plot")) forestPlot$position <- 4 forestPlot$dependOn(.maForestPlotDependencies) @@ -743,8 +743,6 @@ else width <- 500 + 500 * attr(plotOut, "panelRatio") - attr(plotOut, "nCharsLeft") + attr(plotOut, "nCharsRight") - forestPlot <- createJaspPlot( title = gettext("Forest Plot"), width = width, @@ -752,9 +750,22 @@ ) forestPlot$position <- 4 forestPlot$dependOn(.maForestPlotDependencies) - forestPlot$plotObject <- plotOut + + if (!attr(plotOut, "isPanel")) { + forestPlot$plotObject <- plotOut + } else { + plotOut <- jaspGraphs:::jaspGraphsPlot$new( + subplots = plotOut, + layout = attr(plotOut, "layout"), + heights = 1, + widths = attr(plotOut, "widths") + ) + forestPlot$plotObject <- plotOut + } + jaspResults[["forestPlot"]] <- forestPlot + return() } .maBubblePlot <- function(jaspResults, dataset, options) { @@ -920,9 +931,8 @@ casewiseDiagnosticsTable <- createJaspTable(gettext("Casewise Diagnostics Table")) casewiseDiagnosticsTable$position <- 7 casewiseDiagnosticsTable$dependOn(c(.maDependencies, "diagnosticsCasewiseDiagnostics", "diagnosticsCasewiseDiagnosticsShowInfluentialOnly", - "diagnosticsCasewiseDiagnosticsIncludeLabel", "diagnosticsCasewiseDiagnosticsIncludeLabelVariable", - "diagnosticsCasewiseDiagnosticsIncludePredictors", - "diagnosticsCasewiseDiagnosticsDifferenceInCoefficients")) + "diagnosticsCasewiseDiagnosticsIncludePredictors", "diagnosticsCasewiseDiagnosticsDifferenceInCoefficients", + "studyLabels")) jaspResults[["casewiseDiagnosticsTable"]] <- casewiseDiagnosticsTable if (options[["diagnosticsCasewiseDiagnosticsShowInfluentialOnly"]] && sum(influenceResultsInf$inf != "Yes") == 0) { @@ -930,8 +940,8 @@ return() } - if (options[["diagnosticsCasewiseDiagnosticsIncludeLabel"]]) { - influenceResultsInf$label <- dataset[[options[["diagnosticsCasewiseDiagnosticsIncludeLabelVariable"]]]] + if (options[["studyLabels"]] != "") { + influenceResultsInf$label <- dataset[[options[["studyLabels"]]]] casewiseDiagnosticsTable$addColumnInfo(name = "label", type = "string", title = gettext("Label")) } @@ -1104,7 +1114,7 @@ # create plot baujatPlot <- createJaspPlot(title = gettext("Baujat Plot"), width = 400, height = 320) - baujatPlot$dependOn(c(.maDependencies, "diagnosticsPlotsBaujat", "diagnosticsPlotsBaujatIncludeLabel", "diagnosticsPlotsBaujatIncludeLabelVariable")) + baujatPlot$dependOn(c(.maDependencies, "diagnosticsPlotsBaujat", "studyLabels")) baujatPlot$position <- 9 jaspResults[["baujatPlot"]] <- baujatPlot @@ -1120,8 +1130,9 @@ dfBaujat$setError(dfBaujat) return() } - if (options[["diagnosticsPlotsBaujatIncludeLabel"]]) - dfBaujat$label <- dataset[[options[["diagnosticsPlotsBaujatIncludeLabelVariable"]]]] + + if (options[["studyLabels"]] != "") + dfBaujat$label <- dataset[[options[["studyLabels"]]]] xTicks <- jaspGraphs::getPrettyAxisBreaks(range(dfBaujat$x)) yTicks <- jaspGraphs::getPrettyAxisBreaks(range(dfBaujat$y)) @@ -1130,7 +1141,7 @@ aesCall <- list( x = as.name("x"), y = as.name("y"), - label = if (options[["diagnosticsPlotsBaujatIncludeLabel"]]) as.name("label") + label = if (options[["studyLabels"]] != "") as.name("label") ) geomCall <- list( data = dfBaujat, @@ -1140,10 +1151,10 @@ # create plot plotOut <- do.call(ggplot2::ggplot, geomCall) + jaspGraphs::geom_point( - size = if (options[["diagnosticsPlotsBaujatIncludeLabel"]]) 2 else 3 + size = if (options[["studyLabels" != ""]]) 2 else 3 ) - if (options[["diagnosticsPlotsBaujatIncludeLabel"]]) + if (options[["studyLabels"]] != "") plotOut + ggplot2::geom_text(hjust = 0, vjust = 0) plotOut <- plotOut + diff --git a/R/forestplot.R b/R/forestplot.R index 4b6477f5..caf5f8d4 100644 --- a/R/forestplot.R +++ b/R/forestplot.R @@ -547,7 +547,7 @@ leftPanelStudyDataColored <- data.frame( x = leftPanelStudyInformation$x[leftPanelStudyInformation$value == options[["forestPlotMappingColor"]]], y = dfForrest$y, - label = dfForrest[[options[["forestPlotMappingColor"]]]], + label = as.character(dfForrest[[options[["forestPlotMappingColor"]]]]), alignment = leftPanelStudyInformation$alignment[leftPanelStudyInformation$value == options[["forestPlotMappingColor"]]] ) plotLeft <- plotLeft + ggplot2::geom_text( @@ -569,7 +569,7 @@ data.frame( x = leftPanelStudyInformation$x[leftPanelStudyInformation$value == variable], y = dfForrest$y, - label = dfForrest[[variable]], + label = as.character(dfForrest[[variable]]), alignment = leftPanelStudyInformation$alignment[leftPanelStudyInformation$value == variable] ) })) @@ -805,27 +805,26 @@ } if (length(plotsWidths) == 1) { + plotOut <- plotForest attr(plotOut, "isPanel") <- FALSE attr(plotOut, "rows") <- tempRow + max(dfForrest$row) + } else { - plotsCall <- list() + + plotOut <- list() if (!is.null(plotLeft)) - plotsCall <- c(plotsCall, list(plotLeft)) - plotsCall <- c(plotsCall, list(plotForest)) + plotOut <- c(plotOut, list(plotLeft)) + plotOut <- c(plotOut, list(plotForest)) if (!is.null(plotRight)) - plotsCall <- c(plotsCall, list(plotRight)) - plotsCall$widths <- plotsWidths - plotsCall$nrow <- 1 - plotOut <- do.call(gridExtra::arrangeGrob, plotsCall) -# plotOut <- jaspGraphsPlot$new(subplots = list( -# if (!is.null(plotLeft)) plotLeft, -# plotForest, -# if (!is.null(plotRight)) plotRight), -# layout = matrix(1:length(plotsWidths), nrow = 1), widths = plotsWidths) + plotOut <- c(plotOut, list(plotRight)) + attr(plotOut, "isPanel") <- TRUE attr(plotOut, "panelRatio") <- panelRatio attr(plotOut, "rows") <- tempRow + if(!is.null(dfForrest)) max(dfForrest$row) else 0 + attr(plotOut, "widths") <- plotsWidths + attr(plotOut, "layout") <- matrix(1:length(plotOut), nrow = 1, ncol = length(plotOut), byrow = TRUE) + } return(plotOut) diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 2808721a..f74eac93 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -26,7 +26,7 @@ Form { VariablesForm { - preferredHeight: 400 * preferencesModel.uiScale + preferredHeight: 450 * preferencesModel.uiScale AvailableVariablesList { @@ -107,6 +107,14 @@ Form singleVariable: true allowedColumns: ["nominal"] } + + AssignedVariablesList + { + name: "studyLabels" + title: qsTr("Study Labels") + singleVariable: true + allowedColumns: ["nominal"] + } } Section @@ -803,7 +811,7 @@ Form { name: "forestPlotRelativeSizeLeftPanel" text: qsTr("Left panel") - defaultValue: 1 + defaultValue: 0.5 min: 0 inclusive: JASP.None } @@ -821,7 +829,7 @@ Form { name: "forestPlotRelativeSizeRightPanel" text: qsTr("Right panel") - defaultValue: 1 + defaultValue: 0.5 min: 0 inclusive: JASP.None } @@ -1165,18 +1173,6 @@ Form text: qsTr("Show influential only") } - CheckBox - { - name: "diagnosticsCasewiseDiagnosticsIncludeLabel" - text: qsTr("Include label") - childrenOnSameRow: true - - DropDown - { - name: "diagnosticsCasewiseDiagnosticsIncludeLabelVariable" - } - } - CheckBox { name: "diagnosticsCasewiseDiagnosticsIncludePredictors" @@ -1225,18 +1221,6 @@ Form { name: "diagnosticsPlotsBaujat" text: qsTr("Baujat") - - CheckBox - { - name: "diagnosticsPlotsBaujatIncludeLabel" - text: qsTr("Include label") - childrenOnSameRow: true - - DropDown - { - name: "diagnosticsPlotsBaujatIncludeLabelVariable" - } - } } } } From 77ee844e2e8954511f6c4d419469c113a09e5b07 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 24 Jun 2024 10:26:09 +0200 Subject: [PATCH 043/127] fix baujat updating --- R/classicalmetaanalysiscommon.R | 38 ++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 3d2ead2e..d1c5e602 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -907,17 +907,18 @@ } else { # create the output container - fitContainer <- createJaspState() - fitContainer$dependOn(.maDependencies) - jaspResults[["diagnosticsResults"]] <- fitContainer + diagnosticsResults <- createJaspState() + diagnosticsResults$dependOn(.maDependencies) + jaspResults[["diagnosticsResults"]] <- diagnosticsResults - # extract results + # compute the results influenceResults <- influence(fit) influenceResultsDfbs <- data.frame(influenceResults$dfbs) influenceResultsInf <- data.frame(influenceResults$inf) influenceResultsInf$tau.del <- sqrt(influenceResultsInf$tau2.del) influenceResultsInf$inf[influenceResultsInf$inf == "*"] <- "Yes" + # store the results jaspResults[["diagnosticsResults"]]$object <- list( "influenceResultsDfbs" = influenceResultsDfbs, "influenceResultsInf" = influenceResultsInf @@ -1118,21 +1119,38 @@ baujatPlot$position <- 9 jaspResults[["baujatPlot"]] <- baujatPlot + # extract precomputed baujat data if done before: + if (!is.null(jaspResults[["baujatResults"]])) { + + dfBaujat <- jaspResults[["baujatResults"]]$object + + } else { + + # create the output container + baujatResults <- createJaspState() + baujatResults$dependOn(.maDependencies) + jaspResults[["baujatResults"]] <- baujatResults + + # compute the results and save them in the container + dfBaujat <- try(.maSuppressPlot(metafor::baujat(fit))) + + # store in the container + jaspResults[["baujatResults"]]$object <- dfBaujat + } + + # if (.maIsMetaregressionHeterogeneity(options)) { # baujatPlot$setError(gettext("Baujat plot is not available for models that contain meta-regression on heterogeneity.")) # return() # } - # obtain Baujat plot - dfBaujat <- try(.maSuppressPlot(metafor::baujat(fit))) - if (jaspBase::isTryError(dfBaujat)) { dfBaujat$setError(dfBaujat) return() } if (options[["studyLabels"]] != "") - dfBaujat$label <- dataset[[options[["studyLabels"]]]] + dfBaujat$label <- as.character(dataset[[options[["studyLabels"]]]]) xTicks <- jaspGraphs::getPrettyAxisBreaks(range(dfBaujat$x)) yTicks <- jaspGraphs::getPrettyAxisBreaks(range(dfBaujat$y)) @@ -1151,11 +1169,11 @@ # create plot plotOut <- do.call(ggplot2::ggplot, geomCall) + jaspGraphs::geom_point( - size = if (options[["studyLabels" != ""]]) 2 else 3 + size = if (options[["studyLabels"]] != "") 2 else 3 ) if (options[["studyLabels"]] != "") - plotOut + ggplot2::geom_text(hjust = 0, vjust = 0) + plotOut <- plotOut + ggplot2::geom_text(hjust = 0, vjust = 0) plotOut <- plotOut + ggplot2::labs(x = gettext("Squared Pearson Residual"), y = gettext("Influence on Fitted Value")) + From a2e82510d18447bf315cf9a35de9204ca9cdcf01 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 24 Jun 2024 12:43:27 +0200 Subject: [PATCH 044/127] compartmentalize classical meta-analysis --- R/classicalmetaanalysiscommon.R | 5 +- inst/qml/ClassicalMetaAnalysis.qml | 1430 +---------------- .../ClassicalMetaAnalysisAdvanced.qml | 312 ++++ .../ClassicalMetaAnalysisBubblePlot.qml | 213 +++ .../ClassicalMetaAnalysisDiagnostics.qml | 95 +- ...icalMetaAnalysisEstimatedMarginalMeans.qml | 146 ++ .../ClassicalMetaAnalysisForestPlot.qml | 527 ++++++ .../ClassicalMetaAnalysisMethod.qml | 40 +- .../ClassicalMetaAnalysisModel.qml | 112 ++ .../ClassicalMetaAnalysisStatistics.qml | 145 +- 10 files changed, 1529 insertions(+), 1496 deletions(-) create mode 100644 inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml create mode 100644 inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml create mode 100644 inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml create mode 100644 inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml create mode 100644 inst/qml/qml_components/ClassicalMetaAnalysisModel.qml diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index d1c5e602..4bd6a49b 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -28,6 +28,10 @@ # Generic # - allow different covariates factoring across all settings +# TODO fix QML +# - remove selected variables in estimated marginal means when removed from the model components +# - check that the variables types are always propagated throughout the options + .ClassicalMetaAnalysisCommon <- function(jaspResults, dataset, options, ...) { # fit the model @@ -1262,7 +1266,6 @@ return(varianceInflationContainer) } - # help compute functions .maComputePooledEffect <- function(fit, options) { diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index f74eac93..0c5ca78c 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -50,37 +50,8 @@ Form allowedColumns: ["scale"] } - DropDown - { - name: "method" - id: method - label: qsTr("Method") - startValue: "restrictedML" - values: (function() { - if (heterogeneityModelTerms.count == 0) { - return [ - { label: qsTr("Equal Effects") , value: "equalEffects" }, - { label: qsTr("Fixed Effects") , value: "fixedEffects" }, - { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, - { label: qsTr("Restricted ML") , value: "restrictedML" }, - { label: qsTr("DerSimonian-Laird") , value: "derSimonianLaird" }, - { label: qsTr("Hedges") , value: "hedges" }, - { label: qsTr("Hunter-Schmidt") , value: "hunterSchmidt" }, - { label: qsTr("Hunter-Schmidt (SSC)") , value: "hunterSchmidtSsc" }, - { label: qsTr("Sidik-Jonkman") , value: "sidikJonkman" }, - { label: qsTr("Empirical Bayes") , value: "empiricalBayes" }, - { label: qsTr("Paule-Mandel") , value: "pauleMandel" }, - { label: qsTr("Paule-Mandel (MU)") , value: "pauleMandelMu" }, - { label: qsTr("Generalized Q-stat") , value: "qeneralizedQStat" }, - { label: qsTr("Generalized Q-stat (MU)"), value: "qeneralizedQStatMu"} - ]; - } else { - return [ - { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, - { label: qsTr("Restricted ML") , value: "restrictedML" }, - { label: qsTr("Empirical Bayes") , value: "empiricalBayes" } - ]; - }})() + MA.ClassicalMetaAnalysisMethod { + id: method } DropDown @@ -117,1401 +88,18 @@ Form } } - Section + MA.ClassicalMetaAnalysisModel { - title: qsTr("Model") - - Group - { - title: qsTr("Effect size model") - - VariablesForm - { - preferredHeight: 150 * preferencesModel.uiScale - - AvailableVariablesList - { - name: "effectSizeModelAvailableComponents" - title: qsTr("Available Components") - source: ["predictors"] - } - - AssignedVariablesList - { - name: "effectSizeModelTerms" - id: effectSizeModelTerms - title: qsTr("Model Terms") - listViewType: JASP.Interaction - allowTypeChange:false - } - } - - CheckBox - { - name: "effectSizeModelIncludeIntercept" - label: qsTr("Include intercept") - checked: true - } - } - - Group - { - title: qsTr("Heterogeneity model") - columns: 2 - - VariablesForm - { - preferredHeight: 150 * preferencesModel.uiScale - - AvailableVariablesList - { - name: "heterogeneityModelAvailableComponents" - title: qsTr("Available Components") - source: ["predictors"] - } - - AssignedVariablesList - { - name: "heterogeneityModelTerms" - id: heterogeneityModelTerms - title: qsTr("Model Terms") - listViewType: JASP.Interaction - allowTypeChange:false - addAvailableVariablesToAssigned: false - } - } - - CheckBox - { - name: "heterogeneityModelIncludeIntercept"; - label: qsTr("Include intercept") - checked: true - } - - DropDown - { - name: "heterogeneityModelLink" - id: heterogeneityModelLink - label: qsTr("Link") - values: ["log", "identity"] - } - } - } - - Section - { - title: qsTr("Statistics") - columns: 2 - - Group - { - title: qsTr("Heterogeneity") - columns: 2 - enabled: method.value != "fixedEffects" && method.value != "equalEffects" - - CheckBox - { - text: qsTr("𝜏") - name: "heterogeneityTau" - checked: true - } - - CheckBox - { - text: qsTr("𝜏²") - name: "heterogeneityTau2" - checked: true - } - - CheckBox - { - text: qsTr("IΒ²") - name: "heterogeneityI2" - checked: false - } - - CheckBox - { - text: qsTr("HΒ²") - name: "heterogeneityH2" - checked: false - } - } - - Group - { - title: qsTr("Meta-Regression") - enabled: predictors.count > 0 - - CheckBox - { - name: "metaregressionTermTests" - text: qsTr("Term tests") - checked: true - } - - CheckBox - { - name: "metaregressionCoefficientEstimates" - text: qsTr("Coefficient estimates") - checked: true - } - - CheckBox - { - name: "metaregressionCoefficientCorrelationMatrix" - text: qsTr("Coefficient correlation matrix") - checked: false - } - } - - Group - { - CheckBox - { - name: "confidenceIntervals" - text: qsTr("Confidence intervals") - checked: true - childrenOnSameRow: true - - CIField - { - name: "confidenceIntervalsLevel" - } - } - - CheckBox - { - text: qsTr("Prediction intervals") - name: "predictionIntervals" - checked: true - } - - DropDown - {//TODO: make shorter or across both rows? - name: "transformEffectSize" - label: qsTr("Transform effect size") - setLabelAbove: true - values: [ - { label: qsTr("None") , value: "none" }, // NULL - { label: qsTr("Fisher's z to r") , value: "fishersZToCorrelation" }, // transf.ztor - { label: qsTr("Exponential") , value: "exponential" }, // exp - { label: qsTr("Log odds to proportions") , value: "logOddsToProportions" }, // transf.logit - { label: qsTr("Log odds to SMD (normal)") , value: "logOddsToSmdNormal" }, // transf.lnortod.norm - { label: qsTr("Log odds to SMD (logistic)") , value: "logOddsToSmdLogistic" }, // transf.lnortod.logis - { label: qsTr("SMD to log odds (normal)") , value: "smdToLogOddsNormal" }, // transf.dtolnor.norm - { label: qsTr("SMD to log odds (logistic)") , value: "smdToLogOddsLogistic" }, // transf.dtolnor.logis - { label: qsTr("Hakstian & Whalen inverse Ξ±") , value: "hakstianAndWhalenInverseAlpha"}, // transf.iahw - { label: qsTr("Bonett inverse Ξ±") , value: "bonettInverseAlpha" }, // transf.iabt - { label: qsTr("Z to RΒ²") , value: "zToR2" }, // transf.ztor2 - { label: qsTr("SMD to Cohen's U₁") , value: "smdToCohensU1" }, // transf.dtou1 - { label: qsTr("SMD to Cohen's Uβ‚‚") , value: "smdToCohensU2" }, // transf.dtou2 - { label: qsTr("SMD to Cohen's U₃") , value: "smdToCohensU3" }, // transf.dtou3 - { label: qsTr("SMD to CLES, Pr(supperiority)") , value: "smdToCles" }, // transf.dtocles - ] - } - } - - CheckBox - { - name: "fitMeasures" - text: qsTr("Fit measures") - } + id: sectionModel } - Section - { - title: qsTr("Estimated Marginal Means") - columns: 1 - - Group - { - title: qsTr("Effect size") - enabled: effectSizeModelTerms.count > 0 - - VariablesForm - { - preferredHeight: 250 * preferencesModel.uiScale - - AvailableVariablesList - { - name: "estimatedMarginalMeansEffectSizeModelVariables" - title: qsTr("Model variables") - source: [{ name: "effectSizeModelTerms", use: "noInteraction" }] - } + MA.ClassicalMetaAnalysisStatistics {} - AssignedVariablesList - { - id: estimatedMarginalMeansEffectSizeSelectedVariables - name: "estimatedMarginalMeansEffectSizeSelectedVariables" - title: qsTr("Selected variables") - allowTypeChange:false - } - } + MA.ClassicalMetaAnalysisEstimatedMarginalMeans {} - Group - { - columns: 2 + MA.ClassicalMetaAnalysisForestPlot {} - DoubleField - { - name: "estimatedMarginalMeansEffectSizeSdFactorCovariates" - label: qsTr("SD factor covariates") - defaultValue: 1 - min: 0 - enabled: estimatedMarginalMeansEffectSizeSelectedVariables.columnsTypes.includes("scale") - Layout.preferredWidth: 350 * jaspTheme.uiScale - } - - CheckBox - { - name: "estimatedMarginalMeansEffectSizeAddAdjustedEstimate" - label: qsTr("Add adjusted estimate") - } - - CheckBox - { - name: "estimatedMarginalMeansEffectSizeTestAgainst" - label: qsTr("Test against") - childrenOnSameRow: true - - DoubleField - { - name: "estimatedMarginalMeansEffectSizeTestAgainstValue" - defaultValue: 0 - } - } - } - } - - Group - { - title: qsTr("Heterogeneity") - enabled: heterogeneityModelTerms.count > 0 - - VariablesForm - { - preferredHeight: 250 * preferencesModel.uiScale - - AvailableVariablesList - { - name: "estimatedMarginalHeterogeneityModelVariables" - title: qsTr("Model variables") - source: [{ name: "heterogeneityModelTerms", use: "noInteraction" }] - } - - AssignedVariablesList - { - id: estimatedMarginalMeansHeterogeneitySelectedVariables - name: "estimatedMarginalMeansHeterogeneitySelectedVariables" - title: qsTr("Selected variables") - allowTypeChange:false - } - } - - Group - { - columns: 2 - - DoubleField - { - name: "estimatedMarginalMeansHeterogeneitySdFactorCovariates" - label: qsTr("SD factor covariates") - defaultValue: 1 - min: 0 - enabled: estimatedMarginalMeansHeterogeneitySelectedVariables.columnsTypes.includes("scale") - Layout.preferredWidth: 350 * jaspTheme.uiScale - } - - CheckBox - { - name: "estimatedMarginalMeansHeterogeneityAddAdjustedEstimate" - label: qsTr("Add adjusted estimate") - } - - DropDown - { - name: "estimatedMarginalMeansHeterogeneityTransformation" - label: qsTr("Heterogeneity transformation") - values: [ - { label: qsTr("𝜏") , value: "tau" }, - { label: qsTr("𝜏²") , value: "tau2" } - ] - } - } - } - } + MA.ClassicalMetaAnalysisDiagnostics {} - Section - { - title: qsTr("Forest Plot") - columns: 1 - - CheckBox - { - id: forestPlotStudyInformation - name: "forestPlotStudyInformation" - text: qsTr("Study information") - } - - VariablesForm - { - preferredHeight: 150 * preferencesModel.uiScale - enabled: forestPlotStudyInformation.checked - - AvailableVariablesList - { - name: "forestPlotStudyInformationAllVariables" - } - - AssignedVariablesList - { - name: "forestPlotStudyInformationSelectedVariables" - id: forestPlotStudyInformationSelectedVariables - title: qsTr("Selected Variables") - allowedColumns: ["nominal"] - } - } - - ComponentsList - { - name: "forestPlotStudyInformationSelectedVariablesSettings" - source: "forestPlotStudyInformationSelectedVariables" - enabled: forestPlotStudyInformation.checked - visible: forestPlotStudyInformationSelectedVariables.count > 0 - headerLabels: [qsTr("Title"), qsTr("Width"), qsTr("Alignment")] - - rowComponent: RowLayout - { - Text - { - text: rowValue - Layout.preferredWidth: 100 * preferencesModel.uiScale - elide: Text.ElideRight - } - - TextField - { - label: "" - name: "title" - value: "" - fieldWidth: 120 * preferencesModel.uiScale - useExternalBorder: false - showBorder: true - } - - DoubleField - { - label: "" - name: "width" - value: "1" - min: 0 - inclusive: JASP.None - fieldWidth: 40 * preferencesModel.uiScale - useExternalBorder: false - showBorder: true - } - - DropDown - { - label: "" - name: "alignment" - values: [ - { label: qsTr("Left") , value: "left" }, - { label: qsTr("Middle") , value: "middle" }, - { label: qsTr("Right") , value: "right" } - ] - fieldWidth: 40 * preferencesModel.uiScale - useExternalBorder: false - showBorder: true - } - } - } - - Group - { - enabled: forestPlotStudyInformation.checked - columns: 2 - - Group - { - CheckBox - { - name: "forestPlotStudyInformationPredictedEffects" - text: qsTr("Predicted effects") - enabled: effectSize.count == 1 && effectSizeStandardError.count == 1 - checked: false - Layout.preferredWidth: 300 * jaspTheme.uiScale - } - - CheckBox - { - name: "forestPlotStudyInformationStudyWeights" - text: qsTr("Study weights") - enabled: forestPlotStudyInformation.checked - } - } - - Group - { - title: qsTr("Order") - DropDown - { - name: "forestPlotStudyInformationOrderBy" - label: qsTr("By") - addEmptyValue: true - } - - CheckBox - { - name: "forestPlotStudyInformationOrderAscending" - text: qsTr("Ascending") - } - } - } - - - - Divider { } - - CheckBox - { - name: "forestPlotEstimatedMarginalMeans" - id: forestPlotEstimatedMarginalMeans - text: qsTr("Estimated marginal means") - enabled: effectSizeModelTerms.count > 0 - } - - VariablesForm - { - preferredHeight: 250 * preferencesModel.uiScale - enabled: forestPlotEstimatedMarginalMeans.checked - - AvailableVariablesList - { - name: "forestPlotEstimatedMarginalMeansModelVariables" - title: qsTr("Model variables") - source: [{ name: "effectSizeModelTerms", use: "noInteraction" }] - } - - AssignedVariablesList - { - id: forestPlotEstimatedMarginalMeansSelectedVariables - name: "forestPlotEstimatedMarginalMeansSelectedVariables" - title: qsTr("Selected variables") - allowTypeChange:false - } - } - - Group - { - columns: 2 - - Group - { - CheckBox - { - name: "forestPlotEstimatedMarginalMeansTermTests" - id: forestPlotEstimatedMarginalMeansTermTests - enabled: forestPlotEstimatedMarginalMeans.checked - label: qsTr("Term tests") - checked: true - Layout.preferredWidth: 350 * jaspTheme.uiScale - } - - CheckBox - { - name: "forestPlotEstimatedMarginalMeansCoefficientTests" - id: forestPlotEstimatedMarginalMeansCoefficientTests - enabled: forestPlotEstimatedMarginalMeans.checked - label: qsTr("Coefficient tests") - checked: true - - DoubleField - { - name: "forestPlotEstimatedMarginalMeansCoefficientTestsAgainst" - text: qsTr("Against") - defaultValue: 0 - } - } - - } - - CheckBox - { - name: "forestPlotEstimatedMarginalMeansAdjustedEffectSizeEstimate" - label: qsTr("Adjusted effect size estimate") - enabled: forestPlotEstimatedMarginalMeans.checked - } - } - - - Divider { } - - CheckBox - { - name: "forestPlotModelInformation" - id: forestPlotModelInformation - enabled: effectSize.count == 1 && effectSizeStandardError.count == 1 - text: qsTr("Model information") - } - - Group - { - enabled: forestPlotModelInformation.checked - columns: 2 - - CheckBox - { - name: "forestPlotPooledEffectSizeEstimate" - text: qsTr("Pooled effect size estimate") - checked: true - Layout.preferredWidth: 300 * jaspTheme.uiScale - } - - CheckBox - { - name: "forestPlotPooledEffectSizeTest" - text: qsTr("Pooled effect size test") - checked: true - } - - CheckBox - { - name: "forestPlotResidualHeterogeneityTest" - text: qsTr("Residual heterogeneity test") - checked: true - } - - CheckBox - { - name: "forestPlotResidualHeterogeneityEstimate" - text: qsTr("Residual heterogeneity estimate") - enabled: (method.value != "fixedEffects" || method.value != "equalEffects") - checked: true - } - - CheckBox - { - name: "forestPlotEffectSizeModerationTest" - text: qsTr("Effect size moderation test") - enabled: effectSizeModelTerms.count > 0 - checked: true - } - - CheckBox - { - name: "forestPlotHeterogeneityModerationTest" - text: qsTr("Heterogeneity moderation test") - enabled: heterogeneityModelTerms.count > 0 - checked: true - } - } - - - Divider {} - - Text - { - text: qsTr("Settings") - } - - Group - { - columns: 2 - - - Group - { - CheckBox - { - name: "forestPlotPredictionIntervals" - text: qsTr("Prediction intervals") - checked: true - Layout.preferredWidth: 300 * jaspTheme.uiScale - } - - CheckBox - { - name: "forestPlotEstimatesAndConfidenceIntervals" - text: qsTr("Estimates and confidence intervals") - checked: true - } - - CheckBox - { - name: "forestPlotTestsInRightPanel" - text: qsTr("Tests in right panel") - checked: false - } - } - - Group - { - title: qsTr("Mapping") - - DropDown - { - name: "forestPlotMappingColor" - label: qsTr("Color") - addEmptyValue: true - } - - DropDown - { - name: "forestPlotMappingShape" - label: qsTr("Shape") - addEmptyValue: true - } - } - - - - Group - { - title: qsTr("Relative Size") - - DoubleField - { - name: "forestPlotRelativeSizeEstimates" - text: qsTr("Estimates") - defaultValue: 1 - min: 0 - inclusive: JASP.None - } - - DoubleField - { - name: "forestPlotRelativeSizeText" - text: qsTr("Text") - defaultValue: 1 - min: 0 - inclusive: JASP.None - } - - DoubleField - { - name: "forestPlotRelativeSizeAxisLabels" - text: qsTr("Axis labels") - defaultValue: 1 - min: 0 - inclusive: JASP.None - } - - DoubleField - { - name: "forestPlotRelativeSizeRow" - text: qsTr("Row") - defaultValue: 1 - min: 0 - inclusive: JASP.None - } - - DoubleField - { - name: "forestPlotRelativeSizeLeftPanel" - text: qsTr("Left panel") - defaultValue: 0.5 - min: 0 - inclusive: JASP.None - } - - DoubleField - { - name: "forestPlotRelativeSizeMiddlePanel" - text: qsTr("Middle panel") - defaultValue: 1 - min: 0 - inclusive: JASP.None - } - - DoubleField - { - name: "forestPlotRelativeSizeRightPanel" - text: qsTr("Right panel") - defaultValue: 0.5 - min: 0 - inclusive: JASP.None - } - - CheckBox - { - name: "forestPlotAuxiliaryAdjustWidthBasedOnText" - text: qsTr("Adjust width based on text") - checked: true - } - } - - Group - { - title: qsTr("Auxiliary") - - IntegerField - { - name: "forestPlotAuxiliaryDigits" - text: qsTr("Digits") - min: 1 - value: 2 - inclusive: JASP.None - } - - DropDown - { - label: qsTr("Tests information") - name: "forestPlotAuxiliaryTestsInformation" - values: [ - { label: qsTr("Statistic and p-value") , value: "statisticAndPValue" }, - { label: qsTr("P-value") , value: "pValue" } - ] - } - - DropDown - { - name: "forestPlotAuxiliaryPlotColor" - label: qsTr("Color") - values: [ - { label: qsTr("Black") , value: "black"}, - { label: qsTr("Blue") , value: "blue" }, - { label: qsTr("Red") , value: "red" } - ] - } - - CheckBox - { - name: "forestPlotAuxiliaryAddVerticalLine" - text: qsTr("Add vertical line") - childrenOnSameRow: true - - DoubleField - { - name: "forestPlotAuxiliaryAddVerticalLineValue" - defaultValue: 0 - negativeValues: true - } - } - - CheckBox - { - name: "forestPlotAuxiliaryAddVerticalLine2" - text: qsTr("Add vertical line (2)") - childrenOnSameRow: true - - DoubleField - { - name: "forestPlotAuxiliaryAddVerticalLineValue2" - defaultValue: 0 - negativeValues: true - } - } - - TextField - { - name: "forestPlotAuxiliaryEffectLabel" - text: qsTr("X-axis label") - value: "Effect Size" - } - - CheckBox - { - name: "forestPlotAuxiliarySetXAxisLimit" - text: qsTr("X-axis limits") - childrenOnSameRow: true - - DoubleField - { - name: "forestPlotAuxiliarySetXAxisLimitLower" - id: forestPlotAuxiliarySetXAxisLimitLower - text: qsTr("Lower") - defaultValue: -1 - negativeValues: true - max: forestPlotAuxiliarySetXAxisLimitUpper - inclusive: JASP.None - } - - DoubleField - { - name: "forestPlotAuxiliarySetXAxisLimitUpper" - id: forestPlotAuxiliarySetXAxisLimitUpper - text: qsTr("Upper") - defaultValue: 1 - min: forestPlotAuxiliarySetXAxisLimitLower - inclusive: JASP.None - } - } - - } - - } - - - } - - Section - { - title: qsTr("Bubble Plot") - - VariablesForm - { - preferredHeight: 200 * preferencesModel.uiScale - - AvailableVariablesList - { - name: "bubblePlotModelVariables" - title: qsTr("Model variables") - source: [{ name: "effectSizeModelTerms", use: "noInteraction" }] - } - - AssignedVariablesList - { - name: "bubblePlotSelectedVariable" - id: bubblePlotSelectedVariable - title: qsTr("Selected variable") - singleVariable: true - allowTypeChange:false - } - - AssignedVariablesList - { - name: "bubblePlotSeparateLines" - id: bubblePlotSeparateLines - title: qsTr("Separate Lines") - allowTypeChange:false - } - - AssignedVariablesList - { - name: "bubblePlotSeparatePlots" - id: bubblePlotSeparatePlots - title: qsTr("Separate Plots") - allowTypeChange:false - } - } - - Group - { - columns: 2 - - Group - { - DoubleField - { - name: "bubblePlotSdFactorCovariates" - label: qsTr("SD factor covariates") - defaultValue: 1 - min: 0 - enabled: bubblePlotSeparateLines.columnsTypes.includes("scale") || bubblePlotSeparatePlots.columnsTypes.includes("scale") - Layout.preferredWidth: 300 * jaspTheme.uiScale - } - - Group - { - title: qsTr("Bubles") - - DropDown - { - name: "bubblePlotBubblesSize" - label: qsTr("Size") - values: [ - { label: qsTr("Weight") , value: "weight"}, - { label: qsTr("Inverse variance") , value: "inverseVariance" }, - { label: qsTr("Equal") , value: "equal" } - ] - } - - DoubleField - { - name: "bubblePlotBubblesRelativeSize" - label: qsTr("Relative size") - defaultValue: 1 - min: 0 - inclusive: JASP.None - } - - DoubleField - { - name: "bubblePlotBubblesTransparency" - label: qsTr("Transparency") - defaultValue: 0.90 - min: 0 - max: 1 - inclusive: JASP.None - } - - DoubleField - { - enabled: bubblePlotSelectedVariable.columnsTypes.includes("nominal") - name: "bubblePlotBubblesJitter" - label: qsTr("Jitter") - defaultValue: 0.1 - min: 0 - } - } - } - - Group - { - CheckBox - { - name: "bubblePlotCondifenceIntervals" - label: qsTr("Condifence intervals") - checked: true - - DoubleField - { - name: "bubblePlotCondifenceIntervalsTransparency" - label: qsTr("Transparency") - defaultValue: 0.30 - min: 0 - max: 1 - inclusive: JASP.None - } - } - - CheckBox - { - name: "bubblePlotPredictionIntervals" - label: qsTr("Prediction intervals") - checked: true - - DoubleField - { - name: "bubblePlotPredictionIntervalsTransparency" - label: qsTr("Transparency") - defaultValue: 0.10 - min: 0 - max: 1 - inclusive: JASP.None - } - } - } - - Group - { - - ColorPalette{} - - DropDown - { - name: "bubblePlotTheme" - id: bubblePlotTheme - label: qsTr("Theme") - startValue: "jasp" - values: - [ - { label: "JASP", value: "jasp"}, - { label: qsTr("White background"), value: "whiteBackground"}, - { label: qsTr("Light"), value: "light"}, - { label: qsTr("Minimal") , value: "minimal"}, - { label: "APA", value: "apa"}, - { label: "pubr", value: "pubr"} - ] - } - - DoubleField - { - enabled: bubblePlotTheme.value != "jasp" - name: "bubblePlotRelativeSizeText" - label: qsTr("Relative text size") - defaultValue: 1.5 - min: 0 - inclusive: JASP.None - } - - DropDown - { - name: "bubblePlotLegendPosition" - label: qsTr("Legend position") - startValue: "right" - values: - [ - { label: qsTr("None"), value: "none"}, - { label: qsTr("Bottom"), value: "bottom"}, - { label: qsTr("Right"), value: "right"}, - { label: qsTr("Top"), value: "top"}, - { label: qsTr("Left"), value: "left"} - ] - } - } - } - - } - - Section - { - title: qsTr("Diagnostics") - columns: 1 - - Group - { - columns: 2 - - Group - { - CheckBox - { - name: "diagnosticsVarianceInflationFactor" - text: qsTr("Variace inflation factor") - Layout.preferredWidth: 300 * jaspTheme.uiScale - enabled: predictors.count > 0 - - CheckBox - { - name: "diagnosticsVarianceInflationFactorAggregate" - text: qsTr("Aggregate by terms") - checked: true - } - } - - CheckBox - { - name: "diagnosticsCasewiseDiagnostics" - text: qsTr("Casewise diagnostics") - - CheckBox - { - name: "diagnosticsCasewiseDiagnosticsShowInfluentialOnly" - text: qsTr("Show influential only") - } - - CheckBox - { - name: "diagnosticsCasewiseDiagnosticsIncludePredictors" - text: qsTr("Include predictors") - } - - CheckBox - { - name: "diagnosticsCasewiseDiagnosticsDifferenceInCoefficients" - text: qsTr("Difference in coefficients") - } - - CheckBox - { - name: "diagnosticsCasewiseDiagnosticsExportToDataset" - text: qsTr("Export to dataset") - - CheckBox - { - name: "diagnosticsCasewiseDiagnosticsExportToDatasetInfluentialIndicatorOnly" - text: qsTr("Influential indicator only") - checked: true - } - } - - CheckBox - { - name: "diagnosticsCasewiseDiagnosticsRerunWithoutInfluentialCases" - text: qsTr("Rerun without influential cases") - visible: false - } - } - } - - Group - { - title: qsTr("Plots") - - CheckBox - { - name: "diagnosticsPlotsProfileLikelihood" - text: qsTr("Profile likelihood") - } - - CheckBox - { - name: "diagnosticsPlotsBaujat" - text: qsTr("Baujat") - } - } - } - } - - Section - { - title: qsTr("Advanced") - columns: 1 - - Group - { - columns: 2 - - Group - { - - CheckBox - { - name: "showMetaforRCode" - text: qsTr("Show metafor R code") - Layout.preferredWidth: 300 * jaspTheme.uiScale - } - - CheckBox - { - name: "weightedEstimation" - text: qsTr("Weighted estimation") - checked: true - } - - Group - { - title: qsTr("Clustering") - enabled: clustering.count == 1 - - CheckBox - { - name: "clusteringUseClubSandwich" - text: qsTr("Use clubSandwich") - checked: true - } - - CheckBox - { - name: "clusteringSmallSampleCorrection" - text: qsTr("Small sample correction") - checked: true - } - } - } - - Group - { - title: qsTr("Fix Parameters") - - CheckBox - { - name: "fixParametersTau2" - text: qsTr("𝜏²") - enabled: heterogeneityModelTerms.count == 0 - childrenOnSameRow: true - - FormulaField - { - label: "" - name: "fixParametersTau2Value" - value: "1" - min: 0 - inclusive: JASP.None - } - } - - CheckBox - { - name: "fixParametersWeights" - text: qsTr("Weights") - childrenOnSameRow: true - - DropDown - { - label: "" - name: "fixParametersWeightsVariable" - source: "allVariables" - } - } - } - - Group - { - title: qsTr("Add Omibus Moderator Test") - enabled: effectSizeModelTerms.count > 0 || heterogeneityModelTerms.count > 0 - - CheckBox - { - text: qsTr("Effect size coefficients") - name: "addOmnibusModeratorTestEffectSizeCoefficients" - enabled: effectSizeModelTerms.count > 0 - childrenOnSameRow: false - - TextField - { - label: "" - name: "addOmnibusModeratorTestEffectSizeCoefficientsValues" - value: "c(1, 2)" - } - } - - CheckBox - { - text: qsTr("Heterogeneity coefficients") - name: "addOmnibusModeratorTestHeterogeneityCoefficients" - enabled: heterogeneityModelTerms.count > 0 - childrenOnSameRow: false - - TextField - { - label: "" - name: "addOmnibusModeratorTestHeterogeneityCoefficientsValues" - value: "c(1, 2)" - } - } - } - - Group - { - title: qsTr("Optimizer") - enabled: method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || - method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu" || - method.value == "sidikJonkman" - - DropDown - { - name: "optimizerMethod" - label: qsTr("Method") // TODO: switch default value on heterogeneityModelLink change - values: { - if (heterogeneityModelLink.value == "log") - ["nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] - else - ["constrOptim", "nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] - } - visible: heterogeneityModelTerms.count > 0 - } - - CheckBox - { - name: "optimizerInitialTau2" - text: qsTr("Initial 𝜏²") - checked: false - childrenOnSameRow: true - visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || - method.value == "sidikJonkman") && heterogeneityModelTerms.count == 0 - - DoubleField - { - label: "" - name: "optimizerInitialTau2Value" - defaultValue: 1 - min: 0 - inclusive: JASP.None - } - } - - CheckBox - { - name: "optimizerMinimumTau2" - text: qsTr("Minimum 𝜏²") - checked: false - childrenOnSameRow: true - visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && - heterogeneityModelTerms.count == 0 - - DoubleField - { - label: "" - name: "optimizerMinimumTau2Value" - id: optimizerMinimumTau2Value - defaultValue: 1e-6 - min: 0 - max: optimizerMaximumTau2Value.value - } - } - - CheckBox - { - name: "optimizerMaximumTau2" - text: qsTr("Maximum 𝜏²") - checked: false - childrenOnSameRow: true - visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && - heterogeneityModelTerms.count == 0 - - DoubleField - { - label: "" - name: "optimizerMaximumTau2Value" - id: optimizerMaximumTau2Value - defaultValue: 100 - min: optimizerMinimumTau2Value.value - inclusive: JASP.None - } - } - - CheckBox - { - name: "optimizerMaximumIterations" - text: qsTr("Maximum iterations") - checked: false - childrenOnSameRow: true - visible: method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || - method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu" - - IntegerField - { - label: "" - name: "optimizerMaximumIterationsValue" - value: { - if (heterogeneityModelTerms.count == 0) - 100 - else - 1000 - } - min: 1 - inclusive: JASP.None - } - } - - CheckBox - { - name: "optimizerConvergenceTolerance" - text: qsTr("Convergence tolerance") - checked: false - childrenOnSameRow: true - visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || - method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && - heterogeneityModelTerms.count == 0 - - DoubleField - { - label: "" - name: "optimizerConvergenceToleranceValue" - defaultValue: { - if (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") - 1e-5 - else if (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") - 1e-4 - else - 1 - } - min: 0 - inclusive: JASP.None - } - } - - CheckBox - { - name: "optimizerConvergenceRelativeTolerance" - text: qsTr("Convergence relative tolerance") - checked: false - childrenOnSameRow: true - visible: heterogeneityModelTerms.count > 0 - - DoubleField - { - label: "" - name: "optimizerConvergenceRelativeToleranceValue" - defaultValue: 1e-8 - min: 0 - inclusive: JASP.None - } - } - - CheckBox - { - name: "optimizerStepAdjustment" - text: qsTr("Step adjustment") - checked: false - childrenOnSameRow: true - visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") && - heterogeneityModelTerms.count == 0 - - DoubleField - { - label: "" - name: "optimizerStepAdjustmentValue" - defaultValue: 1 - min: 0 - inclusive: JASP.None - } - } - } - } - } + MA.ClassicalMetaAnalysisAdvanced {} } diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml new file mode 100644 index 00000000..66650dd0 --- /dev/null +++ b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml @@ -0,0 +1,312 @@ +// +// Copyright (C) 2013-2018 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 2.8 +import QtQuick.Layouts 1.3 +import JASP.Controls 1.0 +import JASP.Widgets 1.0 +import JASP 1.0 + +Section +{ + title: qsTr("Advanced") + property string module: "metaAnalysis" + columns: 1 + + Group + { + columns: 2 + + Group + { + + CheckBox + { + name: "showMetaforRCode" + text: qsTr("Show metafor R code") + Layout.preferredWidth: 300 * jaspTheme.uiScale + } + + CheckBox + { + name: "weightedEstimation" + text: qsTr("Weighted estimation") + checked: true + } + + Group + { + title: qsTr("Clustering") + enabled: clustering.count == 1 + + CheckBox + { + name: "clusteringUseClubSandwich" + text: qsTr("Use clubSandwich") + checked: true + } + + CheckBox + { + name: "clusteringSmallSampleCorrection" + text: qsTr("Small sample correction") + checked: true + } + } + } + + Group + { + title: qsTr("Fix Parameters") + + CheckBox + { + name: "fixParametersTau2" + text: qsTr("𝜏²") + enabled: sectionModel.heterogeneityModelTermsCount == 0 + childrenOnSameRow: true + + FormulaField + { + label: "" + name: "fixParametersTau2Value" + value: "1" + min: 0 + inclusive: JASP.None + } + } + + CheckBox + { + name: "fixParametersWeights" + text: qsTr("Weights") + childrenOnSameRow: true + + DropDown + { + label: "" + name: "fixParametersWeightsVariable" + source: "allVariables" + } + } + } + + Group + { + title: qsTr("Add Omibus Moderator Test") + enabled: sectionModel.effectSizeModelTermsCount > 0 || sectionModel.heterogeneityModelTermsCount > 0 + + CheckBox + { + text: qsTr("Effect size coefficients") + name: "addOmnibusModeratorTestEffectSizeCoefficients" + enabled: sectionModel.effectSizeModelTermsCount > 0 + childrenOnSameRow: false + + TextField + { + label: "" + name: "addOmnibusModeratorTestEffectSizeCoefficientsValues" + value: "c(1, 2)" + } + } + + CheckBox + { + text: qsTr("Heterogeneity coefficients") + name: "addOmnibusModeratorTestHeterogeneityCoefficients" + enabled: sectionModel.heterogeneityModelTermsCount > 0 + childrenOnSameRow: false + + TextField + { + label: "" + name: "addOmnibusModeratorTestHeterogeneityCoefficientsValues" + value: "c(1, 2)" + } + } + } + + Group + { + title: qsTr("Optimizer") + enabled: method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu" || + method.value == "sidikJonkman" + + DropDown + { + name: "optimizerMethod" + label: qsTr("Method") // TODO: switch default value on heterogeneityModelLink change + values: { + if (sectionModel.heterogeneityModelLinkValue == "log") + ["nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] + else + ["constrOptim", "nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] + } + visible: sectionModel.heterogeneityModelTermsCount > 0 + } + + CheckBox + { + name: "optimizerInitialTau2" + text: qsTr("Initial 𝜏²") + checked: false + childrenOnSameRow: true + visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + method.value == "sidikJonkman") && sectionModel.heterogeneityModelTermsCount == 0 + + DoubleField + { + label: "" + name: "optimizerInitialTau2Value" + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + } + + CheckBox + { + name: "optimizerMinimumTau2" + text: qsTr("Minimum 𝜏²") + checked: false + childrenOnSameRow: true + visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && + sectionModel.heterogeneityModelTermsCount == 0 + + DoubleField + { + label: "" + name: "optimizerMinimumTau2Value" + id: optimizerMinimumTau2Value + defaultValue: 1e-6 + min: 0 + max: optimizerMaximumTau2Value.value + } + } + + CheckBox + { + name: "optimizerMaximumTau2" + text: qsTr("Maximum 𝜏²") + checked: false + childrenOnSameRow: true + visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && + sectionModel.heterogeneityModelTermsCount == 0 + + DoubleField + { + label: "" + name: "optimizerMaximumTau2Value" + id: optimizerMaximumTau2Value + defaultValue: 100 + min: optimizerMinimumTau2Value.value + inclusive: JASP.None + } + } + + CheckBox + { + name: "optimizerMaximumIterations" + text: qsTr("Maximum iterations") + checked: false + childrenOnSameRow: true + visible: method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu" + + IntegerField + { + label: "" + name: "optimizerMaximumIterationsValue" + value: { + if (sectionModel.heterogeneityModelTermsCount == 0) + 100 + else + 1000 + } + min: 1 + inclusive: JASP.None + } + } + + CheckBox + { + name: "optimizerConvergenceTolerance" + text: qsTr("Convergence tolerance") + checked: false + childrenOnSameRow: true + visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && + sectionModel.heterogeneityModelTermsCount == 0 + + DoubleField + { + label: "" + name: "optimizerConvergenceToleranceValue" + defaultValue: { + if (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") + 1e-5 + else if (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") + 1e-4 + else + 1 + } + min: 0 + inclusive: JASP.None + } + } + + CheckBox + { + name: "optimizerConvergenceRelativeTolerance" + text: qsTr("Convergence relative tolerance") + checked: false + childrenOnSameRow: true + visible: sectionModel.heterogeneityModelTermsCount > 0 + + DoubleField + { + label: "" + name: "optimizerConvergenceRelativeToleranceValue" + defaultValue: 1e-8 + min: 0 + inclusive: JASP.None + } + } + + CheckBox + { + name: "optimizerStepAdjustment" + text: qsTr("Step adjustment") + checked: false + childrenOnSameRow: true + visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") && + sectionModel.heterogeneityModelTermsCount == 0 + + DoubleField + { + label: "" + name: "optimizerStepAdjustmentValue" + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + } + } + } +} \ No newline at end of file diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml b/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml new file mode 100644 index 00000000..deaf893a --- /dev/null +++ b/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml @@ -0,0 +1,213 @@ +// +// Copyright (C) 2013-2018 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 2.8 +import QtQuick.Layouts 1.3 +import JASP.Controls 1.0 +import JASP.Widgets 1.0 +import JASP 1.0 + +Section +{ + title: qsTr("Bubble Plot") + property string module: "metaAnalysis" + + VariablesForm + { + preferredHeight: 200 * preferencesModel.uiScale + + AvailableVariablesList + { + name: "bubblePlotModelVariables" + title: qsTr("Model variables") + source: [{ name: "effectSizeModelTerms", use: "noInteraction" }] + } + + AssignedVariablesList + { + name: "bubblePlotSelectedVariable" + id: bubblePlotSelectedVariable + title: qsTr("Selected variable") + singleVariable: true + allowTypeChange:false + } + + AssignedVariablesList + { + name: "bubblePlotSeparateLines" + id: bubblePlotSeparateLines + title: qsTr("Separate Lines") + allowTypeChange:false + } + + AssignedVariablesList + { + name: "bubblePlotSeparatePlots" + id: bubblePlotSeparatePlots + title: qsTr("Separate Plots") + allowTypeChange:false + } + } + + Group + { + columns: 2 + + Group + { + DoubleField + { + name: "bubblePlotSdFactorCovariates" + label: qsTr("SD factor covariates") + defaultValue: 1 + min: 0 + enabled: bubblePlotSeparateLines.columnsTypes.includes("scale") || bubblePlotSeparatePlots.columnsTypes.includes("scale") + Layout.preferredWidth: 300 * jaspTheme.uiScale + } + + Group + { + title: qsTr("Bubles") + + DropDown + { + name: "bubblePlotBubblesSize" + label: qsTr("Size") + values: [ + { label: qsTr("Weight") , value: "weight"}, + { label: qsTr("Inverse variance") , value: "inverseVariance" }, + { label: qsTr("Equal") , value: "equal" } + ] + } + + DoubleField + { + name: "bubblePlotBubblesRelativeSize" + label: qsTr("Relative size") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "bubblePlotBubblesTransparency" + label: qsTr("Transparency") + defaultValue: 0.90 + min: 0 + max: 1 + inclusive: JASP.None + } + + DoubleField + { + enabled: bubblePlotSelectedVariable.columnsTypes.includes("nominal") + name: "bubblePlotBubblesJitter" + label: qsTr("Jitter") + defaultValue: 0.1 + min: 0 + } + } + } + + Group + { + CheckBox + { + name: "bubblePlotCondifenceIntervals" + label: qsTr("Condifence intervals") + checked: true + + DoubleField + { + name: "bubblePlotCondifenceIntervalsTransparency" + label: qsTr("Transparency") + defaultValue: 0.30 + min: 0 + max: 1 + inclusive: JASP.None + } + } + + CheckBox + { + name: "bubblePlotPredictionIntervals" + label: qsTr("Prediction intervals") + checked: true + + DoubleField + { + name: "bubblePlotPredictionIntervalsTransparency" + label: qsTr("Transparency") + defaultValue: 0.10 + min: 0 + max: 1 + inclusive: JASP.None + } + } + } + + Group + { + + ColorPalette{} + + DropDown + { + name: "bubblePlotTheme" + id: bubblePlotTheme + label: qsTr("Theme") + startValue: "jasp" + values: + [ + { label: "JASP", value: "jasp"}, + { label: qsTr("White background"), value: "whiteBackground"}, + { label: qsTr("Light"), value: "light"}, + { label: qsTr("Minimal") , value: "minimal"}, + { label: "APA", value: "apa"}, + { label: "pubr", value: "pubr"} + ] + } + + DoubleField + { + enabled: bubblePlotTheme.value != "jasp" + name: "bubblePlotRelativeSizeText" + label: qsTr("Relative text size") + defaultValue: 1.5 + min: 0 + inclusive: JASP.None + } + + DropDown + { + name: "bubblePlotLegendPosition" + label: qsTr("Legend position") + startValue: "right" + values: + [ + { label: qsTr("None"), value: "none"}, + { label: qsTr("Bottom"), value: "bottom"}, + { label: qsTr("Right"), value: "right"}, + { label: qsTr("Top"), value: "top"}, + { label: qsTr("Left"), value: "left"} + ] + } + } + } + +} diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml b/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml index 21cda798..491a246a 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml @@ -23,22 +23,91 @@ import JASP 1.0 Section { - title: qsTr("Diagnostics") + title: qsTr("Diagnostics") + property string module: "metaAnalysis" + columns: 1 + Group { - title: qsTr("Plots") - CheckBox { name: "trimFillAnalysis"; text: qsTr("Trim-fill analysis") } - CheckBox { name: "profilePlot"; text: qsTr("Profile plot") } - CheckBox + columns: 2 + + Group + { + CheckBox + { + name: "diagnosticsVarianceInflationFactor" + text: qsTr("Variace inflation factor") + Layout.preferredWidth: 300 * jaspTheme.uiScale + enabled: predictors.count > 0 + + CheckBox + { + name: "diagnosticsVarianceInflationFactorAggregate" + text: qsTr("Aggregate by terms") + checked: true + } + } + + CheckBox + { + name: "diagnosticsCasewiseDiagnostics" + text: qsTr("Casewise diagnostics") + + CheckBox + { + name: "diagnosticsCasewiseDiagnosticsShowInfluentialOnly" + text: qsTr("Show influential only") + } + + CheckBox + { + name: "diagnosticsCasewiseDiagnosticsIncludePredictors" + text: qsTr("Include predictors") + } + + CheckBox + { + name: "diagnosticsCasewiseDiagnosticsDifferenceInCoefficients" + text: qsTr("Difference in coefficients") + } + + CheckBox + { + name: "diagnosticsCasewiseDiagnosticsExportToDataset" + text: qsTr("Export to dataset") + + CheckBox + { + name: "diagnosticsCasewiseDiagnosticsExportToDatasetInfluentialIndicatorOnly" + text: qsTr("Influential indicator only") + checked: true + } + } + + CheckBox + { + name: "diagnosticsCasewiseDiagnosticsRerunWithoutInfluentialCases" + text: qsTr("Rerun without influential cases") + visible: false + } + } + } + + Group { - name: "diagnosticPlot"; text: qsTr("Diagnostic plots") - CheckBox { name: "diagnosticQqPlot"; text: qsTr("Q-Q plot standardized residuals"); checked: true } + title: qsTr("Plots") + + CheckBox + { + name: "diagnosticsPlotsProfileLikelihood" + text: qsTr("Profile likelihood") + } + + CheckBox + { + name: "diagnosticsPlotsBaujat" + text: qsTr("Baujat") + } } } - Group - { - title: qsTr("Robustness") - CheckBox { name: "failSafeN"; text: qsTr("Fail-safe N") } - CheckBox { name: "casewiseDiagnostics"; text: qsTr("Casewise diagnostics") } - } } \ No newline at end of file diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml b/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml new file mode 100644 index 00000000..f3cc4291 --- /dev/null +++ b/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml @@ -0,0 +1,146 @@ +// +// Copyright (C) 2013-2018 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 2.8 +import QtQuick.Layouts 1.3 +import JASP.Controls 1.0 +import JASP.Widgets 1.0 +import JASP 1.0 + +Section +{ + title: qsTr("Estimated Marginal Means") + columns: 1 + property string module: "metaAnalysis" + + Group + { + title: qsTr("Effect size") + enabled: sectionModel.effectSizeModelTermsCount > 0 + + VariablesForm + { + preferredHeight: 250 * preferencesModel.uiScale + + AvailableVariablesList + { + name: "estimatedMarginalMeansEffectSizeModelVariables" + title: qsTr("Model variables") + source: [{ name: "effectSizeModelTerms", use: "noInteraction" }] + } + + AssignedVariablesList + { + id: estimatedMarginalMeansEffectSizeSelectedVariables + name: "estimatedMarginalMeansEffectSizeSelectedVariables" + title: qsTr("Selected variables") + allowTypeChange:false + } + } + + Group + { + columns: 2 + + DoubleField + { + name: "estimatedMarginalMeansEffectSizeSdFactorCovariates" + label: qsTr("SD factor covariates") + defaultValue: 1 + min: 0 + enabled: estimatedMarginalMeansEffectSizeSelectedVariables.columnsTypes.includes("scale") + Layout.preferredWidth: 350 * jaspTheme.uiScale + } + + CheckBox + { + name: "estimatedMarginalMeansEffectSizeAddAdjustedEstimate" + label: qsTr("Add adjusted estimate") + } + + CheckBox + { + name: "estimatedMarginalMeansEffectSizeTestAgainst" + label: qsTr("Test against") + childrenOnSameRow: true + + DoubleField + { + name: "estimatedMarginalMeansEffectSizeTestAgainstValue" + defaultValue: 0 + } + } + } + } + + Group + { + title: qsTr("Heterogeneity") + enabled: heterogeneityModelTerms.count > 0 + + VariablesForm + { + preferredHeight: 250 * preferencesModel.uiScale + + AvailableVariablesList + { + name: "estimatedMarginalHeterogeneityModelVariables" + title: qsTr("Model variables") + source: [{ name: "heterogeneityModelTerms", use: "noInteraction" }] + } + + AssignedVariablesList + { + id: estimatedMarginalMeansHeterogeneitySelectedVariables + name: "estimatedMarginalMeansHeterogeneitySelectedVariables" + title: qsTr("Selected variables") + allowTypeChange:false + } + } + + Group + { + columns: 2 + + DoubleField + { + name: "estimatedMarginalMeansHeterogeneitySdFactorCovariates" + label: qsTr("SD factor covariates") + defaultValue: 1 + min: 0 + enabled: estimatedMarginalMeansHeterogeneitySelectedVariables.columnsTypes.includes("scale") + Layout.preferredWidth: 350 * jaspTheme.uiScale + } + + CheckBox + { + name: "estimatedMarginalMeansHeterogeneityAddAdjustedEstimate" + label: qsTr("Add adjusted estimate") + } + + DropDown + { + name: "estimatedMarginalMeansHeterogeneityTransformation" + label: qsTr("Heterogeneity transformation") + values: [ + { label: qsTr("𝜏") , value: "tau" }, + { label: qsTr("𝜏²") , value: "tau2" } + ] + } + } + } +} \ No newline at end of file diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml b/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml new file mode 100644 index 00000000..b44fddc2 --- /dev/null +++ b/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml @@ -0,0 +1,527 @@ +// +// Copyright (C) 2013-2018 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 2.8 +import QtQuick.Layouts 1.3 +import JASP.Controls 1.0 +import JASP.Widgets 1.0 +import JASP 1.0 + +Section +{ + title: qsTr("Forest Plot") + property string module: "metaAnalysis" + columns: 1 + + CheckBox + { + id: forestPlotStudyInformation + name: "forestPlotStudyInformation" + text: qsTr("Study information") + } + + VariablesForm + { + preferredHeight: 150 * preferencesModel.uiScale + enabled: forestPlotStudyInformation.checked + + AvailableVariablesList + { + name: "forestPlotStudyInformationAllVariables" + } + + AssignedVariablesList + { + name: "forestPlotStudyInformationSelectedVariables" + id: forestPlotStudyInformationSelectedVariables + title: qsTr("Selected Variables") + allowedColumns: ["nominal"] + } + } + + ComponentsList + { + name: "forestPlotStudyInformationSelectedVariablesSettings" + source: "forestPlotStudyInformationSelectedVariables" + enabled: forestPlotStudyInformation.checked + visible: forestPlotStudyInformationSelectedVariables.count > 0 + headerLabels: [qsTr("Title"), qsTr("Width"), qsTr("Alignment")] + + rowComponent: RowLayout + { + Text + { + text: rowValue + Layout.preferredWidth: 100 * preferencesModel.uiScale + elide: Text.ElideRight + } + + TextField + { + label: "" + name: "title" + value: "" + fieldWidth: 120 * preferencesModel.uiScale + useExternalBorder: false + showBorder: true + } + + DoubleField + { + label: "" + name: "width" + value: "1" + min: 0 + inclusive: JASP.None + fieldWidth: 40 * preferencesModel.uiScale + useExternalBorder: false + showBorder: true + } + + DropDown + { + label: "" + name: "alignment" + values: [ + { label: qsTr("Left") , value: "left" }, + { label: qsTr("Middle") , value: "middle" }, + { label: qsTr("Right") , value: "right" } + ] + fieldWidth: 40 * preferencesModel.uiScale + useExternalBorder: false + showBorder: true + } + } + } + + Group + { + enabled: forestPlotStudyInformation.checked + columns: 2 + + Group + { + CheckBox + { + name: "forestPlotStudyInformationPredictedEffects" + text: qsTr("Predicted effects") + enabled: effectSize.count == 1 && effectSizeStandardError.count == 1 + checked: false + Layout.preferredWidth: 300 * jaspTheme.uiScale + } + + CheckBox + { + name: "forestPlotStudyInformationStudyWeights" + text: qsTr("Study weights") + enabled: forestPlotStudyInformation.checked + } + } + + Group + { + title: qsTr("Order") + DropDown + { + name: "forestPlotStudyInformationOrderBy" + label: qsTr("By") + addEmptyValue: true + } + + CheckBox + { + name: "forestPlotStudyInformationOrderAscending" + text: qsTr("Ascending") + } + } + } + + + + Divider { } + + CheckBox + { + name: "forestPlotEstimatedMarginalMeans" + id: forestPlotEstimatedMarginalMeans + text: qsTr("Estimated marginal means") + enabled: sectionModel.effectSizeModelTermsCount > 0 + } + + VariablesForm + { + preferredHeight: 250 * preferencesModel.uiScale + enabled: forestPlotEstimatedMarginalMeans.checked + + AvailableVariablesList + { + name: "forestPlotEstimatedMarginalMeansModelVariables" + title: qsTr("Model variables") + source: [{ name: "effectSizeModelTerms", use: "noInteraction" }] + } + + AssignedVariablesList + { + id: forestPlotEstimatedMarginalMeansSelectedVariables + name: "forestPlotEstimatedMarginalMeansSelectedVariables" + title: qsTr("Selected variables") + allowTypeChange:false + } + } + + Group + { + columns: 2 + + Group + { + CheckBox + { + name: "forestPlotEstimatedMarginalMeansTermTests" + id: forestPlotEstimatedMarginalMeansTermTests + enabled: forestPlotEstimatedMarginalMeans.checked + label: qsTr("Term tests") + checked: true + Layout.preferredWidth: 350 * jaspTheme.uiScale + } + + CheckBox + { + name: "forestPlotEstimatedMarginalMeansCoefficientTests" + id: forestPlotEstimatedMarginalMeansCoefficientTests + enabled: forestPlotEstimatedMarginalMeans.checked + label: qsTr("Coefficient tests") + checked: true + + DoubleField + { + name: "forestPlotEstimatedMarginalMeansCoefficientTestsAgainst" + text: qsTr("Against") + defaultValue: 0 + } + } + + } + + CheckBox + { + name: "forestPlotEstimatedMarginalMeansAdjustedEffectSizeEstimate" + label: qsTr("Adjusted effect size estimate") + enabled: forestPlotEstimatedMarginalMeans.checked + } + } + + + Divider { } + + CheckBox + { + name: "forestPlotModelInformation" + id: forestPlotModelInformation + enabled: effectSize.count == 1 && effectSizeStandardError.count == 1 + text: qsTr("Model information") + } + + Group + { + enabled: forestPlotModelInformation.checked + columns: 2 + + CheckBox + { + name: "forestPlotPooledEffectSizeEstimate" + text: qsTr("Pooled effect size estimate") + checked: true + Layout.preferredWidth: 300 * jaspTheme.uiScale + } + + CheckBox + { + name: "forestPlotPooledEffectSizeTest" + text: qsTr("Pooled effect size test") + checked: true + } + + CheckBox + { + name: "forestPlotResidualHeterogeneityTest" + text: qsTr("Residual heterogeneity test") + checked: true + } + + CheckBox + { + name: "forestPlotResidualHeterogeneityEstimate" + text: qsTr("Residual heterogeneity estimate") + enabled: (method.value != "fixedEffects" || method.value != "equalEffects") + checked: true + } + + CheckBox + { + name: "forestPlotEffectSizeModerationTest" + text: qsTr("Effect size moderation test") + enabled: sectionModel.effectSizeModelTermsCount > 0 + checked: true + } + + CheckBox + { + name: "forestPlotHeterogeneityModerationTest" + text: qsTr("Heterogeneity moderation test") + enabled: sectionModel.heterogeneityModelTermsCount > 0 + checked: true + } + } + + + Divider {} + + Text + { + text: qsTr("Settings") + } + + Group + { + columns: 2 + + + Group + { + CheckBox + { + name: "forestPlotPredictionIntervals" + text: qsTr("Prediction intervals") + checked: true + Layout.preferredWidth: 300 * jaspTheme.uiScale + } + + CheckBox + { + name: "forestPlotEstimatesAndConfidenceIntervals" + text: qsTr("Estimates and confidence intervals") + checked: true + } + + CheckBox + { + name: "forestPlotTestsInRightPanel" + text: qsTr("Tests in right panel") + checked: false + } + } + + Group + { + title: qsTr("Mapping") + + DropDown + { + name: "forestPlotMappingColor" + label: qsTr("Color") + addEmptyValue: true + } + + DropDown + { + name: "forestPlotMappingShape" + label: qsTr("Shape") + addEmptyValue: true + } + } + + + + Group + { + title: qsTr("Relative Size") + + DoubleField + { + name: "forestPlotRelativeSizeEstimates" + text: qsTr("Estimates") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeText" + text: qsTr("Text") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeAxisLabels" + text: qsTr("Axis labels") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeRow" + text: qsTr("Row") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeLeftPanel" + text: qsTr("Left panel") + defaultValue: 0.5 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeMiddlePanel" + text: qsTr("Middle panel") + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotRelativeSizeRightPanel" + text: qsTr("Right panel") + defaultValue: 0.5 + min: 0 + inclusive: JASP.None + } + + CheckBox + { + name: "forestPlotAuxiliaryAdjustWidthBasedOnText" + text: qsTr("Adjust width based on text") + checked: true + } + } + + Group + { + title: qsTr("Auxiliary") + + IntegerField + { + name: "forestPlotAuxiliaryDigits" + text: qsTr("Digits") + min: 1 + value: 2 + inclusive: JASP.None + } + + DropDown + { + label: qsTr("Tests information") + name: "forestPlotAuxiliaryTestsInformation" + values: [ + { label: qsTr("Statistic and p-value") , value: "statisticAndPValue" }, + { label: qsTr("P-value") , value: "pValue" } + ] + } + + DropDown + { + name: "forestPlotAuxiliaryPlotColor" + label: qsTr("Color") + values: [ + { label: qsTr("Black") , value: "black"}, + { label: qsTr("Blue") , value: "blue" }, + { label: qsTr("Red") , value: "red" } + ] + } + + CheckBox + { + name: "forestPlotAuxiliaryAddVerticalLine" + text: qsTr("Add vertical line") + childrenOnSameRow: true + + DoubleField + { + name: "forestPlotAuxiliaryAddVerticalLineValue" + defaultValue: 0 + negativeValues: true + } + } + + CheckBox + { + name: "forestPlotAuxiliaryAddVerticalLine2" + text: qsTr("Add vertical line (2)") + childrenOnSameRow: true + + DoubleField + { + name: "forestPlotAuxiliaryAddVerticalLineValue2" + defaultValue: 0 + negativeValues: true + } + } + + TextField + { + name: "forestPlotAuxiliaryEffectLabel" + text: qsTr("X-axis label") + value: "Effect Size" + } + + CheckBox + { + name: "forestPlotAuxiliarySetXAxisLimit" + text: qsTr("X-axis limits") + childrenOnSameRow: true + + DoubleField + { + name: "forestPlotAuxiliarySetXAxisLimitLower" + id: forestPlotAuxiliarySetXAxisLimitLower + text: qsTr("Lower") + defaultValue: -1 + negativeValues: true + max: forestPlotAuxiliarySetXAxisLimitUpper + inclusive: JASP.None + } + + DoubleField + { + name: "forestPlotAuxiliarySetXAxisLimitUpper" + id: forestPlotAuxiliarySetXAxisLimitUpper + text: qsTr("Upper") + defaultValue: 1 + min: forestPlotAuxiliarySetXAxisLimitLower + inclusive: JASP.None + } + } + + } + + } + + +} \ No newline at end of file diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisMethod.qml b/inst/qml/qml_components/ClassicalMetaAnalysisMethod.qml index c37cd5de..3ba5c7e1 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisMethod.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisMethod.qml @@ -25,18 +25,30 @@ DropDown { name: "method" label: qsTr("Method") - currentIndex: 2 - visible: visible - - values: [ - { label: qsTr("Fixed Effects") , value: "Fixed Effects" }, - { label: qsTr("Maximum Likelihood") , value: "Maximum Likelihood" }, - { label: qsTr("Restricted ML") , value: "Restricted ML" }, - { label: qsTr("DerSimonian-Laird") , value: "DerSimonian-Laird" }, - { label: qsTr("Hedges") , value: "Hedges" }, - { label: qsTr("Hunter-Schmidt") , value: "Hunter-Schmidt" }, - { label: qsTr("Sidik-Jonkman") , value: "Sidik-Jonkman" }, - { label: qsTr("Empirical Bayes") , value: "Empirical Bayes" }, - { label: qsTr("Paule-Mandel") , value: "Paule-Mandel" } - ] + startValue: "restrictedML" + values: (function() { + if (sectionModel.heterogeneityModelTermsCount == 0) { + return [ + { label: qsTr("Equal Effects") , value: "equalEffects" }, + { label: qsTr("Fixed Effects") , value: "fixedEffects" }, + { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, + { label: qsTr("Restricted ML") , value: "restrictedML" }, + { label: qsTr("DerSimonian-Laird") , value: "derSimonianLaird" }, + { label: qsTr("Hedges") , value: "hedges" }, + { label: qsTr("Hunter-Schmidt") , value: "hunterSchmidt" }, + { label: qsTr("Hunter-Schmidt (SSC)") , value: "hunterSchmidtSsc" }, + { label: qsTr("Sidik-Jonkman") , value: "sidikJonkman" }, + { label: qsTr("Empirical Bayes") , value: "empiricalBayes" }, + { label: qsTr("Paule-Mandel") , value: "pauleMandel" }, + { label: qsTr("Paule-Mandel (MU)") , value: "pauleMandelMu" }, + { label: qsTr("Generalized Q-stat") , value: "qeneralizedQStat" }, + { label: qsTr("Generalized Q-stat (MU)"), value: "qeneralizedQStatMu"} + ]; + } else { + return [ + { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, + { label: qsTr("Restricted ML") , value: "restrictedML" }, + { label: qsTr("Empirical Bayes") , value: "empiricalBayes" } + ]; + }})() } \ No newline at end of file diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml b/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml new file mode 100644 index 00000000..6f351bc5 --- /dev/null +++ b/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml @@ -0,0 +1,112 @@ +// +// Copyright (C) 2013-2018 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 2.8 +import QtQuick.Layouts 1.3 +import JASP.Controls 1.0 +import JASP.Widgets 1.0 +import JASP 1.0 + +Section +{ + title: qsTr("Model") + columns: 2 + property string module: "metaAnalysis" + + property alias effectSizeModelTerms: effectSizeModelTerms + property alias effectSizeModelTermsCount: effectSizeModelTerms.count + property alias heterogeneityModelTermsCount: heterogeneityModelTerms.count + property alias heterogeneityModelLinkValue: heterogeneityModelLink.value + + + + Group + { + title: qsTr("Effect size model") + + VariablesForm + { + preferredHeight: 150 * preferencesModel.uiScale + + AvailableVariablesList + { + name: "effectSizeModelAvailableComponents" + title: qsTr("Available Components") + source: ["predictors"] + } + + AssignedVariablesList + { + name: "effectSizeModelTerms" + id: effectSizeModelTerms + title: qsTr("Model Terms") + listViewType: JASP.Interaction + allowTypeChange:false + } + } + + CheckBox + { + name: "effectSizeModelIncludeIntercept" + label: qsTr("Include intercept") + checked: true + } + } + + Group + { + title: qsTr("Heterogeneity model") + columns: 2 + + VariablesForm + { + preferredHeight: 150 * preferencesModel.uiScale + + AvailableVariablesList + { + name: "heterogeneityModelAvailableComponents" + title: qsTr("Available Components") + source: ["predictors"] + } + + AssignedVariablesList + { + name: "heterogeneityModelTerms" + id: heterogeneityModelTerms + title: qsTr("Model Terms") + listViewType: JASP.Interaction + allowTypeChange:false + addAvailableVariablesToAssigned: false + } + } + + CheckBox + { + name: "heterogeneityModelIncludeIntercept"; + label: qsTr("Include intercept") + checked: true + } + + DropDown + { + name: "heterogeneityModelLink" + id: heterogeneityModelLink + label: qsTr("Link") + values: ["log", "identity"] + } + } +} \ No newline at end of file diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml index 2216daca..81a0ab82 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml @@ -23,72 +23,123 @@ import JASP 1.0 Section { - title: qsTr("Statistics") - property string module: "metaAnalysis" + title: qsTr("Statistics") + columns: 2 + property string module: "metaAnalysis" Group { - title: qsTr("Regression Coefficients") + title: qsTr("Heterogeneity") + columns: 2 + enabled: method.value != "fixedEffects" && method.value != "equalEffects" + CheckBox { - name: "coefficientEstimate"; - text: qsTr("Estimates"); - checked: true - onClicked: { if (!checked && estimatesConfInt.checked) estimatesConfInt.click() } - CheckBox - { - id: estimatesConfInt - name: "coefficientCi"; text: qsTr("Confidence intervals") - CIField { name: "coefficientCiLevel"; label: qsTr("Interval") } - } + text: qsTr("𝜏") + name: "heterogeneityTau" + checked: true + } + + CheckBox + { + text: qsTr("𝜏²") + name: "heterogeneityTau2" + checked: true + } + + CheckBox + { + text: qsTr("IΒ²") + name: "heterogeneityI2" + checked: false } - DropDown { name: "estimateTest"; label: qsTr("Test"); values: [ "z", "knha"]; } - CheckBox { name: "covarianceMatrix"; text: qsTr("Covariance matrix") } + CheckBox + { + text: qsTr("HΒ²") + name: "heterogeneityH2" + checked: false + } } + Group { - title: qsTr("Model Fit") - CheckBox { name: "fitMeasure"; text: qsTr("Fit measures") } + title: qsTr("Meta-Regression") + enabled: predictors.count > 0 + CheckBox { - id: forestPlot - name: "forestPlot" - text: qsTr("Forest plot") - - CheckBox + name: "metaregressionTermTests" + text: qsTr("Term tests") + checked: true + } + + CheckBox + { + name: "metaregressionCoefficientEstimates" + text: qsTr("Coefficient estimates") + checked: true + } + + CheckBox + { + name: "metaregressionCoefficientCorrelationMatrix" + text: qsTr("Coefficient correlation matrix") + checked: false + } + } + + Group + { + CheckBox + { + name: "confidenceIntervals" + text: qsTr("Confidence intervals") + checked: true + childrenOnSameRow: true + + CIField { - name: "forestPlotLabel" - text: qsTr("Show labels") - checked: true - enabled: forestPlot.checked - visible: module == "cochrane" + name: "confidenceIntervalsLevel" } + } - DropDown - { - name: "forestPlotOrder" - label: qsTr("Ordering") - enabled: forestPlot.checked - visible: module == "cochrane" - currentIndex: 1 - values: [ - { label: qsTr("Year (ascending)") , value: "yearAscending" }, - { label: qsTr("Year (descending)") , value: "yearDescending" }, - { label: qsTr("Effect size (ascending)") , value: "effectSizeAscending" }, - { label: qsTr("Effect size (descending)") , value: "effectSizeDescending" } + CheckBox + { + text: qsTr("Prediction intervals") + name: "predictionIntervals" + checked: true + } + + DropDown + {//TODO: make shorter or across both rows? + name: "transformEffectSize" + label: qsTr("Transform effect size") + setLabelAbove: true + values: [ + { label: qsTr("None") , value: "none" }, // NULL + { label: qsTr("Fisher's z to r") , value: "fishersZToCorrelation" }, // transf.ztor + { label: qsTr("Exponential") , value: "exponential" }, // exp + { label: qsTr("Log odds to proportions") , value: "logOddsToProportions" }, // transf.logit + { label: qsTr("Log odds to SMD (normal)") , value: "logOddsToSmdNormal" }, // transf.lnortod.norm + { label: qsTr("Log odds to SMD (logistic)") , value: "logOddsToSmdLogistic" }, // transf.lnortod.logis + { label: qsTr("SMD to log odds (normal)") , value: "smdToLogOddsNormal" }, // transf.dtolnor.norm + { label: qsTr("SMD to log odds (logistic)") , value: "smdToLogOddsLogistic" }, // transf.dtolnor.logis + { label: qsTr("Hakstian & Whalen inverse Ξ±") , value: "hakstianAndWhalenInverseAlpha"}, // transf.iahw + { label: qsTr("Bonett inverse Ξ±") , value: "bonettInverseAlpha" }, // transf.iabt + { label: qsTr("Z to RΒ²") , value: "zToR2" }, // transf.ztor2 + { label: qsTr("SMD to Cohen's U₁") , value: "smdToCohensU1" }, // transf.dtou1 + { label: qsTr("SMD to Cohen's Uβ‚‚") , value: "smdToCohensU2" }, // transf.dtou2 + { label: qsTr("SMD to Cohen's U₃") , value: "smdToCohensU3" }, // transf.dtou3 + { label: qsTr("SMD to CLES, Pr(supperiority)") , value: "smdToCles" }, // transf.dtocles ] - } - } - CheckBox { name: "funnelPlot"; text: qsTr("Funnel plot") } - CheckBox { name: "funnelPlotRankTestAsymmetry"; text: qsTr("Rank test for funnel plot asymmetry") } - CheckBox { name: "funnelPlotRegressionTestAsymmetry"; text: qsTr("Regression test for funnel plot asymmetry") } } - Group + CheckBox { - title: qsTr("Residuals Model") - CheckBox { name: "residualParameter"; text: qsTr("Residuals parameters"); checked: true;} + name: "fitMeasures" + text: qsTr("Fit measures") } + } \ No newline at end of file From f21ee18176ded01ead6327f805d8487bf2482783 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 24 Jun 2024 18:07:50 +0200 Subject: [PATCH 045/127] add multivariate --- NAMESPACE | 1 + R/classicalmetaanalysis.R | 4 +- R/classicalmetaanalysiscommon.R | 107 ++++- ...ssicalmetaanalysismultilevelmultivariate.R | 385 ++++++++++++++++++ inst/Description.qml | 8 + inst/qml/ClassicalMetaAnalysis.qml | 38 +- ...icalMetaAnalysisMultilevelMultivariate.qml | 370 +++++++++++++++++ ...icalMetaAnalysisEstimatedMarginalMeans.qml | 1 + .../ClassicalMetaAnalysisMethod.qml | 54 --- .../ClassicalMetaAnalysisModel.qml | 4 +- 10 files changed, 894 insertions(+), 78 deletions(-) create mode 100644 R/classicalmetaanalysismultilevelmultivariate.R create mode 100644 inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml delete mode 100644 inst/qml/qml_components/ClassicalMetaAnalysisMethod.qml diff --git a/NAMESPACE b/NAMESPACE index 8f769b6d..3ce432a0 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,5 +1,6 @@ import(jaspBase) export(ClassicalMetaAnalysis) +export(ClassicalMetaAnalysisMultilevelMultivariate) export(SelectionModels) export(WaapWls) export(PetPeese) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 3cfd1284..42117532 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -49,7 +49,9 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "optimizerMinimumTau2", "optimizerMinimumTau2Value", "optimizerMaximumTau2", "optimizerMaximumTau2Value", "optimizerMaximumIterations", "optimizerMaximumIterationsValue", "optimizerConvergenceTolerance", "optimizerConvergenceToleranceValue", "optimizerConvergenceRelativeTolerance", "optimizerConvergenceRelativeToleranceValue", "optimizerStepAdjustment", "optimizerStepAdjustmentValue", - "diagnosticsCasewiseDiagnosticsRerunWithoutInfluentialCases" + "diagnosticsCasewiseDiagnosticsRerunWithoutInfluentialCases", + # multilevel/multivariate specific + "randomEffects", "randomEffectsSpecification" ) .maForestPlotDependencies <- c( .maDependencies, "transformEffectSize", "confidenceIntervalsLevel", diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 4bd6a49b..54ec5174 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -15,6 +15,12 @@ # along with this program. If not, see . # +# This analysis runs +# - classical meta-analysis (using rma.uni) +# - classical multilevel/multivariate meta-analysis (using rma.mv; custom function prefix .mamm) +# - classical binimal meta-analysis (using rma.; custom function prefix .mab) + + # TODO: # Estimated Marginal Means # - add variable interactions @@ -46,6 +52,8 @@ # model summary .maResidualHeterogeneityTable(jaspResults, dataset, options) .maModeratorsTable(jaspResults, dataset, options) + if (.maIsMultilevelMultivariate(options)) + .mammRandomEstimatesTable(jaspResults, dataset, options) .maPooledEstimatesTable(jaspResults, dataset, options) if (options[["fitMeasures"]]) .maFitMeasuresTable(jaspResults, dataset, options) @@ -129,16 +137,34 @@ jaspResults[[objectName]] <- fitContainer # specify the effect size and outcome - rmaInput <- list( - yi = as.name(options[["effectSize"]]), - sei = as.name(options[["effectSizeStandardError"]]), - data = dataset - ) + if (options[["module"]] == "metaAnalysis") { + rmaInput <- list( + yi = as.name(options[["effectSize"]]), + sei = as.name(options[["effectSizeStandardError"]]), + data = dataset + ) + } else if (options[["module"]] == "metaAnalysisMultilevelMultivariate") { + # TODO: extend to covariance matrices + rmaInput <- list( + yi = as.name(options[["effectSize"]]), + V = as.name("samplingVariance"), # precomputed on data load + data = dataset + ) + } # add formulas if specified rmaInput$mods <- .maGetFormula(options[["effectSizeModelTerms"]], options[["effectSizeModelIncludeIntercept"]]) rmaInput$scale <- .maGetFormula(options[["heterogeneityModelTerms"]], options[["heterogeneityModelIncludeIntercept"]]) + # add random effects + if (.maIsMultilevelMultivariate(options)) { + randomFormulaList <- .mammGetRandomFormulaList(options) + if (length(randomFormulaList) != 0) { + rmaInput$random <- randomFormulaList + rmaInput$struct <- do.call(c, sapply(randomFormulaList, attr, "structure")) + } + } + # specify method and fixed effect terms test rmaInput$method <- .maGetMethodOptions(options) rmaInput$test <- options[["fixedEffectTest"]] @@ -150,7 +176,7 @@ if (options[["fixParametersWeights"]]) rmaInput$weights <- as.name(options[["fixParametersWeightsVariable"]]) if (options[["fixParametersTau2"]]) - rmaInput$tau2 <- .maGetFixedTau2Options(options) + rmaInput$tau2 <- .maGetFixedTau2Options(options) # TODO: add multiple possible fixed taus # add link function if needed if (.maIsMetaregressionHeterogeneity(options)) @@ -165,7 +191,12 @@ rmaInput$level <- 100 * options[["confidenceIntervalsLevel"]] ### fit the model - fit <- try(do.call(metafor::rma, rmaInput)) + if (options[["module"]] == "metaAnalysis") { + fit <- try(do.call(metafor::rma, rmaInput)) + } else if (options[["module"]] == "metaAnalysisMultilevelMultivariate") { + fit <- try(do.call(metafor::rma.mv, rmaInput)) + } + # add clustering if specified if (options[["clustering"]] != "") { @@ -179,12 +210,22 @@ fitClustered <- NULL } + + # add information about dropped levels to the fit + if (.maIsMultilevelMultivariate(options)) { + attr(fit, "skipped") <- attr(randomFormulaList, "skipped") + if (options[["clustering"]] != "") { + attr(fitClustered, "skipped") <- attr(randomFormulaList, "skipped") + } + } + + # return the results jaspResults[[objectName]]$object <- list( fit = fit, fitClustered = fitClustered ) - + saveRDS(fit, file = "C:/JASP/fit.RDS") return() } .maRemoveInfluentialObservations <- function(jaspResults, dataset, options) { @@ -329,7 +370,7 @@ # pooled estimates pooledEstimatesTable <- createJaspTable(gettext("Pooled Estimates")) - pooledEstimatesTable$position <- 3 + pooledEstimatesTable$position <- 4 pooledEstimatesTable$dependOn(c("heterogeneityTau", "heterogeneityTau2", "heterogeneityI2", "heterogeneityH2", "confidenceIntervals", "confidenceIntervalsLevel", "predictionIntervals", "transformEffectSize")) modelSummaryContainer[["pooledEstimatesTable"]] <- pooledEstimatesTable @@ -357,7 +398,7 @@ pooledEstimatesTable$addRows(pooledEffect) # pooled heterogeneity - if (!.maGetMethodOptions(options) %in% c("EE", "FE")) { + if (!.maGetMethodOptions(options) %in% c("EE", "FE") && !.maIsMultilevelMultivariate(options)) { # requires non-clustered fit pooledHeterogeneity <- .maComputePooledHeterogeneity(.maExtractFit(jaspResults, options, nonClustered = TRUE), options) @@ -398,7 +439,7 @@ fitMeasuresTable$addColumnInfo(name = "BIC", title = gettext("BIC"), type = "number") fitMeasuresTable$addColumnInfo(name = "AICc", title = gettext("AICc"), type = "number") - if (.maIsMetaregressionEffectSize(options)) + if (.maIsMetaregressionEffectSize(options) && !.maIsMultilevelMultivariate(options)) fitMeasuresTable$addColumnInfo(name = "R2", title = gettext("R\U00B2"), type = "number") # stop on error @@ -407,7 +448,7 @@ fitSummary <- cbind("model" = colnames(fit[["fit.stats"]]), data.frame(t(fit[["fit.stats"]]))) - if (.maIsMetaregressionEffectSize(options)) + if (.maIsMetaregressionEffectSize(options) && !.maIsMultilevelMultivariate(options)) fitSummary$R2 <- fit[["R2"]] fitMeasuresTable$setData(fitSummary) @@ -1291,8 +1332,8 @@ # to data.frame predictedEffect <- data.frame(predictedEffect) - # add empty prediction interval for FE and EE - if (.maGetMethodOptions(options) %in% c("FE", "EE")) { + # add empty prediction interval for FE and EE, or models without + if (!"pi.lb" %in% colnames(predictedEffect)) { predictedEffect$pi.lb <- NA predictedEffect$pi.ub <- NA } @@ -1442,6 +1483,7 @@ ) confIntHeterogeneity <- confIntHeterogeneity[heterogeneityShow,,drop = FALSE] + } if (!options[["confidenceIntervals"]]) @@ -2048,16 +2090,37 @@ } .maMakeMetaforCallText <- function(options) { - rmaInput <- list( - yi = as.name(options[["effectSize"]]), - sei = as.name(options[["effectSizeStandardError"]]), - data = as.name("dataset") - ) + if (options[["module"]] == "metaAnalysis") { + rmaInput <- list( + yi = as.name(options[["effectSize"]]), + sei = as.name(options[["effectSizeStandardError"]]), + data = as.name("dataset") + ) + } else if (options[["module"]] == "metaAnalysisMultilevelMultivariate") { + # TODO: extend to covariance matrices + rmaInput <- list( + yi = as.name(options[["effectSize"]]), + V = paste0(options[["effectSizeStandardError"]], "^2"), # precomputed on data load + data = as.name("dataset") + ) + } # add formulas if specified rmaInput$mods <- .maGetFormula(options[["effectSizeModelTerms"]], options[["effectSizeModelIncludeIntercept"]]) rmaInput$scale <- .maGetFormula(options[["heterogeneityModelTerms"]], options[["heterogeneityModelIncludeIntercept"]]) + # add random effects + if (.maIsMultilevelMultivariate(options)) { + randomFormulaList <- .mammGetRandomFormulaList(options) + if (length(randomFormulaList) != 0) { + struct <- do.call(c, sapply(randomFormulaList, attr, "structure")) + if (length(randomFormulaList) > 1) + randomFormulaList <- paste0("list(\n\t\t", paste0("'", names(randomFormulaList), "' = ", randomFormulaList, collapse = "\n\t\t"),")") + rmaInput$random <- randomFormulaList + rmaInput$struct <- struct + } + } + # specify method and fixed effect terms test rmaInput$method <- paste0("'", .maGetMethodOptions(options), "'") rmaInput$test <- paste0("'", options[["fixedEffectTest"]], "'") @@ -2152,6 +2215,9 @@ .maIsMetaregressionFtest <- function(options) { return(options[["fixedEffectTest"]] %in% c("knha", "t")) } +.maIsMultilevelMultivariate <- function(options) { + return(options[["module"]] == "metaAnalysisMultilevelMultivariate") +} .maCheckIsPossibleOptions <- function(options) { if (length(options[["heterogeneityModelTerms"]]) > 0 && options[["clustering"]] != "") { @@ -2586,6 +2652,9 @@ if (!is.null(attr(dataset, "influentialObservations")) && attr(dataset, "influentialObservations") > 0) messages <- c(messages, gettextf("%1$i influential observations were detected and removed.", attr(dataset, "influentialObservations"))) + if (.maIsMultilevelMultivariate(options) && any(attr(fit, "skipped"))) + messages <- c(messages, gettextf("The random component %1$s was not completely specified and was skipped.", paste0(which(attr(fit, "skipped")), collapse = " and "))) + return(messages) } .maEstimatedMarginalMeansMessages <- function(options, parameter) { diff --git a/R/classicalmetaanalysismultilevelmultivariate.R b/R/classicalmetaanalysismultilevelmultivariate.R new file mode 100644 index 00000000..fbf09db5 --- /dev/null +++ b/R/classicalmetaanalysismultilevelmultivariate.R @@ -0,0 +1,385 @@ +# +# Copyright (C) 2013-2018 University of Amsterdam +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + + +ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = NULL, options, ...) { + + options[["module"]] <- "metaAnalysisMultilevelMultivariate" + saveRDS(options, file = "C:/JASP/options.RDS") + + if (.maReady(options)) { + dataset <- .mammReadData(dataset, options) + .mammCheckErrors(dataset, options) + } + + saveRDS(options, file = "C:/JASP/options.RDS") + saveRDS(dataset, file = "C:/JASP/dataset.RDS") + + .ClassicalMetaAnalysisCommon(jaspResults, dataset, options) + + return() + options <- readRDS(file = "C:/JASP/options.RDS") + dataset <- readRDS(file = "C:/JASP/dataset.RDS") + return() +} + +.mammReadData <- function(dataset, options) { + + if (!is.null(dataset)) + return(dataset) + + # model data + predictorsNominal <- options[["predictors"]][options[["predictors.types"]] == "nominal"] + predictorsScale <- options[["predictors"]][options[["predictors.types"]] == "scale"] + + ### main model variables + asFactors <- c( + if (length(predictorsNominal) > 0) predictorsNominal, + if (options[["clustering"]] != "") options[["clustering"]] + ) + asNumeric <- c( + options[["effectSize"]], + options[["effectSizeStandardError"]], + if (length(predictorsScale) > 0) predictorsScale, + if (options[["fixParametersWeights"]]) options[["fixParametersWeightsVariable"]] + ) + + ### add random effects variables + randomVariables <- .mammExtractRandomVariableNames(options) + + # check variable types cross-loading + if (length(randomVariables$nominal) > 0 && any(randomVariables$nominal %in% c(randomVariables$scale, randomVariables$ordinal, asNumeric))) + .quitAnalysis(gettextf("The following variable was specified both as nominal and scale: %1$s", randomVariables$nominal[randomVariables$nominal %in% c(randomVariables$scale, randomVariables$ordinal, asNumeric)])) + if (length(randomVariables$scale) > 0 && any(randomVariables$scale %in% c(randomVariables$nominal, asFactors))) + .quitAnalysis(gettextf("The following variable was specified both as scale and nominal: %1$s", randomVariables$nominal[randomVariables$scale %in% c(randomVariables$nominal, asFactors)])) + + asNumeric <- c(asNumeric, randomVariables$scale, randomVariables$ordinal) + asFactors <- c(asFactors, randomVariables$nominal) + + # forest plotting data + additionalVariables <- unique(c( + if (options[["studyLabels"]] != "") options[["studyLabels"]], + if (length(options[["forestPlotStudyInformationSelectedVariables"]]) > 0) unlist(options[["forestPlotStudyInformationSelectedVariables"]]), + if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], + if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]], + if (options[["forestPlotStudyInformationOrderBy"]] != "") options[["forestPlotStudyInformationOrderBy"]] + )) + # remove variables already specified in the model + additionalVariables <- setdiff( + additionalVariables, + c(asNumeric, asFactors) + ) + + + # load data + dataset <- .readDataSetToEnd( + columns.as.factor = c(asFactors, additionalVariables), + columns.as.numeric = asNumeric) + + # omit NAs + omitOnVariables <- c(asNumeric, asFactors) + anyNaByRows <- apply(dataset[,omitOnVariables], 1, function(x) anyNA(x)) + dataset <- dataset[!anyNaByRows,] + attr(dataset, "NAs") <- sum(anyNaByRows) + + # add se^2 for V^2 input + dataset$samplingVariance <- dataset[[options[["effectSizeStandardError"]]]]^2 + + return(dataset) +} +.mammCheckErrors <- function(dataset, options) { + + randomVariables <- .mammExtractRandomVariableNames(options) + + .hasErrors( + dataset = dataset, + type = c("infinity", "observations", "variance"), + all.target = c( + options[["effectSize"]], + options[["effectSizeStandardError"]], + options[["predictors"]][options[["predictors.types"]] == "scale"], + c(randomVariables$scale, randomVariables$ordinal) + ), + observations.amount = "< 2", + exitAnalysisIfErrors = TRUE) + + .hasErrors( + dataset = dataset, + type = c("modelInteractions"), + modelInteractions.modelTerms = c(options[["effectSizeModelTerms"]], options[["heterogeneityModelTerms"]]), + exitAnalysisIfErrors = TRUE) + + .hasErrors( + dataset = dataset, + seCheck.target = options[["effectSizeStandardError"]], + custom = .maCheckStandardErrors, + exitAnalysisIfErrors = TRUE) +} +.mammGetRandomFormulaList <- function(options) { + + if (length(options[["randomEffects"]]) == 0) + return(NULL) + + # extract the random effects + randomFormulas <- list() + for (i in seq_along(options[["randomEffects"]])) { + + tempType <- options[["randomEffects"]][[i]][["type"]] + + if (tempType == "simple") { + + tempValue <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]] + + if (tempValue != "") { + randomFormulas[[i]] <- as.formula(paste0("~ 1 | ", .encodeColNamesLax(tempValue)), env = parent.frame(1)) + } + + } else if (tempType == "nested") { + + tempValues <- c( + options[["randomEffectsSpecification"]][[i]][["level1"]][["value"]], + options[["randomEffectsSpecification"]][[i]][["level2"]][["value"]], + options[["randomEffectsSpecification"]][[i]][["level3"]][["value"]], + options[["randomEffectsSpecification"]][[i]][["level4"]][["value"]] + ) + tempValues <- tempValues[tempValues != ""] + + if (length(tempValues) > 0) { + randomFormulas[[i]] <- as.formula(paste0("~ 1 | ", paste(sapply(tempValues, .encodeColNamesLax), collapse = "/")), env = parent.frame(1)) + } + + } else if (tempType == "randomSlopes") { + + tempValuesSlopes <- unlist(options[["randomEffectsSpecification"]][[i]][["randomSlopeTerms"]][["value"]]) + tempValueGrouping <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]] + + if (length(tempValuesSlopes) > 0 && tempValueGrouping != "") { + randomFormulas[[i]] <- as.formula(paste0("~ ", paste(sapply(tempValuesSlopes, .encodeColNamesLax), collapse = "+")," | ", .encodeColNamesLax(tempValueGrouping)), env = parent.frame(1)) + attr(randomFormulas[[i]], "structure") <- "GEN" + } + + } else if (tempType %in% c("structured", "autoregressive")) { + + tempValueInner <- switch( + tempType, + "structured" = options[["randomEffectsSpecification"]][[i]][["factorLevels"]][["value"]], + "autoregressive" = options[["randomEffectsSpecification"]][[i]][["time"]][["value"]] + ) + tempValueOuter <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]] + + if (tempValueInner != "" && tempValueOuter != "") { + randomFormulas[[i]] <- as.formula(paste0("~ ", .encodeColNamesLax(tempValueInner), " | ", .encodeColNamesLax(tempValueOuter)), env = parent.frame(1)) + attr(randomFormulas[[i]], "structure") <- options[["randomEffects"]][[i]][["type"]] + } + + } else if (tempType == "spatial") { + + tempValueInner <- paste0("computedSpatialDistance", i) + tempValueOuter <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]] + + if (!is.null(unlist(options[["randomEffectsSpecification"]][[i]][["spatialCoordinates"]][["value"]])) && tempValueOuter != "") { + randomFormulas[[i]] <- as.formula(paste0("~ ", .encodeColNamesLax(tempValueInner), " | ", .encodeColNamesLax(tempValueOuter)), env = parent.frame(1)) + attr(randomFormulas[[i]], "structure") <- options[["randomEffects"]][[i]][["type"]] + } + + } else if (tempType == "knownCorrelation") { + + stop("Not implemented yet.") + + } + } + + randomFormulasSkipped <- sapply(randomFormulas, is.null) + + if (all(randomFormulasSkipped)) + return(NULL) + + randomFormulas <- randomFormulas[!randomFormulasSkipped] + # add missing null elements in case the last random effects was skipped + if (length(options[["randomEffectsSpecification"]]) > length(randomFormulasSkipped)) + randomFormulasSkipped[(length(randomFormulasSkipped)+1):length(options[["randomEffectsSpecification"]])] <- TRUE + attr(randomFormulas, "skipped") <- randomFormulasSkipped + names(randomFormulas) <- paste("Component", seq_along(randomFormulas)) + + return(randomFormulas) +} +.mammExtractRandomVariableNames <- function(options) { + + if (length(options[["randomEffects"]]) == 0) + return(NULL) + + # extract the random effects + variablesNominal <- NULL + variablesOrdinal <- NULL + variablesScale <- NULL + + for (i in seq_along(options[["randomEffects"]])) { + + tempType <- options[["randomEffects"]][[i]][["type"]] + + if (tempType == "simple") { + + variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]]) + + } else if (tempType == "nested") { + + variablesNominal <- c( + variablesNominal, + options[["randomEffectsSpecification"]][[i]][["level1"]][["value"]], + options[["randomEffectsSpecification"]][[i]][["level2"]][["value"]], + options[["randomEffectsSpecification"]][[i]][["level3"]][["value"]], + options[["randomEffectsSpecification"]][[i]][["level4"]][["value"]] + ) + + } else if (tempType == "randomSlopes") { + + tempValuesSlopes <- unlist(options[["randomEffectsSpecification"]][[i]][["randomSlopeTerms"]][["value"]]) + tempValuesSlopesTypes <- options[["randomEffectsSpecification"]][[i]][["randomSlopeTerms"]][["types"]] + + variablesNominal <- c(variablesNominal, tempValuesSlopes[tempValuesSlopesTypes == "nominal"]) + variablesScale <- c(variablesScale, tempValuesSlopes[tempValuesSlopesTypes == "scale"]) + variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]]) + + } else if (tempType == "structured") { + + variablesNominal <- c( + variablesNominal, + options[["randomEffectsSpecification"]][[i]][["factorLevels"]][["value"]], + options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]] + ) + + }else if (tempType == "autoregressive") { + + if (options[["randomEffects"]][[i]][["structure"]] == "continuousTimeAr") { + variablesScale <- c(variablesScale, options[["randomEffectsSpecification"]][[i]][["time"]][["value"]]) + } else { + variablesOrdinal <- c(variablesOrdinal, options[["randomEffectsSpecification"]][[i]][["time"]][["value"]]) + } + variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]]) + + } else if (tempType == "spatial") { + + variablesScale <- c(variablesScale, unlist(options[["randomEffectsSpecification"]][[i]][["spatialCoordinates"]][["value"]])) + variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]]) + + } else if (tempType == "knownCorrelation") { + + stop("Not implemented yet.") + + } + } + + variablesScale <- unique(variablesScale) + variablesNominal <- unique(variablesNominal) + variablesOrdinal <- unique(variablesOrdinal) + + variablesScale <- variablesScale[variablesScale != ""] + variablesNominal <- variablesNominal[variablesNominal != ""] + variablesOrdinal <- variablesOrdinal[variablesOrdinal != ""] + + + # TODO: remove variable translation hotfix + return(list( + scale = if (length(variablesScale) != 0) sapply(variablesScale, .encodeColNamesLax), + nominal = if (length(variablesNominal) != 0) sapply(variablesNominal, .encodeColNamesLax), + ordinal = if (length(variablesOrdinal) != 0) sapply(variablesOrdinal, .encodeColNamesLax) + )) +} +.mammRandomEstimatesTable <- function(jaspResults, dataset, options) { + + modelSummaryContainer <- .maExtractModelSummaryContainer(jaspResults) + + if (!is.null(modelSummaryContainer[["randomEstimatesContainer"]])) + return() + + randomEstimatesContainer <- createJaspContainer(gettext("Model Summary")) + randomEstimatesContainer$dependOn(.maDependencies) + randomEstimatesContainer$position <- 1 + modelSummaryContainer[["randomEstimatesContainer"]] <- randomEstimatesContainer + + fit <- .maExtractFit(jaspResults, options) + + # stop on error + if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) + return() + + ### create table for each structure type + # nested random effects + if (fit[["withS"]]) { + + tableS <- createJaspTable(gettext("Simple / Nested Estimates")) + tableS$position <- 1 + + tableS$addColumnInfo(name = "factor", type = "string") + tableS$addColumnInfo(name = "sigma", type = "number", title = gettext("\U03C3")) + tableS$addColumnInfo(name = "sigma2", type = "number", title = gettext("\U03C3\U00B2")) + tableS$addColumnInfo(name = "nlvls", type = "integer", title = gettext("Levels")) + tableS$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + # tableS$addColumnInfo(name = "R", type = "string", title = gettext("R")) # whether supplied via known correlation matrix + + resultsS <- data.frame( + factor = .maVariableNames(fit[["s.names"]], unlist(.mammExtractRandomVariableNames(options))), + sigma = sqrt(fit[["sigma2"]]), + sigma2 = fit[["sigma2"]], + nlvls = fit[["s.nlevels"]], + fixed = ifelse(fit[["vc.fix"]]$sigma2, "yes", "no") + # R = ifelse(fit[["Rfix"]] , "yes", "no") + ) + + tableS$setData(resultsS) + } + + # random slopes + if (fit[["withG"]] && fit$struct[1] == "GEN") { + + tableG <- createJaspTable(gettext("Random Slopes Estimates")) + tableG$position <- 2 + + tableB$addColumnInfo(name = "factor", type = "string") + tableB$addColumnInfo(name = "sigma", type = "number", title = gettext("\U03C3")) + tableB$addColumnInfo(name = "sigma2", type = "number", title = gettext("\U03C3\U00B2")) + tableB$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + + + + # variances + vc <- cbind.data.frame(sqrt(fit$tau2), fit$tau2, ifelse(fit$vc.fix$tau2, "yes", "no")) + colnames(vc) <- c("sigma", "sigma2", "fixed") + vc$factor <- .maVariableNames(fit$g.names[-length(fit$g.names)], unlist(.mammExtractRandomVariableNames(options))) + + # covariance matrix + G.info <- cov2cor(fit$G) + diag(G.info) <- NA + G.info[lower.tri(G.info)] <- NA + # TODO: adds info about whether the correlation is fixed or estimated + # G.info[lower.tri(G.info)] <- ifelse(fit$vc.fix$rho, "yes", "no") + colnames(G.info) <- .maVariableNames(fit$g.names[-length(fit$g.names)], unlist(.mammExtractRandomVariableNames(options))) + + + tableB$setData(resultsB) + + + inner <- trimws(paste0(strsplit(paste0(fit$formulas[[1]], collapse = ""), "|", fixed = TRUE)[[1]][1], collapse = "")) + outer <- tail(fit$g.names, 1) + + tableB$addFooter(paste0(inner, " | ", outer), symbol = gettext("Component: ")) + tableB$addFooter(paste0(x$g.nlevels.f[1], " | ", x$g.nlevels[2]), symbol = gettext("Levels: ")) + } + + + return() +} diff --git a/inst/Description.qml b/inst/Description.qml index d2f42a82..ffc69200 100644 --- a/inst/Description.qml +++ b/inst/Description.qml @@ -43,6 +43,14 @@ Description requiresData: true } + Analysis + { + menu: qsTr("Meta-Analysis (Multilevel/Multivariate)") + title: qsTr("Classical Meta-Analysis (Multilevel/Multivariate)") + func: "ClassicalMetaAnalysisMultilevelMultivariate" + requiresData: true + } + Analysis { menu: qsTr("Prediction Model Performance") diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 0c5ca78c..84fe744f 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -50,8 +50,42 @@ Form allowedColumns: ["scale"] } - MA.ClassicalMetaAnalysisMethod { - id: method + DropDown + { + name: "method" + id: method + label: qsTr("Method") + startValue: "restrictedML" + values: (function() { + if (module == "metaAnalysisMultilevelMultivariate") { + return [ + { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, + { label: qsTr("Restricted ML") , value: "restrictedML" } + ]; + } else if (sectionModel.heterogeneityModelTermsCount == 0) { + return [ + { label: qsTr("Equal Effects") , value: "equalEffects" }, + { label: qsTr("Fixed Effects") , value: "fixedEffects" }, + { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, + { label: qsTr("Restricted ML") , value: "restrictedML" }, + { label: qsTr("DerSimonian-Laird") , value: "derSimonianLaird" }, + { label: qsTr("Hedges") , value: "hedges" }, + { label: qsTr("Hunter-Schmidt") , value: "hunterSchmidt" }, + { label: qsTr("Hunter-Schmidt (SSC)") , value: "hunterSchmidtSsc" }, + { label: qsTr("Sidik-Jonkman") , value: "sidikJonkman" }, + { label: qsTr("Empirical Bayes") , value: "empiricalBayes" }, + { label: qsTr("Paule-Mandel") , value: "pauleMandel" }, + { label: qsTr("Paule-Mandel (MU)") , value: "pauleMandelMu" }, + { label: qsTr("Generalized Q-stat") , value: "qeneralizedQStat" }, + { label: qsTr("Generalized Q-stat (MU)"), value: "qeneralizedQStatMu"} + ]; + } else { + return [ + { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, + { label: qsTr("Restricted ML") , value: "restrictedML" }, + { label: qsTr("Empirical Bayes") , value: "empiricalBayes" } + ]; + }})() } DropDown diff --git a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml new file mode 100644 index 00000000..44b7aa25 --- /dev/null +++ b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml @@ -0,0 +1,370 @@ +// +// Copyright (C) 2013-2018 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 2.8 +import QtQuick.Layouts 1.3 +import JASP.Controls 1.0 +import JASP.Widgets 1.0 +import JASP 1.0 +import "../qml/qml_components" as MA + +Form +{ + + VariablesForm + { + preferredHeight: 450 * preferencesModel.uiScale + + AvailableVariablesList + { + name: "allVariables" + } + + AssignedVariablesList + { + name: "effectSize" + id: effectSize + title: qsTr("Effect Size") + singleVariable: true + allowedColumns: ["scale"] + } + + AssignedVariablesList + { + name: "effectSizeStandardError" + id: effectSizeStandardError + title: qsTr("Effect Size Standard Error") + singleVariable: true + allowedColumns: ["scale"] + } + + DropDown + { + name: "method" + id: method + label: qsTr("Method") + startValue: "restrictedML" + values: [ + { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, + { label: qsTr("Restricted ML") , value: "restrictedML" } + ] + } + + DropDown + { + name: "fixedEffectTest" + label: qsTr("Fixed effect test") + startValue: "t" + values: [ "z", "t"] + } + + AssignedVariablesList + { + name: "predictors" + id: predictors + title: qsTr("Predictors") + allowedColumns: ["nominal", "scale"] + } + + AssignedVariablesList + { + name: "clustering" + id: clustering + title: qsTr("Clustering") + singleVariable: true + allowedColumns: ["nominal"] + } + + AssignedVariablesList + { + name: "studyLabels" + title: qsTr("Study Labels") + singleVariable: true + allowedColumns: ["nominal"] + } + } + + + Section + { + title: qsTr("Random Effects / Model Structure") + expanded: true + + ComponentsList + { + id: randomEffects + name: "randomEffects" + defaultValues: [{"type": "nested"}] + + rowComponent: RowLayout + { + property string typeValue: type.value + property string structureValue: structure.value + property string spatialInputTypeValue: spatialInputType.value + + DropDown + { + id: type + name: "type" + label: qsTr("Type") + values: [ + { label: qsTr("Simple"), value: "simple"}, + { label: qsTr("Nested (multilevel)"), value: "nested"}, + { label: qsTr("Random slopes"), value: "randomSlopes"}, + { label: qsTr("Structured"), value: "structured"}, + { label: qsTr("Autoregressive"), value: "autoregressive"}, + { label: qsTr("Spatial"), value: "spatial"}, + { label: qsTr("Known correlation"), value: "knownCorrelation"} + ] + } + + DropDown + { + id: structure + name: "structure" + label: qsTr("Structure") + visible: type.value == "structured" || type.value == "autoregressive" || type.value == "spatial" + values: (function() { + if (type.value == "structured") { + return [ + { label: qsTr("Compound symmetry"), value: "compoundSymmetry"}, + { label: qsTr("Heteroscedastic compound symmetry"), value: "heteroscedasticCompoundSymmetry"}, + { label: qsTr("Unstructured "), value: "Unstructured"}, + { label: qsTr("Identity"), value: "identity"}, + { label: qsTr("Diagonal"), value: "diagonal"} + ]; + } else if (type.value == "autoregressive") { + return [ + { label: qsTr("AR(1)"), value: "ar1"}, + { label: qsTr("Heteroscedastic AR(1)"), value: "heteroskedasticAr1"}, + { label: qsTr("Continuous-time AR"), value: "continuousTimeAr"} + ]; + } else if (type.value == "spatial") { + return [ + { label: qsTr("Exponential"), value: "exponential"}, + { label: qsTr("Gaussian"), value: "gaussian"}, + { label: qsTr("Linear"), value: "linear"}, + { label: qsTr("Rational quadratic"), value: "rationalQuadratic"}, + { label: qsTr("Spherical"), value: "spherical"} + ]; + } else { + return []; + } + })() + } + + DropDown + { + id: spatialInputType + name: "spatialInputType" + label: qsTr("Spatial input type") + visible: type.value == "spatial" + values: (function() { + if (type.value == "spatial") { + return [ + { label: qsTr("Compute from variables"), value: "computeFromVariables"}, + { label: qsTr("Load from file"), value: "loadFromFile"} + ]; + } else { + return []; + } + })() + } + + } + } + + ComponentsList + { + name: "randomEffectsSpecification" + source: "randomEffects" + title: qsTr("Specification") + visible: true // TODO: randomEffects.size > 0 + rowSpacing: 20 + + rowComponent: ColumnLayout + { + property var typeValue: randomEffects.rowAt(rowIndex).typeValue + property var structureValue: randomEffects.rowAt(rowIndex).structureValue + property var spatialInputTypeValue: randomEffects.rowAt(rowIndex).spatialInputTypeValue + + VariablesForm + { + removeInvisibles: true + preferredHeight: (typeValue == "randomSlopes" || typeValue == "spatial") ? 250 * preferencesModel.uiScale : 200 * preferencesModel.uiScale + visible: typeValue == "simple" || typeValue == "nested" || typeValue == "randomSlopes" || typeValue == "structured" || typeValue == "autoregressive" || (typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables") || typeValue == "knownCorrelation" + + AvailableVariablesList + { + name: "allVars" + title: typeValue + ": " + structureValue + } + + AssignedVariablesList + { + name: "randomSlopeTerms" + title: qsTr("Random Slope Terms") + visible: typeValue == "randomSlopes" + listViewType: JASP.Interaction + suggestedColumns: ["nominal", "scale"] // this should be choose on assignment + addAvailableVariablesToAssigned: false + } + + AssignedVariablesList + { + name: "factorLevels" + title: qsTr("Factor Levels") + visible: typeValue == "structured" + singleVariable: true + suggestedColumns: ["nominal"] + } + + + AssignedVariablesList + { + name: "level1" + title: qsTr("Level 1") + visible: typeValue == "nested" + singleVariable: true + suggestedColumns: ["nominal"] + } + + AssignedVariablesList + { + name: "level2" + title: qsTr("Level 2") + visible: typeValue == "nested" + singleVariable: true + suggestedColumns: ["nominal"] + } + + AssignedVariablesList + { + name: "level3" + title: qsTr("Level 3") + visible: typeValue == "nested" + singleVariable: true + suggestedColumns: ["nominal"] + } + + AssignedVariablesList + { + name: "level4" + title: qsTr("Level 4") + visible: typeValue == "nested" + singleVariable: true + suggestedColumns: ["nominal"] + } + + AssignedVariablesList + { + name: "time" + title: qsTr("Time") + visible: typeValue == "autoregressive" + singleVariable: true + suggestedColumns: ["ordinal", "scale"] // scale for continuous time AR otherwise ordinal + } + + AssignedVariablesList + { + name: "spatialCoordinates" + title: qsTr("Spatial Coordinates") + visible: typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables" + suggestedColumns: ["nominal"] + } + + AssignedVariablesList + { + name: "groupingFactor" + title: qsTr("Grouping Factor") + visible: typeValue != "nested" + singleVariable: true + suggestedColumns: ["nominal"] + } + } + + // TODO: Bruno -- adding variable crashes the qml + // TODO: Bruno -- allow single variable only, set-type to nominal + // FactorsForm + // { + // name: "nestedGroupingFactors" + // id: nestedGroupingFactors + // title: qsTr("Nested Grouping Factors") + // preferredHeight: 200 * preferencesModel.uiScale + // initNumberFactors: 1 + // allowAll: true + // visible: typeValue == "nested" + // } + + DropDown + { + name: "distanceMetric" + id: distanceMetric + label: qsTr("Distance metric") + visible: typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables" + values: [ + { label: qsTr("Euclidean"), value: "euclidean" }, + { label: qsTr("Manhattan"), value: "manhattan" }, + { label: qsTr("Maximum"), value: "maximum" }, + { label: qsTr("Great-circle"), value: "greatCircle"} + ] + } + + FileSelector + { + name: "distanceMatrixFile" + label: qsTr("Distance matrix file") + visible: typeValue == "spatial" && spatialInputTypeValue == "loadFromFile" + filter: "*.csv" + } + + FileSelector + { + name: "knownCorrelationMatrixFile" + label: qsTr("Known correlation matrix file") + visible: typeValue == "knownCorrelation" + filter: "*.csv" + } + + Divider { } + + } + } + } + + MA.ClassicalMetaAnalysisModel + { + id: sectionModel + module: "metaAnalysisMultilevelMultivariate" + } + + MA.ClassicalMetaAnalysisStatistics {} + + MA.ClassicalMetaAnalysisEstimatedMarginalMeans + { + module: "metaAnalysisMultilevelMultivariate" + } + + MA.ClassicalMetaAnalysisForestPlot {} + + MA.ClassicalMetaAnalysisDiagnostics {} + + MA.ClassicalMetaAnalysisAdvanced + { + module: "metaAnalysisMultilevelMultivariate" + } +} diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml b/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml index f3cc4291..1f4f1597 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml @@ -91,6 +91,7 @@ Section { title: qsTr("Heterogeneity") enabled: heterogeneityModelTerms.count > 0 + visible: module == "metaAnalysis" VariablesForm { diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisMethod.qml b/inst/qml/qml_components/ClassicalMetaAnalysisMethod.qml deleted file mode 100644 index 3ba5c7e1..00000000 --- a/inst/qml/qml_components/ClassicalMetaAnalysisMethod.qml +++ /dev/null @@ -1,54 +0,0 @@ -// -// Copyright (C) 2013-2018 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 2.8 -import QtQuick.Layouts 1.3 -import JASP.Controls 1.0 -import JASP.Widgets 1.0 -import JASP 1.0 - -DropDown -{ - name: "method" - label: qsTr("Method") - startValue: "restrictedML" - values: (function() { - if (sectionModel.heterogeneityModelTermsCount == 0) { - return [ - { label: qsTr("Equal Effects") , value: "equalEffects" }, - { label: qsTr("Fixed Effects") , value: "fixedEffects" }, - { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, - { label: qsTr("Restricted ML") , value: "restrictedML" }, - { label: qsTr("DerSimonian-Laird") , value: "derSimonianLaird" }, - { label: qsTr("Hedges") , value: "hedges" }, - { label: qsTr("Hunter-Schmidt") , value: "hunterSchmidt" }, - { label: qsTr("Hunter-Schmidt (SSC)") , value: "hunterSchmidtSsc" }, - { label: qsTr("Sidik-Jonkman") , value: "sidikJonkman" }, - { label: qsTr("Empirical Bayes") , value: "empiricalBayes" }, - { label: qsTr("Paule-Mandel") , value: "pauleMandel" }, - { label: qsTr("Paule-Mandel (MU)") , value: "pauleMandelMu" }, - { label: qsTr("Generalized Q-stat") , value: "qeneralizedQStat" }, - { label: qsTr("Generalized Q-stat (MU)"), value: "qeneralizedQStatMu"} - ]; - } else { - return [ - { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, - { label: qsTr("Restricted ML") , value: "restrictedML" }, - { label: qsTr("Empirical Bayes") , value: "empiricalBayes" } - ]; - }})() -} \ No newline at end of file diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml b/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml index 6f351bc5..b1cb6378 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml @@ -31,7 +31,6 @@ Section property alias effectSizeModelTermsCount: effectSizeModelTerms.count property alias heterogeneityModelTermsCount: heterogeneityModelTerms.count property alias heterogeneityModelLinkValue: heterogeneityModelLink.value - Group @@ -70,7 +69,8 @@ Section Group { title: qsTr("Heterogeneity model") - columns: 2 + visible: module =="metaAnalysis" + columns: 2 VariablesForm { From 2ee88f20e0aca273a8c2ff4f3024a0bda103abd0 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 24 Jun 2024 23:13:30 +0200 Subject: [PATCH 046/127] random effect structure extraction --- R/classicalmetaanalysiscommon.R | 5 +- ...ssicalmetaanalysismultilevelmultivariate.R | 360 ++++++++++++++++-- ...icalMetaAnalysisMultilevelMultivariate.qml | 2 +- .../ClassicalMetaAnalysisStatistics.qml | 1 + 4 files changed, 330 insertions(+), 38 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 54ec5174..b82139f5 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -161,7 +161,7 @@ randomFormulaList <- .mammGetRandomFormulaList(options) if (length(randomFormulaList) != 0) { rmaInput$random <- randomFormulaList - rmaInput$struct <- do.call(c, sapply(randomFormulaList, attr, "structure")) + rmaInput$struct <- do.call(c, lapply(randomFormulaList, attr, which = "structure")) } } @@ -2117,6 +2117,8 @@ if (length(randomFormulaList) > 1) randomFormulaList <- paste0("list(\n\t\t", paste0("'", names(randomFormulaList), "' = ", randomFormulaList, collapse = "\n\t\t"),")") rmaInput$random <- randomFormulaList + if (length(struct) != 0) + struct <- paste0("c(", paste0("'", names(struct), "' = '", struct, "'", collapse = ""),")") rmaInput$struct <- struct } } @@ -2377,6 +2379,7 @@ varName <- gsub(":", paste0(")", jaspBase::interactionSymbol), varName, fixed = TRUE) varName <- paste0(varName, ")") varName <- gsub(" ()", "", varName, fixed = TRUE) + varName <- gsub(" (/", "/", varName, fixed = TRUE) return(varName) diff --git a/R/classicalmetaanalysismultilevelmultivariate.R b/R/classicalmetaanalysismultilevelmultivariate.R index fbf09db5..2f4146ca 100644 --- a/R/classicalmetaanalysismultilevelmultivariate.R +++ b/R/classicalmetaanalysismultilevelmultivariate.R @@ -183,7 +183,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N if (tempValueInner != "" && tempValueOuter != "") { randomFormulas[[i]] <- as.formula(paste0("~ ", .encodeColNamesLax(tempValueInner), " | ", .encodeColNamesLax(tempValueOuter)), env = parent.frame(1)) - attr(randomFormulas[[i]], "structure") <- options[["randomEffects"]][[i]][["type"]] + attr(randomFormulas[[i]], "structure") <- .mammGetStructureOptions(options[["randomEffects"]][[i]][["structure"]]) } } else if (tempType == "spatial") { @@ -193,7 +193,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N if (!is.null(unlist(options[["randomEffectsSpecification"]][[i]][["spatialCoordinates"]][["value"]])) && tempValueOuter != "") { randomFormulas[[i]] <- as.formula(paste0("~ ", .encodeColNamesLax(tempValueInner), " | ", .encodeColNamesLax(tempValueOuter)), env = parent.frame(1)) - attr(randomFormulas[[i]], "structure") <- options[["randomEffects"]][[i]][["type"]] + attr(randomFormulas[[i]], "structure") <- .mammGetStructureOptions(options[["randomEffects"]][[i]][["structure"]]) } } else if (tempType == "knownCorrelation") { @@ -301,15 +301,13 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N } .mammRandomEstimatesTable <- function(jaspResults, dataset, options) { - modelSummaryContainer <- .maExtractModelSummaryContainer(jaspResults) - - if (!is.null(modelSummaryContainer[["randomEstimatesContainer"]])) + if (!is.null(jaspResults[["randomEstimatesContainer"]])) return() - randomEstimatesContainer <- createJaspContainer(gettext("Model Summary")) + randomEstimatesContainer <- createJaspContainer(title = gettext("Random Effects / Model Stucture Summary")) randomEstimatesContainer$dependOn(.maDependencies) - randomEstimatesContainer$position <- 1 - modelSummaryContainer[["randomEstimatesContainer"]] <- randomEstimatesContainer + randomEstimatesContainer$position <- 1.1 + jaspResults[["randomEstimatesContainer"]] <- randomEstimatesContainer fit <- .maExtractFit(jaspResults, options) @@ -317,19 +315,19 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) return() - ### create table for each structure type - # nested random effects + ### create table for nested random effects if (fit[["withS"]]) { tableS <- createJaspTable(gettext("Simple / Nested Estimates")) tableS$position <- 1 - tableS$addColumnInfo(name = "factor", type = "string") - tableS$addColumnInfo(name = "sigma", type = "number", title = gettext("\U03C3")) + tableS$addColumnInfo(name = "factor", type = "string", title = "") tableS$addColumnInfo(name = "sigma2", type = "number", title = gettext("\U03C3\U00B2")) + tableS$addColumnInfo(name = "sigma", type = "number", title = gettext("\U03C3")) tableS$addColumnInfo(name = "nlvls", type = "integer", title = gettext("Levels")) tableS$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) # tableS$addColumnInfo(name = "R", type = "string", title = gettext("R")) # whether supplied via known correlation matrix + randomEstimatesContainer[["tableS"]] <- tableS resultsS <- data.frame( factor = .maVariableNames(fit[["s.names"]], unlist(.mammExtractRandomVariableNames(options))), @@ -343,43 +341,333 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N tableS$setData(resultsS) } - # random slopes - if (fit[["withG"]] && fit$struct[1] == "GEN") { + ### create summary for the remaining types + if (fit[["withG"]]) { - tableG <- createJaspTable(gettext("Random Slopes Estimates")) - tableG$position <- 2 + containerG <- .mammExtractRandomTable(options, fit, indx = 1) + randomEstimatesContainer[["containerG"]] <- containerG - tableB$addColumnInfo(name = "factor", type = "string") - tableB$addColumnInfo(name = "sigma", type = "number", title = gettext("\U03C3")) - tableB$addColumnInfo(name = "sigma2", type = "number", title = gettext("\U03C3\U00B2")) - tableB$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + } + + if (fit[["withH"]]) { + containerH <- .mammExtractRandomTable(options, fit, indx = 2) + randomEstimatesContainer[["containerH"]] <- containerH + } + + + return() +} +.mammGetStructureOptions <- function(structure) { + + return(switch( + structure, + "compoundSymmetry" = "CS", + "heteroscedasticCompoundSymmetry" = "HCS", + "unstructured" = "UN", + "identity" = "UD", + "diagonal" = "DIAG", + "ar1" = "AR", + "heteroskedasticAr1" = "HAR", + "continuousTimeAr" = "CAR", + "exponential" = "SPEXP", + "gaussian" = "SPGAU", + "linear" = "SPLIN", + "rationalQuadratic" = "SPRAT", + "spherical" = "SPSPH", + stop(paste0("Unknown structure: ", structure)) + )) +} +.mammGetOptionsNameStructure <- function(structure) { + + return(switch( + structure, + "GEN" = gettextf("Random Slopes"), + "CS" = gettextf("Compound Symmetry"), + "HCS" = gettextf("Heteroscedastic Compound Symmetry"), + "UN" = gettextf("Unstructured"), + "UD" = gettextf("Identity"), + "DIAG" = gettextf("Diagonal"), + "AR1" = gettextf("AR(1)"), + "HAR" = gettextf("heteroskedastic AR(1)"), + "CAR" = gettextf("Continuous-Time AR"), + "SPEXP" = gettextf("Exponential"), + "SPGAU" = gettextf("Gaussian"), + "SPLIN" = gettextf("Linear"), + "SPRAT" = gettextf("Rational Quadratic"), + "SPSPH" = gettextf("Spherical"), + stop(paste0("Unknown value: ", structure)) + )) +} +.mammExtractRandomTable <- function(options, x, indx = 1) { + + # dispatching + struct <- x$struct[indx] + + tau2 <- if (indx == 1) x[["tau2"]] else x[["gamma2"]] + tau <- sqrt(tau2) + rho <- if (indx == 1) x[["rho"]] else x[["phi"]] + + tau2Name <- if (indx == 1) "tau2" else "gamma2" + rhoName <- if (indx == 1) "rho" else "phi" + + GName <- if (indx == 1) "G" else "H" + g.levels.kName <- if (indx == 1) "g.levels.k" else "h.levels.k" + g.levels.fName <- if (indx == 1) "g.levels.f" else "h.levels.f" + g.nlevels.kName <- if (indx == 1) "g.nlevels.k" else "h.nlevels.k" + g.nlevels.fName <- if (indx == 1) "g.nlevels.f" else "h.nlevels.f" + g.levels.comb.kName <- if (indx == 1) "g.levels.comb.k" else "h.levels.comb.k" + g.nlevelsName <- if (indx == 1) "g.nlevels" else "h.nlevels" + g.namesName <- if (indx == 1) "g.names" else "h.names" + + + # create information messages + if (is.element(struct, c("SPEXP", "SPGAU", "SPLIN", "SPRAT", "SPSPH", "PHYBM", "PHYPL", "PHYPD", "GEN", "GDIAG"))) { + inner <- trimws(paste0(strsplit(paste0(x$formulas[[indx]], collapse = ""), "|", fixed = TRUE)[[1]][1], collapse = "")) + } else { + inner <- x[[g.namesName]][1] + } + outer <- tail(x[[g.namesName]], 1) + innerLvl <- x[[g.nlevels.fName]][1] + outerLvl <- x[[g.nlevelsName]][2] - # variances - vc <- cbind.data.frame(sqrt(fit$tau2), fit$tau2, ifelse(fit$vc.fix$tau2, "yes", "no")) - colnames(vc) <- c("sigma", "sigma2", "fixed") - vc$factor <- .maVariableNames(fit$g.names[-length(fit$g.names)], unlist(.mammExtractRandomVariableNames(options))) + message1 <- paste0(x[[g.nlevels.fName]][1], " | ", outerLvl) + message2 <- paste0(inner, " | ", outer) - # covariance matrix - G.info <- cov2cor(fit$G) + # create jasp containers + jaspContainer <- createJaspContainer(title = gettextf(.mammGetOptionsNameStructure(struct), "Summary")) + jaspContainer$dependOn(.maDependencies) + + if (is.element(struct, c("CS", "AR", "CAR", "ID", "SPEXP", "SPGAU", "SPLIN", "SPRAT", "SPSPH", "PHYBM", "PHYPL", "PHYPD"))) { + + vc <- cbind(tau2, tau, ifelse(x$vc.fix[[tau2Name]], "yes", "no")) + vc <- rbind(vc, c(rho, "", ifelse(x$vc.fix[[rhoName]], "yes", "no"))) + + vc <- data.frame(vc) + colnames(vc) <- c("estimate", "estimateSqrt", "fixed") + vc$parameter <- c("\U1D70F\U00B2", "\U03C1") + + if (struct == "ID") { + vc <- vc[1, , drop = FALSE] + } + + tempTable <- createJaspTable(title = gettext("Estimates")) + tempTable$position <- 1 + tempTable$addColumnInfo(name = "parameter", type = "string", title = "") + tempTable$addColumnInfo(name = "estimate", type = "number", title = gettext("Estimate")) + tempTable$addColumnInfo(name = "estimateSqrt", type = "number", title = gettext("Sqrt. Estimate")) + tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + + tempTable$setData(vc) + tempTable$addFootnote(message1, symbol = gettext("Levels: ")) + tempTable$addFootnote(message2, symbol = gettext("Component: ")) + jaspContainer[["table1"]] <- tempTable + } + + if (is.element(struct, c("HCS", "HAR", "DIAG"))) { + + vc <- cbind(tau2, tau, x[[g.levels.kName]], ifelse(x$vc.fix$tau2, "yes", "no"), x[[g.levels.fName]][[1]]) + vc <- rbind(vc, c(rho, "", "", ifelse(x$vc.fix[[rhoName]], "yes", "no"), "")) + + vc <- data.frame(vc) + colnames(vc) <- c("estimate", "estimateSqrt", "nLevels", "fixed", "level") + + if (length(x[[tau2Name]]) == 1L) { + vc$parameter <- c("\U1D70F\U00B2", "\U03C1") + } else { + vc$parameter <- c(paste0("\U1D70F\U00B2[",seq_along(x[[tau2Name]]),"]"), "\U03C1") + } + + if (struct == "DIAG") + vc <- vc[seq_along(tau2), , drop = FALSE] + + tempTable <- createJaspTable(title = gettext("Estimates")) + tempTable$position <- 1 + tempTable$addColumnInfo(name = "parameter", type = "string", title = "") + tempTable$addColumnInfo(name = "level", type = "string", title = gettext("Level")) + tempTable$addColumnInfo(name = "estimate", type = "number", title = gettext("Estimate")) + tempTable$addColumnInfo(name = "estimateSqrt", type = "number", title = gettext("Sqrt. Estimate")) + tempTable$addColumnInfo(name = "nLevels", type = "integer", title = gettext("Levels")) + tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + + tempTable$setData(vc) + tempTable$addFootnote(message1, symbol = gettext("Levels: ")) + tempTable$addFootnote(message2, symbol = gettext("Component: ")) + jaspContainer[["table1"]] <- tempTable + + } + + if (is.element(struct, c("UN", "UNR"))) { + + if (struct == "UN") { + vc <- cbind(tau2, tau, x[[g.levels.kName]], ifelse(x$vc.fix[[tau2Name]], "yes", "no"), x[[g.levels.fName]][[1]]) + } else { + vc <- cbind(rep(tau2, length(x[[g.levels.kName]])), + rep(tau, length(x[[g.levels.kName]])), x[[g.levels.kName]], + ifelse(rep(x$vc.fix[[tau2Name]], length(x[[g.levels.kName]])), "yes", "no"), + x[[g.levels.fName]][[1]]) + } + vc <- data.frame(vc) + colnames(vc) <- c("estimate", "estimateSqrt", "nLevels", "fixed", "level") + + if (length(x[[g.levels.kName]]) == 1L) { + vc$parameter <- c("\U1D70F\U00B2") + } else { + vc$parameter <-paste0("\U1D70F\U00B2[",seq_along(x[[g.levels.kName]]),"]") + } + + tempTable <- createJaspTable(title = gettext("Estimates \U1D70F\U00B2")) + tempTable$position <- 1 + tempTable$addColumnInfo(name = "parameter", type = "string", title = "") + tempTable$addColumnInfo(name = "level", type = "string", title = gettext("Level")) + tempTable$addColumnInfo(name = "estimate", type = "number", title = gettext("Estimate")) + tempTable$addColumnInfo(name = "estimateSqrt", type = "number", title = gettext("Sqrt. Estimate")) + tempTable$addColumnInfo(name = "nLevels", type = "string", title = gettext("Levels")) + tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + + tempTable$setData(vc) + tempTable$addFootnote(message1, symbol = gettext("Levels: ")) + tempTable$addFootnote(message2, symbol = gettext("Component: ")) + jaspContainer[["table1"]] <- tempTable + + + if (length(x[[rhoName]]) == 1L) { + G <- matrix(NA_real_, nrow = 2, ncol = 2) + } else { + G <- matrix(NA_real_, nrow = x[[g.nlevels.fName]][1], ncol = x[[g.nlevels.fName]][1]) + } + + G[lower.tri(G)] <- rho + G[upper.tri(G)] <- t(G)[upper.tri(G)] + diag(G) <- 1 + G[upper.tri(G)] <- NA + + G <- data.frame(G) + colnames(G) <- paste0("rho", 1:(ncol(G))) + G$parameter <- sprintf("\U03C1[%1$i,]", 1:nrow(G)) + + + if (length(x$rho) == 1L) { + G.info <- matrix(NA_real_, nrow = 2, ncol = 2) + } else { + G.info <- matrix(NA_real_, nrow = x[[g.nlevels.fName]][1], ncol = x[[g.nlevels.fName]][1]) + } + G.infoLevels <- G.info + G.infoLevels[lower.tri(G.infoLevels)] <- x[[g.levels.comb.kName]] + G.infoLevels[upper.tri(G.infoLevels)] <- t(G.infoLevels)[upper.tri(G.infoLevels)] + G.infoLevels[lower.tri(G.infoLevels)] <- NA + diag(G.infoLevels) <- NA + + G.infoLevels <- data.frame(G.infoLevels) + colnames(G.infoLevels) <- paste0("rhoLevel", 1:ncol(G.infoLevels)) + + G.infoEstimated <- G.info + G.infoEstimated[upper.tri(G.infoEstimated)] <- ifelse(x$vc.fix[[rhoName]], "yes", "no") + + G.infoEstimated <- data.frame(G.infoEstimated) + colnames(G.infoEstimated) <- paste0("rhoEstimated", 1:ncol(G.infoEstimated)) + + Gmat <- cbind(G, G.infoLevels, G.infoEstimated) + + tempTable2 <- createJaspTable(title = gettext("Estimates \U03C1")) + tempTable2$position <- 2 + tempTable2$addColumnInfo(name = "parameter", type = "string", title = "") + for(i in 1:ncol(G)){ + tempTable2$addColumnInfo(name = paste0("rho",i), type = "number", title = sprintf("[,%1$i]", i), overtitle = gettext("Estimates")) + } + for(i in 1:ncol(G.infoLevels)){ + tempTable2$addColumnInfo(name = paste0("rhoLevel",i), type = "integer", title = sprintf("[,%1$i]", i), overtitle = gettext("Levels")) + } + for(i in 1:ncol(G.infoEstimated)){ + tempTable2$addColumnInfo(name = paste0("rhoEstimated",i), type = "string", title = sprintf("[,%1$i]", i), overtitle = gettext("Fixed")) + } + + tempTable2$setData(Gmat) + tempTable2$addFootnote(message1, symbol = gettext("Levels: ")) + tempTable2$addFootnote(message2, symbol = gettext("Component: ")) + jaspContainer[["table2"]] <- tempTable2 + } + + if (struct == "GEN") { + + vc <- cbind(tau2, tau, ifelse(x$vc.fix[[tau2Name]], "yes", "no")) + + vc <- data.frame(vc) + colnames(vc) <- c("estimate", "estimateSqrt", "fixed") + vc$parameter <- .maVariableNames(x[[g.namesName]][-length(x[[g.namesName]])], unlist(.mammExtractRandomVariableNames(options))) + + + tempTable <- createJaspTable(title = gettext("Estimates \U1D70F\U00B2")) + tempTable$position <- 1 + tempTable$addColumnInfo(name = "parameter", type = "string", title = "") + tempTable$addColumnInfo(name = "estimate", type = "number", title = gettext("Estimate")) + tempTable$addColumnInfo(name = "estimateSqrt", type = "number", title = gettext("Sqrt. Estimate")) + tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + + tempTable$setData(vc) + tempTable$addFootnote(message1, symbol = gettext("Levels: ")) + tempTable$addFootnote(message2, symbol = gettext("Component: ")) + jaspContainer[["table1"]] <- tempTable + + + G.info <- cov2cor(x[[GName]]) diag(G.info) <- NA - G.info[lower.tri(G.info)] <- NA - # TODO: adds info about whether the correlation is fixed or estimated - # G.info[lower.tri(G.info)] <- ifelse(fit$vc.fix$rho, "yes", "no") - colnames(G.info) <- .maVariableNames(fit$g.names[-length(fit$g.names)], unlist(.mammExtractRandomVariableNames(options))) + G.info[upper.tri(G.info)] <- NA + + G.info <- data.frame(G.info) + colnames(G.info) <- paste0("rho", 1:ncol(G.info)) + + + G.infoFixed <- G.info + G.infoFixed[lower.tri(G.infoFixed)] <- NA + G.infoFixed[upper.tri(G.infoFixed)] <- ifelse(x$vc.fix[[rhoName]], "yes", "no") + G.infoFixed <- data.frame(G.infoFixed) + colnames(G.infoFixed) <- paste0("rhoFixed", 1:ncol(G.infoFixed)) - tableB$setData(resultsB) + Gmat <- cbind(G.info, G.infoFixed) + Gmat$parameter <- .maVariableNames(x[[g.namesName]][-length(x[[g.namesName]])], unlist(.mammExtractRandomVariableNames(options))) - inner <- trimws(paste0(strsplit(paste0(fit$formulas[[1]], collapse = ""), "|", fixed = TRUE)[[1]][1], collapse = "")) - outer <- tail(fit$g.names, 1) + tempTable2 <- createJaspTable(title = gettext("Estimates \U03C1")) + tempTable2$position <- 2 + tempTable$addColumnInfo(name = "parameter", type = "string", title = "") + for(i in 1:ncol(G.info)){ + tempTable2$addColumnInfo(name = paste0("rho",i), type = "number", title = Gmat$parameter[i], overtitle = gettext("Estimates")) + } + for(i in 1:ncol(G.infoFixed)){ + tempTable2$addColumnInfo(name = paste0("rhoFixed",i), type = "string", title = Gmat$parameter[i], overtitle = gettext("Fixed")) + } - tableB$addFooter(paste0(inner, " | ", outer), symbol = gettext("Component: ")) - tableB$addFooter(paste0(x$g.nlevels.f[1], " | ", x$g.nlevels[2]), symbol = gettext("Levels: ")) + tempTable2$setData(Gmat) + tempTable2$addFootnote(message1, symbol = gettext("Levels: ")) + tempTable2$addFootnote(message2, symbol = gettext("Component: ")) + jaspContainer[["table2"]] <- tempTable2 } - return() + if (is.element(struct, c("GDIAG"))) { + + vc <- cbind(tau2, tau, ifelse(x$vc.fix[["tau2"]], "yes", "no")) + + vc <- data.frame(vc) + colnames(vc) <- c("estimate", "estimateSqrt", "fixed") + vc$parameter <- .maVariableNames(x[[g.namesName]][-length(x[[g.namesName]])], unlist(.mammExtractRandomVariableNames(options))) + + tempTable <- createJaspTable(title = gettext("Estimates \U1D70F\U00B2")) + tempTable$position <- 1 + tempTable$addColumnInfo(name = "parameter", type = "string", title = "") + tempTable$addColumnInfo(name = "estimate", type = "number", title = gettext("Estimate")) + tempTable$addColumnInfo(name = "estimateSqrt", type = "number", title = gettext("Sqrt. Estimate")) + tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + + tempTable$setData(vc) + tempTable$addFootnote(message1, symbol = gettext("Levels: ")) + tempTable$addFootnote(message2, symbol = gettext("Component: ")) + jaspContainer[["table1"]] <- tempTable + } + + return(jaspContainer) } + diff --git a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml index 44b7aa25..a22d972c 100644 --- a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml +++ b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml @@ -143,7 +143,7 @@ Form return [ { label: qsTr("Compound symmetry"), value: "compoundSymmetry"}, { label: qsTr("Heteroscedastic compound symmetry"), value: "heteroscedasticCompoundSymmetry"}, - { label: qsTr("Unstructured "), value: "Unstructured"}, + { label: qsTr("Unstructured "), value: "unstructured"}, { label: qsTr("Identity"), value: "identity"}, { label: qsTr("Diagonal"), value: "diagonal"} ]; diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml index 81a0ab82..43c2a335 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml @@ -32,6 +32,7 @@ Section title: qsTr("Heterogeneity") columns: 2 enabled: method.value != "fixedEffects" && method.value != "equalEffects" + visible: module == "metaAnalysis" CheckBox { From 08a07307293d55e78deb695e52a1f23692721cc8 Mon Sep 17 00:00:00 2001 From: FBartos Date: Tue, 25 Jun 2024 13:57:46 +0200 Subject: [PATCH 047/127] some updates --- R/classicalmetaanalysiscommon.R | 15 +- ...ssicalmetaanalysismultilevelmultivariate.R | 109 +- R/effectsizecomputation.R | 12 +- inst/qml/ClassicalMetaAnalysis.qml | 9 +- ...icalMetaAnalysisMultilevelMultivariate.qml | 7 +- .../ClassicalMetaAnalysisStatistics.qml | 20 + mccurdy2020.csv | 1654 +++++++++++++++++ 7 files changed, 1772 insertions(+), 54 deletions(-) create mode 100644 mccurdy2020.csv diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index b82139f5..c39857f0 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -52,9 +52,10 @@ # model summary .maResidualHeterogeneityTable(jaspResults, dataset, options) .maModeratorsTable(jaspResults, dataset, options) + .maPooledEstimatesTable(jaspResults, dataset, options) if (.maIsMultilevelMultivariate(options)) .mammRandomEstimatesTable(jaspResults, dataset, options) - .maPooledEstimatesTable(jaspResults, dataset, options) + if (options[["fitMeasures"]]) .maFitMeasuresTable(jaspResults, dataset, options) @@ -793,7 +794,7 @@ width = width, height = height ) - forestPlot$position <- 4 + forestPlot$position <- 5 forestPlot$dependOn(.maForestPlotDependencies) if (!attr(plotOut, "isPanel")) { @@ -840,7 +841,7 @@ } else { bubblePlot <- createJaspPlot(title = gettext("Bubble Plot"), width = width, height = height) bubblePlot$dependOn(.maBubblePlotDependencies) - bubblePlot$position <- 5 + bubblePlot$position <- 6 jaspResults[["bubblePlot"]] <- bubblePlot } @@ -1275,7 +1276,7 @@ # create the output container metaregressionContainer <- createJaspContainer(gettext("Meta-Regression Summary")) metaregressionContainer$dependOn(c(.maDependencies, "confidenceInterval")) - metaregressionContainer$position <- 2 + metaregressionContainer$position <- 3 jaspResults[["metaregressionContainer"]] <- metaregressionContainer return(metaregressionContainer) @@ -1288,7 +1289,7 @@ # create the output container estimatedMarginalMeansContainer <- createJaspContainer(gettext("Meta-Regression Summary")) estimatedMarginalMeansContainer$dependOn(c(.maDependencies, "confidenceIntervals", "confidenceIntervalsLevel")) - estimatedMarginalMeansContainer$position <- 3 + estimatedMarginalMeansContainer$position <- 4 jaspResults[["estimatedMarginalMeansContainer"]] <- estimatedMarginalMeansContainer return(estimatedMarginalMeansContainer) @@ -1301,7 +1302,7 @@ # create the output container varianceInflationContainer <- createJaspContainer(gettext("Variance Inflation Summary")) varianceInflationContainer$dependOn(c(.maDependencies, "diagnosticsVarianceInflationFactor", "diagnosticsVarianceInflationFactorAggregate")) - varianceInflationContainer$position <- 6 + varianceInflationContainer$position <- 7 jaspResults[["varianceInflationContainer"]] <- varianceInflationContainer return(varianceInflationContainer) @@ -2113,7 +2114,7 @@ if (.maIsMultilevelMultivariate(options)) { randomFormulaList <- .mammGetRandomFormulaList(options) if (length(randomFormulaList) != 0) { - struct <- do.call(c, sapply(randomFormulaList, attr, "structure")) + struct <- do.call(c, lapply(randomFormulaList, attr, "structure")) if (length(randomFormulaList) > 1) randomFormulaList <- paste0("list(\n\t\t", paste0("'", names(randomFormulaList), "' = ", randomFormulaList, collapse = "\n\t\t"),")") rmaInput$random <- randomFormulaList diff --git a/R/classicalmetaanalysismultilevelmultivariate.R b/R/classicalmetaanalysismultilevelmultivariate.R index 2f4146ca..7bc4d35b 100644 --- a/R/classicalmetaanalysismultilevelmultivariate.R +++ b/R/classicalmetaanalysismultilevelmultivariate.R @@ -306,7 +306,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N randomEstimatesContainer <- createJaspContainer(title = gettext("Random Effects / Model Stucture Summary")) randomEstimatesContainer$dependOn(.maDependencies) - randomEstimatesContainer$position <- 1.1 + randomEstimatesContainer$position <- 2 jaspResults[["randomEstimatesContainer"]] <- randomEstimatesContainer fit <- .maExtractFit(jaspResults, options) @@ -318,14 +318,16 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N ### create table for nested random effects if (fit[["withS"]]) { - tableS <- createJaspTable(gettext("Simple / Nested Estimates")) + tableS <- createJaspTable(title = gettext("Simple / Nested Estimates")) tableS$position <- 1 tableS$addColumnInfo(name = "factor", type = "string", title = "") tableS$addColumnInfo(name = "sigma2", type = "number", title = gettext("\U03C3\U00B2")) tableS$addColumnInfo(name = "sigma", type = "number", title = gettext("\U03C3")) tableS$addColumnInfo(name = "nlvls", type = "integer", title = gettext("Levels")) - tableS$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + if (.mammAddIsFixedRandom(options, 3)) + tableS$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + # tableS$addColumnInfo(name = "R", type = "string", title = gettext("R")) # whether supplied via known correlation matrix randomEstimatesContainer[["tableS"]] <- tableS @@ -338,25 +340,32 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N # R = ifelse(fit[["Rfix"]] , "yes", "no") ) + if (!.mammAddIsFixedRandom(options, indx)) + resultsS <- resultsS[,colnames(resultsS) != "fixed", drop = FALSE] + tableS$setData(resultsS) } - + return() ### create summary for the remaining types if (fit[["withG"]]) { - containerG <- .mammExtractRandomTable(options, fit, indx = 1) + # create jasp containers + containerG <- createJaspContainer(title = paste0(.mammGetOptionsNameStructure(fit[["struct"]][1]), gettext(" Summary"))) + containerG$position <- 2 randomEstimatesContainer[["containerG"]] <- containerG + .mammExtractRandomTables(containerG, options, fit, indx = 1) } if (fit[["withH"]]) { - containerH <- .mammExtractRandomTable(options, fit, indx = 2) + containerH <- createJaspContainer(title = paste0(.mammGetOptionsNameStructure(fit[["struct"]][2]), gettext(" Summary"))) + containerH$position <- 3 randomEstimatesContainer[["containerH"]] <- containerH + .mammExtractRandomTables(containerH, options, fit, indx = 3) } - return() } .mammGetStructureOptions <- function(structure) { @@ -400,7 +409,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N stop(paste0("Unknown value: ", structure)) )) } -.mammExtractRandomTable <- function(options, x, indx = 1) { +.mammExtractRandomTables <- function(tempContainer, options, x, indx = 1) { # dispatching struct <- x$struct[indx] @@ -435,10 +444,6 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N message1 <- paste0(x[[g.nlevels.fName]][1], " | ", outerLvl) message2 <- paste0(inner, " | ", outer) - # create jasp containers - jaspContainer <- createJaspContainer(title = gettextf(.mammGetOptionsNameStructure(struct), "Summary")) - jaspContainer$dependOn(.maDependencies) - if (is.element(struct, c("CS", "AR", "CAR", "ID", "SPEXP", "SPGAU", "SPLIN", "SPRAT", "SPSPH", "PHYBM", "PHYPL", "PHYPD"))) { vc <- cbind(tau2, tau, ifelse(x$vc.fix[[tau2Name]], "yes", "no")) @@ -452,17 +457,24 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N vc <- vc[1, , drop = FALSE] } + if (!.mammAddIsFixedRandom(options, indx)) + vc <- vc[,colnames(vc) != "fixed", drop = FALSE] + tempTable <- createJaspTable(title = gettext("Estimates")) tempTable$position <- 1 tempTable$addColumnInfo(name = "parameter", type = "string", title = "") tempTable$addColumnInfo(name = "estimate", type = "number", title = gettext("Estimate")) tempTable$addColumnInfo(name = "estimateSqrt", type = "number", title = gettext("Sqrt. Estimate")) - tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + if (.mammAddIsFixedRandom(options, indx)) + tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + tempContainer[["table1"]] <- tempTable tempTable$setData(vc) tempTable$addFootnote(message1, symbol = gettext("Levels: ")) tempTable$addFootnote(message2, symbol = gettext("Component: ")) - jaspContainer[["table1"]] <- tempTable + + + } if (is.element(struct, c("HCS", "HAR", "DIAG"))) { @@ -482,6 +494,9 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N if (struct == "DIAG") vc <- vc[seq_along(tau2), , drop = FALSE] + if (!.mammAddIsFixedRandom(options, indx)) + vc <- vc[,colnames(vc) != "fixed", drop = FALSE] + tempTable <- createJaspTable(title = gettext("Estimates")) tempTable$position <- 1 tempTable$addColumnInfo(name = "parameter", type = "string", title = "") @@ -489,12 +504,13 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N tempTable$addColumnInfo(name = "estimate", type = "number", title = gettext("Estimate")) tempTable$addColumnInfo(name = "estimateSqrt", type = "number", title = gettext("Sqrt. Estimate")) tempTable$addColumnInfo(name = "nLevels", type = "integer", title = gettext("Levels")) - tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + if (.mammAddIsFixedRandom(options, indx)) + tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) tempTable$setData(vc) tempTable$addFootnote(message1, symbol = gettext("Levels: ")) tempTable$addFootnote(message2, symbol = gettext("Component: ")) - jaspContainer[["table1"]] <- tempTable + tempContainer[["table1"]] <- tempTable } @@ -517,6 +533,9 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N vc$parameter <-paste0("\U1D70F\U00B2[",seq_along(x[[g.levels.kName]]),"]") } + if (!.mammAddIsFixedRandom(options, indx)) + vc <- vc[,colnames(vc) != "fixed", drop = FALSE] + tempTable <- createJaspTable(title = gettext("Estimates \U1D70F\U00B2")) tempTable$position <- 1 tempTable$addColumnInfo(name = "parameter", type = "string", title = "") @@ -524,12 +543,13 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N tempTable$addColumnInfo(name = "estimate", type = "number", title = gettext("Estimate")) tempTable$addColumnInfo(name = "estimateSqrt", type = "number", title = gettext("Sqrt. Estimate")) tempTable$addColumnInfo(name = "nLevels", type = "string", title = gettext("Levels")) - tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + if (.mammAddIsFixedRandom(options, indx)) + tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) tempTable$setData(vc) tempTable$addFootnote(message1, symbol = gettext("Levels: ")) tempTable$addFootnote(message2, symbol = gettext("Component: ")) - jaspContainer[["table1"]] <- tempTable + tempContainer[["table1"]] <- tempTable if (length(x[[rhoName]]) == 1L) { @@ -568,7 +588,10 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N G.infoEstimated <- data.frame(G.infoEstimated) colnames(G.infoEstimated) <- paste0("rhoEstimated", 1:ncol(G.infoEstimated)) - Gmat <- cbind(G, G.infoLevels, G.infoEstimated) + if (!.mammAddIsFixedRandom(options, indx)) + Gmat <- cbind(G, G.infoLevels) + else + Gmat <- cbind(G, G.infoLevels, G.infoEstimated) tempTable2 <- createJaspTable(title = gettext("Estimates \U03C1")) tempTable2$position <- 2 @@ -579,14 +602,16 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N for(i in 1:ncol(G.infoLevels)){ tempTable2$addColumnInfo(name = paste0("rhoLevel",i), type = "integer", title = sprintf("[,%1$i]", i), overtitle = gettext("Levels")) } - for(i in 1:ncol(G.infoEstimated)){ - tempTable2$addColumnInfo(name = paste0("rhoEstimated",i), type = "string", title = sprintf("[,%1$i]", i), overtitle = gettext("Fixed")) + if (.mammAddIsFixedRandom(options, indx)) { + for(i in 1:ncol(G.infoEstimated)){ + tempTable2$addColumnInfo(name = paste0("rhoEstimated",i), type = "string", title = sprintf("[,%1$i]", i), overtitle = gettext("Fixed")) + } } tempTable2$setData(Gmat) tempTable2$addFootnote(message1, symbol = gettext("Levels: ")) tempTable2$addFootnote(message2, symbol = gettext("Component: ")) - jaspContainer[["table2"]] <- tempTable2 + tempContainer[["table2"]] <- tempTable2 } if (struct == "GEN") { @@ -597,18 +622,21 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N colnames(vc) <- c("estimate", "estimateSqrt", "fixed") vc$parameter <- .maVariableNames(x[[g.namesName]][-length(x[[g.namesName]])], unlist(.mammExtractRandomVariableNames(options))) + if (!.mammAddIsFixedRandom(options, indx)) + vc <- vc[,colnames(vc) != "fixed", drop = FALSE] tempTable <- createJaspTable(title = gettext("Estimates \U1D70F\U00B2")) tempTable$position <- 1 tempTable$addColumnInfo(name = "parameter", type = "string", title = "") tempTable$addColumnInfo(name = "estimate", type = "number", title = gettext("Estimate")) tempTable$addColumnInfo(name = "estimateSqrt", type = "number", title = gettext("Sqrt. Estimate")) - tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + if (.mammAddIsFixedRandom(options, indx)) + tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) tempTable$setData(vc) tempTable$addFootnote(message1, symbol = gettext("Levels: ")) tempTable$addFootnote(message2, symbol = gettext("Component: ")) - jaspContainer[["table1"]] <- tempTable + tempContainer[["table1"]] <- tempTable G.info <- cov2cor(x[[GName]]) @@ -626,24 +654,30 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N G.infoFixed <- data.frame(G.infoFixed) colnames(G.infoFixed) <- paste0("rhoFixed", 1:ncol(G.infoFixed)) - Gmat <- cbind(G.info, G.infoFixed) + if (!.mammAddIsFixedRandom(options, indx)) + Gmat <- G.info + else + Gmat <- cbind(G.info, G.infoFixed) + Gmat$parameter <- .maVariableNames(x[[g.namesName]][-length(x[[g.namesName]])], unlist(.mammExtractRandomVariableNames(options))) tempTable2 <- createJaspTable(title = gettext("Estimates \U03C1")) tempTable2$position <- 2 - tempTable$addColumnInfo(name = "parameter", type = "string", title = "") + tempTable2$addColumnInfo(name = "parameter", type = "string", title = "") for(i in 1:ncol(G.info)){ tempTable2$addColumnInfo(name = paste0("rho",i), type = "number", title = Gmat$parameter[i], overtitle = gettext("Estimates")) } - for(i in 1:ncol(G.infoFixed)){ - tempTable2$addColumnInfo(name = paste0("rhoFixed",i), type = "string", title = Gmat$parameter[i], overtitle = gettext("Fixed")) + if (.mammAddIsFixedRandom(options, indx)) { + for(i in 1:ncol(G.infoFixed)){ + tempTable2$addColumnInfo(name = paste0("rhoFixed",i), type = "string", title = Gmat$parameter[i], overtitle = gettext("Fixed")) + } } tempTable2$setData(Gmat) tempTable2$addFootnote(message1, symbol = gettext("Levels: ")) tempTable2$addFootnote(message2, symbol = gettext("Component: ")) - jaspContainer[["table2"]] <- tempTable2 + tempContainer[["table2"]] <- tempTable2 } @@ -655,19 +689,30 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N colnames(vc) <- c("estimate", "estimateSqrt", "fixed") vc$parameter <- .maVariableNames(x[[g.namesName]][-length(x[[g.namesName]])], unlist(.mammExtractRandomVariableNames(options))) + if (!.mammAddIsFixedRandom(options, indx)) + vc <- vc[,colnames(vc) != "fixed", drop = FALSE] + tempTable <- createJaspTable(title = gettext("Estimates \U1D70F\U00B2")) tempTable$position <- 1 tempTable$addColumnInfo(name = "parameter", type = "string", title = "") tempTable$addColumnInfo(name = "estimate", type = "number", title = gettext("Estimate")) tempTable$addColumnInfo(name = "estimateSqrt", type = "number", title = gettext("Sqrt. Estimate")) - tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + if (.mammAddIsFixedRandom(options, indx)) + tempTable$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) + tempTable$setData(vc) tempTable$addFootnote(message1, symbol = gettext("Levels: ")) tempTable$addFootnote(message2, symbol = gettext("Component: ")) - jaspContainer[["table1"]] <- tempTable + tempContainer[["table1"]] <- tempTable } - return(jaspContainer) + return() +} +.mammAddIsFixedRandom <- function(options, indx) { + + return(FALSE) + + # TODO: show / hide information on whether the random effects are fixed by the user } diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index 6f5767fc..90181e93 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -62,7 +62,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { variables <- options[["variables"]][[i]] # dispatch - if (!.escReportedEffectSizesReady(variables)) { + if (effectSizeType[["design"]] == "reportedEffectSizes" && !.escReportedEffectSizesReady(variables)) { newDataOutput <- try(stop(gettext("Cannot compute outcomes. Chech that all of the required information is specified via the appropriate arguments (i.e. an Effect Size and either Standard Error, Sampling Variance, or 95% Confidence Interval)."))) } else { # set escalc input @@ -839,13 +839,9 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { return(inputs) } -.escReportedEffectSizesReady <- function(variables){ - if (variables[["effectSize"]] == "") - return(FALSE) - else if (length(variables[["confidenceInterval"]]) == 0 && variables[["standardError"]] == "" && variables[["samplingVariance"]] == "") - return(FALSE) - else - return(TRUE) +.escReportedEffectSizesReady <- function(.escReportedEffectSizesReady, variables){ + + return(!(length(variables[["confidenceInterval"]]) == 0 && variables[["standardError"]] == "" && variables[["samplingVariance"]] == "")) } .escVariableInputs <- c( "group1OutcomePlus", diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 84fe744f..f465d365 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -57,12 +57,7 @@ Form label: qsTr("Method") startValue: "restrictedML" values: (function() { - if (module == "metaAnalysisMultilevelMultivariate") { - return [ - { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, - { label: qsTr("Restricted ML") , value: "restrictedML" } - ]; - } else if (sectionModel.heterogeneityModelTermsCount == 0) { + if (sectionModel.heterogeneityModelTermsCount == 0) { return [ { label: qsTr("Equal Effects") , value: "equalEffects" }, { label: qsTr("Fixed Effects") , value: "fixedEffects" }, @@ -133,6 +128,8 @@ Form MA.ClassicalMetaAnalysisForestPlot {} + MA.ClassicalMetaAnalysisBubblePlot {} + MA.ClassicalMetaAnalysisDiagnostics {} MA.ClassicalMetaAnalysisAdvanced {} diff --git a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml index a22d972c..d226fcd4 100644 --- a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml +++ b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml @@ -352,7 +352,10 @@ Form module: "metaAnalysisMultilevelMultivariate" } - MA.ClassicalMetaAnalysisStatistics {} + MA.ClassicalMetaAnalysisStatistics + { + module: "metaAnalysisMultilevelMultivariate" + } MA.ClassicalMetaAnalysisEstimatedMarginalMeans { @@ -361,6 +364,8 @@ Form MA.ClassicalMetaAnalysisForestPlot {} + MA.ClassicalMetaAnalysisBubblePlot {} + MA.ClassicalMetaAnalysisDiagnostics {} MA.ClassicalMetaAnalysisAdvanced diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml index 43c2a335..c5d891ab 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml @@ -63,6 +63,26 @@ Section } } + Group + { + text: qsTr("Random effects / model structure") + visible: module == "metaAnalysisMultilevelMultivariate" + + CheckBox + { + text: qsTr("Test inclusion") + name: "randomEffectsTestInclusion" + checked: false + } + + CheckBox + { + text: qsTr("Confidence intervals") + name: "randomEffectsConfidenceIntervals" + checked: false + } + } + Group { title: qsTr("Meta-Regression") diff --git a/mccurdy2020.csv b/mccurdy2020.csv new file mode 100644 index 00000000..d489be09 --- /dev/null +++ b/mccurdy2020.csv @@ -0,0 +1,1654 @@ +"article","experiment","sample","id","pairing","yi","vi","ni","stimuli","condition","gen_difficulty","manip_type","present_style","word_status","memory_test","memory_type","gen_constraint","learning_type","stimuli_relation","gen_mode","gen_task","attention","pacing","filler_task","age_grp","retention_delay" +12,"1",1,1,1,0.879,0.000684370886775546,12,20,"generate",NA,"between","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","word stem","full",NA,"no","younger","immediate" +12,"1",2,2,1,0.713,0.0014039186561301,12,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","word stem","full",NA,"no","younger","immediate" +12,"1",1,3,2,0.906,0.000579846945242727,12,20,"generate",NA,"between","pure","words","recognition","item","high","intentional","category","verbal/speaking","word stem","full",NA,"no","younger","immediate" +12,"1",2,4,2,0.684,0.00150947360729542,12,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional","category","verbal/speaking","word stem","full",NA,"no","younger","immediate" +12,"1",1,5,3,0.842,0.000840009202792111,12,20,"generate",NA,"between","pure","words","recognition","item","high","intentional","antonym","verbal/speaking","word stem","full",NA,"no","younger","immediate" +12,"1",2,6,3,0.753,0.00123787160677674,12,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional","antonym","verbal/speaking","word stem","full",NA,"no","younger","immediate" +12,"1",1,7,4,0.893,0.000629087067046572,12,20,"generate",NA,"between","pure","words","recognition","item","high","intentional","synonym","verbal/speaking","word stem","full",NA,"no","younger","immediate" +12,"1",2,8,4,0.697,0.00146406150622161,12,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional","synonym","verbal/speaking","word stem","full",NA,"no","younger","immediate" +12,"1",1,9,5,0.733,0.00132323769152387,12,20,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full",NA,"no","younger","immediate" +12,"1",2,10,5,0.643,0.00162797627976605,12,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full",NA,"no","younger","immediate" +12,"2",1,11,6,0.838,0.00112350532092418,12,10,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","no","younger","immediate" +12,"2",1,12,6,0.652,0.00210355693438592,12,10,"read",NA,"within","pure","words","recognition","item",NA,NA,"semantic","verbal/speaking","word stem","full","timed","no","younger","immediate" +12,"2",1,13,7,0.872,0.000933945263966527,12,10,"generate",NA,"within","pure","words","recognition","item","high",NA,"category","verbal/speaking","word stem","full","timed","no","younger","immediate" +12,"2",1,14,7,0.665,0.00205625312585221,12,10,"read",NA,"within","pure","words","recognition","item",NA,NA,"category","verbal/speaking","word stem","full","timed","no","younger","immediate" +12,"2",1,15,8,0.878,0.000901948106343916,12,10,"generate",NA,"within","pure","words","recognition","item","high",NA,"antonym","verbal/speaking","word stem","full","timed","no","younger","immediate" +12,"2",1,16,8,0.699,0.00190868556837928,12,10,"read",NA,"within","pure","words","recognition","item",NA,NA,"antonym","verbal/speaking","word stem","full","timed","no","younger","immediate" +12,"2",1,17,9,0.871,0.000939325748505542,12,10,"generate",NA,"within","pure","words","recognition","item","high",NA,"synonym","verbal/speaking","word stem","full","timed","no","younger","immediate" +12,"2",1,18,9,0.677,0.00200787598553101,12,10,"read",NA,"within","pure","words","recognition","item",NA,NA,"synonym","verbal/speaking","word stem","full","timed","no","younger","immediate" +12,"2",1,19,10,0.741,0.00168959316287993,12,10,"generate",NA,"within","pure","words","recognition","item","high",NA,"rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +12,"2",1,20,10,0.548,0.00225122514558473,12,10,"read",NA,"within","pure","words","recognition","item",NA,NA,"rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +12,"3",1,21,11,0.521,0.00152090063574728,12,33,"generate",NA,"within","pure","words","recognition","cue word","high",NA,"rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +12,"3",1,22,11,0.492,0.00147309436068632,12,33,"read",NA,"within","pure","words","recognition","cue word",NA,NA,"rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +12,"3",2,23,12,0.711,0.00126913848238116,12,33,"generate",NA,"within","pure","words","recognition","item","high",NA,"rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +12,"3",2,24,12,0.533,0.00153403929794394,12,33,"read",NA,"within","pure","words","recognition","item",NA,NA,"rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +13,"1",1,25,13,0.354,0.00146800828724623,20,8,"generate",NA,"within","pure","words","free recall","item","medium","incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +13,"1",1,26,13,0.151,0.000446314512003586,20,8,"read",NA,"within","pure","words","free recall","item",NA,"incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +13,"1",1,27,14,0.361,0.00150859341116615,20,8,"generate",NA,"within","pure","words","free recall","item","medium","incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","immediate" +13,"1",1,28,14,0.21,0.000683170940514453,20,8,"read",NA,"within","pure","words","free recall","item",NA,"incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","immediate" +13,"2",1,29,15,0.302,0.000830957610396787,20,16,"generate",NA,"between","pure","words","free recall","item","medium","incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +13,"2",2,30,15,0.162,0.00034640915911672,20,16,"read",NA,"between","pure","words","free recall","item",NA,"incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +13,"2",1,31,16,0.368,0.00110495355761299,20,16,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","immediate" +13,"2",2,32,16,0.287,0.000770020107276239,20,16,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","immediate" +13,"3a",1,33,17,0.861,0.000982008449114481,20,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +13,"3a",1,34,17,0.512,0.00217215430763486,20,8,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +13,"3a",1,35,18,0.928,0.000649248987857125,20,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","immediate" +13,"3a",1,36,18,0.893,0.000814419054784168,20,8,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","immediate" +13,"3b",1,37,19,0.819,0.00121932794584729,20,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","long" +13,"3b",1,38,19,0.346,0.00142136011364856,20,8,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","long" +13,"3b",1,39,20,0.906,0.000750672563149527,20,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","long" +13,"3b",1,40,20,0.727,0.00174513233596134,20,8,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","long" +13,"4",1,41,21,0.783,0.00142975061806918,20,8,"generate",NA,"within","pure","words","recognition","item","medium","incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","long" +13,"4",1,42,21,0.542,0.00221937036825064,20,8,"read",NA,"within","pure","words","recognition","item",NA,"incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","long" +13,"4",1,43,22,0.785,0.00141806500652594,20,8,"generate",NA,"within","pure","words","recognition","item","medium","incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","long" +13,"4",1,44,22,0.684,0.00195417158112419,20,8,"read",NA,"within","pure","words","recognition","item",NA,"incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","long" +17,"1",1,45,23,0.41,0.000700410850629397,48,18,"generate",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"writing/typing",NA,"full","timed","no","younger","immediate" +17,"1",1,46,23,0.31,0.000476643333282595,48,18,"read",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"writing/typing",NA,"full","timed","no","younger","immediate" +17,"1",2,47,24,0.33,0.000522566722124564,48,18,"generate",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"covert/thinking",NA,"full","timed","no","younger","immediate" +17,"1",2,48,24,0.2,0.000251326523941607,48,18,"read",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"covert/thinking",NA,"full","timed","no","younger","immediate" +17,"1",1,49,25,0.99,0.000161657088434079,48,18,"generate",NA,"within","pure","words","cued recall","item",NA,"incidental","category",NA,NA,"full","timed","no","younger","immediate" +17,"1",1,50,25,0.96,0.000203577820769672,48,18,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","category",NA,NA,"full","timed","no","younger","immediate" +17,"1",2,51,26,0.97,0.000188871502997182,48,18,"generate",NA,"within","pure","words","cued recall","item",NA,"incidental","antonym",NA,NA,"full","timed","no","younger","immediate" +17,"1",2,52,26,0.83,0.000454924375852444,48,18,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","antonym",NA,NA,"full","timed","no","younger","immediate" +17,"1",1,53,27,0.98,0.000174899217660165,48,18,"generate",NA,"within","pure","words","cued recall","item",NA,"incidental",NA,"writing/typing",NA,"full","timed","no","younger","immediate" +17,"1",1,54,27,0.9,0.000306908678459329,48,18,"read",NA,"within","pure","words","cued recall","item",NA,"incidental",NA,"writing/typing",NA,"full","timed","no","younger","immediate" +17,"1",2,55,28,0.98,0.000174899217660165,48,18,"generate",NA,"within","pure","words","cued recall","item",NA,"incidental",NA,"covert/thinking",NA,"full","timed","no","younger","immediate" +17,"1",2,56,28,0.89,0.000326491125070066,48,18,"read",NA,"within","pure","words","cued recall","item",NA,"incidental",NA,"covert/thinking",NA,"full","timed","no","younger","immediate" +17,"1",1,57,29,0.96,0.000324357409504365,24,18,"generate",NA,"within","pure","words","recognition","source",NA,"incidental","category","writing/typing",NA,"full","timed","no","younger","immediate" +17,"1",1,58,29,0.92,0.000429669448481525,24,18,"read",NA,"within","pure","words","recognition","source",NA,"incidental","category","writing/typing",NA,"full","timed","no","younger","immediate" +17,"1",2,59,30,0.95,0.000348958115746369,24,18,"generate",NA,"within","pure","words","recognition","source",NA,"incidental","category","covert/thinking",NA,"full","timed","no","younger","immediate" +17,"1",2,60,30,0.81,0.000797514928048483,24,18,"read",NA,"within","pure","words","recognition","source",NA,"incidental","category","covert/thinking",NA,"full","timed","no","younger","immediate" +17,"1",3,61,31,0.76,0.000980053795187525,24,18,"generate",NA,"within","pure","words","recognition","source",NA,"incidental","antonym","writing/typing",NA,"full","timed","no","younger","immediate" +17,"1",3,62,31,0.8,0.000834199892079636,24,18,"read",NA,"within","pure","words","recognition","source",NA,"incidental","antonym","writing/typing",NA,"full","timed","no","younger","immediate" +17,"1",4,63,32,0.64,0.00132737297917539,24,18,"generate",NA,"within","pure","words","recognition","source",NA,"incidental","antonym","covert/thinking",NA,"full","timed","no","younger","immediate" +17,"1",4,64,32,0.71,0.00114920468848311,24,18,"read",NA,"within","pure","words","recognition","source",NA,"incidental","antonym","covert/thinking",NA,"full","timed","no","younger","immediate" +22,"1",1,65,33,0.207,0.000384235388467284,40,10,"generate",NA,"within","pure","words","free recall","item","high","intentional","synonym","verbal/speaking","word stem","full","timed","no","younger","immediate" +22,"1",1,66,33,0.138,0.000231140306363894,40,10,"read",NA,"within","pure","words","free recall","item",NA,"intentional","synonym","verbal/speaking","word stem","full","timed","no","younger","immediate" +22,"1",1,67,34,0.227,0.000437849855207709,40,10,"generate",NA,"within","pure","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +22,"1",1,68,34,0.125,0.000207945208367329,40,10,"read",NA,"within","pure","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +24,"1",1,69,35,0.23,0.000504166666666667,24,16,"generate","low","within","mixed","words","free recall","item","high","intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","immediate" +24,"1",1,70,35,0.27,0.0009375,24,16,"generate","high","within","mixed","words","free recall","item","medium","intentional","antonym","verbal/speaking","word stem","full","timed","no","younger","immediate" +24,"1",1,71,35,0.09,0.000266666666666667,24,16,"read","low","within","mixed","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","immediate" +24,"2",1,72,36,0.319,0.000894478028525949,36,8,"generate","low","within","mixed","words","free recall","item","high","intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","immediate" +24,"2",1,73,36,0.332,0.000948317194546913,36,8,"generate","high","within","mixed","words","free recall","item","medium","intentional","antonym","verbal/speaking","word stem","full","timed","no","younger","immediate" +24,"2",1,74,36,0.092,0.000193394847204221,36,8,"read","low","within","mixed","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","immediate" +24,"2",1,75,37,0.772,0.0010576142768678,36,8,"generate","low","within","mixed","words","recognition","item","high","intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","immediate" +24,"2",1,76,37,0.694,0.00135184430227227,36,8,"generate","high","within","mixed","words","recognition","item","medium","intentional","antonym","verbal/speaking","word stem","full","timed","no","younger","immediate" +24,"2",1,77,37,0.348,0.00101462524345138,36,8,"read","low","within","mixed","words","recognition","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","immediate" +24,"2",2,78,38,0.111,0.000228145307364424,36,8,"generate","low","within","mixed","words","free recall","item","high","intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","long" +24,"2",2,79,38,0.123,0.000252361318127707,36,8,"generate","high","within","mixed","words","free recall","item","medium","intentional","antonym","verbal/speaking","word stem","full","timed","no","younger","long" +24,"2",2,80,38,0.022,9.92358083701705e-05,36,8,"read","low","within","mixed","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","long" +24,"2",2,81,39,0.61,0.00154990246872589,36,8,"generate","low","within","mixed","words","recognition","item","high","intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","long" +24,"2",2,82,39,0.437,0.00135368236220221,36,8,"generate","high","within","mixed","words","recognition","item","medium","intentional","antonym","verbal/speaking","word stem","full","timed","no","younger","long" +24,"2",2,83,39,0.13,0.000267323830469801,36,8,"read","low","within","mixed","words","recognition","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","long" +33,"1",1,84,40,0.28,0.000620475290082038,16,75,"generate",NA,"within","mixed","non-words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +33,"1",1,85,40,0.26,0.000555431896698679,16,75,"read",NA,"within","mixed","non-words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +33,"1",2,86,41,0.253,0.000533369632490618,16,75,"generate",NA,"within","mixed","non-words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +33,"1",2,87,41,0.253,0.000533369632490618,16,75,"read",NA,"within","mixed","non-words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +33,"3",1,88,42,0.645,0.00134158448153486,30,12,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +33,"3",1,89,43,0.783,0.000912801834907347,30,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +33,"3",1,90,44,0.798,0.000856744207569873,30,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +33,"3",1,91,45,0.727,0.00111415234117743,30,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +33,"3",1,92,42,0.719,0.00114084386193041,30,12,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +33,"3",1,93,43,0.764,0.000983129979660008,30,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +33,"3",1,94,44,0.623,0.00138020542408049,30,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +33,"3",1,95,45,0.525,0.00140266482018947,30,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +34,"1",1,96,46,0.86,0.000625,16,30,"generate",NA,"within","mixed","words",NA,"item","low","incidental",NA,"writing/typing","word fragment","full","timed","yes","younger","short" +34,"1",1,97,46,0.59,0.00225625,16,30,"read",NA,"within","mixed","words",NA,"item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","yes","younger","short" +34,"1",1,98,47,0.76,0.0016,16,30,"generate",NA,"within","mixed","words","recognition","item","low","incidental",NA,"writing/typing","word fragment","full","timed","yes","younger","short" +34,"1",1,99,47,0.6,0.003025,16,30,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","yes","younger","short" +34,"4",1,100,48,0.78,0.000672222222222222,18,64,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"writing/typing","word fragment","full","timed","no","younger","long" +34,"4",1,101,48,0.59,0.0018,18,32,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"writing/typing","word fragment","full","timed","no","younger","long" +34,"5",1,102,49,0.83,0.000731785380507333,15,48,"generate",NA,"within","mixed","words",NA,"item","low","intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","short" +34,"5",1,103,49,0.59,0.00140416750772881,15,48,"read",NA,"within","mixed","words",NA,"item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","short" +34,"5",1,104,50,0.69,0.0012204099066028,15,48,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","short" +34,"5",1,105,50,0.59,0.00140416750772881,15,48,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","short" +34,"5",2,106,51,0.81,0.000805174440026366,15,48,"generate",NA,"within","mixed","words",NA,"item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +34,"5",2,107,51,0.6,0.00139634601934929,15,48,"read",NA,"within","mixed","words",NA,"item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +34,"5",2,108,52,0.78,0.000916305451760013,15,48,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +34,"5",2,109,52,0.63,0.00135777615881292,15,48,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +39,"1",1,110,53,0.86,0.000377066591188669,42,32,"generate",NA,"within","pure","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"1",1,111,53,0.77,0.000574818494035667,42,32,"read",NA,"within","pure","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"1",2,112,54,0.72,0.000680379047313836,42,32,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"1",2,113,54,0.7,0.000718351820373292,42,32,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"1",3,114,55,0.68,0.000752775166151369,42,32,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"1",3,115,55,0.67,0.000768435658403961,42,32,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"1",4,116,56,0.82,0.000463390274705203,42,32,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"1",4,117,56,0.74,0.000639597099817285,42,32,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"2",1,118,57,0.88,0.000504532066765866,48,8,"generate",NA,"within","pure","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"2",1,119,57,0.74,0.000959464485115942,48,8,"read",NA,"within","pure","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"2",1,120,58,0.74,0.000959464485115942,48,8,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"2",1,121,58,0.69,0.0011041572550761,48,8,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"2",1,122,59,0.76,0.00089521279282916,48,8,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"2",1,123,59,0.73,0.000990508937727104,48,8,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"2",1,124,60,0.84,0.000629410512673303,48,8,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"2",1,125,60,0.73,0.000990508937727104,48,8,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"3",1,126,61,0.86,0.000565640467839223,48,8,"generate",NA,"within","pure","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"3",1,127,61,0.81,0.000728475895473291,48,8,"read",NA,"within","pure","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"3",1,128,62,0.73,0.000990508937727104,48,8,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"3",1,129,62,0.74,0.000959464485115942,48,8,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"3",1,130,63,0.74,0.000959464485115942,48,8,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"3",1,131,63,0.71,0.00104972068243712,48,8,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"3",1,132,64,0.9,0.000446661886935307,48,8,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +39,"3",1,133,64,0.79,0.000795542265614413,48,8,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +46,"3",1,134,65,0.389,0.000779073948332024,32,30,"generate",NA,"within","pure","words","free recall","item","high","intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +46,"3",1,135,65,0.373,0.000737174082203171,32,30,"read",NA,"within","pure","words","free recall","item",NA,"intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +46,"3",1,136,66,0.398,0.000801986708006342,32,30,"generate",NA,"within","pure","words","free recall","item","high","intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +46,"3",1,137,66,0.373,0.000737174082203171,32,30,"read",NA,"within","pure","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +46,"3",2,138,67,0.425,0.000866909870457958,32,30,"generate",NA,"within","mixed","words","free recall","item","high","intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +46,"3",2,139,67,0.243,0.000393731068725644,32,30,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +46,"3",2,140,68,0.449,0.000918415918361287,32,30,"generate",NA,"within","mixed","words","free recall","item","high","intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +46,"3",2,141,68,0.24,0.000386624346299971,32,30,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +46,"4",1,142,69,0.376,0.00105963319875412,16,30,"generate",NA,"within","mixed","words","free recall","item","high","intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +46,"4",1,143,69,0.379,0.00107088466793759,16,30,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +46,"4",1,144,70,0.359,0.000994894460698372,16,30,"generate",NA,"within","mixed","words","free recall","item","high","intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +46,"4",1,145,70,0.344,0.000936838148014852,16,30,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +52,"1",1,146,71,0.376,0.00120125,20,20,"generate",NA,"within","mixed","words","recognition","source","low","incidental","category","covert/thinking","sentence completion","full","timed","no","younger","immediate" +52,"1",1,147,71,0.565,0.00114005,20,20,"read",NA,"within","mixed","words","recognition","source",NA,"incidental","category",NA,"sentence completion","full","timed","no","younger","immediate" +52,"1",2,148,72,0.295,0.0014792,20,20,"generate",NA,"within","mixed","words","recognition","source","low","incidental","category","covert/thinking","sentence completion","full","timed","no","older","immediate" +52,"1",2,149,72,0.527,0.00108045,20,20,"read",NA,"within","mixed","words","recognition","source",NA,"incidental","category",NA,"sentence completion","full","timed","no","older","immediate" +54,"1a",1,150,73,0.624,0.00171891022565796,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" +54,"1a",1,151,73,0.383,0.00130046082063292,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" +54,"1a",2,152,74,0.708,0.00146654857922247,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" +54,"1a",2,153,74,0.622,0.00172263994629038,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" +54,"1b",1,154,75,0.635,0.00169626438216114,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" +54,"1b",1,155,75,0.376,0.00126913544150135,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" +54,"1b",2,156,76,0.73,0.00137638129646805,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" +54,"1b",2,157,76,0.614,0.00173633680335309,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" +54,"2",1,158,77,0.694,0.00151977925882508,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","category","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +54,"2",1,159,77,0.351,0.00115459816601708,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","category","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +54,"2",2,160,78,0.632,0.00170279396606755,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","category","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +54,"2",2,161,78,0.314,0.000982412576485666,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","category","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +54,"2",3,162,79,0.621,0.00172445932476246,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","category","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +54,"2",3,163,79,0.621,0.00172445932476246,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","category","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +58,"1",1,164,80,0.66,0.00152965162030966,18,16,"generate",NA,"within","mixed","words","recognition","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","long" +58,"1",1,165,80,0.51,0.00161719496096029,18,16,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","long" +58,"2",1,166,81,0.76,0.00116589973013129,18,16,"generate",NA,"within","mixed","words","recognition","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","long" +58,"2",1,167,81,0.59,0.00165454676722574,18,16,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","long" +62,"1",1,168,82,0.63,0.00112461913283664,40,12,"generate",NA,"within","mixed","non-words","recognition","item","medium","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","short" +62,"1",1,169,82,0.63,0.00112461913283664,40,12,"read",NA,"within","mixed","non-words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","short" +62,"1",1,170,83,0.87,0.000489523988724184,40,12,"generate",NA,"within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","short" +62,"1",1,171,83,0.86,0.000517836377427427,40,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","short" +62,"1",1,172,84,0.97,0.000251644965721677,40,12,"generate",NA,"within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","short" +62,"1",1,173,84,0.93,0.000335859066699929,40,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","short" +62,"2",1,174,85,0.43,0.00119970947842174,30,12,"generate",NA,"within","mixed","non-words","recognition","item","medium","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","long" +62,"2",1,175,85,0.47,0.00130802551333819,30,12,"read",NA,"within","mixed","non-words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","long" +62,"2",1,176,86,0.77,0.000961057377349279,30,12,"generate",NA,"within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","long" +62,"2",1,177,86,0.79,0.000886664711171663,30,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","long" +62,"2",1,178,87,0.9,0.000497823120265038,30,12,"generate",NA,"within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","long" +62,"2",1,179,87,0.74,0.00106936279484505,30,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","long" +63,"1",1,180,88,0.55,0.00152473588786519,12,36,"generate",NA,"between","pure","words","free recall","item","medium","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"1",2,181,88,0.41,0.00121903188578046,12,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"1",3,182,89,0.27,0.000674815007158192,12,36,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"1",4,183,89,0.31,0.000829575128503558,12,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"1",1,184,90,0.89,0.000568242327381278,12,36,"generate",NA,"between","pure","words","recognition","item","medium","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"1",2,185,90,0.67,0.00137854961236853,12,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"1",3,186,91,0.8,0.000911252991695311,12,36,"generate",NA,"between","pure","words","recognition","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"1",4,187,91,0.7,0.00128870076848938,12,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"2",1,188,92,0.57,0.00143827720276306,16,36,"generate",NA,"between","pure","words","free recall","item","medium","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"2",2,189,92,0.43,0.00121190978924293,16,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"2",3,190,93,0.44,0.00124187287676438,16,36,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"2",4,191,93,0.3,0.000743802595272812,16,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"2",1,192,94,0.63,0.00138306870463395,16,36,"generate",NA,"between","pure","words","cued recall","item","medium","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"2",2,193,94,0.53,0.00142194979447636,16,36,"read",NA,"between","pure","words","cued recall","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"2",3,194,95,0.74,0.00108023755970469,16,36,"generate",NA,"between","pure","words","cued recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"2",4,195,95,0.6,0.00142235704145126,16,36,"read",NA,"between","pure","words","cued recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"2",1,196,96,0.88,0.000568040294404503,16,36,"generate",NA,"between","pure","words","recognition","item","medium","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"2",2,197,96,0.72,0.00114911559473059,16,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"2",3,198,97,0.92,0.000441876809004777,16,36,"generate",NA,"between","pure","words","recognition","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"2",4,199,97,0.71,0.00118185480125446,16,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +63,"3",1,200,98,0.56,0.00146590635414904,15,36,"generate",NA,"between","pure","words","free recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","yes","younger","short" +63,"3",2,201,98,0.54,0.00148259288079033,14,36,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","yes","younger","short" +63,"3",3,202,99,0.46,0.00136353943878914,13,36,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +63,"3",4,203,99,0.43,0.0012743560731286,13,36,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +63,"3",1,204,100,0.89,0.000545271594725026,15,36,"generate",NA,"between","pure","words","recognition","item","medium","intentional","category","writing/typing","word fragment","full","timed","yes","younger","short" +63,"3",2,205,100,0.87,0.000624149335514852,14,36,"read",NA,"between","pure","words","recognition","item",NA,"intentional","category","writing/typing","word fragment","full","timed","yes","younger","short" +63,"3",3,206,101,0.89,0.000562538145059099,13,36,"generate",NA,"between","pure","words","recognition","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +63,"3",4,207,101,0.82,0.000822962795567985,13,36,"read",NA,"between","pure","words","recognition","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +64,"1",1,208,102,0.609,0.00178974954776553,29,8,"generate",NA,"within","mixed","words","free recall","item","medium","incidental",NA,"covert/thinking","word stem","full","timed","yes","younger","immediate" +64,"1",1,209,102,0.446,0.00159482715126031,29,8,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"covert/thinking","word stem","full","timed","yes","younger","immediate" +76,"1",1,210,103,0.872,0.000508776438373989,34,14,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"1",2,211,103,0.899,0.000415919031927564,36,14,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"1",3,212,103,0.961,0.000257129668463792,39,14,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"1",1,213,104,0.976,0.000252693064823708,34,14,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"1",2,214,104,0.974,0.000246711561870474,36,14,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"1",3,215,104,0.989,0.000207344345044621,39,14,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"1",4,216,105,0.287,0.0005834114496132,35,14,"generate","high","between","pure","words","free recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"1",5,217,105,0.367,0.000758823438934369,40,14,"generate","low","between","pure","words","free recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"1",6,218,105,0.377,0.000816431240400115,38,14,"read","low","between","pure","words","free recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"1",4,219,106,0.447,0.00105756481739346,35,14,"generate","high","between","pure","words","free recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"1",5,220,106,0.527,0.00108195961875069,40,14,"generate","low","between","pure","words","free recall","item","medium","intentional",NA,"covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"1",6,221,106,0.547,0.00113461476909149,38,14,"read","low","between","pure","words","free recall","item",NA,"intentional",NA,"covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"2",1,222,107,0.365,0.000644351271642149,38,28,"generate",NA,"between","pure","words","free recall",NA,"medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"2",2,223,107,0.453,0.000803635926727625,40,28,"read",NA,"between","pure","words","free recall",NA,NA,"intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"2",3,224,108,0.33,0.000569199289829569,37,28,"generate",NA,"between","pure","words","free recall",NA,"medium","intentional","semantic","writing/typing","word fragment","full","self-paced","no","younger","immediate" +76,"2",4,225,108,0.349,0.000594159644272939,39,28,"read",NA,"between","pure","words","free recall",NA,NA,"intentional","semantic","writing/typing","word fragment","full","self-paced","no","younger","immediate" +76,"3",1,226,109,0.439,0.00083956970862334,36,28,"generate","high","between","pure","words","free recall",NA,"medium","intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"3",2,227,109,0.498,0.000899467508443694,38,28,"generate","low","between","pure","words","free recall",NA,"medium","intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"3",3,228,109,0.504,0.000857530512796702,41,28,"read","low","between","pure","words","free recall",NA,NA,"intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"3",4,229,110,0.346,0.00065923259510789,33,28,"generate","high","between","pure","words","free recall",NA,"medium","intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"3",5,230,110,0.353,0.000603785613370875,39,28,"generate","low","between","pure","words","free recall",NA,"medium","intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"3",6,231,110,0.439,0.000778868526916652,40,28,"read","low","between","pure","words","free recall",NA,NA,"intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"4",1,232,111,0.239,0.000553539551784811,16,28,"generate","high","between","pure","words","free recall",NA,"medium","intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" +76,"4",2,233,111,0.42,0.00123217959337232,16,28,"read","high","between","pure","words","free recall",NA,NA,"intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" +76,"5",1,234,112,0.988,0.000175553735900401,38,28,"generate",NA,"between","pure","words","recognition","item","medium","intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +76,"5",2,235,112,0.934,0.000252613174199401,40,28,"read",NA,"between","pure","words","recognition","item",NA,"intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" +78,"1",1,236,113,0.87,0.00072,20,12,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +78,"1",1,237,113,0.78,0.00128,20,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +78,"1",2,238,114,0.71,0.001805,20,12,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"writing/typing","word fragment","full","timed","no","older","immediate" +78,"1",2,239,114,0.52,0.002205,20,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","no","older","immediate" +78,"1",1,240,115,0.79,0.00098,20,12,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +78,"1",1,241,115,0.92,0.001125,20,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +78,"1",2,242,116,0.66,0.00338,20,12,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"writing/typing","word fragment","full","timed","no","older","immediate" +78,"1",2,243,116,0.64,0.00578,20,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"writing/typing","word fragment","full","timed","no","older","immediate" +78,"2",1,244,117,0.95,0.000125,20,14,"generate","low","within","mixed","words","recognition","item","medium","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +78,"2",1,245,117,0.8,0.00098,20,14,"read","low","within","mixed","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +78,"2",1,246,118,0.97,0.00018,20,14,"generate","high","within","mixed","words","recognition","item","medium","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +78,"2",1,247,118,0.89,0.00072,20,14,"read","high","within","mixed","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +78,"2",2,248,119,0.93,0.000405,20,14,"generate","low","within","mixed","words","recognition","item","medium","intentional","category","writing/typing","word stem","full","timed","no","older","immediate" +78,"2",2,249,119,0.66,0.002205,20,14,"read","low","within","mixed","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","older","immediate" +78,"2",2,250,120,0.94,5e-04,20,14,"generate","high","within","mixed","words","recognition","item","medium","intentional","category","writing/typing","word stem","full","timed","no","older","immediate" +78,"2",2,251,120,0.73,0.001805,20,14,"read","high","within","mixed","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","older","immediate" +78,"2",1,252,121,0.8,0.001445,20,14,"generate","low","within","mixed","words","recognition","source","medium","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +78,"2",1,253,121,0.9,0.00098,20,14,"read","low","within","mixed","words","recognition","source",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +78,"2",1,254,122,0.93,5e-04,20,14,"generate","high","within","mixed","words","recognition","source","medium","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +78,"2",1,255,122,0.93,0.000405,20,14,"read","high","within","mixed","words","recognition","source",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +78,"2",2,256,123,0.82,0.00128,20,14,"generate","low","within","mixed","words","recognition","source","medium","intentional","category","writing/typing","word stem","full","timed","no","older","immediate" +78,"2",2,257,123,0.71,0.004205,20,14,"read","low","within","mixed","words","recognition","source",NA,"intentional","category","writing/typing","word stem","full","timed","no","older","immediate" +78,"2",2,258,124,0.88,0.000845,20,14,"generate","high","within","mixed","words","recognition","source","medium","intentional","category","writing/typing","word stem","full","timed","no","older","immediate" +78,"2",2,259,124,0.68,0.003645,20,14,"read","high","within","mixed","words","recognition","source",NA,"intentional","category","writing/typing","word stem","full","timed","no","older","immediate" +78,"2",1,260,125,0.85,0.00072,20,14,"generate","low","within","mixed","words","cued recall","item","medium","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +78,"2",1,261,125,0.57,0.002205,20,14,"read","low","within","mixed","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +78,"2",1,262,126,0.81,0.00072,20,14,"generate","high","within","mixed","words","cued recall","item","medium","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +78,"2",1,263,126,0.57,0.002205,20,14,"read","high","within","mixed","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +78,"2",2,264,127,0.73,0.00128,20,14,"generate","low","within","mixed","words","cued recall","item","medium","intentional","category","writing/typing","word stem","full","timed","no","older","immediate" +78,"2",2,265,127,0.42,0.002,20,14,"read","low","within","mixed","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","older","immediate" +78,"2",2,266,128,0.6,0.00288,20,14,"generate","high","within","mixed","words","cued recall","item","medium","intentional","category","writing/typing","word stem","full","timed","no","older","immediate" +78,"2",2,267,128,0.36,0.00288,20,14,"read","high","within","mixed","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","older","immediate" +80,"1",1,268,129,0.24,0.000506555928194602,32,12,"generate",NA,"within","mixed","words","free recall","item","high","incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" +80,"1",1,269,129,0.089,0.000162839254102058,32,12,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" +80,"1",1,270,130,0.06,0.00012469316839881,32,12,"generate",NA,"within","mixed","words","free recall","cue word","high","incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" +80,"1",1,271,130,0.026,8.93751632063962e-05,32,12,"read",NA,"within","mixed","words","free recall","cue word",NA,"incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" +80,"1",2,272,131,0.365,0.00133366585253406,16,12,"generate",NA,"within","mixed","words","cued recall","item","high","incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" +80,"1",2,273,131,0.151,0.000388621841060109,16,12,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" +80,"1",3,274,132,0.177,0.000472604481697857,16,12,"generate",NA,"within","mixed","words","cued recall","cue word","high","incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" +80,"1",3,275,132,0.094,0.000242090295509309,16,12,"read",NA,"within","mixed","words","cued recall","cue word",NA,"incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" +80,"2",1,276,135,0.903,0.000533330761582298,22,15,"generate",NA,"between","mixed","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" +80,"2",2,277,135,0.736,0.00118275198128287,22,15,"read",NA,"between","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" +80,"2",1,278,136,0.779,0.00101285233949262,22,15,"generate",NA,"between","pure","words","cued recall","cue word","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" +80,"2",2,279,136,0.676,0.00138579048261972,22,15,"read",NA,"between","pure","words","cued recall","cue word",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" +80,"2",2,280,139,0.885,0.000595939258189011,22,15,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" +80,"2",1,281,139,0.755,0.00110915598537315,22,15,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" +80,"2",2,282,140,0.803,0.000914972130844756,22,15,"generate",NA,"between","pure","words","cued recall","cue word","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" +80,"2",1,283,140,0.745,0.00114826979032361,22,15,"read",NA,"between","pure","words","cued recall","cue word",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" +85,"1",1,284,143,0.28,0.000959444196021819,34,6,"generate",NA,"between","pure","words","free recall","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","yes","younger","short" +85,"1",2,285,143,0.24,0.000763087240760943,34,6,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","yes","younger","short" +85,"1",3,286,144,0.22,0.000672921120315858,34,6,"generate",NA,"between","pure","words","free recall","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","yes","younger","short" +85,"1",4,287,144,0.15,0.000408480081821489,34,6,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","yes","younger","short" +86,"1",1,288,145,0.34,0.000894034221293633,16,36,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +86,"1",2,289,145,0.25,0.000566578206263155,16,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +86,"1",1,290,146,0.66,0.0013223547475971,16,36,"generate",NA,"between","pure","words","cued recall","cue word","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +86,"1",2,291,146,0.46,0.00129672297149292,16,36,"read",NA,"between","pure","words","cued recall","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +86,"2",1,292,147,0.7,0.00128870076848938,12,36,"generate",NA,"between","pure","words","recognition","cue word","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +86,"2",2,293,147,0.68,0.00135045517754083,12,36,"read",NA,"between","pure","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +86,"2",3,294,148,0.61,0.00132405059351169,19,36,"generate",NA,"between","pure","words","cued recall","cue word","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +86,"2",4,295,148,0.45,0.0012946454295358,15,36,"read",NA,"between","pure","words","cued recall","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +86,"3",1,296,149,0.73,0.0006840565946971,39,36,"generate",NA,"between","pure","words","recognition","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +86,"3",2,297,149,0.64,0.000921759832775265,34,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +86,"3",1,298,150,0.55,0.000880513025707875,39,36,"generate",NA,"between","pure","words","cued recall","cue word","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +86,"3",2,299,150,0.42,0.000797089286796651,34,36,"read",NA,"between","pure","words","cued recall","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"1",1,300,151,0.38,0.00110769445801249,12,36,"generate",NA,"between","pure","words","free recall","item","low","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"1",2,301,151,0.29,0.000743477300759581,13,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"1",3,302,152,0.4,0.00118294508102696,12,36,"generate",NA,"between","pure","words","free recall","item","low","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"1",4,303,152,0.31,0.000829575128503558,12,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"1",1,304,153,0.81,0.000871179523044669,12,36,"generate",NA,"between","pure","words","recognition","item","low","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"1",2,305,153,0.63,0.00145433432335374,13,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"1",3,306,154,0.75,0.00110937234924991,12,36,"generate",NA,"between","pure","words","recognition","item","low","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"1",4,307,154,0.71,0.00125535404690575,12,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"2",1,308,155,0.22,0.000403997705103742,20,64,"generate",NA,"between","pure","words","free recall","item","medium","incidental","compound words","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"2",2,309,155,0.2,0.000353598721712975,20,64,"read",NA,"between","pure","words","free recall","item",NA,"incidental","compound words","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"2",1,310,156,0.22,0.000403997705103742,20,64,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"2",2,311,156,0.18,0.000307173888483707,20,64,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"3",1,312,157,0.24,0.000418121344424272,24,64,"generate",NA,"between","pure","words","free recall","item","medium","incidental","compound words","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"3",2,313,157,0.17,0.000260562966603395,24,64,"read",NA,"between","pure","words","free recall","item",NA,"incidental","compound words","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"3",1,314,158,0.19,0.000301070476991212,24,64,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"3",2,315,158,0.16,0.000241720304572822,24,64,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"3",1,316,159,0.69,0.000974197413876628,24,64,"generate",NA,"between","pure","words","free recall","item","medium","incidental","compound words","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"3",2,317,159,0.59,0.00112088270283455,24,64,"read",NA,"between","pure","words","free recall","item",NA,"incidental","compound words","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"3",1,318,160,0.73,0.000873925558265636,24,64,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +89,"3",2,319,160,0.57,0.00112711510231138,24,64,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +93,"1a",1,320,161,0.84,0.000806666666666667,15,72,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1a",2,321,161,0.71,0.00096,15,72,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1a",3,322,162,0.57,0.00096,15,72,"generate",NA,"between","pure","words","cued recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1a",4,323,162,0.54,0.00294,15,72,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1a",5,324,163,0.24,0.000806666666666667,15,72,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1a",6,325,163,0.16,0.000326666666666667,15,72,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1b",1,326,164,0.88,0.000672222222222222,18,72,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1b",2,327,164,0.79,0.000555555555555556,18,72,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1b",3,328,165,0.56,0.00108888888888889,18,72,"generate",NA,"between","pure","words","cued recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1b",4,329,165,0.44,0.00160555555555556,18,72,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1b",5,330,166,0.36,0.00160555555555556,18,72,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1b",6,331,166,0.32,0.00200555555555556,18,72,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1c",1,332,167,0.89,0.000864285714285714,14,72,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1c",2,333,167,0.93,0.000178571428571429,14,72,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1c",3,334,168,0.64,0.00102857142857143,14,72,"generate",NA,"between","pure","words","cued recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1c",4,335,168,0.51,0.00120714285714286,14,72,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1c",5,336,169,0.38,0.00182857142857143,14,72,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"1c",6,337,169,0.48,0.00160714285714286,14,72,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"2",1,338,170,0.62,0.00120714285714286,14,72,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"2",2,339,170,0.63,0.000864285714285714,14,72,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"2",1,340,171,0.71,0.00102857142857143,14,72,"generate",NA,"between","pure","words","cued recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +93,"2",2,341,171,0.6,0.000864285714285714,14,72,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +102,"1",1,342,172,0.5,0.000901765884963153,32,72,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +102,"1",1,343,172,0.59,0.000933072745782427,32,72,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +102,"1",1,344,173,0.75,0.000681328009271634,32,72,"generate",NA,"within","pure","words","recognition","item","low","incidental",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +102,"1",1,345,173,0.66,0.000862638799775998,32,72,"read",NA,"within","pure","words","recognition","item",NA,"incidental",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +104,"1",1,346,174,0.801,0.000443391333377904,44,75,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"1",2,347,174,0.856,0.000349873640101221,42,75,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"1",3,348,175,0.769,0.000514699296514784,43,75,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +104,"1",4,349,175,0.712,0.000589975563822184,46,75,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +104,"1",1,350,176,0.879,0.000395700567662799,44,15,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"1",2,351,176,0.897,0.000367379763045068,42,15,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"1",3,352,177,0.842,0.00049412686396363,43,15,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +104,"1",4,353,177,0.782,0.000619934968541422,46,15,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +104,"1",1,354,178,0.84,0.000428728962669034,44,24,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"1",2,355,178,0.876,0.000364252724824318,42,24,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"1",3,356,179,0.806,0.000514107050702546,43,24,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +104,"1",4,357,179,0.747,0.00061729170247884,46,24,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +104,"2",1,358,180,0.582,0.00131224333359003,23,25,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"2",2,359,180,0.613,0.00128784297161413,23,25,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"2",3,360,181,0.556,0.00134509867071806,22,25,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","category","verbal/speaking","word fragment","full","timed","no","younger","immediate" +104,"2",4,361,181,0.421,0.0011076235633914,22,25,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","verbal/speaking","word fragment","full","timed","no","younger","immediate" +104,"2",5,362,182,0.502,0.00129665206157636,22,25,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","category",NA,"word fragment","full","timed","no","younger","immediate" +104,"2",6,363,182,0.577,0.00131400203239748,23,25,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category",NA,"word fragment","full","timed","no","younger","immediate" +104,"3",1,364,183,0.84,0.000556822947283697,23,84,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"3",2,365,183,0.87,0.000473047801201324,23,84,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"3",3,366,184,0.85,0.000540588087833218,22,84,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"3",3,367,184,0.83,0.000599281542069484,22,84,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"4",1,368,185,0.62,0.00112229239955335,24,50,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"4",2,369,185,0.64,0.00109534888964515,24,50,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"4",3,370,186,0.57,0.00115407853030114,24,50,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" +104,"4",3,371,186,0.54,0.0011474623074344,24,50,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" +112,"1",1,372,187,0.8,0.000622413793103448,58,8,"generate",NA,"between","pure","words","free recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","yes","younger","immediate" +112,"1",2,373,187,0.75,0.000760344827586207,58,8,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","yes","younger","immediate" +112,"1",3,374,188,0.94,0.000248275862068966,58,8,"generate",NA,"between","pure","words","free recall","item","medium","intentional","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" +112,"1",4,375,188,0.92,0.000291379310344828,58,8,"read",NA,"between","pure","words","free recall","item",NA,"intentional","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" +112,"1",1,376,189,0.6,0.000387931034482759,58,32,"generate",NA,"between","pure","words","free recall","cue word","medium","incidental","category","writing/typing","word fragment","full","timed","yes","younger","immediate" +112,"1",2,377,189,0.65,0.000441379310344828,58,32,"read",NA,"between","pure","words","free recall","cue word",NA,"incidental","category","writing/typing","word fragment","full","timed","yes","younger","immediate" +112,"1",3,378,190,0.65,0.000337931034482759,58,32,"generate",NA,"between","pure","words","free recall","cue word","medium","incidental","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" +112,"1",4,379,190,0.66,0.000337931034482759,58,32,"read",NA,"between","pure","words","free recall","cue word",NA,"incidental","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" +112,"2",1,380,191,0.35,0.000576,25,36,"generate",NA,"between","pure","words","free recall","item","low","intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" +112,"2",2,381,191,0.36,0.000784,25,36,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" +112,"2",3,382,192,0.4,0.0016,25,6,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" +112,"2",3,383,192,0.34,0.000676,25,30,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" +112,"2",4,384,193,0.37,0.000784,25,30,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" +112,"2",4,385,193,0.29,0.001444,25,6,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" +114,"1",1,386,194,0.44,0.00117185217131851,24,20,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +114,"1",1,387,194,0.3,0.00070186466152136,24,20,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +114,"1",1,388,195,0.54,0.00134940200335495,24,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +114,"1",1,389,195,0.52,0.00133169265532792,24,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +114,"2",1,390,196,0.5,0.0012752009952748,25,20,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +114,"2",1,391,196,0.39,0.000995092156135151,25,20,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +114,"2",1,392,197,0.56,0.00132675484207723,25,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +114,"2",1,393,197,0.5,0.0012752009952748,25,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +115,"1a",1,394,198,0.43,0.00035,14,48,"generate",NA,"between","pure","words","recognition","item","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","long" +115,"1a",2,395,198,0.32,0.000457142857142857,14,48,"read",NA,"between","pure","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","long" +115,"1a",3,396,199,0.49,0.0014,14,48,"generate",NA,"between","pure","words","recognition","item","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","long" +115,"1a",4,397,199,0.42,0.00102857142857143,14,48,"read",NA,"between","pure","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","long" +115,"1b",1,398,200,0.93,0.00030625,16,48,"generate",NA,"between","pure","words","cued recall","item","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +115,"1b",2,399,200,0.79,0.001225,16,48,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +115,"1b",3,400,201,0.97,5.625e-05,16,48,"generate",NA,"between","pure","words","cued recall","item","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +115,"1b",4,401,201,0.75,0.00105625,16,48,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +115,"1c",1,402,202,0.36,9e-04,16,48,"generate",NA,"between","pure","words","free recall","item","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +115,"1c",2,403,202,0.33,0.000625,16,48,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +115,"1c",3,404,203,0.37,9e-04,16,48,"generate",NA,"between","pure","words","free recall","item","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +115,"1c",4,405,203,0.49,0.00140625,16,48,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +115,"2",1,406,204,0.35,0.000426666666666667,15,48,"generate",NA,"between","pure","words","free recall","item","high","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +115,"2",2,407,204,0.45,0.00096,15,48,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +115,"2",3,408,205,0.34,0.000666666666666667,15,48,"generate",NA,"between","pure","words","free recall","item","high","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +115,"2",4,409,205,0.34,0.000426666666666667,15,48,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +115,"2",1,410,206,0.88,0.000426666666666667,15,48,"generate",NA,"between","pure","words","cued recall","item","high","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +115,"2",2,411,206,0.78,0.00130666666666667,15,48,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +115,"2",3,412,207,0.87,0.000426666666666667,15,48,"generate",NA,"between","pure","words","cued recall","item","high","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +115,"2",4,413,207,0.69,0.00192666666666667,15,48,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +115,"3",1,414,208,0.35,0.000918121276581843,12,72,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +115,"3",2,415,208,0.47,0.00130202276075813,12,72,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +115,"3",1,416,209,0.63,0.0013628620930123,12,72,"generate",NA,"between","pure","words","cued recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +115,"3",2,417,209,0.51,0.00137760904266925,12,72,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +115,"4",1,418,210,0.46,0.00129487092293901,14,48,"generate",NA,"between","pure","words","free recall","item","high","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +115,"4",2,419,210,0.39,0.00107715134049747,14,48,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +115,"4",1,420,211,0.97,0.00030903367564484,14,48,"generate",NA,"between","pure","words","cued recall","item","high","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +115,"4",2,421,211,0.83,0.000744352375976027,14,48,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" +116,"1",1,422,212,0.58,0.000729572804581116,46,64,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"1",1,423,212,0.68,0.00064610170895164,46,64,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"1",1,424,213,0.63,0.0007028563503384,46,64,"generate",NA,"within","mixed","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"1",1,425,213,0.63,0.0007028563503384,46,64,"read",NA,"within","mixed","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"2",1,426,214,0.55,0.00112491107244227,24,64,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"2",1,427,214,0.62,0.00109607160997596,24,64,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"2",1,428,215,0.58,0.00112504913613228,24,64,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"2",1,429,215,0.52,0.00110594617154296,24,64,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"2",1,430,216,0.45,0.000995394227339536,24,64,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"2",1,431,216,0.52,0.00110594617154296,24,64,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"2",1,432,217,0.5,0.00108327436100805,24,64,"generate",NA,"within","mixed","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"2",1,433,217,0.5,0.00108327436100805,24,64,"read",NA,"within","mixed","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"3",1,434,218,0.32,0.000407270502978595,96,8,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"3",1,435,218,0.44,0.000617909814420225,96,8,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"3",1,436,219,0.33,0.000837134627812511,96,4,"generate",NA,"within","mixed","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +116,"3",1,437,219,0.32,0.000800255128049856,96,4,"read",NA,"within","mixed","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +118,"2",1,438,220,0.49,0.001200155566309,22,35,"generate",NA,"within","pure","words","cued recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" +118,"2",1,439,220,0.48,0.00118223392940453,22,35,"read",NA,"within","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" +118,"3",1,440,221,0.66,0.00127341563749133,18,35,"generate",NA,"within","pure","words","cued recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" +118,"3",1,441,221,0.64,0.00131456452210388,18,35,"read",NA,"within","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" +118,"4",1,442,222,0.62,0.00102992543304313,30,35,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" +118,"4",1,443,222,0.63,0.00101844195159166,30,35,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" +118,"5",1,444,223,0.34,0.000521741496864515,42,35,"generate",NA,"within","mixed","words","cued recall","item","low","intentional","unrelated","verbal/speaking","anagram","full","timed","yes","younger","short" +118,"5",1,445,223,0.34,0.000521741496864515,42,35,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","unrelated","verbal/speaking","anagram","full","timed","yes","younger","short" +118,"5",2,446,224,0.72,0.000616056922452707,47,35,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","short" +118,"5",2,447,224,0.75,0.000559928221511271,47,35,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","short" +118,"6",1,448,225,0.84,0.000533080266998407,29,35,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" +118,"6",1,449,225,0.81,0.000616983855594373,29,35,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" +118,"7",1,450,226,0.63,0.0011623893976954,24,35,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" +118,"7",1,451,226,0.54,0.00120185908049044,24,35,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" +119,"1",1,452,227,0.942,0.00028801960446545,32,24,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","word stem","full","timed","no","younger","immediate" +119,"1",1,453,227,0.795,0.00066460861098116,32,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","word stem","full","timed","no","younger","immediate" +124,"1a",1,454,228,0.75,0.00118003907931877,24,12,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +124,"1a",1,455,228,0.83,0.000842210130332407,24,12,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +124,"1a",1,456,229,0.67,0.00146636286407761,24,12,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +124,"1a",1,457,229,0.74,0.00122050743596645,24,12,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +124,"1a",1,458,230,0.49,0.00154139650013515,24,12,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1a",1,459,230,0.49,0.00154139650013515,24,12,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1a",1,460,231,0.58,0.00162206022315322,24,12,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1a",1,461,231,0.63,0.0015626614935697,24,12,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1a",1,462,232,0.47,0.00149290294478069,24,12,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1a",1,463,232,0.39,0.00121876116762381,24,12,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1a",1,464,233,0.52,0.00159451817364669,24,12,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1a",1,465,233,0.73,0.00125999819966351,24,12,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1b",2,466,234,0.7,0.00137079067221553,24,12,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +124,"1b",2,467,234,0.76,0.00113877468876636,24,12,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +124,"1b",2,468,235,0.6,0.00160705145835244,24,12,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +124,"1b",2,469,235,0.7,0.00137079067221553,24,12,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +124,"1b",2,470,236,0.59,0.00161605319154222,24,12,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1b",2,471,236,0.64,0.00154234263329198,24,12,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1b",2,472,237,0.59,0.00161605319154222,24,12,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1b",2,473,237,0.64,0.00154234263329198,24,12,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1b",2,474,238,0.58,0.00162206022315322,24,12,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1b",2,475,238,0.61,0.00159510534561541,24,12,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1b",2,476,239,0.56,0.00162497239126158,24,12,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +124,"1b",2,477,239,0.72,0.00129832934946004,24,12,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" +126,"1",1,478,240,0.385,0.000533555555555556,18,20,"generate",NA,"between","pure","words","free recall","item","low","incidental","semantic","writing/typing","cue only","full","timed","yes","younger","immediate" +126,"1",2,479,240,0.448,0.00108888888888889,18,20,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word stem","full","timed","yes","younger","immediate" +126,"1",3,480,240,0.41,0.0011045,18,20,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word stem","full","timed","yes","younger","immediate" +126,"1",1,481,241,0.638,0.0019845,18,20,"generate",NA,"between","pure","words","free recall","item","low","incidental","unrelated","writing/typing","cue only","full","timed","yes","younger","immediate" +126,"1",2,482,241,0.464,0.00112022222222222,18,20,"generate",NA,"between","pure","words","free recall","item","medium","incidental","unrelated","writing/typing","word stem","full","timed","yes","younger","immediate" +126,"1",3,483,241,0.384,0.0008405,18,20,"read",NA,"between","pure","words","free recall","item",NA,"incidental","unrelated","writing/typing","word stem","full","timed","yes","younger","immediate" +126,"2",1,484,242,0.95,0.0001681,10,20,"generate",NA,"between","pure","words","cued recall","item","low","incidental","semantic","writing/typing","cue only","full","timed","yes","younger","immediate" +126,"2",2,485,242,0.795,0.0013695125,20,20,"read",NA,"between","pure","words","cued recall","item",NA,"incidental","semantic","writing/typing","cue only","full","timed","yes","younger","immediate" +126,"2",1,486,243,0.335,0.004389025,10,20,"generate",NA,"between","pure","words","cued recall","item","low","incidental","unrelated","writing/typing","cue only","full","timed","yes","younger","immediate" +126,"2",2,487,243,0.3275,0.00496125,20,20,"read",NA,"between","pure","words","cued recall","item",NA,"incidental","unrelated","writing/typing","cue only","full","timed","yes","younger","immediate" +126,"4",1,488,244,0.258,0.000320601100273484,51,24,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +126,"4",2,489,244,0.252,0.000309602041574247,51,24,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +126,"4",1,490,245,0.348,0.000499108037551049,51,24,"generate",NA,"between","pure","words","free recall","item","medium","incidental","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" +126,"4",2,491,245,0.22,0.000254092408302344,51,24,"read",NA,"between","pure","words","free recall","item",NA,"incidental","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" +126,"4",1,492,246,0.393,0.000588257595949363,51,24,"generate",NA,"between","pure","words","free recall","item","medium","incidental","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" +126,"4",2,493,246,0.364,0.000531448722191139,51,24,"read",NA,"between","pure","words","free recall","item",NA,"incidental","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" +126,"5",1,494,247,0.305,0.000602533825909168,30,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" +126,"5",2,495,247,0.268,0.000486224206527353,31,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" +126,"5",1,496,248,0.348,0.000730455002605469,30,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" +126,"5",2,497,248,0.292,0.000552833151340222,31,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" +126,"5",1,498,249,0.445,0.000992885279997721,30,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" +126,"5",2,499,249,0.301,0.000578486918258494,31,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" +129,"1",1,500,250,0.33,0.00079998584022148,20,32,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +129,"1",1,501,250,0.19,0.000358940903689559,20,32,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +129,"2",1,502,251,0.22,0.000207843445394248,64,26,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +129,"2",2,503,251,0.23,0.000221538199498974,64,26,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +129,"2",3,504,252,0.25,0.000315271086267268,48,26,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +129,"2",3,505,252,0.17,0.000185016855693809,48,26,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +129,"3",1,506,253,0.3,0.00100757683153345,20,10,"generate",NA,"within","mixed","words","free recall","item","low","incidental",NA,"verbal/speaking","word fragment","divided","timed","no","younger","immediate" +129,"3",1,507,253,0.17,0.000450409457738042,20,10,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"verbal/speaking","word fragment","divided","timed","no","younger","immediate" +129,"4",1,508,254,0.08,0.000157136118516662,19,26,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" +129,"4",2,509,254,0.06,0.0001304970083987,19,26,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" +129,"4",3,510,255,0.12,0.000237528676564853,16,26,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" +129,"4",3,511,255,0.04,0.000114691318408995,16,26,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" +139,"1",1,512,256,0.33,0.00056,35,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word stem","full","timed","yes","younger","immediate" +139,"1",1,513,256,0.29,0.00103142857142857,35,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word stem","full","timed","yes","younger","immediate" +139,"1",1,514,256,0.29,0.00178571428571429,35,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +139,"1",1,515,256,0.07,0.000285714285714286,35,8,"read",NA,"within","pure","words","cued recall","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +140,"1",1,516,257,0.88,0.000429187175960687,30,30,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +140,"1",1,517,257,0.74,0.000816181725457269,30,30,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +140,"1",1,518,258,0.68,0.000960606816644921,30,30,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +140,"1",1,519,258,0.8,0.000648193179654146,30,30,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +147,"1",1,520,259,0.59,0.0015403857927161,37,8,"generate",NA,"within","mixed","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +147,"1",1,521,259,0.331,0.000926208452476098,37,8,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +147,"1",2,522,260,0.24,0.000609245535921271,34,8,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +147,"1",2,523,260,0.07,0.00016472238391889,34,8,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +147,"2",1,524,261,0.6,0.00143594850266793,24,16,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +147,"2",2,525,261,0.38,0.00105280543375512,24,16,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +147,"2",3,526,262,0.241,0.000541940837815923,24,16,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +147,"2",4,527,262,0.168,0.000330721560200462,24,16,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +150,"1",1,528,263,0.38,0.000943432736229675,30,15,"generate",NA,"within","mixed","words","recognition","item","high","incidental",NA,"covert/thinking","anagram","full","timed","yes","younger","short" +150,"1",1,529,263,0.28,0.000606897370774897,30,15,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"covert/thinking","anagram","full","timed","yes","younger","short" +150,"1",2,530,264,0.5,0.00125056380335807,30,15,"generate",NA,"within","mixed","words","cued recall","item","high","incidental",NA,"covert/thinking","anagram","full","timed","yes","younger","short" +150,"1",2,531,264,0.38,0.000943432736229675,30,15,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental",NA,"covert/thinking","anagram","full","timed","yes","younger","short" +155,"1",1,532,265,0.23,0.000463336484198564,19,40,"generate",NA,"between","pure","words","free recall","item","medium","intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"1",2,533,265,0.33,0.000791078212400701,19,40,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"1",1,534,266,0.04,0.000100017468083876,19,40,"generate",NA,"between","pure","words",NA,"order","medium","intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"1",2,535,266,0.1,0.000174623324808316,19,40,"read",NA,"between","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"2a",1,536,267,0.52,0.000623076923076923,52,32,"generate",NA,"between","pure","words","free recall","item","medium","intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"2a",2,537,267,0.63,0.000492307692307692,52,32,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"2a",3,538,268,0.44,0.000432692307692308,52,32,"generate",NA,"between","pure","words","free recall","item","medium","intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"2a",4,539,268,0.45,0.000555769230769231,52,32,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"2b",1,540,269,0.1,0.00032,20,32,"generate",NA,"between","pure","words",NA,"order","medium","intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"2b",2,541,269,0.21,0.000605,20,32,"read",NA,"between","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"2b",3,542,270,0.11,0.00018,20,32,"generate",NA,"between","pure","words",NA,"order","medium","intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"2b",4,543,270,0.21,0.00072,20,32,"read",NA,"between","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"3a",1,544,271,0.3,0.000272222222222222,18,32,"generate",NA,"between","pure","words","free recall","item","medium","incidental",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"3a",2,545,271,0.2,0.000555555555555556,18,32,"read",NA,"between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"3b",1,546,272,0.05,0.000138888888888889,18,32,"generate",NA,"between","pure","words",NA,"order","medium","incidental",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +155,"3b",2,547,272,0.11,0.000272222222222222,18,32,"read",NA,"between","pure","words",NA,"order",NA,"incidental",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +160,"1",1,548,273,0.72,0.00127110243061905,20,16,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","yes","younger","immediate" +160,"1",2,549,273,0.78,0.00103245867329822,20,16,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","yes","younger","immediate" +160,"1",3,550,274,0.37,0.00111311643048267,20,16,"generate",NA,"between","pure","words","free recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","yes","younger","immediate" +160,"1",4,551,274,0.26,0.000664271087603971,20,16,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","yes","younger","immediate" +160,"2",1,552,275,0.79,0.000990764548348143,20,16,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +160,"2",2,553,275,0.69,0.0013751121862594,20,16,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +160,"2",3,554,276,0.31,0.000863913877849229,20,16,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +160,"2",4,555,276,0.3,0.000822762558516742,20,16,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +162,"1",1,556,277,0.63,5e-04,20,20,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +162,"1",1,557,277,0.07,0.000125,20,20,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +162,"1",2,558,278,0.4,0.000605,20,20,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","older","immediate" +162,"1",2,559,278,0.06,8e-05,20,20,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","older","immediate" +175,"1",1,560,279,0.66,0.000898016307090657,40,20,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" +175,"1",1,561,279,0.44,0.000843360752244818,40,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" +175,"1",2,562,280,0.6,0.000965928257942499,40,20,"generate",NA,"within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" +175,"1",2,563,280,0.34,0.000607142154007979,40,20,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" +175,"2",1,564,281,0.61,0.000958747972703158,40,20,"generate","low","within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" +175,"2",1,565,281,0.34,0.000607142154007979,40,20,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" +175,"2",2,566,282,0.66,0.000898016307090657,40,20,"generate","high","within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" +175,"2",2,567,282,0.34,0.000607142154007979,40,20,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" +182,"1",1,568,283,0.89,0.000516835429733758,21,24,"generate",NA,"within","mixed","words","recognition","item","medium","incidental","semantic","covert/thinking","word stem","full","self-paced","yes","younger","long" +182,"1",1,569,283,0.5,0.00133546832664915,21,24,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","semantic","covert/thinking","word stem","full","self-paced","yes","younger","long" +182,"1",1,570,284,0.72,0.00111015729903271,21,24,"generate",NA,"within","mixed","words","recognition","source","medium","incidental","semantic","covert/thinking","word stem","full","self-paced","yes","younger","long" +182,"1",1,571,284,0.39,0.00104212125111236,21,24,"read",NA,"within","mixed","words","recognition","source",NA,"incidental","semantic","covert/thinking","word stem","full","self-paced","yes","younger","long" +186,"1",1,572,285,0.59,0.0014459883918205,19,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +186,"1",2,573,285,0.61,0.00139538524649682,20,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +186,"1",3,574,286,0.59,0.0014459883918205,19,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +186,"1",4,575,286,0.44,0.00122744786394582,20,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +186,"1",5,576,287,0.54,0.00144569265610525,19,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +186,"1",6,577,287,0.41,0.00121199849582008,17,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +186,"2",1,578,288,0.44,0.00122744786394582,20,24,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +186,"2",2,579,288,0.46,0.0012816608457022,20,24,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +186,"2",3,580,289,0.52,0.00142671960409893,19,24,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +186,"2",4,581,289,0.63,0.00136700362730875,20,24,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +186,"2",5,582,290,0.51,0.00138179539074259,20,24,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +186,"2",6,583,290,0.41,0.00121199849582008,17,24,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" +197,"1",1,584,291,0.619,0.00136952996374717,48,7,"generate",NA,"within","mixed","numbers","free recall","item","low","incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" +197,"1",1,585,291,0.31,0.000763958471971568,48,7,"read",NA,"within","mixed","numbers","free recall","item",NA,"incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" +197,"2",1,586,292,0.615,0.00250995746404427,18,7,"generate",NA,"between","pure","numbers","free recall","item","low","incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" +197,"2",2,587,292,0.361,0.00173742645278376,18,7,"read",NA,"between","pure","numbers","free recall","item",NA,"incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" +229,"1",1,588,382,0.265,0.000400849418504556,33,60,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","cue only","full","self-paced","no","younger","immediate" +229,"1",2,589,382,0.181,0.000233791973720332,33,60,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","cue only","full","self-paced","no","younger","immediate" +229,"1",1,590,383,0.364,0.000638498933831982,33,60,"generate",NA,"between","pure","words","free recall","item","medium","intentional","unrelated","writing/typing","cue only","full","self-paced","no","younger","immediate" +229,"1",2,591,383,0.201,0.000269025272093237,33,60,"read",NA,"between","pure","words","free recall","item",NA,"intentional","unrelated","writing/typing","cue only","full","self-paced","no","younger","immediate" +231,"1",1,592,293,0.594,0.00192724831651347,16,12,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"writing/typing",NA,"full","self-paced","yes","younger","immediate" +231,"1",1,593,293,0.427,0.00162369773352211,16,12,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"covert/thinking",NA,"full","self-paced","yes","younger","immediate" +231,"1",1,594,294,0.582,0.00193715556697919,16,12,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking",NA,"full","self-paced","yes","younger","immediate" +231,"1",1,595,294,0.765,0.00133584996892678,16,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"covert/thinking",NA,"full","self-paced","yes","younger","immediate" +231,"2",1,596,295,0.554,0.00177881563459506,20,12,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"verbal/speaking",NA,"full","self-paced","yes","younger","immediate" +231,"2",1,597,295,0.221,0.000586249203208749,20,12,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"covert/thinking",NA,"full","self-paced","yes","younger","immediate" +231,"2",1,598,296,0.479,0.00166099614401239,20,12,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking",NA,"full","self-paced","yes","younger","immediate" +231,"2",1,599,296,0.603,0.00175723473480398,20,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"covert/thinking",NA,"full","self-paced","yes","younger","immediate" +231,"3",1,600,297,0.471,0.00125670307075384,32,12,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"verbal/speaking",NA,"full","self-paced","yes","younger","immediate" +231,"3",1,601,297,0.294,0.000685172440039257,32,12,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"covert/thinking",NA,"full","self-paced","yes","younger","immediate" +231,"3",1,602,298,0.474,0.00126327635644268,32,12,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking",NA,"full","self-paced","yes","younger","immediate" +231,"3",1,603,298,0.537,0.00135563729039593,32,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"covert/thinking",NA,"full","self-paced","yes","younger","immediate" +232,"1",1,604,384,0.812180451,0.00048173236502413,40,40,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +232,"1",2,605,384,0.795338346,0.000519434110807343,40,40,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +232,"1",1,606,385,0.533082707,0.000967533768470717,40,20,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","divided","timed","no","younger","immediate" +232,"1",2,607,385,0.475338346,0.000905672099001788,40,20,"read","high","between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","divided","timed","no","younger","immediate" +232,"1",3,608,386,0.586015038,0.000850043920782915,40,40,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","older","immediate" +232,"1",4,609,386,0.545112782,0.000850269447170561,40,40,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","older","immediate" +232,"1",3,610,387,0.381503759,0.000711891180052948,40,20,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","divided","timed","no","older","immediate" +232,"1",4,611,387,0.294887218,0.000492314042774986,40,20,"read","high","between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","divided","timed","no","older","immediate" +234,"1",1,612,388,0.73,0.000730750736974439,34,45,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +234,"1",1,613,388,0.67,0.000850434344971945,34,45,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +234,"1",2,614,389,0.69,0.000814595100710572,34,45,"generate",NA,"within","mixed","words","free recall","item","low","incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +234,"1",2,615,389,0.68,0.000833102743652931,34,45,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +234,"1",1,616,390,0.93,0.00027065487694368,34,45,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +234,"1",1,617,390,0.93,0.00027065487694368,34,45,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +234,"1",2,618,391,0.88,0.000372219942267669,34,45,"generate",NA,"within","mixed","words","recognition","source","low","incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +234,"1",2,619,391,0.88,0.000372219942267669,34,45,"read",NA,"within","mixed","words","recognition","source",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +234,"3",1,620,392,0.69,0.000884532382244324,30,45,"generate",NA,"within","mixed","words","free recall","item","low","incidental",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +234,"3",1,621,392,0.64,0.000971297216148686,30,45,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +234,"3",1,622,393,0.69,0.000884532382244324,30,45,"generate",NA,"within","mixed","words","recognition","source","low","incidental",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +234,"3",1,623,393,0.84,0.000504216204372237,30,45,"read",NA,"within","mixed","words","recognition","source",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +237,"1",1,624,394,0.288,0.000990125,32,8,"generate",NA,"between","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",2,625,394,0.224,8e-04,32,8,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",1,626,395,0.316,0.001152,32,8,"generate",NA,"between","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",2,627,395,0.276,0.000595125,32,8,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",1,628,396,0.306,0.000820125,32,8,"generate",NA,"between","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",2,629,396,0.281,0.00091378125,32,8,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",1,630,397,0.466,0.000780125,32,8,"generate",NA,"between","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",2,631,397,0.417,0.000968,32,8,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",1,632,398,0.906,0.000575696422041714,32,8,"generate",NA,"between","mixed","words","recognition","cue word","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",2,633,398,0.76,0.00119853086343504,32,8,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",1,634,399,0.854,0.000782570693185396,32,8,"generate",NA,"between","mixed","words","recognition","cue word","high","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",2,635,399,0.75,0.00124196056566303,32,8,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",1,636,400,0.781,0.00110543917575164,32,8,"generate",NA,"between","mixed","words","recognition","cue word","medium","incidental","antonym","writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",2,637,400,0.708,0.0014129898172396,32,8,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","antonym","writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",1,638,401,0.76,0.00119853086343504,32,8,"generate",NA,"between","mixed","words","recognition","cue word","high","incidental","antonym","writing/typing","word fragment","full","timed","no","younger","immediate" +237,"1",2,639,401,0.729,0.0013302078013003,32,8,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","antonym","writing/typing","word fragment","full","timed","no","younger","immediate" +237,"2",1,640,402,0.481,0.000656363636363636,55,8,"generate",NA,"within","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +237,"2",1,641,402,0.389,0.000698472727272727,55,8,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +237,"2",1,642,403,0.464,0.000741890909090909,55,8,"generate",NA,"within","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +237,"2",1,643,403,0.442,0.000727272727272727,55,8,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" +237,"2",1,644,404,0.838,0.000571267047137347,55,8,"generate",NA,"within","mixed","words","recognition","cue word","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +237,"2",1,645,404,0.709,0.000945570736438384,55,8,"read",NA,"within","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +237,"2",1,646,405,0.739,0.000864755905093655,55,8,"generate",NA,"within","mixed","words","recognition","cue word","high","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +237,"2",1,647,405,0.539,0.00114048830620473,55,8,"read",NA,"within","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +237,"3",1,648,406,0.464,0.000880074074074074,54,10,"generate",NA,"between","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","word stem","full","timed","no","younger","immediate" +237,"3",2,649,406,0.357,0.000785851851851852,54,10,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word stem","full","timed","no","younger","immediate" +237,"3",1,650,407,0.471,0.000633796296296296,54,10,"generate",NA,"between","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word stem","full","timed","no","younger","immediate" +237,"3",2,651,407,0.355,0.000785851851851852,54,10,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word stem","full","timed","no","younger","immediate" +237,"3",1,652,408,0.57,0.000492018518518519,54,10,"generate",NA,"between","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word stem","full","timed","no","younger","immediate" +237,"3",2,653,408,0.397,0.000528907407407408,54,10,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word stem","full","timed","no","younger","immediate" +237,"3",1,654,409,0.974,0.000212339892860934,54,10,"generate",NA,"between","mixed","words","recognition","cue word","medium","incidental","semantic","writing/typing","word stem","full","timed","no","younger","immediate" +237,"3",2,655,409,0.88,0.000401825863762881,54,10,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word stem","full","timed","no","younger","immediate" +237,"3",1,656,410,0.918,0.000316754924860839,54,10,"generate",NA,"between","mixed","words","recognition","cue word","high","incidental","semantic","writing/typing","word stem","full","timed","no","younger","immediate" +237,"3",2,657,410,0.768,0.000692025428332912,54,10,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word stem","full","timed","no","younger","immediate" +237,"3",1,658,411,0.926,0.000300243898286054,54,10,"generate",NA,"between","mixed","words","recognition","cue word","high","incidental","semantic","writing/typing","word stem","full","timed","no","younger","immediate" +237,"3",2,659,411,0.773,0.000678830720970296,54,10,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word stem","full","timed","no","younger","immediate" +237,"5",1,660,412,0.39,0.0007225,40,8,"generate",NA,"within","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word stem","full","timed","yes","younger","immediate" +237,"5",1,661,412,0.22,0.0005625,40,8,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word stem","full","timed","yes","younger","immediate" +237,"5",1,662,413,0.39,0.0011025,40,8,"generate",NA,"within","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word stem","full","timed","yes","younger","immediate" +237,"5",1,663,413,0.26,0.0009025,40,8,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word stem","full","timed","yes","younger","immediate" +263,"3",1,664,414,0.79,0.000428868209247543,54,36,"generate",NA,"within","mixed","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +263,"3",1,665,414,0.75,0.000500086880013177,54,36,"read",NA,"within","mixed","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" +269,"1",1,666,415,0.22,0.000309152214134988,34,44,"generate",NA,"between","pure","words","free recall","item","high","intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" +269,"1",2,667,415,0.21,0.000278333828698382,36,44,"read",NA,"between","pure","words","free recall","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" +269,"2",1,668,416,0.26,0.000402603207304403,40,21,"generate",NA,"within","pure","words","free recall","item","high","intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" +269,"2",1,669,416,0.18,0.000239839517276877,40,21,"read",NA,"within","pure","words","free recall","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" +269,"3",1,670,417,0.29,0.000474019191139232,40,21,"generate",NA,"within","mixed","words","free recall","item","high","intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" +269,"3",1,671,417,0.15,0.000191479404978051,40,21,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" +269,"4",1,672,418,0.42,0.000766350487552301,36,36,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +269,"4",2,673,418,0.34,0.000580407051965645,36,36,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +271,"1",1,674,419,0.9585,0.000112666666666667,24,20,"generate",NA,"within","pure","words","recognition","item","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" +271,"1",1,675,419,0.692,0.00120416666666667,24,20,"read",NA,"within","pure","words","recognition","item",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" +271,"1",2,676,420,0.846,0.00110704166666667,24,20,"generate",NA,"within","pure","words","recognition","item","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" +271,"1",2,677,420,0.681,0.00176816666666667,24,20,"read",NA,"within","pure","words","recognition","item",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" +271,"1",1,678,421,0.811,0.000737041666666667,24,20,"generate",NA,"within","pure","words","recognition","source","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" +271,"1",1,679,421,0.61,0.001584375,24,20,"read",NA,"within","pure","words","recognition","source",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" +271,"1",2,680,422,0.578,0.00275204166666667,24,20,"generate",NA,"within","pure","words","recognition","source","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" +271,"1",2,681,422,0.527,0.00286016666666667,24,20,"read",NA,"within","pure","words","recognition","source",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" +271,"2",1,682,423,0.924,0.000330041666666667,24,20,"generate",NA,"within","pure","words","recognition","item","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" +271,"2",1,683,423,0.685,0.0012615,24,20,"read",NA,"within","pure","words","recognition","item",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" +271,"2",2,684,424,0.795,0.001134375,24,20,"generate",NA,"within","pure","words","recognition","item","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" +271,"2",2,685,424,0.594,0.00182004166666667,24,20,"read",NA,"within","pure","words","recognition","item",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" +271,"2",1,686,425,0.803,0.000651041666666667,24,20,"generate",NA,"within","pure","words","recognition","source","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" +271,"2",1,687,425,0.594,0.00256266666666667,24,20,"read",NA,"within","pure","words","recognition","source",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" +271,"2",2,688,426,0.489,0.00190816666666667,24,20,"generate",NA,"within","pure","words","recognition","source","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" +271,"2",2,689,426,0.36,0.0024,24,20,"read",NA,"within","pure","words","recognition","source",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" +275,"1",1,690,299,0.88,0.000590123099290305,32,10,"generate","low","within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,691,299,0.59,0.00148592868264426,32,10,"read","low","within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,692,300,0.86,0.000661598197523891,32,10,"generate","high","within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,693,300,0.69,0.00129147133431216,32,10,"read","high","within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,694,301,0.91,0.000490180443877037,32,10,"generate","low","within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,695,301,0.58,0.00149145202841967,32,10,"read","low","within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,696,302,0.86,0.000661598197523891,32,10,"generate","high","within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,697,302,0.63,0.00143683608108408,32,10,"read","high","within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,698,303,0.74,0.00112223224827917,32,10,"generate","low","within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,699,303,0.68,0.0013208136300182,32,10,"read","low","within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,700,304,0.73,0.00115854321798246,32,10,"generate","high","within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,701,304,0.7,0.00126041468709482,32,10,"read","high","within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,702,305,0.85,0.000698551364857556,32,10,"generate","low","within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,703,305,0.75,0.00108502240135274,32,10,"read","low","within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,704,306,0.82,0.0008130610816742,32,10,"generate","high","within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"1",1,705,306,0.73,0.00115854321798246,32,10,"read","high","within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" +275,"2a",1,706,307,0.93,0.000509634019507341,16,15,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2a",1,707,307,0.75,0.00128865980083696,16,15,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2a",1,708,308,0.94,0.000475486313114057,16,15,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2a",1,709,308,0.8,0.00105852205491163,16,15,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2a",1,710,309,0.87,0.000742805845529448,16,15,"generate",NA,"within","mixed","words","recognition","location","medium","incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2a",1,711,309,0.81,0.00101197224846919,16,15,"read",NA,"within","mixed","words","recognition","location",NA,"incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2a",1,712,310,0.88,0.000700877617505987,16,15,"generate",NA,"within","mixed","words","recognition","location","medium","incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2a",1,713,310,0.77,0.0011978613919768,16,15,"read",NA,"within","mixed","words","recognition","location",NA,"incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2b",1,714,311,0.86,0.00078576718820947,16,15,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2b",1,715,311,0.71,0.0014582338356993,16,15,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2b",1,716,312,0.89,0.00066007688484881,16,15,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2b",1,717,312,0.75,0.00128865980083696,16,15,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2b",1,718,313,0.75,0.00128865980083696,16,15,"generate",NA,"within","mixed","words","recognition","font color","medium","incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2b",1,719,313,0.67,0.0016013392348564,16,15,"read",NA,"within","mixed","words","recognition","font color",NA,"incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2b",1,720,314,0.7,0.00149696977465035,16,15,"generate",NA,"within","mixed","words","recognition","font color","medium","incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +275,"2b",1,721,314,0.65,0.00165929713241221,16,15,"read",NA,"within","mixed","words","recognition","font color",NA,"incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +281,"1",1,722,427,0.88,0.000424382674098702,30,32,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"verbal/speaking","cue only","full","timed","yes","younger","long" +281,"1",1,723,427,0.68,0.000949853379688479,30,32,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","cue only","full","timed","yes","younger","long" +281,"1",1,724,428,0.76,0.000753000302524894,30,32,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking","cue only","full","timed","yes","younger","long" +281,"1",1,725,428,0.56,0.00107449235945005,30,32,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"verbal/speaking","cue only","full","timed","yes","younger","long" +286,"1",1,726,429,0.27,0.000444585313756711,36,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +286,"1",2,727,429,0.28,0.000469455765544879,36,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +286,"1",1,728,430,0.18,0.000250348223386154,36,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +286,"1",2,729,430,0.17,0.000232680238955505,36,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +286,"2",1,730,431,0.24,0.000402315651416016,28,40,"generate",NA,"between","pure","words","free recall","item","high","intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" +286,"2",2,731,431,0.23,0.000378154423048021,28,40,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" +286,"3",1,732,432,0.28,0.000549483951351285,24,42,"generate",NA,"between","pure","words","free recall","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +286,"3",2,733,432,0.27,0.000520373830391129,24,42,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +286,"3",3,734,433,0.12,0.000183643940044186,24,42,"generate",NA,"between","pure","non-words","free recall","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +286,"3",4,735,433,0.13,0.000199450136738576,24,42,"read",NA,"between","pure","non-words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +286,"4",1,736,434,0.36,0.000902865907919899,24,21,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +286,"4",1,737,434,0.24,0.000497032536893732,24,21,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +286,"4",2,738,435,0.12,0.000208858395299934,24,21,"generate",NA,"within","mixed","non-words","free recall","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +286,"4",2,739,435,0.11,0.000191946260516557,24,21,"read",NA,"within","mixed","non-words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +286,"5",1,740,436,0.21,0.000292376086619303,33,48,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +286,"5",2,741,436,0.22,0.000312225724754014,33,48,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" +291,"1a",1,742,437,0.38,0.000984895103853155,28,15,"generate",NA,"within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +291,"1a",1,743,437,0.27,0.000600004804347625,28,15,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +291,"1b",1,744,438,0.43,0.0012513497614267,24,15,"generate",NA,"within","mixed","words","cued recall","item","low","incidental",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" +291,"1b",1,745,438,0.33,0.000884118072552527,24,15,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" +291,"2",1,746,439,0.39,0.00111379656377899,24,15,"generate",NA,"within","mixed","words","cued recall","item","medium","incidental","semantic","writing/typing","word stem","full","timed","yes","younger","immediate" +291,"2",1,747,439,0.22,0.000485819625537438,24,15,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental","semantic","writing/typing","word stem","full","timed","yes","younger","immediate" +291,"3",1,748,440,0.29,0.000698832552212868,20,24,"generate",NA,"within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +291,"3",1,749,440,0.21,0.000435477491218987,20,24,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +291,"3",2,750,441,0.4,0.00110074923449589,20,24,"generate",NA,"within","pure","words","cued recall","item","medium","incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +291,"3",2,751,441,0.28,0.000663052789529928,20,24,"read",NA,"within","pure","words","cued recall","item",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +293,"1",1,752,807,0.74,0.000818819494033244,32,24,"generate",NA,"within","pure","words","recognition","item","high","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +293,"1",1,753,807,0.66,0.00100234419330496,32,24,"read",NA,"within","pure","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +293,"1",1,754,808,0.65,0.0010193656982785,32,24,"generate",NA,"within","pure","non-words","recognition","item","high","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +293,"1",1,755,808,0.67,0.000983760084576965,32,24,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +293,"2",1,756,809,0.587,0.000810866534641357,48,24,"generate",NA,"within","pure","words","free recall","item","high","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +293,"2",1,757,809,0.642,0.000770674714562466,48,24,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +293,"2",1,758,810,0.266,0.000351758571051765,48,24,"generate",NA,"within","pure","non-words","free recall","item","high","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +293,"2",1,759,810,0.333,0.00049120074898129,48,24,"read",NA,"within","pure","non-words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" +293,"3",1,760,811,0.82,0.000520415027930249,48,14,"generate","low","within","pure","words","recognition","item","high","intentional","compound words","writing/typing","letter transposition","full","timed","no","younger","immediate" +293,"3",1,761,811,0.71,0.000785876405947517,48,14,"read","low","within","pure","words","recognition","item",NA,"intentional","compound words","writing/typing","letter transposition","full","timed","no","younger","immediate" +293,"3",1,762,812,0.65,0.000894234130971039,48,14,"generate","high","within","pure","non-words","recognition","item","high","intentional","compound words","writing/typing","letter transposition","full","timed","no","younger","immediate" +293,"3",1,763,812,0.64,0.000907715672134181,48,14,"read","high","within","pure","non-words","recognition","item",NA,"intentional","compound words","writing/typing","letter transposition","full","timed","no","younger","immediate" +308,"1",1,764,442,0.082,0.000182118181032404,28,10,"generate",NA,"within",NA,"non-words","free recall","item","medium",NA,NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +308,"1",1,765,442,0.132,0.000279880660047871,28,10,"read",NA,"within",NA,"non-words","free recall","item",NA,NA,NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +308,"1",1,766,443,0.704,0.00135797243137599,28,10,"generate",NA,"within",NA,"non-words","recognition","item","medium",NA,NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +308,"1",1,767,443,0.707,0.00134729586520085,28,10,"read",NA,"within",NA,"non-words","recognition","item",NA,NA,NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +308,"2",1,768,444,0.071,0.00022498167251309,9,10,"generate",NA,"within",NA,"non-words","free recall","item","medium",NA,NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +308,"2",1,769,444,0.136,0.000395007818162962,9,10,"read",NA,"within",NA,"non-words","free recall","item",NA,NA,NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +308,"2",1,770,445,0.656,0.0020575551754772,9,10,"generate",NA,"within",NA,"non-words","recognition","item","medium",NA,NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +308,"2",1,771,445,0.778,0.00145384817611476,9,10,"read",NA,"within",NA,"non-words","recognition","item",NA,NA,NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" +344,"1",1,772,446,0.85,0.000520227172583816,32,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"1",1,773,446,0.64,0.0010561311818639,32,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"1",1,774,447,0.58,0.00111071842504721,32,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"1",1,775,447,0.66,0.00102307185354073,32,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"2",1,776,448,0.81,0.000634546880739736,32,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"2",1,777,448,0.51,0.00108162317764318,32,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"2",1,778,449,0.64,0.0010561311818639,32,22,"generate",NA,"within","mixed","words","recognition","location","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"2",1,779,449,0.62,0.00108211001037408,32,22,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"3",1,780,450,0.84,0.000577055245008409,24,44,"generate",NA,"between","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"3",2,781,450,0.77,0.000790563120779084,24,44,"read",NA,"between","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"3",1,782,451,0.59,0.00116473607181022,24,44,"generate",NA,"between","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"3",2,783,451,0.69,0.00101231187361255,24,44,"read",NA,"between","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"4",1,784,452,0.81,0.000634546880739736,32,22,"generate",NA,"between","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"4",2,785,452,0.74,0.000835752013201925,32,22,"read",NA,"between","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"4",1,786,453,0.66,0.00102307185354073,32,22,"generate",NA,"between","mixed","words","recognition","location","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"4",2,787,453,0.65,0.00104044534935151,32,22,"read",NA,"between","mixed","words","recognition","location",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"5",1,788,454,0.76,0.000779784875268914,32,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"5",1,789,454,0.6,0.00110044105595606,32,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"5",1,790,455,0.61,0.00109226086182065,32,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"5",1,791,455,0.68,0.000983640108404407,32,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"6",1,792,456,0.83,0.000493933451557691,40,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"6",1,793,456,0.61,0.000935486122266163,40,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"6",1,794,457,0.63,0.000916458680959516,40,22,"generate",NA,"within","mixed","words","recognition","background color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"6",1,795,457,0.61,0.000935486122266163,40,22,"read",NA,"within","mixed","words","recognition","background color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"7",1,796,458,0.77,0.000751106772925088,32,22,"generate",NA,"within","mixed","words","recognition","cue word","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"7",1,797,458,0.64,0.0010561311818639,32,22,"read",NA,"within","mixed","words","recognition","cue word",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"7",1,798,459,0.62,0.00108211001037408,32,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"7",1,799,459,0.63,0.00107004468036678,32,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"8",1,800,460,0.84,0.000409505347831618,48,22,"generate",NA,"within","mixed","words","recognition","cue word","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"8",1,801,460,0.52,0.000815536743929872,48,22,"read",NA,"within","mixed","words","recognition","cue word",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"8",1,802,461,0.53,0.000821711714375173,48,22,"generate",NA,"within","mixed","words","recognition","font color","high","incidental","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"8",1,803,461,0.56,0.000831112943613933,48,22,"read",NA,"within","mixed","words","recognition","font color",NA,"incidental","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"9",1,804,462,0.86,0.000368015455519361,48,22,"generate",NA,"within","mixed","words","recognition","cue word","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"9",1,805,462,0.6,0.000821947052930178,48,22,"read",NA,"within","mixed","words","recognition","cue word",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"9",1,806,463,0.56,0.000831112943613933,48,22,"generate",NA,"within","mixed","words","recognition","font color","high","incidental","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"9",1,807,463,0.63,0.00079924323685558,48,22,"read",NA,"within","mixed","words","recognition","font color",NA,"incidental","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"10a",1,808,464,0.89,0.000354267469789765,32,60,"generate",NA,"within","mixed","words","recognition","cue word","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"10a",1,809,464,0.67,0.00085944897030835,32,60,"read",NA,"within","mixed","words","recognition","cue word",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"10a",1,810,465,0.623,0.000923289148986081,32,60,"generate",NA,"within","mixed","words","recognition","font color","high","incidental","category","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"10a",1,811,465,0.7,0.000803433216023923,32,60,"read",NA,"within","mixed","words","recognition","font color",NA,"incidental","category","writing/typing","word stem","full","timed","yes","younger","immediate" +344,"10b",1,812,466,0.92,0.000239161241694213,48,30,"generate",NA,"within","mixed","words","recognition","item","high","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +344,"10b",1,813,466,0.72,0.000621946902135301,48,30,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +344,"10b",1,814,467,0.598,0.000770812155478097,48,30,"generate",NA,"within","mixed","words","recognition","font color","high","incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +344,"10b",1,815,467,0.66,0.000715710797558832,48,30,"read",NA,"within","mixed","words","recognition","font color",NA,"incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +344,"11",1,816,468,0.95,0.000182457889793326,52,30,"generate",NA,"within","mixed","words","recognition","item","high","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +344,"11",1,817,468,0.76,0.000512435559698591,52,30,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +344,"11",1,818,469,0.622,0.000709622095614346,52,30,"generate",NA,"within","mixed","words","recognition","location","high","incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +344,"11",1,819,469,0.63,0.000703179764158875,52,30,"read",NA,"within","mixed","words","recognition","location",NA,"incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +345,"1",1,820,470,0.37,0.001,10,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +345,"1",1,821,470,0.26,0.00081,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +345,"1",2,822,471,0.58,0.00025,10,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","yes","younger","immediate" +345,"1",2,823,471,0.36,0.00064,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","timed","yes","younger","immediate" +345,"1",3,824,472,0.14,0.00064,10,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"1",3,825,472,0.16,0.00025,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"1",4,826,473,0.43,0.00049,10,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"1",4,827,473,0.25,0.001,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"1",5,828,474,0.13,0.00064,10,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"1",5,829,474,0.14,0.00016,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"1",6,830,475,0.35,0.00049,10,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"1",6,831,475,0.15,9e-05,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"2",1,832,476,0.37,0.000555555555555556,18,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +345,"2",1,833,476,0.16,5e-05,18,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +345,"2",1,834,477,0.48,0.000555555555555556,18,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","yes","younger","immediate" +345,"2",1,835,477,0.29,0.00045,18,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","timed","yes","younger","immediate" +345,"2",2,836,478,0.15,0.000405,20,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","older","immediate" +345,"2",2,837,478,0.12,0.000125,20,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","older","immediate" +345,"2",2,838,479,0.39,0.000245,20,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"2",2,839,479,0.13,0.00018,20,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"2",3,840,480,0.11,5e-05,18,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","older","immediate" +345,"2",3,841,480,0.09,8.88888888888889e-05,18,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","older","immediate" +345,"2",3,842,481,0.27,0.000355555555555556,18,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"2",3,843,481,0.09,8.88888888888889e-05,18,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"3",1,844,482,0.51,0.00142222222222222,18,10,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","anagram","full","timed","yes","younger","immediate" +345,"3",1,845,482,0.37,0.000938888888888889,18,10,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","anagram","full","timed","yes","younger","immediate" +345,"3",1,846,483,0.53,0.00108888888888889,18,10,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +345,"3",1,847,483,0.32,0.00045,18,10,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +345,"3",2,848,484,0.38,0.000355555555555556,18,10,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","anagram","full","timed","yes","older","immediate" +345,"3",2,849,484,0.26,0.000672222222222222,18,10,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","anagram","full","timed","yes","older","immediate" +345,"3",2,850,485,0.25,2e-04,18,10,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"3",2,851,485,0.25,0.000272222222222222,18,10,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" +345,"4",1,852,486,0.42,0.00045,18,10,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","anagram","divided","timed","yes","younger","immediate" +345,"4",1,853,486,0.21,0.000672222222222222,18,10,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","anagram","divided","timed","yes","younger","immediate" +345,"4",1,854,487,0.23,2.22222222222222e-05,18,10,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" +345,"4",1,855,487,0.19,0.000138888888888889,18,10,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" +345,"5",1,856,488,0.16,9e-05,10,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" +345,"5",1,857,488,0.155,9e-05,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" +345,"5",2,858,489,0.41,0.00081,10,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","divided","timed","yes","younger","immediate" +345,"5",2,859,489,0.18,0.00025,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","divided","timed","yes","younger","immediate" +345,"5",3,860,490,0.1,0.00016,10,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","older","immediate" +345,"5",3,861,490,0.09,9e-05,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","older","immediate" +345,"5",4,862,491,0.39,0.00064,10,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","divided","timed","yes","older","immediate" +345,"5",4,863,491,0.11,0.00016,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","divided","timed","yes","older","immediate" +345,"5",5,864,492,0.09,0.00016,10,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","older","immediate" +345,"5",5,865,492,0.07,4e-05,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","older","immediate" +345,"5",6,866,493,0.33,0.00081,10,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","divided","timed","yes","older","immediate" +345,"5",6,867,493,0.06,9e-05,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","divided","timed","no","older","immediate" +346,"1",1,868,315,0.61,0.00075,30,12,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" +346,"1",1,869,315,0.38,0.000853333333333333,30,12,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" +346,"1",1,870,316,0.73,0.00108,30,12,"generate",NA,"within","mixed","words","recognition","source","medium","intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" +346,"1",1,871,316,0.53,0.00208333333333333,30,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" +346,"2",1,872,317,0.65,0.00035,56,12,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" +346,"2",1,873,317,0.31,0.00035,56,12,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" +346,"2",1,874,318,0.81,0.00035,56,12,"generate",NA,"within","mixed","words","recognition","source","medium","intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" +346,"2",1,875,318,0.54,0.00130178571428571,56,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" +362,"1",1,876,494,0.93,0.000113636363636364,22,50,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","semantic","verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +362,"1",1,877,494,0.83,0.000222727272727273,22,50,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +362,"1",1,878,495,0.78,0.000290909090909091,22,50,"generate",NA,"within","mixed","words","recognition","source","medium","intentional","semantic","verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +362,"1",1,879,495,0.68,0.000654545454545455,22,50,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","semantic","verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +404,"1",1,880,496,0.89,0.000640743033664728,12,20,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +404,"1",2,881,496,0.74,0.001293813532715,12,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +404,"2",1,882,497,0.86,0.000718093763903156,16,20,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +404,"2",2,883,497,0.7,0.00136804472884322,16,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +434,"1",1,884,498,0.84,0.000596783238609205,28,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"1",1,885,498,0.51,0.00117736218255749,28,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"1",1,886,499,0.59,0.00120455531956865,28,22,"generate",NA,"within","mixed","words","recognition","font type","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"1",1,887,499,0.7,0.00102174433668025,28,22,"read",NA,"within","mixed","words","recognition","font type",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2a",1,888,500,0.73,0.00100597708546187,24,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2a",1,889,500,0.57,0.00129742396807054,24,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2a",1,890,501,0.6,0.00128306289857587,24,24,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2a",1,891,501,0.7,0.00109443331393804,24,24,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2b",1,892,502,0.79,0.000739020736315536,28,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2b",1,893,502,0.64,0.0011263223557932,28,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2b",1,894,503,0.61,0.00116485323807538,28,24,"generate",NA,"within","mixed","words","recognition","font type","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2b",1,895,503,0.7,0.00100104357222735,28,24,"read",NA,"within","mixed","words","recognition","font type",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2c",1,896,504,0.83,0.000483926251449958,40,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2c",1,897,504,0.7,0.00078764380483765,40,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2c",1,898,505,0.62,0.000908015231851382,40,24,"generate",NA,"within","mixed","words","recognition","location","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2c",1,899,505,0.63,0.000897891026993363,40,24,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2d",1,900,506,0.84,0.000584692279248447,28,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2d",1,901,506,0.68,0.00104901347784796,28,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2d",1,902,507,0.67,0.00107083681658361,28,24,"generate",NA,"within","mixed","words","recognition","background color","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"2d",1,903,507,0.66,0.00109106588273634,28,24,"read",NA,"within","mixed","words","recognition","background color",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"4a",1,904,508,0.71,0.000937107451252982,32,20,"generate",NA,"within","mixed","non-words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"4a",1,905,508,0.72,0.00091114812498967,32,20,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"4a",1,906,509,0.55,0.00113819791733907,32,20,"generate",NA,"within","mixed","non-words","recognition","font color","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"4a",1,907,509,0.63,0.00109665247146399,32,20,"read",NA,"within","mixed","non-words","recognition","font color",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"4b",1,908,510,0.62,0.00106493142111444,34,20,"generate",NA,"within","mixed","non-words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"4b",1,909,510,0.66,0.00100683050008629,34,20,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"4b",1,910,511,0.53,0.00108266138513266,34,20,"generate",NA,"within","mixed","non-words","recognition","font type","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"4b",1,911,511,0.63,0.00105305762925621,34,20,"read",NA,"within","mixed","non-words","recognition","font type",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"5",1,912,512,0.63,0.000939247393972728,40,20,"generate",NA,"within","mixed","non-words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"5",1,913,512,0.66,0.000898016307090657,40,20,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"5",1,914,513,0.62,0.000949837914139504,40,20,"generate",NA,"within","mixed","non-words","recognition","location","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"5",1,915,513,0.6,0.000965928257942499,40,20,"read",NA,"within","mixed","non-words","recognition","location",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +434,"6a",1,916,514,0.86,0.000478397023738957,32,25,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +434,"6a",1,917,514,0.71,0.000887813511917755,32,25,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +434,"6a",1,918,515,0.64,0.00102545671635045,32,25,"generate",NA,"within","mixed","words","recognition","font color","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +434,"6a",1,919,515,0.62,0.00105068101105564,32,25,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +434,"6b",1,920,516,0.85,0.00048854623409636,40,16,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +434,"6b",1,921,516,0.68,0.000923738120560559,40,16,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +434,"6b",1,922,517,0.67,0.000942955271086954,40,16,"generate",NA,"within","mixed","words","recognition","font color","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +434,"6b",1,923,517,0.66,0.000960768540356816,40,16,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +434,"6b",1,924,518,0.81,0.000595904068992173,40,16,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +434,"6b",1,925,518,0.8,0.000623315116194121,40,16,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +434,"6b",1,926,519,0.57,0.0010449930256901,40,16,"generate",NA,"within","mixed","non-words","recognition","font color","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +434,"6b",1,927,519,0.58,0.00104307758666879,40,16,"read",NA,"within","mixed","non-words","recognition","font color",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +442,"1",1,928,319,0.91,0.000784,16,30,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +442,"1",1,929,319,0.73,0.0029506624,16,30,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +442,"1",1,930,320,0.65,0.00138579405412888,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +442,"1",1,931,320,0.6,0.00146570377119155,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +442,"1",1,932,321,0.59,0.00147391375987295,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +442,"1",1,933,321,0.59,0.00147391375987295,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +442,"1",1,934,322,0.66,0.00136265387938639,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +442,"1",1,935,322,0.57,0.00148210910388415,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +442,"1",1,936,323,0.6,0.00146570377119155,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +442,"1",1,937,323,0.56,0.00148204847428844,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" +442,"1",1,938,324,0.76,0.00103861413222792,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +442,"1",1,939,324,0.61,0.00145480837490616,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +442,"1",1,940,325,0.81,0.000845168172401595,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +442,"1",1,941,325,0.79,0.000922977694767403,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +442,"1",1,942,326,0.79,0.000922977694767403,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +442,"1",1,943,326,0.69,0.00128102875485033,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +442,"1",1,944,327,0.81,0.000845168172401595,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +442,"1",1,945,327,0.69,0.00128102875485033,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" +448,"1",1,946,520,0.8,0.00116213705058902,20,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +448,"1",1,947,520,0.55,0.00194452263399905,20,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +448,"1",1,948,521,0.9,0.00068122370082679,20,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +448,"1",1,949,521,0.57,0.00194833252268403,20,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +448,"1",1,950,522,0.8,0.00116213705058902,20,10,"generate","low","within","mixed","words","recognition","source","low","incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +448,"1",1,951,522,0.84,0.000959941672490842,20,10,"read","low","within","mixed","words","recognition","source",NA,"incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +448,"1",1,952,523,0.84,0.000959941672490842,20,10,"generate","high","within","mixed","words","recognition","source","low","incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +448,"1",1,953,523,0.8,0.00116213705058902,20,10,"read","high","within","mixed","words","recognition","source",NA,"incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +448,"1",2,954,524,0.85,0.000910867817606875,20,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",2,955,524,0.72,0.00155662571946211,20,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",2,956,525,0.85,0.000910867817606875,20,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",2,957,525,0.73,0.00151066877205531,20,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",2,958,526,0.73,0.00151066877205531,20,10,"generate","low","within","mixed","words","recognition","source","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",2,959,526,0.72,0.00155662571946211,20,10,"read","low","within","mixed","words","recognition","source",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",2,960,527,0.77,0.00131511582458486,20,10,"generate","high","within","mixed","words","recognition","source","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",2,961,527,0.84,0.000959941672490842,20,10,"read","high","within","mixed","words","recognition","source",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",3,962,528,0.86,0.000862683170670081,20,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",3,963,528,0.85,0.000910867817606875,20,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",3,964,529,0.88,0.000769484058884594,20,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",3,965,529,0.88,0.000769484058884594,20,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",3,966,530,0.68,0.00172225936296812,20,10,"generate","low","within","mixed","words","recognition","source","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",3,967,530,0.71,0.00160097520975145,20,10,"read","low","within","mixed","words","recognition","source",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",3,968,531,0.84,0.000959941672490842,20,10,"generate","high","within","mixed","words","recognition","source","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"1",3,969,531,0.81,0.00111103064754952,20,10,"read","high","within","mixed","words","recognition","source",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"2",1,970,532,0.84,0.000959941672490842,20,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +448,"2",1,971,532,0.45,0.00172063965964124,20,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +448,"2",1,972,533,0.91,0.000639165011493308,20,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +448,"2",1,973,533,0.51,0.0018938183071053,20,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" +448,"2",2,974,534,0.79,0.00121331652016343,20,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"2",2,975,534,0.78,0.00126437625042934,20,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"2",2,976,535,0.88,0.000769484058884594,20,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"2",2,977,535,0.67,0.00175808869239275,20,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"2",3,978,536,0.82,0.001060181412997,20,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"2",3,979,536,0.85,0.000910867817606875,20,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"2",3,980,537,0.86,0.000862683170670081,20,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +448,"2",3,981,537,0.86,0.000862683170670081,20,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +449,"1",1,982,538,0.3714,0.000268249655172414,29,20,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +449,"1",1,983,538,0.2103,0.000482582413793103,29,20,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +449,"1",2,984,539,0.2192,0.000292496896551724,29,20,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" +449,"1",2,985,539,0.1508,0.000113216896551724,29,20,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" +465,"1",1,986,328,0.83,0.000400000000071788,32,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" +465,"1",1,987,328,0.61,0.000899999994858223,32,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" +465,"1",1,988,329,0.81,0.000899999994858223,32,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" +465,"1",1,989,329,0.62,0.000400000000071788,32,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" +465,"1",1,990,330,0.87,0.00160000000028715,32,10,"generate","high","within","mixed","words","recognition","source","low","incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" +465,"1",1,991,330,0.7,0.000899999994858223,32,10,"read","high","within","mixed","words","recognition","source",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" +465,"1",1,992,331,0.8,0.00249999999160984,32,10,"generate","low","within","mixed","words","recognition","source","low","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" +465,"1",1,993,331,0.65,0.00249999999160984,32,10,"read","low","within","mixed","words","recognition","source",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" +465,"2",1,994,332,0.84,0.000399999998533143,70,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" +465,"2",1,995,332,0.54,0.000399999998533143,70,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" +465,"2",1,996,333,0.65,0.000399999998533143,70,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" +465,"2",1,997,333,0.46,0.000900000000285258,70,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" +465,"2",1,998,334,0.49,0.0016000000036944,70,10,"generate","high","within","mixed","words","recognition",NA,"low","incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" +465,"2",1,999,334,0.52,0.000900000000285258,70,10,"read","high","within","mixed","words","recognition",NA,NA,"incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" +465,"2",1,1000,335,0.8,0.000399999998533143,70,10,"generate","low","within","mixed","words","recognition",NA,"low","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" +465,"2",1,1001,335,0.72,0.000900000000285258,70,10,"read","low","within","mixed","words","recognition",NA,NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" +465,"3",1,1002,336,0.74,0.00040000000282785,14,20,"generate","high","between","mixed","words","recognition","item","low","incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" +465,"3",2,1003,336,0.78,0.00040000000282785,14,20,"read","high","between","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" +465,"3",1,1004,337,0.65,0.00040000000282785,14,20,"generate","low","between","mixed","words","recognition","item","low","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" +465,"3",2,1005,337,0.46,0.000900000006362663,14,20,"read","low","between","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" +465,"3",1,1006,338,0.44,0.00489999999722459,14,20,"generate","high","between","mixed","words","recognition",NA,"low","incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" +465,"3",2,1007,338,0.55,0.00249999999094794,14,20,"read","high","between","mixed","words","recognition",NA,NA,"incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" +465,"3",1,1008,339,0.67,0.00249999999094794,14,20,"generate",NA,"between","mixed","words","recognition",NA,"low","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" +465,"3",2,1009,339,0.66,0.00249999999094794,14,20,"read",NA,"between","mixed","words","recognition",NA,NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" +501,"1",1,1010,540,0.83,0.000202396781064771,120,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +501,"1",1,1011,540,0.5,0.000375333292505174,120,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +501,"1",1,1012,541,0.54,0.000388284415630931,120,20,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +501,"1",1,1013,541,0.58,0.000389807431703346,120,20,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +501,"1",1,1014,542,0.67,0.000352390826081717,120,20,"generate",NA,"within","mixed","words","recognition","source","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +501,"1",1,1015,542,0.71,0.000320899041750182,120,20,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +515,"1",1,1016,543,0.81,0.000290909090909091,22,40,"generate","low","within","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +515,"1",1,1017,543,0.68,0.000454545454545455,22,40,"read","low","within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +515,"1",2,1018,544,0.8,0.000368181818181818,22,40,"generate","high","within","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +515,"1",2,1019,544,0.53,0.000368181818181818,22,40,"read","high","within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +515,"1",3,1020,545,0.69,0.000890909090909091,22,40,"generate","low","within","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +515,"1",3,1021,545,0.53,0.000654545454545455,22,40,"read","low","within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +515,"1",4,1022,546,0.43,0.000890909090909091,22,40,"generate","high","within","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +515,"1",4,1023,546,0.38,0.000768181818181818,22,40,"read","high","within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +544,"1a",1,1024,547,0.8,0.000885819600482599,24,15,"generate",NA,"within","mixed","words","recognition","item","medium","incidental","antonym","verbal/speaking","cue only","full","self-paced","yes","younger","immediate" +544,"1a",1,1025,547,0.7,0.00125273267719112,24,15,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","antonym","verbal/speaking","cue only","full","self-paced","yes","younger","immediate" +553,"3",1,1026,548,0.31,0.000942189984668704,16,16,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +553,"3",1,1027,548,0.2,0.000496801942258548,16,16,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +553,"3",2,1028,549,0.29,0.000852966702130405,16,16,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +553,"3",2,1029,549,0.16,0.000372110842126861,16,16,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +553,"4",1,1030,550,0.57,0.00184301794328077,12,16,"generate",NA,"within","pure","words","free recall","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +553,"4",1,1031,550,0.56,0.00184294254975373,12,16,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +553,"4",2,1032,551,0.54,0.00183245209603555,12,16,"generate",NA,"within","pure","words","free recall","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +553,"4",2,1033,551,0.56,0.00184294254975373,12,16,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +553,"5",1,1034,552,0.3,0.00089731009336808,16,16,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +553,"5",1,1035,552,0.28,0.000809295373309163,16,16,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +553,"5",2,1036,553,0.27,0.000766421170793167,16,16,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +553,"5",2,1037,553,0.24,0.000643667423222436,16,16,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +553,"6",1,1038,554,0.89,0.000645381245565124,16,16,"generate",NA,"within","pure","words","recognition","item","low","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +553,"6",1,1039,554,0.75,0.00125996968908304,16,16,"read",NA,"within","pure","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" +690,"1",1,1040,575,0.62,0.0012259353726749,36,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"1",1,1041,575,0.26,0.000526359952371774,36,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"1",1,1042,576,0.65,0.00117873297989746,36,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"1",1,1043,576,0.29,0.000619728592183584,36,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"1",1,1044,577,0.67,0.00113756079683267,36,12,"generate",NA,"within","mixed","words","recognition","source","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"1",1,1045,577,0.76,0.000883427611337388,36,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"1",1,1046,578,0.79,0.000785069213777194,36,12,"generate",NA,"within","mixed","words","recognition","source","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"1",1,1047,578,0.63,0.00121226641600956,36,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"2",1,1048,579,0.64,0.00126979762620967,33,12,"generate",NA,"between","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"2",2,1049,579,0.49,0.00126901868279548,33,12,"read",NA,"between","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"2",1,1050,580,0.67,0.0012072441257709,33,12,"generate",NA,"between","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"2",2,1051,580,0.25,0.000527029188757082,33,12,"read",NA,"between","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"2",1,1052,581,0.6,0.00132307185379243,33,12,"generate",NA,"between","mixed","words","recognition","font color","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"2",2,1053,581,0.51,0.00130044692080843,33,12,"read",NA,"between","mixed","words","recognition","font color",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"2",1,1054,582,0.49,0.00126901868279548,33,12,"generate",NA,"between","mixed","words","recognition","font color","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +690,"2",2,1055,582,0.63,0.00128652597177376,33,12,"read",NA,"between","mixed","words","recognition","font color",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +691,"1",1,1056,340,0.83,0.000686321940111699,24,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +691,"1",1,1057,340,0.6,0.0013095955926349,24,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +691,"1",1,1058,341,0.8,0.000789887864829155,24,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"1",1,1059,341,0.65,0.00123819684526803,24,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"1",1,1060,342,0.59,0.00131693115743597,24,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +691,"1",1,1061,342,0.66,0.0012175212684897,24,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +691,"1",1,1062,343,0.53,0.00130922063133622,24,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"1",1,1063,343,0.62,0.0012877804700778,24,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"2",1,1064,344,0.81,0.000634546880739736,32,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"2",1,1065,344,0.52,0.00109185879122239,32,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"2",1,1066,345,0.63,0.00107004468036678,32,22,"generate",NA,"within","mixed","words","recognition","font type","high","intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"2",1,1067,345,0.73,0.000862793622527772,32,22,"read",NA,"within","mixed","words","recognition","font type",NA,"intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"3",1,1068,346,0.82,0.000720590082055566,24,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +691,"3",1,1069,346,0.65,0.00123819684526803,24,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +691,"3",1,1070,347,0.85,0.000619103775433735,24,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"3",1,1071,347,0.75,0.000961620718105151,24,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"3",1,1072,348,0.57,0.0013242536373314,24,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +691,"3",1,1073,348,0.64,0.00125686399423877,24,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +691,"3",1,1074,349,0.65,0.00123819684526803,24,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"3",1,1075,349,0.74,0.000994598617618907,24,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"4",1,1076,350,0.7,0.00100104357222735,28,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"4",1,1077,350,0.59,0.00118015076448994,28,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"4",1,1078,351,0.65,0.00110959403252113,28,24,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","rhyme","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"4",1,1079,351,0.74,0.000891296642437175,28,24,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","rhyme","covert/thinking","word stem","full","timed","yes","younger","immediate" +691,"5",1,1080,352,0.82,0.000605505176764716,32,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +691,"5",1,1081,352,0.52,0.00109185879122239,32,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +691,"5",1,1082,353,0.55,0.00111058211999225,32,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +691,"5",1,1083,353,0.63,0.00107004468036678,32,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +691,"6",1,1084,354,0.85,0.000570419932473886,32,16,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","antonym","writing/typing","letter transposition","full","timed","yes","younger","immediate" +691,"6",1,1085,354,0.66,0.0011217802690201,32,16,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","letter transposition","full","timed","yes","younger","immediate" +691,"6",1,1086,355,0.8,0.000727774244636333,32,16,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional","antonym","writing/typing","letter transposition","full","timed","yes","younger","immediate" +691,"6",1,1087,355,0.82,0.000663925762138214,32,16,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","antonym","writing/typing","letter transposition","full","timed","yes","younger","immediate" +691,"6",1,1088,356,0.63,0.00117328514634733,32,16,"generate",NA,"within","mixed","words","recognition","location","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +691,"6",1,1089,356,0.53,0.00120626876099572,32,16,"read",NA,"within","mixed","words","recognition","location",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +691,"6",1,1090,357,0.59,0.00121337296218409,32,16,"generate",NA,"within","mixed","non-words","recognition","location","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +691,"6",1,1091,357,0.52,0.00119720393470941,32,16,"read",NA,"within","mixed","non-words","recognition","location",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" +702,"1",1,1092,555,0.66,0.00045,18,40,"generate",NA,"within","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","self-paced","yes","younger","immediate" +702,"1",1,1093,555,0.58,0.00108888888888889,18,40,"read",NA,"within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","self-paced","yes","younger","immediate" +702,"1",2,1094,556,0.5,0.00142222222222222,18,40,"generate",NA,"within","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","self-paced","yes","older","immediate" +702,"1",2,1095,556,0.36,0.000672222222222222,18,40,"read",NA,"within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","self-paced","yes","older","immediate" +738,"1",1,1096,557,0.95,0.000223391151204524,36,50,"generate",NA,"within","mixed","words","recognition","source","low","intentional","semantic","writing/typing","cue only","full","self-paced","yes","younger","immediate" +738,"1",1,1097,557,0.72,0.000677675845204443,36,100,"generate",NA,"within","mixed","words","recognition","source","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","yes","younger","immediate" +738,"1",1,1098,557,0.61,0.000878808285020297,36,50,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","semantic","covert/thinking","word fragment","full","self-paced","yes","younger","immediate" +745,"1",1,1099,558,0.162,0.000423646549109065,26,8,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","immediate" +745,"1",1,1100,558,0.038,0.000143587572232117,26,8,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","immediate" +745,"1",1,1101,559,0.806,0.00112991809034689,26,8,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","immediate" +745,"1",1,1102,559,0.457,0.00174369507725389,26,8,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","immediate" +745,"2a",1,1103,560,0.262,0.000753133798350955,30,8,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","immediate" +745,"2a",1,1104,560,0.071,0.000180532028719863,30,8,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","immediate" +745,"2b",1,1105,561,0.614,0.00113912614952628,54,8,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","long" +745,"2b",1,1106,561,0.355,0.000769632077661941,54,8,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","long" +762,"1",1,1107,562,0.59,0.000795737526219401,52,20,"generate","low","between","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +762,"1",1,1108,562,0.755,0.000570930315739496,52,20,"generate","high","between","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +762,"1",2,1109,562,0.445,0.00077336168389306,38,40,"read","low","between","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +762,"1",1,1110,563,0.63,0.000984615384615385,26,20,"generate","low","between","pure","words","recognition","font color","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +762,"1",1,1111,563,0.54,0.000753846153846154,26,20,"generate","high","between","pure","words","recognition","font color","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +762,"1",2,1112,563,0.67,0.00118421052631579,19,40,"read","low","between","pure","words","recognition","font color",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +762,"1",3,1113,564,0.57,0.000753846153846154,26,20,"generate","low","between","pure","words","recognition","background color","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +762,"1",3,1114,564,0.49,0.00065,26,20,"generate","high","between","pure","words","recognition","background color","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +762,"1",4,1115,564,0.56,0.000889473684210526,19,40,"read","low","between","pure","words","recognition","background color",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +762,"1a",1,1116,565,0.73,0.000946038011541772,32,16,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +762,"1a",1,1117,565,0.62,0.0011865145682052,32,16,"read",NA,"within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +762,"1a",1,1118,566,0.63,0.0015125,32,16,"generate",NA,"within","pure","words","recognition","background color","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +762,"1a",1,1119,566,0.62,8e-04,32,16,"read",NA,"within","pure","words","recognition","background color",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +762,"2",1,1120,567,0.76,0.00090916033849736,26,20,"generate","low","within","pure","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"2",1,1121,567,0.61,0.00127347975878325,26,20,"read","low","within","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"2",2,1122,568,0.73,0.00100594121120931,26,20,"generate","high","within","pure","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"2",2,1123,568,0.61,0.00127347975878325,26,20,"read","high","within","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"2",1,1124,569,0.61,0.00124615384615385,26,20,"generate","low","within","pure","words","recognition","font color","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"2",1,1125,569,0.7,0.00153846153846154,26,20,"read","low","within","pure","words","recognition","font color",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"2",2,1126,570,0.53,0.000984615384615385,26,20,"generate","high","within","pure","words","recognition","font color","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"2",2,1127,570,0.67,0.000753846153846154,26,20,"read","high","within","pure","words","recognition","font color",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"3",1,1128,571,0.73,0.000962516388027311,28,20,"generate","low","within","pure","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"3",1,1129,571,0.54,0.00123425537637249,28,20,"read","low","within","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"3",2,1130,572,0.78,0.000805592121967955,28,20,"generate","high","within","pure","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"3",2,1131,572,0.54,0.00123425537637249,28,20,"read","high","within","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"3",1,1132,573,0.81,0.000432142857142857,28,20,"generate","low","within","pure","words","recognition","location","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"3",1,1133,573,0.74,0.000603571428571429,28,20,"read","low","within","pure","words","recognition","location",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"3",2,1134,574,0.75,0.000514285714285714,28,20,"generate","high","within","pure","words","recognition","location","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +762,"3",2,1135,574,0.7,0.000803571428571429,28,20,"read","high","within","pure","words","recognition","location",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" +767,"1",1,1136,583,0.273,0.000402769978970339,49,16,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","antonym","verbal/speaking","cue only","full","timed","no","younger","immediate" +767,"1",2,1137,583,0.381,0.000506670644509153,67,16,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","antonym","verbal/speaking","cue only","full","timed","no","younger","immediate" +781,"1",1,1138,584,0.84,0.000253125,32,46,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +781,"1",1,1139,584,0.52,0.000528125,32,46,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" +797,"1",1,1140,585,0.87,0.0004830643975113,24,50,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","synonym","covert/thinking","word fragment","full","timed","yes","younger","immediate" +797,"1",1,1141,585,0.65,0.00107908058934245,24,50,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","synonym","covert/thinking","word fragment","full","timed","yes","younger","immediate" +816,"1.1a",1,1142,586,0.92,0.000286867326628475,40,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","synonym","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +816,"1.1a",1,1143,586,0.67,0.00084255871370062,40,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","synonym","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +816,"1.1b",1,1144,587,0.86,0.000406047374689354,41,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","synonym","verbal/speaking","word fragment","full","timed","yes","younger","long" +816,"1.1b",1,1145,587,0.56,0.000917002869753181,41,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","synonym","verbal/speaking","word fragment","full","timed","yes","younger","long" +816,"1.2a",1,1146,588,0.88,0.000561062544109181,22,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word fragment","full","timed","yes","younger","immediate" +816,"1.2a",1,1147,588,0.6,0.00140488494948208,22,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word fragment","full","timed","yes","younger","immediate" +816,"1.2b",1,1148,589,0.85,0.000634498444671833,24,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word fragment","divided","timed","yes","younger","immediate" +816,"1.2b",1,1149,589,0.53,0.00134177578505822,24,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word fragment","divided","timed","yes","younger","immediate" +816,"1.3a",1,1150,590,0.69,0.000713254176697615,50,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"1.3a",1,1151,590,0.57,0.000825212162228509,50,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"1.3a",1,1152,591,0.59,0.000820649139483445,50,20,"generate",NA,"within","mixed","words","recognition","font color","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"1.3a",1,1153,591,0.68,0.000729459348589701,50,20,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"1.3b",1,1154,592,0.71,0.000699949082840342,48,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"1.3b",1,1155,592,0.6,0.000842385634494674,48,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"1.3b",1,1156,593,0.73,0.000660466954788024,48,20,"generate",NA,"within","mixed","words","recognition","location","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"1.3b",1,1157,593,0.68,0.000752974720770273,48,20,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"1.3c",1,1158,594,0.72,0.000752926802129705,42,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"1.3c",1,1159,594,0.6,0.000931960843293269,42,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"1.3c",1,1160,595,0.52,0.000924692544246027,42,20,"generate",NA,"within","mixed","words","recognition","background color","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"1.3c",1,1161,595,0.55,0.000940549285663635,42,20,"read",NA,"within","mixed","words","recognition","background color",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.1",1,1162,596,0.69,0.000713254176697615,50,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.1",1,1163,596,0.57,0.000825212162228509,50,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.1",2,1164,597,0.61,0.00084979298030137,47,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.1",2,1165,597,0.49,0.000821179572419141,47,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.1",1,1166,598,0.59,0.000820649139483445,50,20,"generate",NA,"within","mixed","words","recognition","font color","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.1",1,1167,598,0.68,0.000729459348589701,50,20,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.1",2,1168,599,0.52,0.000849480164211435,47,20,"generate",NA,"within","mixed","words","recognition","font color","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.1",2,1169,599,0.61,0.00084979298030137,47,20,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.2",1,1170,600,0.71,0.000699949082840342,48,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.2",1,1171,600,0.6,0.000842385634494674,48,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.2",2,1172,601,0.58,0.00109308567475003,34,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.2",2,1173,601,0.46,0.000987314667440042,34,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.2",1,1174,602,0.73,0.000660466954788024,48,20,"generate",NA,"within","mixed","words","recognition","location","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.2",1,1175,602,0.68,0.000752974720770273,48,20,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.2",2,1176,603,0.66,0.00100683050008629,34,20,"generate",NA,"within","mixed","words","recognition","location","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"2.2",2,1177,603,0.75,0.000795213269419232,34,20,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" +816,"3",1,1178,604,0.87,0.0004830643975113,24,50,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","immediate" +816,"3",1,1179,604,0.65,0.00107908058934245,24,50,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","immediate" +831,"1",1,1180,605,0.25,0.000648717948001455,12,24,"generate",NA,"within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +831,"1",1,1181,605,0.18,0.000409607668892396,12,24,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +831,"2",1,1182,606,0.39,0.00145637506202935,16,12,"generate","low","within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +831,"2",1,1183,606,0.24,0.000720364740979009,16,12,"read","low","within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +831,"2",1,1184,607,0.18,0.000483000757986598,16,12,"generate","high","within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +831,"2",1,1185,607,0.16,0.000416450360439577,16,12,"read","high","within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +831,"3",1,1186,608,0.43,0.00173799362186167,12,12,"generate","low","within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +831,"3",1,1187,608,0.26,0.000861204725854024,12,12,"read","low","within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +831,"3",1,1188,609,0.22,0.000674752524503319,12,12,"generate","high","within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +831,"3",1,1189,609,0.12,0.000321530124072486,12,12,"read","high","within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +854,"1",1,1190,610,0.58,0.00130161397128949,62,6,"generate","low","within","mixed","words","recognition","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +854,"1",1,1191,610,0.2,0.000373366032411905,62,6,"read","low","within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +854,"1",1,1192,611,0.76,0.000913803953695206,62,6,"generate","high","within","mixed","words","recognition","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +854,"1",1,1193,611,0.67,0.0011766754178542,62,6,"read","high","within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +854,"1",1,1194,612,0.79,0.000812063537823934,62,6,"generate","low","within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +854,"1",1,1195,612,0.21,0.000399462653942955,62,6,"read","low","within","mixed","words","recognition","source",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +854,"1",1,1196,613,0.68,0.00115269511961636,62,6,"generate","high","within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +854,"1",1,1197,613,0.39,0.000977988696597485,62,6,"read","high","within","mixed","words","recognition","source",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +861,"1a",1,1198,614,0.7,0.00112032467016286,28,16,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","synonym","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +861,"1a",1,1199,614,0.56,0.00132806320845584,28,16,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","synonym","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +861,"1b",1,1200,615,0.69,0.00125502257588276,24,16,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +861,"1b",1,1201,615,0.74,0.00109055986730372,24,16,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +861,"2a",1,1202,616,0.69,0.000845585193207683,30,72,"generate",NA,"between","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +861,"2a",2,1203,616,0.66,0.000899464543253568,30,72,"read",NA,"between","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +905,"2",1,1204,617,0.56,0.00110086453772964,28,36,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +905,"2",2,1205,617,0.72,0.000879574783424165,28,36,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +905,"2",3,1206,618,0.38,0.000798227951323498,28,36,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","long" +905,"2",4,1207,618,0.31,0.000597809306081094,28,36,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","long" +905,"2",3,1208,619,0.86,0.000289285714285714,28,36,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","long" +905,"2",4,1209,619,0.73,0.00115714285714286,28,36,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","long" +982,"1",1,1210,620,0.85,0.000520372671041832,31,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +982,"1",1,1211,620,0.61,0.00109256634811495,31,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +982,"1",1,1212,621,0.77,0.00075131684437661,31,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +982,"1",1,1213,621,0.58,0.00111102907359971,31,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +982,"1",1,1214,622,0.62,0.00108241265765244,31,24,"generate",NA,"within","mixed","words","recognition","source","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +982,"1",1,1215,622,0.65,0.00104073634375156,31,24,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" +982,"1",1,1216,623,0.65,0.00104073634375156,31,24,"generate",NA,"within","mixed","words","recognition","source","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +982,"1",1,1217,623,0.59,0.00110691456128346,31,24,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" +999,"1",1,1218,358,0.9,0.000290909090909091,22,12,"generate","low","within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +999,"1",1,1219,358,0.81,0.00055,22,12,"generate","low","within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"1",1,1220,358,0.64,0.0022,22,12,"read","low","within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"1",1,1221,359,0.92,0.00055,22,12,"generate","high","within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +999,"1",1,1222,359,0.71,0.00131363636363636,22,12,"generate","high","within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"1",1,1223,359,0.55,0.00284090909090909,22,12,"read","high","within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"1",1,1224,361,0.89,0.000768181818181818,22,12,"generate","low","within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +999,"1",1,1225,361,0.68,0.00240454545454545,22,12,"generate","low","within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"1",1,1226,361,0.75,0.00284090909090909,22,12,"read","low","within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"1",1,1227,362,0.89,0.00102272727272727,22,12,"generate","high","within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +999,"1",1,1228,362,0.67,0.00240454545454545,22,12,"generate","high","within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"1",1,1229,362,0.76,0.00382272727272727,22,12,"read","high","within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"1",1,1230,364,0.9,0.00055,22,12,"generate","low","within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +999,"1",1,1231,364,0.83,0.00147272727272727,22,12,"generate","low","within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"1",1,1232,364,0.62,0.00261818181818182,22,12,"read","low","within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"1",1,1233,365,0.87,0.00131363636363636,22,12,"generate","high","within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +999,"1",1,1234,365,0.57,0.00331363636363636,22,12,"generate","high","within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"1",1,1235,365,0.3,0.00284090909090909,22,12,"read","high","within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"2",1,1236,366,0.84,0.0018375,24,24,"generate",NA,"within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +999,"2",1,1237,366,0.86,0.00135,24,24,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"2",1,1238,366,0.62,0.0024,24,24,"read",NA,"within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"2",1,1239,367,0.8,0.00166666666666667,24,24,"generate",NA,"within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +999,"2",1,1240,367,0.68,0.00201666666666667,24,24,"generate",NA,"within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"2",1,1241,367,0.63,0.0024,24,24,"read",NA,"within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"2",1,1242,368,0.95,0.00015,24,24,"generate",NA,"within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +999,"2",1,1243,368,0.91,0.000416666666666667,24,24,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"2",1,1244,368,0.81,0.00106666666666667,24,24,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"3",1,1245,369,0.8,0.00201666666666667,24,24,"generate",NA,"within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +999,"3",1,1246,369,0.84,0.000704166666666667,24,24,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"3",1,1247,369,0.6,0.00106666666666667,24,24,"read",NA,"within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"3",1,1248,370,0.79,0.00106666666666667,24,24,"generate",NA,"within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +999,"3",1,1249,370,0.66,0.00106666666666667,24,24,"generate",NA,"within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"3",1,1250,370,0.71,0.00166666666666667,24,24,"read",NA,"within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"3",1,1251,371,0.92,0.000266666666666667,24,24,"generate",NA,"within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +999,"3",1,1252,371,0.88,0.000416666666666667,24,24,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +999,"3",1,1253,371,0.75,0.00135,24,24,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1152,"1",1,1254,624,0.82,0.00125,32,12,"generate",NA,"within","pure","words","recognition","item","medium","intentional","definitions","covert/thinking","word fragment","full","timed","yes","younger","immediate" +1152,"1",1,1255,624,0.55,0.0018,32,12,"read",NA,"within","pure","words","recognition","item",NA,"intentional","definitions","covert/thinking","word fragment","full","timed","yes","younger","immediate" +1152,"1",2,1256,625,0.74,0.00125,32,12,"generate",NA,"within","pure","words","recognition","item","medium","intentional","definitions","covert/thinking","word fragment","full","timed","yes","older","immediate" +1152,"1",2,1257,625,0.49,0.0021125,32,12,"read",NA,"within","pure","words","recognition","item",NA,"intentional","definitions","covert/thinking","word fragment","full","timed","yes","older","immediate" +1152,"2b",1,1258,626,0.87,0.000672222222222222,18,12,"generate",NA,"within","pure","words","recognition","item","medium","intentional","definitions","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1152,"2b",1,1259,626,0.61,0.0018,18,12,"read",NA,"within","pure","words","recognition","item",NA,"intentional","definitions","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1152,"2b",2,1260,627,0.86,8e-04,18,12,"generate",NA,"within","pure","words","recognition","item","medium","intentional","definitions","verbal/speaking","word fragment","full","timed","yes","older","immediate" +1152,"2b",2,1261,627,0.63,0.00222222222222222,18,12,"read",NA,"within","pure","words","recognition","item",NA,"intentional","definitions","verbal/speaking","word fragment","full","timed","yes","older","immediate" +1444,"1",1,1262,628,0.82,0.000527205553620001,38,24,"generate","low","between","pure","words","cued recall","item","high","incidental",NA,"verbal/speaking","word stem","full","self-paced","no","younger","long" +1444,"1",2,1263,628,0.97,0.000305880960843912,20,24,"generate","high","between","pure","words","cued recall","item","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","no","younger","long" +1444,"1",3,1264,628,0.65,0.00132918988587701,20,24,"read","low","between","pure","words","cued recall","item",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","no","younger","long" +1445,"1",1,1265,629,0.68,0.00269828841576483,24,5,"generate",NA,"within","pure","numbers","free recall","item","low","intentional",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1445,"1",1,1266,629,0.38,0.00221323830214398,24,5,"read",NA,"within","pure","numbers","free recall","item",NA,"intentional",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1445,"2",1,1267,630,0.55,0.00364046988352862,16,5,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1445,"2",1,1268,630,0.42,0.00299373823192371,16,5,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1445,"2",2,1269,631,0.49,0.003459856891865,16,5,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" +1445,"2",2,1270,631,0.24,0.00135313643836072,16,5,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" +1445,"2",3,1271,632,0.4,0.00282440780440771,16,5,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" +1445,"2",3,1272,632,0.1,0.000479346542582598,16,5,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" +1445,"2",1,1273,633,0.81,0.00208003421578239,16,5,"generate",NA,"within","pure","numbers","recognition","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1445,"2",1,1274,633,0.81,0.00208003421578239,16,5,"read",NA,"within","pure","numbers","recognition","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1445,"2",2,1275,634,0.75,0.00264874504444061,16,5,"generate",NA,"within","pure","numbers","recognition","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" +1445,"2",2,1276,634,0.61,0.00358041310123274,16,5,"read",NA,"within","pure","numbers","recognition","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" +1445,"2",3,1277,635,0.69,0.0031527259644885,16,5,"generate",NA,"within","pure","numbers","recognition","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" +1445,"2",3,1278,635,0.52,0.00357909512043901,16,5,"read",NA,"within","pure","numbers","recognition","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" +1447,"1",1,1279,636,0.4,0.00105228171721961,20,30,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +1447,"1",1,1280,636,0.26,0.000567411410100094,20,30,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +1447,"2",1,1281,637,0.32,0.000773400682312095,20,30,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +1447,"2",1,1282,637,0.26,0.000567411410100094,20,30,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +1447,"3",1,1283,638,0.37,0.0011384626233811,20,15,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +1447,"3",1,1284,638,0.28,0.000758957065330976,20,15,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +1447,"3",2,1285,639,0.68,0.00143837817727036,20,15,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +1447,"3",2,1286,639,0.65,0.00152144455310718,20,15,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" +1448,"4",1,1287,640,0.355,0.0010930390922655,11,24,"generate",NA,"within","mixed","words","free recall","item","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",1,1288,640,0.21,0.000506664153269232,11,24,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",2,1289,641,0.316,0.000923975755467458,11,24,"generate",NA,"within","mixed","words","free recall","item","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",2,1290,641,0.228,0.000569484629531175,11,24,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",3,1291,642,0.581,0.00165044752056318,11,24,"generate",NA,"within","pure","words","free recall","item","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",3,1292,642,0.172,0.000388051675693025,11,24,"read",NA,"within","pure","words","free recall","item",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",4,1293,643,0.453,0.00147003840025331,11,24,"generate",NA,"within","pure","words","free recall","item","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",4,1294,643,0.267,0.000718476061226675,11,24,"read",NA,"within","pure","words","free recall","item",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",1,1295,644,0.331,0.000988995031456238,11,24,"generate",NA,"within","mixed","words","free recall","cue word","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",1,1296,644,0.191,0.000444913029348881,11,24,"read",NA,"within","mixed","words","free recall","cue word",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",2,1297,645,0.313,0.000911032650362313,11,24,"generate",NA,"within","mixed","words","free recall","cue word","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",2,1298,645,0.254,0.00066703012957821,11,24,"read",NA,"within","mixed","words","free recall","cue word",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",3,1299,646,0.53,0.0016351765182408,11,24,"generate",NA,"within","pure","words","free recall","cue word","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",3,1300,646,0.204,0.000486645931881284,11,24,"read",NA,"within","pure","words","free recall","cue word",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",4,1301,647,0.412,0.00132741185687012,11,24,"generate",NA,"within","pure","words","free recall","cue word","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1448,"4",4,1302,647,0.235,0.000594990444626934,11,24,"read",NA,"within","pure","words","free recall","cue word",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" +1449,"1",1,1303,648,0.56,0.00162497239126158,24,12,"generate",NA,"within","mixed","words",NA,"item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1449,"1",1,1304,648,0.44,0.00140313125293507,24,12,"read",NA,"within","mixed","words",NA,"item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1450,"1",1,1305,649,0.9,0.000568185860784074,24,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1450,"1",1,1306,649,0.79,0.00101198665075202,24,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1450,"2",1,1307,650,0.88,0.000641800867800594,24,12,"generate","high","within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1450,"2",1,1308,650,0.79,0.00101198665075202,24,12,"read","high","within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1450,"2",1,1309,651,0.81,0.000926673432044785,24,12,"generate","low","within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1450,"2",1,1310,651,0.56,0.00162497239126158,24,12,"read","low","within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1450,"3",1,1311,652,0.77,0.00109689403923499,24,12,"generate","high","within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","long" +1450,"3",1,1312,652,0.66,0.00149406377136989,24,12,"read","high","within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","long" +1450,"3",1,1313,653,0.67,0.00146636286407761,24,12,"generate","low","within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","long" +1450,"3",1,1314,653,0.54,0.001615722673919,24,12,"read","low","within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","long" +1450,"4",1,1315,654,0.328,0.00105065804611659,20,12,"generate","high","within","mixed","words","free recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +1450,"4",1,1316,654,0.228,0.000613069028475398,20,12,"read","high","within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +1450,"4",2,1317,655,0.407,0.0014082867509981,20,12,"generate","low","within","mixed","words","free recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +1450,"4",2,1318,655,0.274,0.000803977600790431,20,12,"read","low","within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" +1451,"1",1,1319,656,0.77,0.00125207338734244,20,11,"generate","low","between","pure","words","cued recall","item","low","intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1451,"1",2,1320,656,0.695,0.00158425003302347,20,11,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1451,"1",1,1321,657,0.909,0.000612467579438924,20,11,"generate","high","between","pure","words","cued recall","item","low","intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1451,"1",2,1322,657,0.709,0.00152835988041879,20,11,"read","high","between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1451,"2",1,1323,658,0.527,0.00183009346766694,20,11,"generate","low","between","pure","words","cued recall","cue word","low","intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1451,"2",2,1324,658,0.5,0.0017827853501076,20,11,"read","low","between","pure","words","cued recall","cue word",NA,"intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1451,"2",1,1325,659,0.682,0.00163259380802793,20,11,"generate","high","between","pure","words","cued recall","cue word","low","intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1451,"2",2,1326,659,0.523,0.00182457992695315,20,11,"read","high","between","pure","words","cued recall","cue word",NA,"intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1452,"1",1,1327,660,0.645625,0.00173496789714787,12,16,"generate","low","within","pure","words","cued recall","item","high","intentional","semantic","verbal/speaking","sentence completion","full","timed","yes","younger","immediate" +1452,"1",1,1328,660,0.28125,0.000865379959559237,12,16,"read","low","within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","sentence completion","full","timed","yes","younger","immediate" +1452,"1",2,1329,661,0.208125,0.00055755447186366,12,16,"generate","high","within","pure","words","cued recall","item","high","intentional","unrelated","verbal/speaking","sentence completion","full","timed","yes","younger","immediate" +1452,"1",2,1330,661,0.265625,0.000794458379436909,12,16,"read","high","within","pure","words","cued recall","item",NA,"intentional","unrelated","verbal/speaking","sentence completion","full","timed","yes","younger","immediate" +1453,"1",1,1331,662,0.58,0.00196923076923077,13,10,"generate",NA,"within","mixed","words","recognition","item","high","incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1453,"1",1,1332,662,0.35,0.00173076923076923,13,10,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1453,"1",1,1333,663,0.37,0.00307692307692308,13,10,"generate",NA,"within","mixed","non-words","recognition","item","high","incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1453,"1",1,1334,663,0.33,0.00307692307692308,13,10,"read",NA,"within","mixed","non-words","recognition","item",NA,"incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1453,"2",1,1335,664,0.69,0.00240666666666667,15,10,"generate",NA,"between","pure","words","recognition","item","high","incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1453,"2",2,1336,664,0.4,0.00352666666666667,15,10,"read",NA,"between","pure","words","recognition","item",NA,"incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1453,"2",1,1337,665,0.3,0.00322666666666667,15,10,"generate",NA,"between","pure","non-words","recognition","item","high","incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1453,"2",2,1338,665,0.28,0.000806666666666667,15,10,"read",NA,"between","pure","non-words","recognition","item",NA,"incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1454,"1",1,1339,666,0.35,0.00126215408572274,20,10,"generate","low","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","letter transposition","divided","timed","yes","younger","short" +1454,"1",2,1340,666,0.23,0.000679359112776965,20,10,"read","low","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","letter transposition","divided","timed","yes","younger","short" +1454,"1",1,1341,667,0.34,0.00121108500252425,20,10,"generate","high","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","letter transposition","divided","timed","yes","younger","short" +1454,"1",2,1342,667,0.27,0.000860603508859858,20,10,"read","high","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","letter transposition","divided","timed","yes","younger","short" +1454,"1",1,1343,668,0.36,0.00131291189821108,20,10,"generate","low","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","sentence completion","divided","timed","yes","younger","short" +1454,"1",2,1344,668,0.29,0.000957784263754569,20,10,"read","low","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","sentence completion","divided","timed","yes","younger","short" +1454,"1",1,1345,669,0.53,0.00192621493609153,20,10,"generate","high","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","sentence completion","divided","timed","yes","younger","short" +1454,"1",2,1346,669,0.4,0.00150863077542918,20,10,"read","high","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","sentence completion","divided","timed","yes","younger","short" +1455,"1",1,1347,670,0.39,0.00125218222142207,20,14,"generate","low","between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"1",2,1348,670,0.3,0.000863431265326123,20,14,"read","low","between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"1",1,1349,671,0.47,0.00153384155601851,20,14,"generate","high","between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"1",2,1350,671,0.41,0.00133224176259285,20,14,"read","high","between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"1",3,1351,672,0.9,0.000583766739733228,20,14,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"1",4,1352,672,0.82,0.000908510150542145,20,14,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"1",3,1353,673,0.85,0.000780557598872337,20,14,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"1",4,1354,673,0.5,0.00160465943297614,20,14,"read","high","between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"2",1,1355,674,0.27,0.000484402833615334,40,14,"generate","low","between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"2",2,1356,674,0.31,0.000595494377986952,40,14,"read","low","between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"2",1,1357,675,0.53,0.00108419726806721,40,14,"generate","high","between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"2",2,1358,675,0.38,0.000795136931676846,40,14,"read","high","between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"2",3,1359,676,0.71,0.00105214886887039,32,14,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","long" +1455,"2",4,1360,676,0.48,0.00119638829839465,32,14,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","long" +1455,"2",3,1361,677,0.48,0.00119638829839465,32,14,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","long" +1455,"2",4,1362,677,0.29,0.000629448615814405,32,14,"read","high","between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","long" +1455,"3",1,1363,678,0.36,0.00046347485729449,72,14,"generate","low","between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"3",2,1364,678,0.47,0.0006318609223835,72,14,"read","low","between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"3",1,1365,679,0.51,0.000668542322469078,72,14,"generate","high","between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"3",2,1366,679,0.44,0.000593865670105506,72,14,"read","high","between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"3",3,1367,680,0.96,0.000145756049272542,80,14,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"3",4,1368,680,0.84,0.000309642376785892,80,14,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"3",3,1369,681,0.86,0.000278270310618296,80,14,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"3",4,1370,681,0.63,0.000604337835392008,80,14,"read","high","between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"4",1,1371,682,0.41,0.00133224176259285,20,14,"generate",NA,"within","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"4",1,1372,682,0.13,0.000282664716379196,20,14,"read",NA,"within","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"4",2,1373,683,0.86,0.000739266325222654,20,14,"generate",NA,"within","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1455,"4",2,1374,683,0.48,0.00156001641853688,20,14,"read",NA,"within","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" +1456,"1",1,1375,684,0.569,0.00186214264099333,18,12,"generate",NA,"within","mixed","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1456,"1",1,1376,684,0.268,0.000813378036841678,18,12,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1456,"2",1,1377,685,0.592,0.00202424320458542,18,10,"generate","low","within","mixed","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1456,"2",1,1378,685,0.273,0.000914972899109627,18,10,"read","low","within","mixed","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1456,"2",1,1379,686,0.523,0.00200412512715549,18,10,"generate","high","within","mixed","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1456,"2",1,1380,686,0.24,0.000755831296889721,18,10,"read","high","within","mixed","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1457,"2R",1,1381,687,0.75,0.00128865980083696,16,15,"generate",NA,"within","mixed","words","recognition","item","medium","incidental","antonym","verbal/speaking","cue only","full","timed","no","younger","immediate" +1457,"2R",1,1382,687,0.654,0.00164852923512303,16,15,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","antonym","verbal/speaking","cue only","full","timed","no","younger","immediate" +1457,"2R",1,1383,688,0.73,0.00137597903111027,16,15,"generate",NA,"within","mixed","words","recognition","source","medium","incidental","antonym","verbal/speaking","cue only","full","timed","no","younger","immediate" +1457,"2R",1,1384,688,0.71,0.0014582338356993,16,15,"read",NA,"within","mixed","words","recognition","source",NA,"incidental","antonym","verbal/speaking","cue only","full","timed","no","younger","immediate" +1458,"2",1,1385,689,0.41,0.0010829506080182,24,20,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional",NA,"verbal/speaking","word stem","full","timed","yes","younger","immediate" +1458,"2",1,1386,689,0.22,0.000443978889313459,24,20,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","word stem","full","timed","yes","younger","immediate" +1459,"1",1,1387,690,0.837,0.00135669444444444,36,10,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","antonym","verbal/speaking","word fragment","full","self-paced","yes","younger","short" +1459,"1",1,1388,690,0.608,0.001521,36,10,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","self-paced","yes","younger","short" +1459,"1",2,1389,691,0.778,0.00121212121212121,33,10,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","antonym","verbal/speaking","word fragment","full","self-paced","yes","younger","short" +1459,"1",2,1390,691,0.554,0.00189393939393939,33,10,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","self-paced","yes","younger","short" +1460,"1",1,1391,692,0.77,0.00104649574225132,16,24,"generate","low","between","pure","words","cued recall","item","low","intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1460,"1",2,1392,692,0.69,0.00134003223489858,16,24,"read","low","between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1460,"1",3,1393,693,0.78,0.00100612002223886,16,24,"generate","high","between","pure","words","cued recall","item","low","intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1460,"1",4,1394,693,0.66,0.00142541696778751,16,24,"read","high","between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1460,"1",5,1395,694,0.76,0.00108645212805488,16,24,"generate",NA,"between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1460,"1",6,1396,694,0.7,0.00130780781978892,16,24,"read",NA,"between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1460,"2",1,1397,695,0.84,0.000932768439062087,11,15,"generate","low","between","pure","words","cued recall","item","low","intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1460,"2",2,1398,695,0.69,0.00163632957912,11,15,"read","low","between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1460,"2",3,1399,696,0.83,0.000981180222491805,11,15,"generate","high","between","pure","words","cued recall","item","low","intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1460,"2",4,1400,696,0.65,0.00177015214744703,11,15,"read","high","between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" +1460,"2",1,1401,697,0.5,0.00181954278873119,11,15,"generate","low","between","pure","words","cued recall","item","low","intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","long" +1460,"2",2,1402,697,0.26,0.000790456546063613,11,15,"read","low","between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","long" +1460,"2",3,1403,698,0.4,0.0014659257055345,11,15,"generate","high","between","pure","words","cued recall","item","low","intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","long" +1460,"2",4,1404,698,0.28,0.000883022306841228,11,15,"read","high","between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","long" +1461,"1",1,1405,699,0.36,0.00145943586259934,15,10,"generate",NA,"within","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"1",1,1406,699,0.18,0.000538693758538642,15,10,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"3",1,1407,700,0.319,0.00126334831844911,20,8,"generate","low","within","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"3",1,1408,700,0.1,0.000293071954767802,20,8,"read","low","within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"3",1,1409,701,0.175,0.000534897942610358,20,8,"generate","high","within","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"3",1,1410,701,0.138,0.00040280126130783,20,8,"read","high","within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"3",1,1411,702,0.85,0.0010426161787894,20,8,"generate","low","within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"3",1,1412,702,0.638,0.00212251743036805,20,8,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"3",1,1413,703,0.763,0.00154564524796609,20,8,"generate","high","within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"3",1,1414,703,0.6,0.00220545505734616,20,8,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"4",1,1415,704,0.3,0.000953534904726992,10,16,"generate","low","between","pure","words","free recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"4",2,1416,704,0.231,0.000646970169737329,10,16,"read","low","between","pure","words","free recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"4",1,1417,705,0.113,0.000270980237781153,10,16,"generate","high","between","pure","words","free recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"4",2,1418,705,0.119,0.000285031012543448,10,16,"read","high","between","pure","words","free recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"4",1,1419,706,0.85,0.000862012930923389,10,16,"generate","low","between","pure","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"4",2,1420,706,0.706,0.00153142283783426,10,16,"read","low","between","pure","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"4",1,1421,707,0.75,0.00133891849241226,10,16,"generate","high","between","pure","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1461,"4",2,1422,707,0.65,0.00172401095583988,10,16,"read","high","between","pure","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" +1463,"1",1,1423,708,0.454,0.002048,8,25,"generate",NA,"between","pure","words","free recall","item","low","incidental","semantic","verbal/speaking","cue only","full","timed","no","younger","immediate" +1463,"1",2,1424,708,0.3,0.002850125,8,25,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","verbal/speaking","cue only","full","timed","no","younger","immediate" +1464,"1",1,1425,709,0.35,0.00333333333333333,12,8,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" +1464,"1",1,1426,709,0.21,0.0027,12,8,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" +1464,"1",1,1427,710,0.21,0.00440833333333333,12,8,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" +1464,"1",1,1428,710,0.08,0.0012,12,8,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" +1464,"1",1,1429,711,0.13,0.00140833333333333,12,8,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" +1464,"1",1,1430,711,0.08,0.0012,12,8,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" +1464,"1",1,1431,712,0.1,0.00440833333333333,12,8,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" +1464,"1",1,1432,712,0.1,0.00333333333333333,12,8,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" +1464,"2",1,1433,713,0.48,0.001225,16,6,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1464,"2",1,1434,713,0.25,0.0025,16,6,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1464,"2",1,1435,714,0.29,0.0025,16,6,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1464,"2",1,1436,714,0.19,0.001225,16,6,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1464,"2",1,1437,715,0.59,0.0025,16,6,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1464,"2",1,1438,715,0.31,0.004225,16,6,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1464,"2",1,1439,716,0.48,0.00180625,16,6,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1464,"2",1,1440,716,0.31,0.001225,16,6,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1465,"2",1,1441,717,0.039,0.000140488643858,12,15,"generate",NA,"within","mixed","non-words","free recall","item","high","intentional",NA,"verbal/speaking","letter transposition","full","timed","no","younger","immediate" +1465,"2",1,1442,717,0.085,0.000216866422744824,12,15,"read",NA,"within","mixed","non-words","free recall","item",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","no","younger","immediate" +1466,"1",1,1443,718,0.42,0.00174396360173455,16,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional",NA,"verbal/speaking","word stem","full","timed","no","younger","immediate" +1466,"1",1,1444,718,0.25,0.000837044180514044,16,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word stem","full","timed","no","younger","immediate" +1466,"1",2,1445,719,0.2,0.00060839682323773,16,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional",NA,"verbal/speaking","word stem","full","timed","no","older","immediate" +1466,"1",2,1446,719,0.18,0.000528518929677485,16,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word stem","full","timed","no","older","immediate" +1466,"1",3,1447,720,0.4,0.00125577777415851,16,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional",NA,"verbal/speaking","word stem","full","timed","no","younger","long" +1466,"1",3,1448,720,0.36,0.00109286222185988,16,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word stem","full","timed","no","younger","long" +1466,"1",4,1449,721,0.32,0.000922965182682021,16,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional",NA,"verbal/speaking","word stem","full","timed","no","older","long" +1466,"1",4,1450,721,0.29,0.000797255505091755,16,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word stem","full","timed","no","older","long" +1467,"1",1,1451,722,0.75,0.00234972366730021,12,6,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1467,"1",1,1452,722,0.36,0.00218050284766186,12,6,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1467,"1",2,1453,723,0.28,0.00150925892025627,12,6,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1467,"1",2,1454,723,0.22,0.00105854223484453,12,6,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1467,"2",1,1455,724,0.66,0.00576846354816151,24,3,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1467,"2",1,1456,724,0.38,0.00454914786754626,24,3,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1467,"2",1,1457,725,0.49,0.00595121151765886,24,3,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1467,"2",1,1458,725,0.17,0.00145043807509523,24,3,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1467,"3",1,1459,726,0.46,0.00291735152112187,12,6,"generate",NA,"within","pure","numbers","free recall","item","low","intentional",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1467,"3",1,1460,726,0.2,0.000926488384442939,12,6,"read",NA,"within","pure","numbers","free recall","item",NA,"intentional",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1468,"1",1,1461,727,0.762,0.00225096501214792,12,6,"generate","low","within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" +1468,"1",1,1462,727,0.307,0.00173189646308368,12,6,"read","low","within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" +1468,"1",2,1463,728,0.505,0.00312830209217885,12,6,"generate","high","within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" +1468,"1",2,1464,728,0.266,0.00139778471809584,12,6,"read","high","within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" +1468,"2",1,1465,729,0.456,0.00228002009657054,24,6,"generate","low","within","pure","numbers","free recall","cue word","low","incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" +1468,"2",1,1466,729,0.229,0.000883342602357207,24,6,"read","low","within","pure","numbers","free recall","cue word",NA,"incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" +1468,"2",2,1467,730,0.468,0.00233360726417561,24,6,"generate","high","within","pure","numbers","free recall","cue word","low","incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" +1468,"2",2,1468,730,0.167,0.000576338333862081,24,6,"read","high","within","pure","numbers","free recall","cue word",NA,"incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" +1468,"2",1,1469,731,0.656,0.00236023805039198,24,6,"generate","low","within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" +1468,"2",1,1470,731,0.328,0.00150431390771393,24,6,"read","low","within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" +1468,"2",2,1471,732,0.342,0.00159805486406143,24,6,"generate","high","within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" +1468,"2",2,1472,732,0.18,0.000634098694862471,24,6,"read","high","within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" +1468,"3",1,1473,733,0.613,0.00273469360849841,20,6,"generate","low","within","pure","numbers","free recall","item","low","incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" +1468,"3",1,1474,733,0.387,0.00207419951758513,20,6,"read","low","within","pure","numbers","free recall","item",NA,"incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" +1468,"3",2,1475,734,0.275,0.00126816467315788,20,6,"generate","high","within","pure","numbers","free recall","item","low","incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" +1468,"3",2,1476,734,0.297,0.00142302160998718,20,6,"read","high","within","pure","numbers","free recall","item",NA,"incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" +1469,"1",1,1477,735,0.39,0.000738108255596697,32,44,"generate",NA,"between","pure","words","free recall","item","high","intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" +1469,"1",2,1478,735,0.32,0.00056008973908654,32,44,"read",NA,"between","pure","words","free recall","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" +1469,"2a",1,1479,736,0.34,0.000568093898246645,36,42,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" +1469,"2a",2,1480,736,0.41,0.000729254208711281,36,42,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" +1469,"2b",1,1481,737,0.86,0.000623330369338189,16,42,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" +1469,"2b",2,1482,737,0.74,0.00105732065840132,16,42,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" +1470,"1",1,1483,738,0.6,0.000965928257942499,40,20,"generate",NA,"within","mixed","words","recognition","item","low","incidental",NA,"writing/typing","anagram","full","timed","no","younger","immediate" +1470,"1",1,1484,738,0.34,0.000607142154007979,40,20,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","no","younger","immediate" +1470,"1",2,1485,739,0.66,0.000898016307090657,40,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"writing/typing","anagram","full","timed","no","younger","immediate" +1470,"1",2,1486,739,0.44,0.000843360752244818,40,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","no","younger","immediate" +1470,"2",1,1487,740,0.61,0.000958747972703158,40,20,"generate","low","within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","timed","no","younger","immediate" +1470,"2",1,1488,740,0.34,0.000607142154007979,40,20,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","no","younger","immediate" +1470,"2",2,1489,741,0.66,0.000898016307090657,40,20,"generate","high","within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","timed","no","younger","immediate" +1470,"2",2,1490,741,0.34,0.000607142154007979,40,20,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","no","younger","immediate" +1471,"1",1,1491,742,0.18,0.002025,16,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1471,"1",1,1492,742,0.05,0.00075625,16,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1471,"2",1,1493,743,0.242,0.000660083333333333,12,50,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1471,"2",2,1494,743,0.2,0.000752083333333333,12,50,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1472,"1",1,1495,744,0.358,0.004056,24,5,"generate","low","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"1",1,1496,744,0.3,0.002904,24,5,"read","low","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"1",1,1497,745,0.634,0.0018375,24,5,"generate","high","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"1",1,1498,745,0.342,0.00166666666666667,24,5,"read","high","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"2",1,1499,746,0.382,0.001711125,32,5,"generate","low","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"2",1,1500,746,0.368,0.001953125,32,5,"read","low","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"2",1,1501,747,0.588,0.002080125,32,5,"generate","high","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"2",1,1502,747,0.318,0.001682,32,5,"read","high","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"2",2,1503,748,0.506,0.001922,32,5,"generate","low","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"2",2,1504,748,0.306,0.002415125,32,5,"read","low","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"2",2,1505,749,0.532,0.001891125,32,5,"generate","high","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"2",2,1506,749,0.306,8e-04,32,5,"read","high","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"3",1,1507,750,0.378,0.000945851851851852,54,5,"generate","low","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"3",1,1508,750,0.204,0.000654518518518519,54,5,"read","low","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"3",1,1509,751,0.526,0.001014,54,5,"generate","high","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"3",1,1510,751,0.24,0.000962666666666667,54,5,"read","high","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" +1472,"4",1,1511,752,0.6,0.00224266666666667,24,5,"generate","low","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","timed","yes","younger","immediate" +1472,"4",1,1512,752,0.558,0.0024,24,5,"read","low","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","timed","yes","younger","immediate" +1472,"4",1,1513,753,0.806,0.00138016666666667,24,5,"generate","high","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","timed","yes","younger","immediate" +1472,"4",1,1514,753,0.546,0.00375,24,5,"read","high","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","timed","yes","younger","immediate" +1473,"1",1,1515,754,0.632,0.000578338160908212,23,15,"generate",NA,"within","pure","numbers","free recall","item","low","intentional",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1473,"1",1,1516,754,0.406,0.000772946856038647,23,15,"read",NA,"within","pure","numbers","free recall","item",NA,"intentional",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" +1473,"1",1,1517,755,0.408666667,0.000429004828038647,23,15,"generate",NA,"within","pure","words","free recall","item","high","intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1473,"1",1,1518,755,0.234666667,0.000507130434782609,23,15,"read",NA,"within","pure","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1473,"1",2,1519,756,0.378666667,0.000598830413099415,19,15,"generate",NA,"within","pure","numbers","free recall","item","low","intentional",NA,"verbal/speaking","calculation","full","timed","yes","older","immediate" +1473,"1",2,1520,756,0.326,0.00116325146720468,19,15,"read",NA,"within","pure","numbers","free recall","item",NA,"intentional",NA,"verbal/speaking","calculation","full","timed","yes","older","immediate" +1473,"1",2,1521,757,0.228,0.000629146194994152,19,15,"generate",NA,"within","pure","words","free recall","item","high","intentional","antonym","verbal/speaking","word stem","full","timed","yes","older","immediate" +1473,"1",2,1522,757,0.102,0.000505473684210526,19,15,"read",NA,"within","pure","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word stem","full","timed","yes","older","immediate" +1474,"1",1,1523,758,0.84,9e-04,16,14,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1474,"1",1,1524,758,0.67,0.00225625,16,14,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1474,"1",1,1525,759,0.36,0.00140625,16,14,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1474,"1",1,1526,759,0.35,0.00140625,16,14,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" +1474,"2",1,1527,760,0.742,0.00161428046220556,18,9,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word stem","full","timed","no","younger","immediate" +1474,"2",1,1528,760,0.56,0.00216345662120962,18,9,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word stem","full","timed","no","younger","immediate" +1474,"2",1,1529,761,0.48,0.00202154051222739,18,9,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word stem","full","timed","no","younger","immediate" +1474,"2",1,1530,761,0.361,0.00146354467126032,18,9,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word stem","full","timed","no","younger","immediate" +1474,"2",1,1531,762,0.285,0.0010362388806843,18,9,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word stem","full","timed","no","younger","immediate" +1474,"2",1,1532,762,0.243,0.000817354605734414,18,9,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word stem","full","timed","no","younger","immediate" +1474,"2",2,1533,763,0.412,0.0017363955924796,18,9,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","covert/thinking","word stem","full","timed","no","younger","immediate" +1474,"2",2,1534,763,0.244,0.000822301442812225,18,9,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","covert/thinking","word stem","full","timed","no","younger","immediate" +1474,"2",2,1535,764,0.335,0.00131644637828836,18,9,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","covert/thinking","word stem","full","timed","no","younger","immediate" +1474,"2",2,1536,764,0.236,0.000783138680520348,18,9,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","covert/thinking","word stem","full","timed","no","younger","immediate" +1474,"2",2,1537,765,0.236,0.000783138680520348,18,9,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","covert/thinking","word stem","full","timed","no","younger","immediate" +1474,"2",2,1538,765,0.231,0.000759151950472002,18,9,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","covert/thinking","word stem","full","timed","no","younger","immediate" +1474,"3",1,1539,766,0.47,0.00078255116713397,48,20,"generate","high","within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" +1474,"3",1,1540,766,0.45,0.00075226658372279,48,20,"read","high","within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" +1474,"3",1,1541,767,0.46,0.00076797932675915,48,20,"generate","high","within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" +1474,"3",1,1542,767,0.35,0.000551815911529305,48,20,"read","high","within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" +1474,"3",2,1543,768,0.72,0.000680559410306137,48,20,"generate","low","within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" +1474,"3",2,1544,768,0.64,0.0008084665061602,48,20,"read","low","within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" +1474,"3",2,1545,769,0.57,0.000851814290448889,48,20,"generate","low","within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" +1474,"3",2,1546,769,0.53,0.000842144443997947,48,20,"read","low","within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" +1475,"1",1,1547,770,0.7,0.00143485358199369,22,12,"generate",NA,"within","mixed","words","recognition","item","low","incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" +1475,"1",1,1548,770,0.7,0.00143485358199369,22,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" +1475,"1",2,1549,771,0.78,0.00110385860673168,22,12,"generate",NA,"within","mixed","words","recognition","item","low","incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" +1475,"1",2,1550,771,0.69,0.00147020840764018,22,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" +1475,"1",1,1551,772,0.75,0.00123518735148415,22,12,"generate",NA,"within","mixed","words","recognition","item","low","incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" +1475,"1",1,1552,772,0.73,0.0013188833034374,22,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" +1475,"1",2,1553,773,0.74,0.00127754696748553,22,12,"generate",NA,"within","mixed","words","recognition","item","low","incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" +1475,"1",2,1554,773,0.72,0.00135900583177252,22,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" +1476,"1",1,1555,774,0.81875,0.000949800389313956,16,16,"generate",NA,"within","pure","words","free recall","item","low","incidental",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1476,"1",1,1556,774,0.5,0.00166762215297351,16,16,"read",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1476,"2",1,1557,775,0.800625,0.00103210738236076,16,16,"generate",NA,"within","pure","words","free recall","item","low","incidental",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1476,"2",1,1558,775,0.65625,0.00160572335095546,16,16,"read",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1476,"3",1,1559,776,0.71875,0.00139129164842427,16,16,"generate",NA,"within","pure","words","free recall","item","low","incidental",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1476,"3",1,1560,776,0.6375,0.00165250181914906,16,16,"read",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" +1477,"1",1,1561,777,0.143,0.000280269010149057,14,36,"generate",NA,"within","mixed","words","free recall","item","high","incidental","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1477,"1",1,1562,777,0.028,9.95887803248024e-05,14,36,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1477,"2",1,1563,778,0.333,0.0011713558324575,16,12,"generate",NA,"within","mixed","words","free recall","item","high","incidental","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1477,"2",1,1564,778,0.078,0.000209663215834566,16,12,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1477,"2",2,1565,779,0.37,0.00135862482048027,16,12,"generate",NA,"within","mixed","words","free recall","item","high","intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1477,"2",2,1566,779,0.287,0.000939855347890906,16,12,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1478,"1",1,1567,780,0.75,0.0011618945121358,48,6,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"1",1,1568,780,0.74,0.00120174061751329,48,6,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"1",1,1569,781,0.88,0.000631932381944497,48,6,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"1",1,1570,781,0.62,0.00155598255408578,48,6,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"1",1,1571,782,0.83,0.000829260103032616,48,6,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"1",1,1572,782,0.66,0.00147109068433372,48,6,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"2",1,1573,783,0.19,0.000427399455915919,48,6,"generate",NA,"within","mixed","non-words","free recall","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"2",1,1574,783,0.17,0.000369895020166257,48,6,"read",NA,"within","mixed","non-words","free recall","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"2",1,1575,784,0.48,0.00149503222686217,48,6,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"2",1,1576,784,0.34,0.000994593483186358,48,6,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"2",1,1577,785,0.48,0.00149503222686217,48,6,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"2",1,1578,785,0.43,0.00134822308797829,48,6,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"3",1,1579,786,0.72,0.00178456835525953,30,6,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"3",1,1580,786,0.78,0.00144952368282697,30,6,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"3",1,1581,787,0.8,0.00133231320736011,30,6,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"3",1,1582,787,0.6,0.00220891038090001,30,6,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"3",1,1583,788,0.81,0.00127372309897687,30,6,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"3",1,1584,788,0.63,0.00214789587292843,30,6,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"4",1,1585,789,0.2,0.000639540262105929,30,6,"generate",NA,"within","mixed","non-words","free recall","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"4",1,1586,789,0.18,0.000555573470970947,30,6,"read",NA,"within","mixed","non-words","free recall","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"4",1,1587,790,0.28,0.00104181753560436,30,6,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"4",1,1588,790,0.3,0.00115512014645922,30,6,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"4",1,1589,791,0.4,0.00172954532868175,30,6,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1478,"4",1,1590,791,0.4,0.00172954532868175,30,6,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" +1479,"1",1,1591,372,0.79,0.001024,25,24,"generate",NA,"within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +1479,"1",1,1592,372,0.85,0.000484,25,24,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1479,"1",1,1593,372,0.52,0.001024,25,24,"read",NA,"within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1479,"1",1,1594,373,0.83,0.001156,25,24,"generate",NA,"within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +1479,"1",1,1595,373,0.69,0.001024,25,24,"generate",NA,"within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1479,"1",1,1596,373,0.57,0.001296,25,24,"read",NA,"within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1479,"1",1,1597,374,0.44,0.001444,25,24,"generate",NA,"within","pure","words","recognition","font color","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +1479,"1",1,1598,374,0.39,0.001156,25,24,"generate",NA,"within","pure","words","recognition","font color","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1479,"1",1,1599,374,0.34,0.001764,25,24,"read",NA,"within","pure","words","recognition","font color",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1479,"1",1,1600,375,0.89,0.000256,25,24,"generate",NA,"within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +1479,"1",1,1601,375,0.84,0.000576,25,24,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1479,"1",1,1602,375,0.69,0.001444,25,24,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1480,"1",1,1603,376,0.84,0.00055,22,24,"generate",NA,"within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +1480,"1",1,1604,376,0.91,0.000454545454545455,22,24,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1480,"1",1,1605,376,0.59,0.00200454545454545,22,24,"read",NA,"within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1480,"1",2,1606,377,0.76,0.001024,25,24,"generate",NA,"within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","older","immediate" +1480,"1",2,1607,377,0.82,9e-04,25,24,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","older","immediate" +1480,"1",2,1608,377,0.57,0.001024,25,24,"read",NA,"within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","older","immediate" +1480,"1",1,1609,378,0.85,0.000454545454545455,22,24,"generate",NA,"within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +1480,"1",1,1610,378,0.74,0.00116363636363636,22,24,"generate",NA,"within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1480,"1",1,1611,378,0.72,0.00116363636363636,22,24,"read",NA,"within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1480,"1",2,1612,379,0.69,0.002704,25,24,"generate",NA,"within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","older","immediate" +1480,"1",2,1613,379,0.7,0.001296,25,24,"generate",NA,"within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","older","immediate" +1480,"1",2,1614,379,0.51,0.0025,25,24,"read",NA,"within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","older","immediate" +1480,"1",1,1615,380,0.96,0.000163636363636364,22,24,"generate",NA,"within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" +1480,"1",1,1616,380,0.93,0.000222727272727273,22,24,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1480,"1",1,1617,380,0.8,0.00102272727272727,22,24,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" +1480,"1",2,1618,381,0.88,0.001024,25,24,"generate",NA,"within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","older","immediate" +1480,"1",2,1619,381,0.87,0.000676,25,24,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","older","immediate" +1480,"1",2,1620,381,0.79,0.001444,25,24,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","older","immediate" +1482,"1",1,1621,792,0.563,0.00287875526977768,40,4,"generate",NA,"within","mixed","words","free recall","item","high","intentional","category","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1482,"1",1,1622,792,0.54,0.00286176996868038,40,4,"generate",NA,"within","mixed","words","free recall","item","high","intentional","category","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1482,"1",1,1623,792,0.49,0.00273012335911365,40,4,"generate",NA,"within","mixed","words","free recall","item","high","intentional","category","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1482,"1",1,1624,792,0.407,0.0022765248910312,40,4,"generate",NA,"within","mixed","words","free recall","item","high","intentional","category","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1482,"1",1,1625,792,0.395,0.00219392027845902,40,4,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","category","verbal/speaking","word stem","full","timed","yes","younger","immediate" +1483,"1",1,1626,793,0.279,0.000824952195489342,24,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" +1483,"1",1,1627,793,0.213,0.000555670406023729,24,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" +1483,"1",1,1628,794,0.308,0.000956342569805185,24,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" +1483,"1",1,1629,794,0.192,0.000481695664297381,24,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" +1483,"1",1,1630,795,0.958,0.000418542446139199,24,10,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" +1483,"1",1,1631,795,0.896,0.000637449502591045,24,10,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" +1483,"1",1,1632,796,0.962,0.000406328053068962,24,10,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" +1483,"1",1,1633,796,0.904,0.000606219915423057,24,10,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" +1483,"2",1,1634,797,0.789,0.000780402237197774,32,15,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"2",1,1635,797,0.715,0.00101135526818727,32,15,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"2",1,1636,798,0.702,0.00104731175395771,32,15,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"2",1,1637,798,0.669,0.0011282561819553,32,15,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"2",1,1638,799,0.759,0.000877681944493614,32,15,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"2",1,1639,799,0.683,0.00109590919000164,32,15,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"2",1,1640,800,0.696,0.00106319826162378,32,15,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"2",1,1641,800,0.644,0.00117759517549497,32,15,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"3",1,1642,801,0.67,0.00117073773647316,24,24,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"3",1,1643,801,0.623,0.00125770055667922,24,24,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"3",1,1644,802,0.693,0.00111346033961841,24,24,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"3",1,1645,802,0.623,0.00125770055667922,24,24,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"4",1,1646,803,0.843,0.000528861488656449,32,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"4",1,1647,803,0.716,0.000881070227337962,32,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"4",1,1648,804,0.699,0.000921961255170747,32,24,"generate",NA,"within","mixed","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"4",1,1649,804,0.64,0.0010347337323824,32,24,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"4",2,1650,805,0.784,0.00069608392450272,32,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"4",2,1651,805,0.705,0.00090787858526174,32,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"4",2,1652,806,0.642,0.00103179650522306,32,24,"generate",NA,"within","mixed","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +1483,"4",2,1653,806,0.643,0.00103030203347687,32,24,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" From ddd01dc046b50d94565d8ddb94a6de6974b90375 Mon Sep 17 00:00:00 2001 From: FBartos Date: Tue, 25 Jun 2024 13:58:45 +0200 Subject: [PATCH 048/127] Update ClassicalMetaAnalysisStatistics.qml --- inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml index c5d891ab..b935613f 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml @@ -65,7 +65,7 @@ Section Group { - text: qsTr("Random effects / model structure") + title: qsTr("Random Effects / Model Structure") visible: module == "metaAnalysisMultilevelMultivariate" CheckBox From 9465ea01773f64463458e29e4213e7d5a6d0194f Mon Sep 17 00:00:00 2001 From: FBartos Date: Tue, 25 Jun 2024 18:54:56 +0200 Subject: [PATCH 049/127] updates --- R/classicalmetaanalysis.R | 3 +- R/classicalmetaanalysiscommon.R | 10 + .../ClassicalMetaAnalysisAdvanced.qml | 49 +- mccurdy2020.csv | 3308 ++++++++--------- 4 files changed, 1704 insertions(+), 1666 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 42117532..6716542b 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -51,7 +51,8 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "optimizerConvergenceRelativeTolerance", "optimizerConvergenceRelativeToleranceValue", "optimizerStepAdjustment", "optimizerStepAdjustmentValue", "diagnosticsCasewiseDiagnosticsRerunWithoutInfluentialCases", # multilevel/multivariate specific - "randomEffects", "randomEffectsSpecification" + "randomEffects", "randomEffectsSpecification", + "computeCovarianceMatrix", "computeCovarianceMatrix" ) .maForestPlotDependencies <- c( .maDependencies, "transformEffectSize", "confidenceIntervalsLevel", diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index c39857f0..bfa2fca0 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -183,6 +183,11 @@ if (.maIsMetaregressionHeterogeneity(options)) rmaInput$link <- options[["heterogeneityModelLink"]] + if (.maIsMultilevelMultivariate(options)) { + rmaInput$sparse <- if (options[["useSparseMatricies"]]) options[["useSparseMatricies"]] + rmaInput$cvvc <- if (!options[["computeCovarianceMatrix"]]) !options[["computeCovarianceMatrix"]] + } + # add control options if needed control <- .maGetControlOptions(options) if (length(control) != 0) @@ -2141,6 +2146,11 @@ if (.maIsMetaregressionHeterogeneity(options)) rmaInput$link <- paste0("'", options[["heterogeneityModelLink"]], "'") + if (.maIsMultilevelMultivariate(options)) { + rmaInput$sparse <- if (options[["useSparseMatricies"]]) options[["useSparseMatricies"]] + rmaInput$cvvc <- if (!options[["computeCovarianceMatrix"]]) !options[["computeCovarianceMatrix"]] + } + # add control options if needed control <- .maGetControlOptions(options) if (length(control) != 0) diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml index 66650dd0..89553e8b 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml @@ -67,6 +67,26 @@ Section checked: true } } + + Group + { + visible: module == "metaAnalysisMultilevelMultivariate" + title: qsTr("Random Effects / Modele Structure") + + CheckBox + { + name: "useSparseMatricies" + text: qsTr("Use sparse matricies") + checked: false + } + + CheckBox + { + name: "computeCovarianceMatrix" + text: qsTr("Compute covariance matrix") + checked: true + } + } } Group @@ -74,11 +94,12 @@ Section title: qsTr("Fix Parameters") CheckBox - { - name: "fixParametersTau2" - text: qsTr("𝜏²") + { // TODO: allow fixing in multivariate models + name: "fixParametersTau2" + text: qsTr("𝜏²") enabled: sectionModel.heterogeneityModelTermsCount == 0 childrenOnSameRow: true + visible: module == "metaAnalysis" FormulaField { @@ -131,6 +152,7 @@ Section name: "addOmnibusModeratorTestHeterogeneityCoefficients" enabled: sectionModel.heterogeneityModelTermsCount > 0 childrenOnSameRow: false + visible: module == "metaAnalysis" TextField { @@ -153,12 +175,17 @@ Section name: "optimizerMethod" label: qsTr("Method") // TODO: switch default value on heterogeneityModelLink change values: { - if (sectionModel.heterogeneityModelLinkValue == "log") - ["nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] - else - ["constrOptim", "nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] + if (module == "metaAnalysis") { + if (sectionModel.heterogeneityModelLinkValue == "log") + ["nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] + else + ["constrOptim", "nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] + } else if (module == "metaAnalysisMultilevelMultivariate") { + ["nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm", "hjk", "nmk", "mads", "ucminf", "lbfgsb3c", "BBoptim"] + } + } - visible: sectionModel.heterogeneityModelTermsCount > 0 + visible: module == "metaAnalysisMultilevelMultivariate" || sectionModel.heterogeneityModelTermsCount > 0 } CheckBox @@ -168,7 +195,7 @@ Section checked: false childrenOnSameRow: true visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || - method.value == "sidikJonkman") && sectionModel.heterogeneityModelTermsCount == 0 + method.value == "sidikJonkman") && sectionModel.heterogeneityModelTermsCount == 0 && module == "metaAnalysis" DoubleField { @@ -187,7 +214,7 @@ Section checked: false childrenOnSameRow: true visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && - sectionModel.heterogeneityModelTermsCount == 0 + sectionModel.heterogeneityModelTermsCount == 0 && module == "metaAnalysis" DoubleField { @@ -207,7 +234,7 @@ Section checked: false childrenOnSameRow: true visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && - sectionModel.heterogeneityModelTermsCount == 0 + sectionModel.heterogeneityModelTermsCount == 0 && module == "metaAnalysis" DoubleField { diff --git a/mccurdy2020.csv b/mccurdy2020.csv index d489be09..4421b0c4 100644 --- a/mccurdy2020.csv +++ b/mccurdy2020.csv @@ -1,1654 +1,1654 @@ -"article","experiment","sample","id","pairing","yi","vi","ni","stimuli","condition","gen_difficulty","manip_type","present_style","word_status","memory_test","memory_type","gen_constraint","learning_type","stimuli_relation","gen_mode","gen_task","attention","pacing","filler_task","age_grp","retention_delay" -12,"1",1,1,1,0.879,0.000684370886775546,12,20,"generate",NA,"between","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","word stem","full",NA,"no","younger","immediate" -12,"1",2,2,1,0.713,0.0014039186561301,12,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","word stem","full",NA,"no","younger","immediate" -12,"1",1,3,2,0.906,0.000579846945242727,12,20,"generate",NA,"between","pure","words","recognition","item","high","intentional","category","verbal/speaking","word stem","full",NA,"no","younger","immediate" -12,"1",2,4,2,0.684,0.00150947360729542,12,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional","category","verbal/speaking","word stem","full",NA,"no","younger","immediate" -12,"1",1,5,3,0.842,0.000840009202792111,12,20,"generate",NA,"between","pure","words","recognition","item","high","intentional","antonym","verbal/speaking","word stem","full",NA,"no","younger","immediate" -12,"1",2,6,3,0.753,0.00123787160677674,12,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional","antonym","verbal/speaking","word stem","full",NA,"no","younger","immediate" -12,"1",1,7,4,0.893,0.000629087067046572,12,20,"generate",NA,"between","pure","words","recognition","item","high","intentional","synonym","verbal/speaking","word stem","full",NA,"no","younger","immediate" -12,"1",2,8,4,0.697,0.00146406150622161,12,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional","synonym","verbal/speaking","word stem","full",NA,"no","younger","immediate" -12,"1",1,9,5,0.733,0.00132323769152387,12,20,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full",NA,"no","younger","immediate" -12,"1",2,10,5,0.643,0.00162797627976605,12,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full",NA,"no","younger","immediate" -12,"2",1,11,6,0.838,0.00112350532092418,12,10,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","no","younger","immediate" -12,"2",1,12,6,0.652,0.00210355693438592,12,10,"read",NA,"within","pure","words","recognition","item",NA,NA,"semantic","verbal/speaking","word stem","full","timed","no","younger","immediate" -12,"2",1,13,7,0.872,0.000933945263966527,12,10,"generate",NA,"within","pure","words","recognition","item","high",NA,"category","verbal/speaking","word stem","full","timed","no","younger","immediate" -12,"2",1,14,7,0.665,0.00205625312585221,12,10,"read",NA,"within","pure","words","recognition","item",NA,NA,"category","verbal/speaking","word stem","full","timed","no","younger","immediate" -12,"2",1,15,8,0.878,0.000901948106343916,12,10,"generate",NA,"within","pure","words","recognition","item","high",NA,"antonym","verbal/speaking","word stem","full","timed","no","younger","immediate" -12,"2",1,16,8,0.699,0.00190868556837928,12,10,"read",NA,"within","pure","words","recognition","item",NA,NA,"antonym","verbal/speaking","word stem","full","timed","no","younger","immediate" -12,"2",1,17,9,0.871,0.000939325748505542,12,10,"generate",NA,"within","pure","words","recognition","item","high",NA,"synonym","verbal/speaking","word stem","full","timed","no","younger","immediate" -12,"2",1,18,9,0.677,0.00200787598553101,12,10,"read",NA,"within","pure","words","recognition","item",NA,NA,"synonym","verbal/speaking","word stem","full","timed","no","younger","immediate" -12,"2",1,19,10,0.741,0.00168959316287993,12,10,"generate",NA,"within","pure","words","recognition","item","high",NA,"rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -12,"2",1,20,10,0.548,0.00225122514558473,12,10,"read",NA,"within","pure","words","recognition","item",NA,NA,"rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -12,"3",1,21,11,0.521,0.00152090063574728,12,33,"generate",NA,"within","pure","words","recognition","cue word","high",NA,"rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -12,"3",1,22,11,0.492,0.00147309436068632,12,33,"read",NA,"within","pure","words","recognition","cue word",NA,NA,"rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -12,"3",2,23,12,0.711,0.00126913848238116,12,33,"generate",NA,"within","pure","words","recognition","item","high",NA,"rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -12,"3",2,24,12,0.533,0.00153403929794394,12,33,"read",NA,"within","pure","words","recognition","item",NA,NA,"rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -13,"1",1,25,13,0.354,0.00146800828724623,20,8,"generate",NA,"within","pure","words","free recall","item","medium","incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -13,"1",1,26,13,0.151,0.000446314512003586,20,8,"read",NA,"within","pure","words","free recall","item",NA,"incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -13,"1",1,27,14,0.361,0.00150859341116615,20,8,"generate",NA,"within","pure","words","free recall","item","medium","incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","immediate" -13,"1",1,28,14,0.21,0.000683170940514453,20,8,"read",NA,"within","pure","words","free recall","item",NA,"incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","immediate" -13,"2",1,29,15,0.302,0.000830957610396787,20,16,"generate",NA,"between","pure","words","free recall","item","medium","incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -13,"2",2,30,15,0.162,0.00034640915911672,20,16,"read",NA,"between","pure","words","free recall","item",NA,"incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -13,"2",1,31,16,0.368,0.00110495355761299,20,16,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","immediate" -13,"2",2,32,16,0.287,0.000770020107276239,20,16,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","immediate" -13,"3a",1,33,17,0.861,0.000982008449114481,20,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -13,"3a",1,34,17,0.512,0.00217215430763486,20,8,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -13,"3a",1,35,18,0.928,0.000649248987857125,20,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","immediate" -13,"3a",1,36,18,0.893,0.000814419054784168,20,8,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","immediate" -13,"3b",1,37,19,0.819,0.00121932794584729,20,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","long" -13,"3b",1,38,19,0.346,0.00142136011364856,20,8,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","long" -13,"3b",1,39,20,0.906,0.000750672563149527,20,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","long" -13,"3b",1,40,20,0.727,0.00174513233596134,20,8,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","long" -13,"4",1,41,21,0.783,0.00142975061806918,20,8,"generate",NA,"within","pure","words","recognition","item","medium","incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","long" -13,"4",1,42,21,0.542,0.00221937036825064,20,8,"read",NA,"within","pure","words","recognition","item",NA,"incidental","rhyme","verbal/speaking","cue only","full","self-paced","no","younger","long" -13,"4",1,43,22,0.785,0.00141806500652594,20,8,"generate",NA,"within","pure","words","recognition","item","medium","incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","long" -13,"4",1,44,22,0.684,0.00195417158112419,20,8,"read",NA,"within","pure","words","recognition","item",NA,"incidental","semantic","verbal/speaking","sentence completion","full","self-paced","no","younger","long" -17,"1",1,45,23,0.41,0.000700410850629397,48,18,"generate",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"writing/typing",NA,"full","timed","no","younger","immediate" -17,"1",1,46,23,0.31,0.000476643333282595,48,18,"read",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"writing/typing",NA,"full","timed","no","younger","immediate" -17,"1",2,47,24,0.33,0.000522566722124564,48,18,"generate",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"covert/thinking",NA,"full","timed","no","younger","immediate" -17,"1",2,48,24,0.2,0.000251326523941607,48,18,"read",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"covert/thinking",NA,"full","timed","no","younger","immediate" -17,"1",1,49,25,0.99,0.000161657088434079,48,18,"generate",NA,"within","pure","words","cued recall","item",NA,"incidental","category",NA,NA,"full","timed","no","younger","immediate" -17,"1",1,50,25,0.96,0.000203577820769672,48,18,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","category",NA,NA,"full","timed","no","younger","immediate" -17,"1",2,51,26,0.97,0.000188871502997182,48,18,"generate",NA,"within","pure","words","cued recall","item",NA,"incidental","antonym",NA,NA,"full","timed","no","younger","immediate" -17,"1",2,52,26,0.83,0.000454924375852444,48,18,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","antonym",NA,NA,"full","timed","no","younger","immediate" -17,"1",1,53,27,0.98,0.000174899217660165,48,18,"generate",NA,"within","pure","words","cued recall","item",NA,"incidental",NA,"writing/typing",NA,"full","timed","no","younger","immediate" -17,"1",1,54,27,0.9,0.000306908678459329,48,18,"read",NA,"within","pure","words","cued recall","item",NA,"incidental",NA,"writing/typing",NA,"full","timed","no","younger","immediate" -17,"1",2,55,28,0.98,0.000174899217660165,48,18,"generate",NA,"within","pure","words","cued recall","item",NA,"incidental",NA,"covert/thinking",NA,"full","timed","no","younger","immediate" -17,"1",2,56,28,0.89,0.000326491125070066,48,18,"read",NA,"within","pure","words","cued recall","item",NA,"incidental",NA,"covert/thinking",NA,"full","timed","no","younger","immediate" -17,"1",1,57,29,0.96,0.000324357409504365,24,18,"generate",NA,"within","pure","words","recognition","source",NA,"incidental","category","writing/typing",NA,"full","timed","no","younger","immediate" -17,"1",1,58,29,0.92,0.000429669448481525,24,18,"read",NA,"within","pure","words","recognition","source",NA,"incidental","category","writing/typing",NA,"full","timed","no","younger","immediate" -17,"1",2,59,30,0.95,0.000348958115746369,24,18,"generate",NA,"within","pure","words","recognition","source",NA,"incidental","category","covert/thinking",NA,"full","timed","no","younger","immediate" -17,"1",2,60,30,0.81,0.000797514928048483,24,18,"read",NA,"within","pure","words","recognition","source",NA,"incidental","category","covert/thinking",NA,"full","timed","no","younger","immediate" -17,"1",3,61,31,0.76,0.000980053795187525,24,18,"generate",NA,"within","pure","words","recognition","source",NA,"incidental","antonym","writing/typing",NA,"full","timed","no","younger","immediate" -17,"1",3,62,31,0.8,0.000834199892079636,24,18,"read",NA,"within","pure","words","recognition","source",NA,"incidental","antonym","writing/typing",NA,"full","timed","no","younger","immediate" -17,"1",4,63,32,0.64,0.00132737297917539,24,18,"generate",NA,"within","pure","words","recognition","source",NA,"incidental","antonym","covert/thinking",NA,"full","timed","no","younger","immediate" -17,"1",4,64,32,0.71,0.00114920468848311,24,18,"read",NA,"within","pure","words","recognition","source",NA,"incidental","antonym","covert/thinking",NA,"full","timed","no","younger","immediate" -22,"1",1,65,33,0.207,0.000384235388467284,40,10,"generate",NA,"within","pure","words","free recall","item","high","intentional","synonym","verbal/speaking","word stem","full","timed","no","younger","immediate" -22,"1",1,66,33,0.138,0.000231140306363894,40,10,"read",NA,"within","pure","words","free recall","item",NA,"intentional","synonym","verbal/speaking","word stem","full","timed","no","younger","immediate" -22,"1",1,67,34,0.227,0.000437849855207709,40,10,"generate",NA,"within","pure","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -22,"1",1,68,34,0.125,0.000207945208367329,40,10,"read",NA,"within","pure","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -24,"1",1,69,35,0.23,0.000504166666666667,24,16,"generate","low","within","mixed","words","free recall","item","high","intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","immediate" -24,"1",1,70,35,0.27,0.0009375,24,16,"generate","high","within","mixed","words","free recall","item","medium","intentional","antonym","verbal/speaking","word stem","full","timed","no","younger","immediate" -24,"1",1,71,35,0.09,0.000266666666666667,24,16,"read","low","within","mixed","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","immediate" -24,"2",1,72,36,0.319,0.000894478028525949,36,8,"generate","low","within","mixed","words","free recall","item","high","intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","immediate" -24,"2",1,73,36,0.332,0.000948317194546913,36,8,"generate","high","within","mixed","words","free recall","item","medium","intentional","antonym","verbal/speaking","word stem","full","timed","no","younger","immediate" -24,"2",1,74,36,0.092,0.000193394847204221,36,8,"read","low","within","mixed","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","immediate" -24,"2",1,75,37,0.772,0.0010576142768678,36,8,"generate","low","within","mixed","words","recognition","item","high","intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","immediate" -24,"2",1,76,37,0.694,0.00135184430227227,36,8,"generate","high","within","mixed","words","recognition","item","medium","intentional","antonym","verbal/speaking","word stem","full","timed","no","younger","immediate" -24,"2",1,77,37,0.348,0.00101462524345138,36,8,"read","low","within","mixed","words","recognition","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","immediate" -24,"2",2,78,38,0.111,0.000228145307364424,36,8,"generate","low","within","mixed","words","free recall","item","high","intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","long" -24,"2",2,79,38,0.123,0.000252361318127707,36,8,"generate","high","within","mixed","words","free recall","item","medium","intentional","antonym","verbal/speaking","word stem","full","timed","no","younger","long" -24,"2",2,80,38,0.022,9.92358083701705e-05,36,8,"read","low","within","mixed","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","long" -24,"2",2,81,39,0.61,0.00154990246872589,36,8,"generate","low","within","mixed","words","recognition","item","high","intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","long" -24,"2",2,82,39,0.437,0.00135368236220221,36,8,"generate","high","within","mixed","words","recognition","item","medium","intentional","antonym","verbal/speaking","word stem","full","timed","no","younger","long" -24,"2",2,83,39,0.13,0.000267323830469801,36,8,"read","low","within","mixed","words","recognition","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","timed","no","younger","long" -33,"1",1,84,40,0.28,0.000620475290082038,16,75,"generate",NA,"within","mixed","non-words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -33,"1",1,85,40,0.26,0.000555431896698679,16,75,"read",NA,"within","mixed","non-words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -33,"1",2,86,41,0.253,0.000533369632490618,16,75,"generate",NA,"within","mixed","non-words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -33,"1",2,87,41,0.253,0.000533369632490618,16,75,"read",NA,"within","mixed","non-words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -33,"3",1,88,42,0.645,0.00134158448153486,30,12,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -33,"3",1,89,43,0.783,0.000912801834907347,30,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -33,"3",1,90,44,0.798,0.000856744207569873,30,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -33,"3",1,91,45,0.727,0.00111415234117743,30,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -33,"3",1,92,42,0.719,0.00114084386193041,30,12,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -33,"3",1,93,43,0.764,0.000983129979660008,30,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -33,"3",1,94,44,0.623,0.00138020542408049,30,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -33,"3",1,95,45,0.525,0.00140266482018947,30,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -34,"1",1,96,46,0.86,0.000625,16,30,"generate",NA,"within","mixed","words",NA,"item","low","incidental",NA,"writing/typing","word fragment","full","timed","yes","younger","short" -34,"1",1,97,46,0.59,0.00225625,16,30,"read",NA,"within","mixed","words",NA,"item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","yes","younger","short" -34,"1",1,98,47,0.76,0.0016,16,30,"generate",NA,"within","mixed","words","recognition","item","low","incidental",NA,"writing/typing","word fragment","full","timed","yes","younger","short" -34,"1",1,99,47,0.6,0.003025,16,30,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","yes","younger","short" -34,"4",1,100,48,0.78,0.000672222222222222,18,64,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"writing/typing","word fragment","full","timed","no","younger","long" -34,"4",1,101,48,0.59,0.0018,18,32,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"writing/typing","word fragment","full","timed","no","younger","long" -34,"5",1,102,49,0.83,0.000731785380507333,15,48,"generate",NA,"within","mixed","words",NA,"item","low","intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","short" -34,"5",1,103,49,0.59,0.00140416750772881,15,48,"read",NA,"within","mixed","words",NA,"item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","short" -34,"5",1,104,50,0.69,0.0012204099066028,15,48,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","short" -34,"5",1,105,50,0.59,0.00140416750772881,15,48,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","short" -34,"5",2,106,51,0.81,0.000805174440026366,15,48,"generate",NA,"within","mixed","words",NA,"item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -34,"5",2,107,51,0.6,0.00139634601934929,15,48,"read",NA,"within","mixed","words",NA,"item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -34,"5",2,108,52,0.78,0.000916305451760013,15,48,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -34,"5",2,109,52,0.63,0.00135777615881292,15,48,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -39,"1",1,110,53,0.86,0.000377066591188669,42,32,"generate",NA,"within","pure","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"1",1,111,53,0.77,0.000574818494035667,42,32,"read",NA,"within","pure","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"1",2,112,54,0.72,0.000680379047313836,42,32,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"1",2,113,54,0.7,0.000718351820373292,42,32,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"1",3,114,55,0.68,0.000752775166151369,42,32,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"1",3,115,55,0.67,0.000768435658403961,42,32,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"1",4,116,56,0.82,0.000463390274705203,42,32,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"1",4,117,56,0.74,0.000639597099817285,42,32,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"2",1,118,57,0.88,0.000504532066765866,48,8,"generate",NA,"within","pure","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"2",1,119,57,0.74,0.000959464485115942,48,8,"read",NA,"within","pure","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"2",1,120,58,0.74,0.000959464485115942,48,8,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"2",1,121,58,0.69,0.0011041572550761,48,8,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"2",1,122,59,0.76,0.00089521279282916,48,8,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"2",1,123,59,0.73,0.000990508937727104,48,8,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"2",1,124,60,0.84,0.000629410512673303,48,8,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"2",1,125,60,0.73,0.000990508937727104,48,8,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"3",1,126,61,0.86,0.000565640467839223,48,8,"generate",NA,"within","pure","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"3",1,127,61,0.81,0.000728475895473291,48,8,"read",NA,"within","pure","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"3",1,128,62,0.73,0.000990508937727104,48,8,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"3",1,129,62,0.74,0.000959464485115942,48,8,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"3",1,130,63,0.74,0.000959464485115942,48,8,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"3",1,131,63,0.71,0.00104972068243712,48,8,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"3",1,132,64,0.9,0.000446661886935307,48,8,"generate",NA,"within","pure","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -39,"3",1,133,64,0.79,0.000795542265614413,48,8,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -46,"3",1,134,65,0.389,0.000779073948332024,32,30,"generate",NA,"within","pure","words","free recall","item","high","intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -46,"3",1,135,65,0.373,0.000737174082203171,32,30,"read",NA,"within","pure","words","free recall","item",NA,"intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -46,"3",1,136,66,0.398,0.000801986708006342,32,30,"generate",NA,"within","pure","words","free recall","item","high","intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -46,"3",1,137,66,0.373,0.000737174082203171,32,30,"read",NA,"within","pure","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -46,"3",2,138,67,0.425,0.000866909870457958,32,30,"generate",NA,"within","mixed","words","free recall","item","high","intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -46,"3",2,139,67,0.243,0.000393731068725644,32,30,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -46,"3",2,140,68,0.449,0.000918415918361287,32,30,"generate",NA,"within","mixed","words","free recall","item","high","intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -46,"3",2,141,68,0.24,0.000386624346299971,32,30,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -46,"4",1,142,69,0.376,0.00105963319875412,16,30,"generate",NA,"within","mixed","words","free recall","item","high","intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -46,"4",1,143,69,0.379,0.00107088466793759,16,30,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -46,"4",1,144,70,0.359,0.000994894460698372,16,30,"generate",NA,"within","mixed","words","free recall","item","high","intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -46,"4",1,145,70,0.344,0.000936838148014852,16,30,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -52,"1",1,146,71,0.376,0.00120125,20,20,"generate",NA,"within","mixed","words","recognition","source","low","incidental","category","covert/thinking","sentence completion","full","timed","no","younger","immediate" -52,"1",1,147,71,0.565,0.00114005,20,20,"read",NA,"within","mixed","words","recognition","source",NA,"incidental","category",NA,"sentence completion","full","timed","no","younger","immediate" -52,"1",2,148,72,0.295,0.0014792,20,20,"generate",NA,"within","mixed","words","recognition","source","low","incidental","category","covert/thinking","sentence completion","full","timed","no","older","immediate" -52,"1",2,149,72,0.527,0.00108045,20,20,"read",NA,"within","mixed","words","recognition","source",NA,"incidental","category",NA,"sentence completion","full","timed","no","older","immediate" -54,"1a",1,150,73,0.624,0.00171891022565796,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" -54,"1a",1,151,73,0.383,0.00130046082063292,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" -54,"1a",2,152,74,0.708,0.00146654857922247,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" -54,"1a",2,153,74,0.622,0.00172263994629038,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" -54,"1b",1,154,75,0.635,0.00169626438216114,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" -54,"1b",1,155,75,0.376,0.00126913544150135,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" -54,"1b",2,156,76,0.73,0.00137638129646805,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" -54,"1b",2,157,76,0.614,0.00173633680335309,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","category","verbal/speaking","word fragment","full","self-paced","yes","younger","immediate" -54,"2",1,158,77,0.694,0.00151977925882508,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","category","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -54,"2",1,159,77,0.351,0.00115459816601708,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","category","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -54,"2",2,160,78,0.632,0.00170279396606755,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","category","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -54,"2",2,161,78,0.314,0.000982412576485666,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","category","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -54,"2",3,162,79,0.621,0.00172445932476246,12,18,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","category","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -54,"2",3,163,79,0.621,0.00172445932476246,12,18,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","category","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -58,"1",1,164,80,0.66,0.00152965162030966,18,16,"generate",NA,"within","mixed","words","recognition","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","long" -58,"1",1,165,80,0.51,0.00161719496096029,18,16,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","long" -58,"2",1,166,81,0.76,0.00116589973013129,18,16,"generate",NA,"within","mixed","words","recognition","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","long" -58,"2",1,167,81,0.59,0.00165454676722574,18,16,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","long" -62,"1",1,168,82,0.63,0.00112461913283664,40,12,"generate",NA,"within","mixed","non-words","recognition","item","medium","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","short" -62,"1",1,169,82,0.63,0.00112461913283664,40,12,"read",NA,"within","mixed","non-words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","short" -62,"1",1,170,83,0.87,0.000489523988724184,40,12,"generate",NA,"within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","short" -62,"1",1,171,83,0.86,0.000517836377427427,40,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","short" -62,"1",1,172,84,0.97,0.000251644965721677,40,12,"generate",NA,"within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","short" -62,"1",1,173,84,0.93,0.000335859066699929,40,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","short" -62,"2",1,174,85,0.43,0.00119970947842174,30,12,"generate",NA,"within","mixed","non-words","recognition","item","medium","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","long" -62,"2",1,175,85,0.47,0.00130802551333819,30,12,"read",NA,"within","mixed","non-words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","long" -62,"2",1,176,86,0.77,0.000961057377349279,30,12,"generate",NA,"within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","long" -62,"2",1,177,86,0.79,0.000886664711171663,30,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","long" -62,"2",1,178,87,0.9,0.000497823120265038,30,12,"generate",NA,"within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","long" -62,"2",1,179,87,0.74,0.00106936279484505,30,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","long" -63,"1",1,180,88,0.55,0.00152473588786519,12,36,"generate",NA,"between","pure","words","free recall","item","medium","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"1",2,181,88,0.41,0.00121903188578046,12,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"1",3,182,89,0.27,0.000674815007158192,12,36,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"1",4,183,89,0.31,0.000829575128503558,12,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"1",1,184,90,0.89,0.000568242327381278,12,36,"generate",NA,"between","pure","words","recognition","item","medium","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"1",2,185,90,0.67,0.00137854961236853,12,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"1",3,186,91,0.8,0.000911252991695311,12,36,"generate",NA,"between","pure","words","recognition","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"1",4,187,91,0.7,0.00128870076848938,12,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"2",1,188,92,0.57,0.00143827720276306,16,36,"generate",NA,"between","pure","words","free recall","item","medium","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"2",2,189,92,0.43,0.00121190978924293,16,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"2",3,190,93,0.44,0.00124187287676438,16,36,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"2",4,191,93,0.3,0.000743802595272812,16,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"2",1,192,94,0.63,0.00138306870463395,16,36,"generate",NA,"between","pure","words","cued recall","item","medium","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"2",2,193,94,0.53,0.00142194979447636,16,36,"read",NA,"between","pure","words","cued recall","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"2",3,194,95,0.74,0.00108023755970469,16,36,"generate",NA,"between","pure","words","cued recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"2",4,195,95,0.6,0.00142235704145126,16,36,"read",NA,"between","pure","words","cued recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"2",1,196,96,0.88,0.000568040294404503,16,36,"generate",NA,"between","pure","words","recognition","item","medium","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"2",2,197,96,0.72,0.00114911559473059,16,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"2",3,198,97,0.92,0.000441876809004777,16,36,"generate",NA,"between","pure","words","recognition","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"2",4,199,97,0.71,0.00118185480125446,16,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -63,"3",1,200,98,0.56,0.00146590635414904,15,36,"generate",NA,"between","pure","words","free recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","yes","younger","short" -63,"3",2,201,98,0.54,0.00148259288079033,14,36,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","yes","younger","short" -63,"3",3,202,99,0.46,0.00136353943878914,13,36,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -63,"3",4,203,99,0.43,0.0012743560731286,13,36,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -63,"3",1,204,100,0.89,0.000545271594725026,15,36,"generate",NA,"between","pure","words","recognition","item","medium","intentional","category","writing/typing","word fragment","full","timed","yes","younger","short" -63,"3",2,205,100,0.87,0.000624149335514852,14,36,"read",NA,"between","pure","words","recognition","item",NA,"intentional","category","writing/typing","word fragment","full","timed","yes","younger","short" -63,"3",3,206,101,0.89,0.000562538145059099,13,36,"generate",NA,"between","pure","words","recognition","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -63,"3",4,207,101,0.82,0.000822962795567985,13,36,"read",NA,"between","pure","words","recognition","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -64,"1",1,208,102,0.609,0.00178974954776553,29,8,"generate",NA,"within","mixed","words","free recall","item","medium","incidental",NA,"covert/thinking","word stem","full","timed","yes","younger","immediate" -64,"1",1,209,102,0.446,0.00159482715126031,29,8,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"covert/thinking","word stem","full","timed","yes","younger","immediate" -76,"1",1,210,103,0.872,0.000508776438373989,34,14,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"1",2,211,103,0.899,0.000415919031927564,36,14,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"1",3,212,103,0.961,0.000257129668463792,39,14,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"1",1,213,104,0.976,0.000252693064823708,34,14,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"1",2,214,104,0.974,0.000246711561870474,36,14,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"1",3,215,104,0.989,0.000207344345044621,39,14,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"1",4,216,105,0.287,0.0005834114496132,35,14,"generate","high","between","pure","words","free recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"1",5,217,105,0.367,0.000758823438934369,40,14,"generate","low","between","pure","words","free recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"1",6,218,105,0.377,0.000816431240400115,38,14,"read","low","between","pure","words","free recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"1",4,219,106,0.447,0.00105756481739346,35,14,"generate","high","between","pure","words","free recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"1",5,220,106,0.527,0.00108195961875069,40,14,"generate","low","between","pure","words","free recall","item","medium","intentional",NA,"covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"1",6,221,106,0.547,0.00113461476909149,38,14,"read","low","between","pure","words","free recall","item",NA,"intentional",NA,"covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"2",1,222,107,0.365,0.000644351271642149,38,28,"generate",NA,"between","pure","words","free recall",NA,"medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"2",2,223,107,0.453,0.000803635926727625,40,28,"read",NA,"between","pure","words","free recall",NA,NA,"intentional","semantic","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"2",3,224,108,0.33,0.000569199289829569,37,28,"generate",NA,"between","pure","words","free recall",NA,"medium","intentional","semantic","writing/typing","word fragment","full","self-paced","no","younger","immediate" -76,"2",4,225,108,0.349,0.000594159644272939,39,28,"read",NA,"between","pure","words","free recall",NA,NA,"intentional","semantic","writing/typing","word fragment","full","self-paced","no","younger","immediate" -76,"3",1,226,109,0.439,0.00083956970862334,36,28,"generate","high","between","pure","words","free recall",NA,"medium","intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"3",2,227,109,0.498,0.000899467508443694,38,28,"generate","low","between","pure","words","free recall",NA,"medium","intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"3",3,228,109,0.504,0.000857530512796702,41,28,"read","low","between","pure","words","free recall",NA,NA,"intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"3",4,229,110,0.346,0.00065923259510789,33,28,"generate","high","between","pure","words","free recall",NA,"medium","intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"3",5,230,110,0.353,0.000603785613370875,39,28,"generate","low","between","pure","words","free recall",NA,"medium","intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"3",6,231,110,0.439,0.000778868526916652,40,28,"read","low","between","pure","words","free recall",NA,NA,"intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"4",1,232,111,0.239,0.000553539551784811,16,28,"generate","high","between","pure","words","free recall",NA,"medium","intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" -76,"4",2,233,111,0.42,0.00123217959337232,16,28,"read","high","between","pure","words","free recall",NA,NA,"intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" -76,"5",1,234,112,0.988,0.000175553735900401,38,28,"generate",NA,"between","pure","words","recognition","item","medium","intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -76,"5",2,235,112,0.934,0.000252613174199401,40,28,"read",NA,"between","pure","words","recognition","item",NA,"intentional","category","covert/thinking","word fragment","full","self-paced","no","younger","immediate" -78,"1",1,236,113,0.87,0.00072,20,12,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -78,"1",1,237,113,0.78,0.00128,20,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -78,"1",2,238,114,0.71,0.001805,20,12,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"writing/typing","word fragment","full","timed","no","older","immediate" -78,"1",2,239,114,0.52,0.002205,20,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","no","older","immediate" -78,"1",1,240,115,0.79,0.00098,20,12,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -78,"1",1,241,115,0.92,0.001125,20,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -78,"1",2,242,116,0.66,0.00338,20,12,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"writing/typing","word fragment","full","timed","no","older","immediate" -78,"1",2,243,116,0.64,0.00578,20,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"writing/typing","word fragment","full","timed","no","older","immediate" -78,"2",1,244,117,0.95,0.000125,20,14,"generate","low","within","mixed","words","recognition","item","medium","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -78,"2",1,245,117,0.8,0.00098,20,14,"read","low","within","mixed","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -78,"2",1,246,118,0.97,0.00018,20,14,"generate","high","within","mixed","words","recognition","item","medium","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -78,"2",1,247,118,0.89,0.00072,20,14,"read","high","within","mixed","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -78,"2",2,248,119,0.93,0.000405,20,14,"generate","low","within","mixed","words","recognition","item","medium","intentional","category","writing/typing","word stem","full","timed","no","older","immediate" -78,"2",2,249,119,0.66,0.002205,20,14,"read","low","within","mixed","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","older","immediate" -78,"2",2,250,120,0.94,5e-04,20,14,"generate","high","within","mixed","words","recognition","item","medium","intentional","category","writing/typing","word stem","full","timed","no","older","immediate" -78,"2",2,251,120,0.73,0.001805,20,14,"read","high","within","mixed","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","older","immediate" -78,"2",1,252,121,0.8,0.001445,20,14,"generate","low","within","mixed","words","recognition","source","medium","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -78,"2",1,253,121,0.9,0.00098,20,14,"read","low","within","mixed","words","recognition","source",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -78,"2",1,254,122,0.93,5e-04,20,14,"generate","high","within","mixed","words","recognition","source","medium","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -78,"2",1,255,122,0.93,0.000405,20,14,"read","high","within","mixed","words","recognition","source",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -78,"2",2,256,123,0.82,0.00128,20,14,"generate","low","within","mixed","words","recognition","source","medium","intentional","category","writing/typing","word stem","full","timed","no","older","immediate" -78,"2",2,257,123,0.71,0.004205,20,14,"read","low","within","mixed","words","recognition","source",NA,"intentional","category","writing/typing","word stem","full","timed","no","older","immediate" -78,"2",2,258,124,0.88,0.000845,20,14,"generate","high","within","mixed","words","recognition","source","medium","intentional","category","writing/typing","word stem","full","timed","no","older","immediate" -78,"2",2,259,124,0.68,0.003645,20,14,"read","high","within","mixed","words","recognition","source",NA,"intentional","category","writing/typing","word stem","full","timed","no","older","immediate" -78,"2",1,260,125,0.85,0.00072,20,14,"generate","low","within","mixed","words","cued recall","item","medium","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -78,"2",1,261,125,0.57,0.002205,20,14,"read","low","within","mixed","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -78,"2",1,262,126,0.81,0.00072,20,14,"generate","high","within","mixed","words","cued recall","item","medium","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -78,"2",1,263,126,0.57,0.002205,20,14,"read","high","within","mixed","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -78,"2",2,264,127,0.73,0.00128,20,14,"generate","low","within","mixed","words","cued recall","item","medium","intentional","category","writing/typing","word stem","full","timed","no","older","immediate" -78,"2",2,265,127,0.42,0.002,20,14,"read","low","within","mixed","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","older","immediate" -78,"2",2,266,128,0.6,0.00288,20,14,"generate","high","within","mixed","words","cued recall","item","medium","intentional","category","writing/typing","word stem","full","timed","no","older","immediate" -78,"2",2,267,128,0.36,0.00288,20,14,"read","high","within","mixed","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","older","immediate" -80,"1",1,268,129,0.24,0.000506555928194602,32,12,"generate",NA,"within","mixed","words","free recall","item","high","incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" -80,"1",1,269,129,0.089,0.000162839254102058,32,12,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" -80,"1",1,270,130,0.06,0.00012469316839881,32,12,"generate",NA,"within","mixed","words","free recall","cue word","high","incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" -80,"1",1,271,130,0.026,8.93751632063962e-05,32,12,"read",NA,"within","mixed","words","free recall","cue word",NA,"incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" -80,"1",2,272,131,0.365,0.00133366585253406,16,12,"generate",NA,"within","mixed","words","cued recall","item","high","incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" -80,"1",2,273,131,0.151,0.000388621841060109,16,12,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" -80,"1",3,274,132,0.177,0.000472604481697857,16,12,"generate",NA,"within","mixed","words","cued recall","cue word","high","incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" -80,"1",3,275,132,0.094,0.000242090295509309,16,12,"read",NA,"within","mixed","words","cued recall","cue word",NA,"incidental","antonym","writing/typing","word fragment","full","timed","yes","younger","short" -80,"2",1,276,135,0.903,0.000533330761582298,22,15,"generate",NA,"between","mixed","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" -80,"2",2,277,135,0.736,0.00118275198128287,22,15,"read",NA,"between","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" -80,"2",1,278,136,0.779,0.00101285233949262,22,15,"generate",NA,"between","pure","words","cued recall","cue word","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" -80,"2",2,279,136,0.676,0.00138579048261972,22,15,"read",NA,"between","pure","words","cued recall","cue word",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" -80,"2",2,280,139,0.885,0.000595939258189011,22,15,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" -80,"2",1,281,139,0.755,0.00110915598537315,22,15,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" -80,"2",2,282,140,0.803,0.000914972130844756,22,15,"generate",NA,"between","pure","words","cued recall","cue word","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" -80,"2",1,283,140,0.745,0.00114826979032361,22,15,"read",NA,"between","pure","words","cued recall","cue word",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","short" -85,"1",1,284,143,0.28,0.000959444196021819,34,6,"generate",NA,"between","pure","words","free recall","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","yes","younger","short" -85,"1",2,285,143,0.24,0.000763087240760943,34,6,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","yes","younger","short" -85,"1",3,286,144,0.22,0.000672921120315858,34,6,"generate",NA,"between","pure","words","free recall","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","yes","younger","short" -85,"1",4,287,144,0.15,0.000408480081821489,34,6,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","yes","younger","short" -86,"1",1,288,145,0.34,0.000894034221293633,16,36,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -86,"1",2,289,145,0.25,0.000566578206263155,16,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -86,"1",1,290,146,0.66,0.0013223547475971,16,36,"generate",NA,"between","pure","words","cued recall","cue word","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -86,"1",2,291,146,0.46,0.00129672297149292,16,36,"read",NA,"between","pure","words","cued recall","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -86,"2",1,292,147,0.7,0.00128870076848938,12,36,"generate",NA,"between","pure","words","recognition","cue word","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -86,"2",2,293,147,0.68,0.00135045517754083,12,36,"read",NA,"between","pure","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -86,"2",3,294,148,0.61,0.00132405059351169,19,36,"generate",NA,"between","pure","words","cued recall","cue word","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -86,"2",4,295,148,0.45,0.0012946454295358,15,36,"read",NA,"between","pure","words","cued recall","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -86,"3",1,296,149,0.73,0.0006840565946971,39,36,"generate",NA,"between","pure","words","recognition","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -86,"3",2,297,149,0.64,0.000921759832775265,34,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -86,"3",1,298,150,0.55,0.000880513025707875,39,36,"generate",NA,"between","pure","words","cued recall","cue word","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -86,"3",2,299,150,0.42,0.000797089286796651,34,36,"read",NA,"between","pure","words","cued recall","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"1",1,300,151,0.38,0.00110769445801249,12,36,"generate",NA,"between","pure","words","free recall","item","low","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"1",2,301,151,0.29,0.000743477300759581,13,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"1",3,302,152,0.4,0.00118294508102696,12,36,"generate",NA,"between","pure","words","free recall","item","low","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"1",4,303,152,0.31,0.000829575128503558,12,36,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"1",1,304,153,0.81,0.000871179523044669,12,36,"generate",NA,"between","pure","words","recognition","item","low","incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"1",2,305,153,0.63,0.00145433432335374,13,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","category","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"1",3,306,154,0.75,0.00110937234924991,12,36,"generate",NA,"between","pure","words","recognition","item","low","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"1",4,307,154,0.71,0.00125535404690575,12,36,"read",NA,"between","pure","words","recognition","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"2",1,308,155,0.22,0.000403997705103742,20,64,"generate",NA,"between","pure","words","free recall","item","medium","incidental","compound words","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"2",2,309,155,0.2,0.000353598721712975,20,64,"read",NA,"between","pure","words","free recall","item",NA,"incidental","compound words","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"2",1,310,156,0.22,0.000403997705103742,20,64,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"2",2,311,156,0.18,0.000307173888483707,20,64,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"3",1,312,157,0.24,0.000418121344424272,24,64,"generate",NA,"between","pure","words","free recall","item","medium","incidental","compound words","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"3",2,313,157,0.17,0.000260562966603395,24,64,"read",NA,"between","pure","words","free recall","item",NA,"incidental","compound words","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"3",1,314,158,0.19,0.000301070476991212,24,64,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"3",2,315,158,0.16,0.000241720304572822,24,64,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"3",1,316,159,0.69,0.000974197413876628,24,64,"generate",NA,"between","pure","words","free recall","item","medium","incidental","compound words","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"3",2,317,159,0.59,0.00112088270283455,24,64,"read",NA,"between","pure","words","free recall","item",NA,"incidental","compound words","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"3",1,318,160,0.73,0.000873925558265636,24,64,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -89,"3",2,319,160,0.57,0.00112711510231138,24,64,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -93,"1a",1,320,161,0.84,0.000806666666666667,15,72,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1a",2,321,161,0.71,0.00096,15,72,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1a",3,322,162,0.57,0.00096,15,72,"generate",NA,"between","pure","words","cued recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1a",4,323,162,0.54,0.00294,15,72,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1a",5,324,163,0.24,0.000806666666666667,15,72,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1a",6,325,163,0.16,0.000326666666666667,15,72,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1b",1,326,164,0.88,0.000672222222222222,18,72,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1b",2,327,164,0.79,0.000555555555555556,18,72,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1b",3,328,165,0.56,0.00108888888888889,18,72,"generate",NA,"between","pure","words","cued recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1b",4,329,165,0.44,0.00160555555555556,18,72,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1b",5,330,166,0.36,0.00160555555555556,18,72,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1b",6,331,166,0.32,0.00200555555555556,18,72,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1c",1,332,167,0.89,0.000864285714285714,14,72,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1c",2,333,167,0.93,0.000178571428571429,14,72,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1c",3,334,168,0.64,0.00102857142857143,14,72,"generate",NA,"between","pure","words","cued recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1c",4,335,168,0.51,0.00120714285714286,14,72,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1c",5,336,169,0.38,0.00182857142857143,14,72,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"1c",6,337,169,0.48,0.00160714285714286,14,72,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"2",1,338,170,0.62,0.00120714285714286,14,72,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"2",2,339,170,0.63,0.000864285714285714,14,72,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"2",1,340,171,0.71,0.00102857142857143,14,72,"generate",NA,"between","pure","words","cued recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -93,"2",2,341,171,0.6,0.000864285714285714,14,72,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -102,"1",1,342,172,0.5,0.000901765884963153,32,72,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -102,"1",1,343,172,0.59,0.000933072745782427,32,72,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -102,"1",1,344,173,0.75,0.000681328009271634,32,72,"generate",NA,"within","pure","words","recognition","item","low","incidental",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -102,"1",1,345,173,0.66,0.000862638799775998,32,72,"read",NA,"within","pure","words","recognition","item",NA,"incidental",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -104,"1",1,346,174,0.801,0.000443391333377904,44,75,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"1",2,347,174,0.856,0.000349873640101221,42,75,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"1",3,348,175,0.769,0.000514699296514784,43,75,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -104,"1",4,349,175,0.712,0.000589975563822184,46,75,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -104,"1",1,350,176,0.879,0.000395700567662799,44,15,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"1",2,351,176,0.897,0.000367379763045068,42,15,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"1",3,352,177,0.842,0.00049412686396363,43,15,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -104,"1",4,353,177,0.782,0.000619934968541422,46,15,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -104,"1",1,354,178,0.84,0.000428728962669034,44,24,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"1",2,355,178,0.876,0.000364252724824318,42,24,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"1",3,356,179,0.806,0.000514107050702546,43,24,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -104,"1",4,357,179,0.747,0.00061729170247884,46,24,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -104,"2",1,358,180,0.582,0.00131224333359003,23,25,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"2",2,359,180,0.613,0.00128784297161413,23,25,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"2",3,360,181,0.556,0.00134509867071806,22,25,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","category","verbal/speaking","word fragment","full","timed","no","younger","immediate" -104,"2",4,361,181,0.421,0.0011076235633914,22,25,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","verbal/speaking","word fragment","full","timed","no","younger","immediate" -104,"2",5,362,182,0.502,0.00129665206157636,22,25,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","category",NA,"word fragment","full","timed","no","younger","immediate" -104,"2",6,363,182,0.577,0.00131400203239748,23,25,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category",NA,"word fragment","full","timed","no","younger","immediate" -104,"3",1,364,183,0.84,0.000556822947283697,23,84,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"3",2,365,183,0.87,0.000473047801201324,23,84,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"3",3,366,184,0.85,0.000540588087833218,22,84,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"3",3,367,184,0.83,0.000599281542069484,22,84,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"4",1,368,185,0.62,0.00112229239955335,24,50,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"4",2,369,185,0.64,0.00109534888964515,24,50,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"4",3,370,186,0.57,0.00115407853030114,24,50,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" -104,"4",3,371,186,0.54,0.0011474623074344,24,50,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","category","covert/thinking","word fragment","full","timed","no","younger","immediate" -112,"1",1,372,187,0.8,0.000622413793103448,58,8,"generate",NA,"between","pure","words","free recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","yes","younger","immediate" -112,"1",2,373,187,0.75,0.000760344827586207,58,8,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","yes","younger","immediate" -112,"1",3,374,188,0.94,0.000248275862068966,58,8,"generate",NA,"between","pure","words","free recall","item","medium","intentional","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" -112,"1",4,375,188,0.92,0.000291379310344828,58,8,"read",NA,"between","pure","words","free recall","item",NA,"intentional","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" -112,"1",1,376,189,0.6,0.000387931034482759,58,32,"generate",NA,"between","pure","words","free recall","cue word","medium","incidental","category","writing/typing","word fragment","full","timed","yes","younger","immediate" -112,"1",2,377,189,0.65,0.000441379310344828,58,32,"read",NA,"between","pure","words","free recall","cue word",NA,"incidental","category","writing/typing","word fragment","full","timed","yes","younger","immediate" -112,"1",3,378,190,0.65,0.000337931034482759,58,32,"generate",NA,"between","pure","words","free recall","cue word","medium","incidental","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" -112,"1",4,379,190,0.66,0.000337931034482759,58,32,"read",NA,"between","pure","words","free recall","cue word",NA,"incidental","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" -112,"2",1,380,191,0.35,0.000576,25,36,"generate",NA,"between","pure","words","free recall","item","low","intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" -112,"2",2,381,191,0.36,0.000784,25,36,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" -112,"2",3,382,192,0.4,0.0016,25,6,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" -112,"2",3,383,192,0.34,0.000676,25,30,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" -112,"2",4,384,193,0.37,0.000784,25,30,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" -112,"2",4,385,193,0.29,0.001444,25,6,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" -114,"1",1,386,194,0.44,0.00117185217131851,24,20,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -114,"1",1,387,194,0.3,0.00070186466152136,24,20,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -114,"1",1,388,195,0.54,0.00134940200335495,24,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -114,"1",1,389,195,0.52,0.00133169265532792,24,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -114,"2",1,390,196,0.5,0.0012752009952748,25,20,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -114,"2",1,391,196,0.39,0.000995092156135151,25,20,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -114,"2",1,392,197,0.56,0.00132675484207723,25,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -114,"2",1,393,197,0.5,0.0012752009952748,25,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -115,"1a",1,394,198,0.43,0.00035,14,48,"generate",NA,"between","pure","words","recognition","item","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","long" -115,"1a",2,395,198,0.32,0.000457142857142857,14,48,"read",NA,"between","pure","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","long" -115,"1a",3,396,199,0.49,0.0014,14,48,"generate",NA,"between","pure","words","recognition","item","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","long" -115,"1a",4,397,199,0.42,0.00102857142857143,14,48,"read",NA,"between","pure","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","long" -115,"1b",1,398,200,0.93,0.00030625,16,48,"generate",NA,"between","pure","words","cued recall","item","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -115,"1b",2,399,200,0.79,0.001225,16,48,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -115,"1b",3,400,201,0.97,5.625e-05,16,48,"generate",NA,"between","pure","words","cued recall","item","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -115,"1b",4,401,201,0.75,0.00105625,16,48,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -115,"1c",1,402,202,0.36,9e-04,16,48,"generate",NA,"between","pure","words","free recall","item","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -115,"1c",2,403,202,0.33,0.000625,16,48,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -115,"1c",3,404,203,0.37,9e-04,16,48,"generate",NA,"between","pure","words","free recall","item","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -115,"1c",4,405,203,0.49,0.00140625,16,48,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -115,"2",1,406,204,0.35,0.000426666666666667,15,48,"generate",NA,"between","pure","words","free recall","item","high","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -115,"2",2,407,204,0.45,0.00096,15,48,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -115,"2",3,408,205,0.34,0.000666666666666667,15,48,"generate",NA,"between","pure","words","free recall","item","high","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -115,"2",4,409,205,0.34,0.000426666666666667,15,48,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -115,"2",1,410,206,0.88,0.000426666666666667,15,48,"generate",NA,"between","pure","words","cued recall","item","high","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -115,"2",2,411,206,0.78,0.00130666666666667,15,48,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -115,"2",3,412,207,0.87,0.000426666666666667,15,48,"generate",NA,"between","pure","words","cued recall","item","high","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -115,"2",4,413,207,0.69,0.00192666666666667,15,48,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -115,"3",1,414,208,0.35,0.000918121276581843,12,72,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -115,"3",2,415,208,0.47,0.00130202276075813,12,72,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -115,"3",1,416,209,0.63,0.0013628620930123,12,72,"generate",NA,"between","pure","words","cued recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -115,"3",2,417,209,0.51,0.00137760904266925,12,72,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -115,"4",1,418,210,0.46,0.00129487092293901,14,48,"generate",NA,"between","pure","words","free recall","item","high","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -115,"4",2,419,210,0.39,0.00107715134049747,14,48,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -115,"4",1,420,211,0.97,0.00030903367564484,14,48,"generate",NA,"between","pure","words","cued recall","item","high","intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -115,"4",2,421,211,0.83,0.000744352375976027,14,48,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","writing/typing","word stem","full","timed","no","younger","immediate" -116,"1",1,422,212,0.58,0.000729572804581116,46,64,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"1",1,423,212,0.68,0.00064610170895164,46,64,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"1",1,424,213,0.63,0.0007028563503384,46,64,"generate",NA,"within","mixed","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"1",1,425,213,0.63,0.0007028563503384,46,64,"read",NA,"within","mixed","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"2",1,426,214,0.55,0.00112491107244227,24,64,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"2",1,427,214,0.62,0.00109607160997596,24,64,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"2",1,428,215,0.58,0.00112504913613228,24,64,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"2",1,429,215,0.52,0.00110594617154296,24,64,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"2",1,430,216,0.45,0.000995394227339536,24,64,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"2",1,431,216,0.52,0.00110594617154296,24,64,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"2",1,432,217,0.5,0.00108327436100805,24,64,"generate",NA,"within","mixed","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"2",1,433,217,0.5,0.00108327436100805,24,64,"read",NA,"within","mixed","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"3",1,434,218,0.32,0.000407270502978595,96,8,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"3",1,435,218,0.44,0.000617909814420225,96,8,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"3",1,436,219,0.33,0.000837134627812511,96,4,"generate",NA,"within","mixed","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -116,"3",1,437,219,0.32,0.000800255128049856,96,4,"read",NA,"within","mixed","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -118,"2",1,438,220,0.49,0.001200155566309,22,35,"generate",NA,"within","pure","words","cued recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" -118,"2",1,439,220,0.48,0.00118223392940453,22,35,"read",NA,"within","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" -118,"3",1,440,221,0.66,0.00127341563749133,18,35,"generate",NA,"within","pure","words","cued recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" -118,"3",1,441,221,0.64,0.00131456452210388,18,35,"read",NA,"within","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" -118,"4",1,442,222,0.62,0.00102992543304313,30,35,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" -118,"4",1,443,222,0.63,0.00101844195159166,30,35,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" -118,"5",1,444,223,0.34,0.000521741496864515,42,35,"generate",NA,"within","mixed","words","cued recall","item","low","intentional","unrelated","verbal/speaking","anagram","full","timed","yes","younger","short" -118,"5",1,445,223,0.34,0.000521741496864515,42,35,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","unrelated","verbal/speaking","anagram","full","timed","yes","younger","short" -118,"5",2,446,224,0.72,0.000616056922452707,47,35,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","short" -118,"5",2,447,224,0.75,0.000559928221511271,47,35,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","short" -118,"6",1,448,225,0.84,0.000533080266998407,29,35,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" -118,"6",1,449,225,0.81,0.000616983855594373,29,35,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" -118,"7",1,450,226,0.63,0.0011623893976954,24,35,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" -118,"7",1,451,226,0.54,0.00120185908049044,24,35,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","long" -119,"1",1,452,227,0.942,0.00028801960446545,32,24,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","word stem","full","timed","no","younger","immediate" -119,"1",1,453,227,0.795,0.00066460861098116,32,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","word stem","full","timed","no","younger","immediate" -124,"1a",1,454,228,0.75,0.00118003907931877,24,12,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -124,"1a",1,455,228,0.83,0.000842210130332407,24,12,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -124,"1a",1,456,229,0.67,0.00146636286407761,24,12,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -124,"1a",1,457,229,0.74,0.00122050743596645,24,12,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -124,"1a",1,458,230,0.49,0.00154139650013515,24,12,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1a",1,459,230,0.49,0.00154139650013515,24,12,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1a",1,460,231,0.58,0.00162206022315322,24,12,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1a",1,461,231,0.63,0.0015626614935697,24,12,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1a",1,462,232,0.47,0.00149290294478069,24,12,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1a",1,463,232,0.39,0.00121876116762381,24,12,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1a",1,464,233,0.52,0.00159451817364669,24,12,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1a",1,465,233,0.73,0.00125999819966351,24,12,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1b",2,466,234,0.7,0.00137079067221553,24,12,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -124,"1b",2,467,234,0.76,0.00113877468876636,24,12,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -124,"1b",2,468,235,0.6,0.00160705145835244,24,12,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -124,"1b",2,469,235,0.7,0.00137079067221553,24,12,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -124,"1b",2,470,236,0.59,0.00161605319154222,24,12,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1b",2,471,236,0.64,0.00154234263329198,24,12,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1b",2,472,237,0.59,0.00161605319154222,24,12,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1b",2,473,237,0.64,0.00154234263329198,24,12,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1b",2,474,238,0.58,0.00162206022315322,24,12,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1b",2,475,238,0.61,0.00159510534561541,24,12,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1b",2,476,239,0.56,0.00162497239126158,24,12,"generate",NA,"within","pure","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -124,"1b",2,477,239,0.72,0.00129832934946004,24,12,"read",NA,"within","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","short" -126,"1",1,478,240,0.385,0.000533555555555556,18,20,"generate",NA,"between","pure","words","free recall","item","low","incidental","semantic","writing/typing","cue only","full","timed","yes","younger","immediate" -126,"1",2,479,240,0.448,0.00108888888888889,18,20,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word stem","full","timed","yes","younger","immediate" -126,"1",3,480,240,0.41,0.0011045,18,20,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word stem","full","timed","yes","younger","immediate" -126,"1",1,481,241,0.638,0.0019845,18,20,"generate",NA,"between","pure","words","free recall","item","low","incidental","unrelated","writing/typing","cue only","full","timed","yes","younger","immediate" -126,"1",2,482,241,0.464,0.00112022222222222,18,20,"generate",NA,"between","pure","words","free recall","item","medium","incidental","unrelated","writing/typing","word stem","full","timed","yes","younger","immediate" -126,"1",3,483,241,0.384,0.0008405,18,20,"read",NA,"between","pure","words","free recall","item",NA,"incidental","unrelated","writing/typing","word stem","full","timed","yes","younger","immediate" -126,"2",1,484,242,0.95,0.0001681,10,20,"generate",NA,"between","pure","words","cued recall","item","low","incidental","semantic","writing/typing","cue only","full","timed","yes","younger","immediate" -126,"2",2,485,242,0.795,0.0013695125,20,20,"read",NA,"between","pure","words","cued recall","item",NA,"incidental","semantic","writing/typing","cue only","full","timed","yes","younger","immediate" -126,"2",1,486,243,0.335,0.004389025,10,20,"generate",NA,"between","pure","words","cued recall","item","low","incidental","unrelated","writing/typing","cue only","full","timed","yes","younger","immediate" -126,"2",2,487,243,0.3275,0.00496125,20,20,"read",NA,"between","pure","words","cued recall","item",NA,"incidental","unrelated","writing/typing","cue only","full","timed","yes","younger","immediate" -126,"4",1,488,244,0.258,0.000320601100273484,51,24,"generate",NA,"between","pure","words","free recall","item","medium","incidental","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -126,"4",2,489,244,0.252,0.000309602041574247,51,24,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -126,"4",1,490,245,0.348,0.000499108037551049,51,24,"generate",NA,"between","pure","words","free recall","item","medium","incidental","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" -126,"4",2,491,245,0.22,0.000254092408302344,51,24,"read",NA,"between","pure","words","free recall","item",NA,"incidental","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" -126,"4",1,492,246,0.393,0.000588257595949363,51,24,"generate",NA,"between","pure","words","free recall","item","medium","incidental","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" -126,"4",2,493,246,0.364,0.000531448722191139,51,24,"read",NA,"between","pure","words","free recall","item",NA,"incidental","unrelated","writing/typing","word fragment","full","timed","yes","younger","immediate" -126,"5",1,494,247,0.305,0.000602533825909168,30,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" -126,"5",2,495,247,0.268,0.000486224206527353,31,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" -126,"5",1,496,248,0.348,0.000730455002605469,30,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" -126,"5",2,497,248,0.292,0.000552833151340222,31,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" -126,"5",1,498,249,0.445,0.000992885279997721,30,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" -126,"5",2,499,249,0.301,0.000578486918258494,31,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" -129,"1",1,500,250,0.33,0.00079998584022148,20,32,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -129,"1",1,501,250,0.19,0.000358940903689559,20,32,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -129,"2",1,502,251,0.22,0.000207843445394248,64,26,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -129,"2",2,503,251,0.23,0.000221538199498974,64,26,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -129,"2",3,504,252,0.25,0.000315271086267268,48,26,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -129,"2",3,505,252,0.17,0.000185016855693809,48,26,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -129,"3",1,506,253,0.3,0.00100757683153345,20,10,"generate",NA,"within","mixed","words","free recall","item","low","incidental",NA,"verbal/speaking","word fragment","divided","timed","no","younger","immediate" -129,"3",1,507,253,0.17,0.000450409457738042,20,10,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"verbal/speaking","word fragment","divided","timed","no","younger","immediate" -129,"4",1,508,254,0.08,0.000157136118516662,19,26,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" -129,"4",2,509,254,0.06,0.0001304970083987,19,26,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" -129,"4",3,510,255,0.12,0.000237528676564853,16,26,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" -129,"4",3,511,255,0.04,0.000114691318408995,16,26,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" -139,"1",1,512,256,0.33,0.00056,35,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word stem","full","timed","yes","younger","immediate" -139,"1",1,513,256,0.29,0.00103142857142857,35,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word stem","full","timed","yes","younger","immediate" -139,"1",1,514,256,0.29,0.00178571428571429,35,8,"generate",NA,"within","pure","words","cued recall","item","medium","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -139,"1",1,515,256,0.07,0.000285714285714286,35,8,"read",NA,"within","pure","words","cued recall","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -140,"1",1,516,257,0.88,0.000429187175960687,30,30,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -140,"1",1,517,257,0.74,0.000816181725457269,30,30,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -140,"1",1,518,258,0.68,0.000960606816644921,30,30,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -140,"1",1,519,258,0.8,0.000648193179654146,30,30,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -147,"1",1,520,259,0.59,0.0015403857927161,37,8,"generate",NA,"within","mixed","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -147,"1",1,521,259,0.331,0.000926208452476098,37,8,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -147,"1",2,522,260,0.24,0.000609245535921271,34,8,"generate",NA,"within","mixed","words","free recall","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -147,"1",2,523,260,0.07,0.00016472238391889,34,8,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -147,"2",1,524,261,0.6,0.00143594850266793,24,16,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -147,"2",2,525,261,0.38,0.00105280543375512,24,16,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -147,"2",3,526,262,0.241,0.000541940837815923,24,16,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -147,"2",4,527,262,0.168,0.000330721560200462,24,16,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -150,"1",1,528,263,0.38,0.000943432736229675,30,15,"generate",NA,"within","mixed","words","recognition","item","high","incidental",NA,"covert/thinking","anagram","full","timed","yes","younger","short" -150,"1",1,529,263,0.28,0.000606897370774897,30,15,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"covert/thinking","anagram","full","timed","yes","younger","short" -150,"1",2,530,264,0.5,0.00125056380335807,30,15,"generate",NA,"within","mixed","words","cued recall","item","high","incidental",NA,"covert/thinking","anagram","full","timed","yes","younger","short" -150,"1",2,531,264,0.38,0.000943432736229675,30,15,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental",NA,"covert/thinking","anagram","full","timed","yes","younger","short" -155,"1",1,532,265,0.23,0.000463336484198564,19,40,"generate",NA,"between","pure","words","free recall","item","medium","intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"1",2,533,265,0.33,0.000791078212400701,19,40,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"1",1,534,266,0.04,0.000100017468083876,19,40,"generate",NA,"between","pure","words",NA,"order","medium","intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"1",2,535,266,0.1,0.000174623324808316,19,40,"read",NA,"between","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"2a",1,536,267,0.52,0.000623076923076923,52,32,"generate",NA,"between","pure","words","free recall","item","medium","intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"2a",2,537,267,0.63,0.000492307692307692,52,32,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"2a",3,538,268,0.44,0.000432692307692308,52,32,"generate",NA,"between","pure","words","free recall","item","medium","intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"2a",4,539,268,0.45,0.000555769230769231,52,32,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"2b",1,540,269,0.1,0.00032,20,32,"generate",NA,"between","pure","words",NA,"order","medium","intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"2b",2,541,269,0.21,0.000605,20,32,"read",NA,"between","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"2b",3,542,270,0.11,0.00018,20,32,"generate",NA,"between","pure","words",NA,"order","medium","intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"2b",4,543,270,0.21,0.00072,20,32,"read",NA,"between","pure","words",NA,"order",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"3a",1,544,271,0.3,0.000272222222222222,18,32,"generate",NA,"between","pure","words","free recall","item","medium","incidental",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"3a",2,545,271,0.2,0.000555555555555556,18,32,"read",NA,"between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"3b",1,546,272,0.05,0.000138888888888889,18,32,"generate",NA,"between","pure","words",NA,"order","medium","incidental",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -155,"3b",2,547,272,0.11,0.000272222222222222,18,32,"read",NA,"between","pure","words",NA,"order",NA,"incidental",NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -160,"1",1,548,273,0.72,0.00127110243061905,20,16,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","yes","younger","immediate" -160,"1",2,549,273,0.78,0.00103245867329822,20,16,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","yes","younger","immediate" -160,"1",3,550,274,0.37,0.00111311643048267,20,16,"generate",NA,"between","pure","words","free recall","item","medium","intentional","category","writing/typing","word fragment","full","timed","yes","younger","immediate" -160,"1",4,551,274,0.26,0.000664271087603971,20,16,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","yes","younger","immediate" -160,"2",1,552,275,0.79,0.000990764548348143,20,16,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -160,"2",2,553,275,0.69,0.0013751121862594,20,16,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -160,"2",3,554,276,0.31,0.000863913877849229,20,16,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -160,"2",4,555,276,0.3,0.000822762558516742,20,16,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -162,"1",1,556,277,0.63,5e-04,20,20,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -162,"1",1,557,277,0.07,0.000125,20,20,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -162,"1",2,558,278,0.4,0.000605,20,20,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","older","immediate" -162,"1",2,559,278,0.06,8e-05,20,20,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","older","immediate" -175,"1",1,560,279,0.66,0.000898016307090657,40,20,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" -175,"1",1,561,279,0.44,0.000843360752244818,40,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" -175,"1",2,562,280,0.6,0.000965928257942499,40,20,"generate",NA,"within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" -175,"1",2,563,280,0.34,0.000607142154007979,40,20,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" -175,"2",1,564,281,0.61,0.000958747972703158,40,20,"generate","low","within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" -175,"2",1,565,281,0.34,0.000607142154007979,40,20,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" -175,"2",2,566,282,0.66,0.000898016307090657,40,20,"generate","high","within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" -175,"2",2,567,282,0.34,0.000607142154007979,40,20,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","no","younger","immediate" -182,"1",1,568,283,0.89,0.000516835429733758,21,24,"generate",NA,"within","mixed","words","recognition","item","medium","incidental","semantic","covert/thinking","word stem","full","self-paced","yes","younger","long" -182,"1",1,569,283,0.5,0.00133546832664915,21,24,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","semantic","covert/thinking","word stem","full","self-paced","yes","younger","long" -182,"1",1,570,284,0.72,0.00111015729903271,21,24,"generate",NA,"within","mixed","words","recognition","source","medium","incidental","semantic","covert/thinking","word stem","full","self-paced","yes","younger","long" -182,"1",1,571,284,0.39,0.00104212125111236,21,24,"read",NA,"within","mixed","words","recognition","source",NA,"incidental","semantic","covert/thinking","word stem","full","self-paced","yes","younger","long" -186,"1",1,572,285,0.59,0.0014459883918205,19,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -186,"1",2,573,285,0.61,0.00139538524649682,20,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -186,"1",3,574,286,0.59,0.0014459883918205,19,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -186,"1",4,575,286,0.44,0.00122744786394582,20,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -186,"1",5,576,287,0.54,0.00144569265610525,19,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -186,"1",6,577,287,0.41,0.00121199849582008,17,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -186,"2",1,578,288,0.44,0.00122744786394582,20,24,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -186,"2",2,579,288,0.46,0.0012816608457022,20,24,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -186,"2",3,580,289,0.52,0.00142671960409893,19,24,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -186,"2",4,581,289,0.63,0.00136700362730875,20,24,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -186,"2",5,582,290,0.51,0.00138179539074259,20,24,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -186,"2",6,583,290,0.41,0.00121199849582008,17,24,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","immediate" -197,"1",1,584,291,0.619,0.00136952996374717,48,7,"generate",NA,"within","mixed","numbers","free recall","item","low","incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" -197,"1",1,585,291,0.31,0.000763958471971568,48,7,"read",NA,"within","mixed","numbers","free recall","item",NA,"incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" -197,"2",1,586,292,0.615,0.00250995746404427,18,7,"generate",NA,"between","pure","numbers","free recall","item","low","incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" -197,"2",2,587,292,0.361,0.00173742645278376,18,7,"read",NA,"between","pure","numbers","free recall","item",NA,"incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" -229,"1",1,588,382,0.265,0.000400849418504556,33,60,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","cue only","full","self-paced","no","younger","immediate" -229,"1",2,589,382,0.181,0.000233791973720332,33,60,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","cue only","full","self-paced","no","younger","immediate" -229,"1",1,590,383,0.364,0.000638498933831982,33,60,"generate",NA,"between","pure","words","free recall","item","medium","intentional","unrelated","writing/typing","cue only","full","self-paced","no","younger","immediate" -229,"1",2,591,383,0.201,0.000269025272093237,33,60,"read",NA,"between","pure","words","free recall","item",NA,"intentional","unrelated","writing/typing","cue only","full","self-paced","no","younger","immediate" -231,"1",1,592,293,0.594,0.00192724831651347,16,12,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"writing/typing",NA,"full","self-paced","yes","younger","immediate" -231,"1",1,593,293,0.427,0.00162369773352211,16,12,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"covert/thinking",NA,"full","self-paced","yes","younger","immediate" -231,"1",1,594,294,0.582,0.00193715556697919,16,12,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking",NA,"full","self-paced","yes","younger","immediate" -231,"1",1,595,294,0.765,0.00133584996892678,16,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"covert/thinking",NA,"full","self-paced","yes","younger","immediate" -231,"2",1,596,295,0.554,0.00177881563459506,20,12,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"verbal/speaking",NA,"full","self-paced","yes","younger","immediate" -231,"2",1,597,295,0.221,0.000586249203208749,20,12,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"covert/thinking",NA,"full","self-paced","yes","younger","immediate" -231,"2",1,598,296,0.479,0.00166099614401239,20,12,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking",NA,"full","self-paced","yes","younger","immediate" -231,"2",1,599,296,0.603,0.00175723473480398,20,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"covert/thinking",NA,"full","self-paced","yes","younger","immediate" -231,"3",1,600,297,0.471,0.00125670307075384,32,12,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"verbal/speaking",NA,"full","self-paced","yes","younger","immediate" -231,"3",1,601,297,0.294,0.000685172440039257,32,12,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"covert/thinking",NA,"full","self-paced","yes","younger","immediate" -231,"3",1,602,298,0.474,0.00126327635644268,32,12,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking",NA,"full","self-paced","yes","younger","immediate" -231,"3",1,603,298,0.537,0.00135563729039593,32,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"covert/thinking",NA,"full","self-paced","yes","younger","immediate" -232,"1",1,604,384,0.812180451,0.00048173236502413,40,40,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -232,"1",2,605,384,0.795338346,0.000519434110807343,40,40,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -232,"1",1,606,385,0.533082707,0.000967533768470717,40,20,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","divided","timed","no","younger","immediate" -232,"1",2,607,385,0.475338346,0.000905672099001788,40,20,"read","high","between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","divided","timed","no","younger","immediate" -232,"1",3,608,386,0.586015038,0.000850043920782915,40,40,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","older","immediate" -232,"1",4,609,386,0.545112782,0.000850269447170561,40,40,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","older","immediate" -232,"1",3,610,387,0.381503759,0.000711891180052948,40,20,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","divided","timed","no","older","immediate" -232,"1",4,611,387,0.294887218,0.000492314042774986,40,20,"read","high","between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","divided","timed","no","older","immediate" -234,"1",1,612,388,0.73,0.000730750736974439,34,45,"generate",NA,"within","mixed","words","free recall","item","low","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -234,"1",1,613,388,0.67,0.000850434344971945,34,45,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -234,"1",2,614,389,0.69,0.000814595100710572,34,45,"generate",NA,"within","mixed","words","free recall","item","low","incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -234,"1",2,615,389,0.68,0.000833102743652931,34,45,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -234,"1",1,616,390,0.93,0.00027065487694368,34,45,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -234,"1",1,617,390,0.93,0.00027065487694368,34,45,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -234,"1",2,618,391,0.88,0.000372219942267669,34,45,"generate",NA,"within","mixed","words","recognition","source","low","incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -234,"1",2,619,391,0.88,0.000372219942267669,34,45,"read",NA,"within","mixed","words","recognition","source",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -234,"3",1,620,392,0.69,0.000884532382244324,30,45,"generate",NA,"within","mixed","words","free recall","item","low","incidental",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -234,"3",1,621,392,0.64,0.000971297216148686,30,45,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -234,"3",1,622,393,0.69,0.000884532382244324,30,45,"generate",NA,"within","mixed","words","recognition","source","low","incidental",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -234,"3",1,623,393,0.84,0.000504216204372237,30,45,"read",NA,"within","mixed","words","recognition","source",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -237,"1",1,624,394,0.288,0.000990125,32,8,"generate",NA,"between","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",2,625,394,0.224,8e-04,32,8,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",1,626,395,0.316,0.001152,32,8,"generate",NA,"between","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",2,627,395,0.276,0.000595125,32,8,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",1,628,396,0.306,0.000820125,32,8,"generate",NA,"between","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",2,629,396,0.281,0.00091378125,32,8,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",1,630,397,0.466,0.000780125,32,8,"generate",NA,"between","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",2,631,397,0.417,0.000968,32,8,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",1,632,398,0.906,0.000575696422041714,32,8,"generate",NA,"between","mixed","words","recognition","cue word","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",2,633,398,0.76,0.00119853086343504,32,8,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",1,634,399,0.854,0.000782570693185396,32,8,"generate",NA,"between","mixed","words","recognition","cue word","high","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",2,635,399,0.75,0.00124196056566303,32,8,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",1,636,400,0.781,0.00110543917575164,32,8,"generate",NA,"between","mixed","words","recognition","cue word","medium","incidental","antonym","writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",2,637,400,0.708,0.0014129898172396,32,8,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","antonym","writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",1,638,401,0.76,0.00119853086343504,32,8,"generate",NA,"between","mixed","words","recognition","cue word","high","incidental","antonym","writing/typing","word fragment","full","timed","no","younger","immediate" -237,"1",2,639,401,0.729,0.0013302078013003,32,8,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","antonym","writing/typing","word fragment","full","timed","no","younger","immediate" -237,"2",1,640,402,0.481,0.000656363636363636,55,8,"generate",NA,"within","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -237,"2",1,641,402,0.389,0.000698472727272727,55,8,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -237,"2",1,642,403,0.464,0.000741890909090909,55,8,"generate",NA,"within","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -237,"2",1,643,403,0.442,0.000727272727272727,55,8,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","no","younger","immediate" -237,"2",1,644,404,0.838,0.000571267047137347,55,8,"generate",NA,"within","mixed","words","recognition","cue word","medium","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -237,"2",1,645,404,0.709,0.000945570736438384,55,8,"read",NA,"within","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -237,"2",1,646,405,0.739,0.000864755905093655,55,8,"generate",NA,"within","mixed","words","recognition","cue word","high","incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -237,"2",1,647,405,0.539,0.00114048830620473,55,8,"read",NA,"within","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -237,"3",1,648,406,0.464,0.000880074074074074,54,10,"generate",NA,"between","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","word stem","full","timed","no","younger","immediate" -237,"3",2,649,406,0.357,0.000785851851851852,54,10,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word stem","full","timed","no","younger","immediate" -237,"3",1,650,407,0.471,0.000633796296296296,54,10,"generate",NA,"between","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word stem","full","timed","no","younger","immediate" -237,"3",2,651,407,0.355,0.000785851851851852,54,10,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word stem","full","timed","no","younger","immediate" -237,"3",1,652,408,0.57,0.000492018518518519,54,10,"generate",NA,"between","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word stem","full","timed","no","younger","immediate" -237,"3",2,653,408,0.397,0.000528907407407408,54,10,"read",NA,"between","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word stem","full","timed","no","younger","immediate" -237,"3",1,654,409,0.974,0.000212339892860934,54,10,"generate",NA,"between","mixed","words","recognition","cue word","medium","incidental","semantic","writing/typing","word stem","full","timed","no","younger","immediate" -237,"3",2,655,409,0.88,0.000401825863762881,54,10,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word stem","full","timed","no","younger","immediate" -237,"3",1,656,410,0.918,0.000316754924860839,54,10,"generate",NA,"between","mixed","words","recognition","cue word","high","incidental","semantic","writing/typing","word stem","full","timed","no","younger","immediate" -237,"3",2,657,410,0.768,0.000692025428332912,54,10,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word stem","full","timed","no","younger","immediate" -237,"3",1,658,411,0.926,0.000300243898286054,54,10,"generate",NA,"between","mixed","words","recognition","cue word","high","incidental","semantic","writing/typing","word stem","full","timed","no","younger","immediate" -237,"3",2,659,411,0.773,0.000678830720970296,54,10,"read",NA,"between","mixed","words","recognition","cue word",NA,"incidental","semantic","writing/typing","word stem","full","timed","no","younger","immediate" -237,"5",1,660,412,0.39,0.0007225,40,8,"generate",NA,"within","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word stem","full","timed","yes","younger","immediate" -237,"5",1,661,412,0.22,0.0005625,40,8,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word stem","full","timed","yes","younger","immediate" -237,"5",1,662,413,0.39,0.0011025,40,8,"generate",NA,"within","mixed","words","free recall","item","high","incidental",NA,"writing/typing","word stem","full","timed","yes","younger","immediate" -237,"5",1,663,413,0.26,0.0009025,40,8,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","word stem","full","timed","yes","younger","immediate" -263,"3",1,664,414,0.79,0.000428868209247543,54,36,"generate",NA,"within","mixed","words",NA,"order","low","intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -263,"3",1,665,414,0.75,0.000500086880013177,54,36,"read",NA,"within","mixed","words",NA,"order",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","no","younger","immediate" -269,"1",1,666,415,0.22,0.000309152214134988,34,44,"generate",NA,"between","pure","words","free recall","item","high","intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" -269,"1",2,667,415,0.21,0.000278333828698382,36,44,"read",NA,"between","pure","words","free recall","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" -269,"2",1,668,416,0.26,0.000402603207304403,40,21,"generate",NA,"within","pure","words","free recall","item","high","intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" -269,"2",1,669,416,0.18,0.000239839517276877,40,21,"read",NA,"within","pure","words","free recall","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" -269,"3",1,670,417,0.29,0.000474019191139232,40,21,"generate",NA,"within","mixed","words","free recall","item","high","intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" -269,"3",1,671,417,0.15,0.000191479404978051,40,21,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" -269,"4",1,672,418,0.42,0.000766350487552301,36,36,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -269,"4",2,673,418,0.34,0.000580407051965645,36,36,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -271,"1",1,674,419,0.9585,0.000112666666666667,24,20,"generate",NA,"within","pure","words","recognition","item","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" -271,"1",1,675,419,0.692,0.00120416666666667,24,20,"read",NA,"within","pure","words","recognition","item",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" -271,"1",2,676,420,0.846,0.00110704166666667,24,20,"generate",NA,"within","pure","words","recognition","item","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" -271,"1",2,677,420,0.681,0.00176816666666667,24,20,"read",NA,"within","pure","words","recognition","item",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" -271,"1",1,678,421,0.811,0.000737041666666667,24,20,"generate",NA,"within","pure","words","recognition","source","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" -271,"1",1,679,421,0.61,0.001584375,24,20,"read",NA,"within","pure","words","recognition","source",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" -271,"1",2,680,422,0.578,0.00275204166666667,24,20,"generate",NA,"within","pure","words","recognition","source","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" -271,"1",2,681,422,0.527,0.00286016666666667,24,20,"read",NA,"within","pure","words","recognition","source",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" -271,"2",1,682,423,0.924,0.000330041666666667,24,20,"generate",NA,"within","pure","words","recognition","item","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" -271,"2",1,683,423,0.685,0.0012615,24,20,"read",NA,"within","pure","words","recognition","item",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" -271,"2",2,684,424,0.795,0.001134375,24,20,"generate",NA,"within","pure","words","recognition","item","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" -271,"2",2,685,424,0.594,0.00182004166666667,24,20,"read",NA,"within","pure","words","recognition","item",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" -271,"2",1,686,425,0.803,0.000651041666666667,24,20,"generate",NA,"within","pure","words","recognition","source","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" -271,"2",1,687,425,0.594,0.00256266666666667,24,20,"read",NA,"within","pure","words","recognition","source",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","younger","immediate" -271,"2",2,688,426,0.489,0.00190816666666667,24,20,"generate",NA,"within","pure","words","recognition","source","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" -271,"2",2,689,426,0.36,0.0024,24,20,"read",NA,"within","pure","words","recognition","source",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","yes","older","immediate" -275,"1",1,690,299,0.88,0.000590123099290305,32,10,"generate","low","within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,691,299,0.59,0.00148592868264426,32,10,"read","low","within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,692,300,0.86,0.000661598197523891,32,10,"generate","high","within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,693,300,0.69,0.00129147133431216,32,10,"read","high","within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,694,301,0.91,0.000490180443877037,32,10,"generate","low","within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,695,301,0.58,0.00149145202841967,32,10,"read","low","within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,696,302,0.86,0.000661598197523891,32,10,"generate","high","within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,697,302,0.63,0.00143683608108408,32,10,"read","high","within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,698,303,0.74,0.00112223224827917,32,10,"generate","low","within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,699,303,0.68,0.0013208136300182,32,10,"read","low","within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,700,304,0.73,0.00115854321798246,32,10,"generate","high","within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,701,304,0.7,0.00126041468709482,32,10,"read","high","within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,702,305,0.85,0.000698551364857556,32,10,"generate","low","within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,703,305,0.75,0.00108502240135274,32,10,"read","low","within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,704,306,0.82,0.0008130610816742,32,10,"generate","high","within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"1",1,705,306,0.73,0.00115854321798246,32,10,"read","high","within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","short" -275,"2a",1,706,307,0.93,0.000509634019507341,16,15,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2a",1,707,307,0.75,0.00128865980083696,16,15,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2a",1,708,308,0.94,0.000475486313114057,16,15,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2a",1,709,308,0.8,0.00105852205491163,16,15,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2a",1,710,309,0.87,0.000742805845529448,16,15,"generate",NA,"within","mixed","words","recognition","location","medium","incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2a",1,711,309,0.81,0.00101197224846919,16,15,"read",NA,"within","mixed","words","recognition","location",NA,"incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2a",1,712,310,0.88,0.000700877617505987,16,15,"generate",NA,"within","mixed","words","recognition","location","medium","incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2a",1,713,310,0.77,0.0011978613919768,16,15,"read",NA,"within","mixed","words","recognition","location",NA,"incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2b",1,714,311,0.86,0.00078576718820947,16,15,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2b",1,715,311,0.71,0.0014582338356993,16,15,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2b",1,716,312,0.89,0.00066007688484881,16,15,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2b",1,717,312,0.75,0.00128865980083696,16,15,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2b",1,718,313,0.75,0.00128865980083696,16,15,"generate",NA,"within","mixed","words","recognition","font color","medium","incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2b",1,719,313,0.67,0.0016013392348564,16,15,"read",NA,"within","mixed","words","recognition","font color",NA,"incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2b",1,720,314,0.7,0.00149696977465035,16,15,"generate",NA,"within","mixed","words","recognition","font color","medium","incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -275,"2b",1,721,314,0.65,0.00165929713241221,16,15,"read",NA,"within","mixed","words","recognition","font color",NA,"incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -281,"1",1,722,427,0.88,0.000424382674098702,30,32,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"verbal/speaking","cue only","full","timed","yes","younger","long" -281,"1",1,723,427,0.68,0.000949853379688479,30,32,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","cue only","full","timed","yes","younger","long" -281,"1",1,724,428,0.76,0.000753000302524894,30,32,"generate",NA,"within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking","cue only","full","timed","yes","younger","long" -281,"1",1,725,428,0.56,0.00107449235945005,30,32,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"verbal/speaking","cue only","full","timed","yes","younger","long" -286,"1",1,726,429,0.27,0.000444585313756711,36,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -286,"1",2,727,429,0.28,0.000469455765544879,36,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -286,"1",1,728,430,0.18,0.000250348223386154,36,24,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -286,"1",2,729,430,0.17,0.000232680238955505,36,24,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -286,"2",1,730,431,0.24,0.000402315651416016,28,40,"generate",NA,"between","pure","words","free recall","item","high","intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" -286,"2",2,731,431,0.23,0.000378154423048021,28,40,"read",NA,"between","pure","words","free recall","item",NA,"intentional","category","writing/typing","word fragment","full","timed","no","younger","immediate" -286,"3",1,732,432,0.28,0.000549483951351285,24,42,"generate",NA,"between","pure","words","free recall","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -286,"3",2,733,432,0.27,0.000520373830391129,24,42,"read",NA,"between","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -286,"3",3,734,433,0.12,0.000183643940044186,24,42,"generate",NA,"between","pure","non-words","free recall","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -286,"3",4,735,433,0.13,0.000199450136738576,24,42,"read",NA,"between","pure","non-words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -286,"4",1,736,434,0.36,0.000902865907919899,24,21,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -286,"4",1,737,434,0.24,0.000497032536893732,24,21,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -286,"4",2,738,435,0.12,0.000208858395299934,24,21,"generate",NA,"within","mixed","non-words","free recall","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -286,"4",2,739,435,0.11,0.000191946260516557,24,21,"read",NA,"within","mixed","non-words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -286,"5",1,740,436,0.21,0.000292376086619303,33,48,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -286,"5",2,741,436,0.22,0.000312225724754014,33,48,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","no","younger","immediate" -291,"1a",1,742,437,0.38,0.000984895103853155,28,15,"generate",NA,"within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -291,"1a",1,743,437,0.27,0.000600004804347625,28,15,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -291,"1b",1,744,438,0.43,0.0012513497614267,24,15,"generate",NA,"within","mixed","words","cued recall","item","low","incidental",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" -291,"1b",1,745,438,0.33,0.000884118072552527,24,15,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","word fragment","full","timed","yes","younger","immediate" -291,"2",1,746,439,0.39,0.00111379656377899,24,15,"generate",NA,"within","mixed","words","cued recall","item","medium","incidental","semantic","writing/typing","word stem","full","timed","yes","younger","immediate" -291,"2",1,747,439,0.22,0.000485819625537438,24,15,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental","semantic","writing/typing","word stem","full","timed","yes","younger","immediate" -291,"3",1,748,440,0.29,0.000698832552212868,20,24,"generate",NA,"within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -291,"3",1,749,440,0.21,0.000435477491218987,20,24,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -291,"3",2,750,441,0.4,0.00110074923449589,20,24,"generate",NA,"within","pure","words","cued recall","item","medium","incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -291,"3",2,751,441,0.28,0.000663052789529928,20,24,"read",NA,"within","pure","words","cued recall","item",NA,"incidental",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -293,"1",1,752,807,0.74,0.000818819494033244,32,24,"generate",NA,"within","pure","words","recognition","item","high","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -293,"1",1,753,807,0.66,0.00100234419330496,32,24,"read",NA,"within","pure","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -293,"1",1,754,808,0.65,0.0010193656982785,32,24,"generate",NA,"within","pure","non-words","recognition","item","high","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -293,"1",1,755,808,0.67,0.000983760084576965,32,24,"read",NA,"within","pure","non-words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -293,"2",1,756,809,0.587,0.000810866534641357,48,24,"generate",NA,"within","pure","words","free recall","item","high","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -293,"2",1,757,809,0.642,0.000770674714562466,48,24,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -293,"2",1,758,810,0.266,0.000351758571051765,48,24,"generate",NA,"within","pure","non-words","free recall","item","high","intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -293,"2",1,759,810,0.333,0.00049120074898129,48,24,"read",NA,"within","pure","non-words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","no","younger","immediate" -293,"3",1,760,811,0.82,0.000520415027930249,48,14,"generate","low","within","pure","words","recognition","item","high","intentional","compound words","writing/typing","letter transposition","full","timed","no","younger","immediate" -293,"3",1,761,811,0.71,0.000785876405947517,48,14,"read","low","within","pure","words","recognition","item",NA,"intentional","compound words","writing/typing","letter transposition","full","timed","no","younger","immediate" -293,"3",1,762,812,0.65,0.000894234130971039,48,14,"generate","high","within","pure","non-words","recognition","item","high","intentional","compound words","writing/typing","letter transposition","full","timed","no","younger","immediate" -293,"3",1,763,812,0.64,0.000907715672134181,48,14,"read","high","within","pure","non-words","recognition","item",NA,"intentional","compound words","writing/typing","letter transposition","full","timed","no","younger","immediate" -308,"1",1,764,442,0.082,0.000182118181032404,28,10,"generate",NA,"within",NA,"non-words","free recall","item","medium",NA,NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -308,"1",1,765,442,0.132,0.000279880660047871,28,10,"read",NA,"within",NA,"non-words","free recall","item",NA,NA,NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -308,"1",1,766,443,0.704,0.00135797243137599,28,10,"generate",NA,"within",NA,"non-words","recognition","item","medium",NA,NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -308,"1",1,767,443,0.707,0.00134729586520085,28,10,"read",NA,"within",NA,"non-words","recognition","item",NA,NA,NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -308,"2",1,768,444,0.071,0.00022498167251309,9,10,"generate",NA,"within",NA,"non-words","free recall","item","medium",NA,NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -308,"2",1,769,444,0.136,0.000395007818162962,9,10,"read",NA,"within",NA,"non-words","free recall","item",NA,NA,NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -308,"2",1,770,445,0.656,0.0020575551754772,9,10,"generate",NA,"within",NA,"non-words","recognition","item","medium",NA,NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -308,"2",1,771,445,0.778,0.00145384817611476,9,10,"read",NA,"within",NA,"non-words","recognition","item",NA,NA,NA,"verbal/speaking","letter transposition","full","timed","yes","younger","immediate" -344,"1",1,772,446,0.85,0.000520227172583816,32,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"1",1,773,446,0.64,0.0010561311818639,32,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"1",1,774,447,0.58,0.00111071842504721,32,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"1",1,775,447,0.66,0.00102307185354073,32,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"2",1,776,448,0.81,0.000634546880739736,32,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"2",1,777,448,0.51,0.00108162317764318,32,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"2",1,778,449,0.64,0.0010561311818639,32,22,"generate",NA,"within","mixed","words","recognition","location","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"2",1,779,449,0.62,0.00108211001037408,32,22,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"3",1,780,450,0.84,0.000577055245008409,24,44,"generate",NA,"between","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"3",2,781,450,0.77,0.000790563120779084,24,44,"read",NA,"between","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"3",1,782,451,0.59,0.00116473607181022,24,44,"generate",NA,"between","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"3",2,783,451,0.69,0.00101231187361255,24,44,"read",NA,"between","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"4",1,784,452,0.81,0.000634546880739736,32,22,"generate",NA,"between","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"4",2,785,452,0.74,0.000835752013201925,32,22,"read",NA,"between","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"4",1,786,453,0.66,0.00102307185354073,32,22,"generate",NA,"between","mixed","words","recognition","location","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"4",2,787,453,0.65,0.00104044534935151,32,22,"read",NA,"between","mixed","words","recognition","location",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"5",1,788,454,0.76,0.000779784875268914,32,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"5",1,789,454,0.6,0.00110044105595606,32,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"5",1,790,455,0.61,0.00109226086182065,32,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"5",1,791,455,0.68,0.000983640108404407,32,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"6",1,792,456,0.83,0.000493933451557691,40,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"6",1,793,456,0.61,0.000935486122266163,40,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"6",1,794,457,0.63,0.000916458680959516,40,22,"generate",NA,"within","mixed","words","recognition","background color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"6",1,795,457,0.61,0.000935486122266163,40,22,"read",NA,"within","mixed","words","recognition","background color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"7",1,796,458,0.77,0.000751106772925088,32,22,"generate",NA,"within","mixed","words","recognition","cue word","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"7",1,797,458,0.64,0.0010561311818639,32,22,"read",NA,"within","mixed","words","recognition","cue word",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"7",1,798,459,0.62,0.00108211001037408,32,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"7",1,799,459,0.63,0.00107004468036678,32,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"8",1,800,460,0.84,0.000409505347831618,48,22,"generate",NA,"within","mixed","words","recognition","cue word","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"8",1,801,460,0.52,0.000815536743929872,48,22,"read",NA,"within","mixed","words","recognition","cue word",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"8",1,802,461,0.53,0.000821711714375173,48,22,"generate",NA,"within","mixed","words","recognition","font color","high","incidental","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"8",1,803,461,0.56,0.000831112943613933,48,22,"read",NA,"within","mixed","words","recognition","font color",NA,"incidental","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"9",1,804,462,0.86,0.000368015455519361,48,22,"generate",NA,"within","mixed","words","recognition","cue word","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"9",1,805,462,0.6,0.000821947052930178,48,22,"read",NA,"within","mixed","words","recognition","cue word",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"9",1,806,463,0.56,0.000831112943613933,48,22,"generate",NA,"within","mixed","words","recognition","font color","high","incidental","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"9",1,807,463,0.63,0.00079924323685558,48,22,"read",NA,"within","mixed","words","recognition","font color",NA,"incidental","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"10a",1,808,464,0.89,0.000354267469789765,32,60,"generate",NA,"within","mixed","words","recognition","cue word","high","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"10a",1,809,464,0.67,0.00085944897030835,32,60,"read",NA,"within","mixed","words","recognition","cue word",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"10a",1,810,465,0.623,0.000923289148986081,32,60,"generate",NA,"within","mixed","words","recognition","font color","high","incidental","category","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"10a",1,811,465,0.7,0.000803433216023923,32,60,"read",NA,"within","mixed","words","recognition","font color",NA,"incidental","category","writing/typing","word stem","full","timed","yes","younger","immediate" -344,"10b",1,812,466,0.92,0.000239161241694213,48,30,"generate",NA,"within","mixed","words","recognition","item","high","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -344,"10b",1,813,466,0.72,0.000621946902135301,48,30,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -344,"10b",1,814,467,0.598,0.000770812155478097,48,30,"generate",NA,"within","mixed","words","recognition","font color","high","incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -344,"10b",1,815,467,0.66,0.000715710797558832,48,30,"read",NA,"within","mixed","words","recognition","font color",NA,"incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -344,"11",1,816,468,0.95,0.000182457889793326,52,30,"generate",NA,"within","mixed","words","recognition","item","high","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -344,"11",1,817,468,0.76,0.000512435559698591,52,30,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -344,"11",1,818,469,0.622,0.000709622095614346,52,30,"generate",NA,"within","mixed","words","recognition","location","high","incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -344,"11",1,819,469,0.63,0.000703179764158875,52,30,"read",NA,"within","mixed","words","recognition","location",NA,"incidental","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -345,"1",1,820,470,0.37,0.001,10,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -345,"1",1,821,470,0.26,0.00081,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -345,"1",2,822,471,0.58,0.00025,10,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","yes","younger","immediate" -345,"1",2,823,471,0.36,0.00064,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","timed","yes","younger","immediate" -345,"1",3,824,472,0.14,0.00064,10,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"1",3,825,472,0.16,0.00025,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"1",4,826,473,0.43,0.00049,10,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"1",4,827,473,0.25,0.001,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"1",5,828,474,0.13,0.00064,10,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"1",5,829,474,0.14,0.00016,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"1",6,830,475,0.35,0.00049,10,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"1",6,831,475,0.15,9e-05,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"2",1,832,476,0.37,0.000555555555555556,18,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -345,"2",1,833,476,0.16,5e-05,18,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -345,"2",1,834,477,0.48,0.000555555555555556,18,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","yes","younger","immediate" -345,"2",1,835,477,0.29,0.00045,18,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","timed","yes","younger","immediate" -345,"2",2,836,478,0.15,0.000405,20,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","older","immediate" -345,"2",2,837,478,0.12,0.000125,20,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","older","immediate" -345,"2",2,838,479,0.39,0.000245,20,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"2",2,839,479,0.13,0.00018,20,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"2",3,840,480,0.11,5e-05,18,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","older","immediate" -345,"2",3,841,480,0.09,8.88888888888889e-05,18,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","older","immediate" -345,"2",3,842,481,0.27,0.000355555555555556,18,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"2",3,843,481,0.09,8.88888888888889e-05,18,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"3",1,844,482,0.51,0.00142222222222222,18,10,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","anagram","full","timed","yes","younger","immediate" -345,"3",1,845,482,0.37,0.000938888888888889,18,10,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","anagram","full","timed","yes","younger","immediate" -345,"3",1,846,483,0.53,0.00108888888888889,18,10,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -345,"3",1,847,483,0.32,0.00045,18,10,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -345,"3",2,848,484,0.38,0.000355555555555556,18,10,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","anagram","full","timed","yes","older","immediate" -345,"3",2,849,484,0.26,0.000672222222222222,18,10,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","anagram","full","timed","yes","older","immediate" -345,"3",2,850,485,0.25,2e-04,18,10,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"3",2,851,485,0.25,0.000272222222222222,18,10,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" -345,"4",1,852,486,0.42,0.00045,18,10,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","anagram","divided","timed","yes","younger","immediate" -345,"4",1,853,486,0.21,0.000672222222222222,18,10,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","anagram","divided","timed","yes","younger","immediate" -345,"4",1,854,487,0.23,2.22222222222222e-05,18,10,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" -345,"4",1,855,487,0.19,0.000138888888888889,18,10,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" -345,"5",1,856,488,0.16,9e-05,10,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" -345,"5",1,857,488,0.155,9e-05,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","younger","immediate" -345,"5",2,858,489,0.41,0.00081,10,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","divided","timed","yes","younger","immediate" -345,"5",2,859,489,0.18,0.00025,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","divided","timed","yes","younger","immediate" -345,"5",3,860,490,0.1,0.00016,10,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","older","immediate" -345,"5",3,861,490,0.09,9e-05,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","older","immediate" -345,"5",4,862,491,0.39,0.00064,10,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","divided","timed","yes","older","immediate" -345,"5",4,863,491,0.11,0.00016,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","divided","timed","yes","older","immediate" -345,"5",5,864,492,0.09,0.00016,10,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","older","immediate" -345,"5",5,865,492,0.07,4e-05,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","divided","timed","yes","older","immediate" -345,"5",6,866,493,0.33,0.00081,10,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","semantic","verbal/speaking","word stem","divided","timed","yes","older","immediate" -345,"5",6,867,493,0.06,9e-05,10,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word stem","divided","timed","no","older","immediate" -346,"1",1,868,315,0.61,0.00075,30,12,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" -346,"1",1,869,315,0.38,0.000853333333333333,30,12,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" -346,"1",1,870,316,0.73,0.00108,30,12,"generate",NA,"within","mixed","words","recognition","source","medium","intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" -346,"1",1,871,316,0.53,0.00208333333333333,30,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" -346,"2",1,872,317,0.65,0.00035,56,12,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" -346,"2",1,873,317,0.31,0.00035,56,12,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" -346,"2",1,874,318,0.81,0.00035,56,12,"generate",NA,"within","mixed","words","recognition","source","medium","intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" -346,"2",1,875,318,0.54,0.00130178571428571,56,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","definitions","verbal/speaking",NA,"full","timed","no","younger","immediate" -362,"1",1,876,494,0.93,0.000113636363636364,22,50,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","semantic","verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -362,"1",1,877,494,0.83,0.000222727272727273,22,50,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -362,"1",1,878,495,0.78,0.000290909090909091,22,50,"generate",NA,"within","mixed","words","recognition","source","medium","intentional","semantic","verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -362,"1",1,879,495,0.68,0.000654545454545455,22,50,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","semantic","verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -404,"1",1,880,496,0.89,0.000640743033664728,12,20,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -404,"1",2,881,496,0.74,0.001293813532715,12,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -404,"2",1,882,497,0.86,0.000718093763903156,16,20,"generate",NA,"between","pure","words","recognition","item","low","intentional",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -404,"2",2,883,497,0.7,0.00136804472884322,16,20,"read",NA,"between","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -434,"1",1,884,498,0.84,0.000596783238609205,28,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"1",1,885,498,0.51,0.00117736218255749,28,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"1",1,886,499,0.59,0.00120455531956865,28,22,"generate",NA,"within","mixed","words","recognition","font type","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"1",1,887,499,0.7,0.00102174433668025,28,22,"read",NA,"within","mixed","words","recognition","font type",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2a",1,888,500,0.73,0.00100597708546187,24,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2a",1,889,500,0.57,0.00129742396807054,24,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2a",1,890,501,0.6,0.00128306289857587,24,24,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2a",1,891,501,0.7,0.00109443331393804,24,24,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2b",1,892,502,0.79,0.000739020736315536,28,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2b",1,893,502,0.64,0.0011263223557932,28,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2b",1,894,503,0.61,0.00116485323807538,28,24,"generate",NA,"within","mixed","words","recognition","font type","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2b",1,895,503,0.7,0.00100104357222735,28,24,"read",NA,"within","mixed","words","recognition","font type",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2c",1,896,504,0.83,0.000483926251449958,40,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2c",1,897,504,0.7,0.00078764380483765,40,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2c",1,898,505,0.62,0.000908015231851382,40,24,"generate",NA,"within","mixed","words","recognition","location","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2c",1,899,505,0.63,0.000897891026993363,40,24,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2d",1,900,506,0.84,0.000584692279248447,28,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2d",1,901,506,0.68,0.00104901347784796,28,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2d",1,902,507,0.67,0.00107083681658361,28,24,"generate",NA,"within","mixed","words","recognition","background color","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"2d",1,903,507,0.66,0.00109106588273634,28,24,"read",NA,"within","mixed","words","recognition","background color",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"4a",1,904,508,0.71,0.000937107451252982,32,20,"generate",NA,"within","mixed","non-words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"4a",1,905,508,0.72,0.00091114812498967,32,20,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"4a",1,906,509,0.55,0.00113819791733907,32,20,"generate",NA,"within","mixed","non-words","recognition","font color","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"4a",1,907,509,0.63,0.00109665247146399,32,20,"read",NA,"within","mixed","non-words","recognition","font color",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"4b",1,908,510,0.62,0.00106493142111444,34,20,"generate",NA,"within","mixed","non-words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"4b",1,909,510,0.66,0.00100683050008629,34,20,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"4b",1,910,511,0.53,0.00108266138513266,34,20,"generate",NA,"within","mixed","non-words","recognition","font type","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"4b",1,911,511,0.63,0.00105305762925621,34,20,"read",NA,"within","mixed","non-words","recognition","font type",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"5",1,912,512,0.63,0.000939247393972728,40,20,"generate",NA,"within","mixed","non-words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"5",1,913,512,0.66,0.000898016307090657,40,20,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"5",1,914,513,0.62,0.000949837914139504,40,20,"generate",NA,"within","mixed","non-words","recognition","location","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"5",1,915,513,0.6,0.000965928257942499,40,20,"read",NA,"within","mixed","non-words","recognition","location",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -434,"6a",1,916,514,0.86,0.000478397023738957,32,25,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -434,"6a",1,917,514,0.71,0.000887813511917755,32,25,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -434,"6a",1,918,515,0.64,0.00102545671635045,32,25,"generate",NA,"within","mixed","words","recognition","font color","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -434,"6a",1,919,515,0.62,0.00105068101105564,32,25,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -434,"6b",1,920,516,0.85,0.00048854623409636,40,16,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -434,"6b",1,921,516,0.68,0.000923738120560559,40,16,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -434,"6b",1,922,517,0.67,0.000942955271086954,40,16,"generate",NA,"within","mixed","words","recognition","font color","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -434,"6b",1,923,517,0.66,0.000960768540356816,40,16,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -434,"6b",1,924,518,0.81,0.000595904068992173,40,16,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -434,"6b",1,925,518,0.8,0.000623315116194121,40,16,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -434,"6b",1,926,519,0.57,0.0010449930256901,40,16,"generate",NA,"within","mixed","non-words","recognition","font color","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -434,"6b",1,927,519,0.58,0.00104307758666879,40,16,"read",NA,"within","mixed","non-words","recognition","font color",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -442,"1",1,928,319,0.91,0.000784,16,30,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -442,"1",1,929,319,0.73,0.0029506624,16,30,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -442,"1",1,930,320,0.65,0.00138579405412888,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -442,"1",1,931,320,0.6,0.00146570377119155,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -442,"1",1,932,321,0.59,0.00147391375987295,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -442,"1",1,933,321,0.59,0.00147391375987295,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -442,"1",1,934,322,0.66,0.00136265387938639,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -442,"1",1,935,322,0.57,0.00148210910388415,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -442,"1",1,936,323,0.6,0.00146570377119155,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -442,"1",1,937,323,0.56,0.00148204847428844,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","writing/typing","word stem","full","timed","yes","younger","immediate" -442,"1",1,938,324,0.76,0.00103861413222792,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -442,"1",1,939,324,0.61,0.00145480837490616,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -442,"1",1,940,325,0.81,0.000845168172401595,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -442,"1",1,941,325,0.79,0.000922977694767403,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -442,"1",1,942,326,0.79,0.000922977694767403,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -442,"1",1,943,326,0.69,0.00128102875485033,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -442,"1",1,944,327,0.81,0.000845168172401595,16,30,"generate",NA,"within","mixed","words","recognition","location","medium","intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -442,"1",1,945,327,0.69,0.00128102875485033,16,30,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","category","covert/thinking","word stem","full","timed","yes","younger","immediate" -448,"1",1,946,520,0.8,0.00116213705058902,20,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -448,"1",1,947,520,0.55,0.00194452263399905,20,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -448,"1",1,948,521,0.9,0.00068122370082679,20,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -448,"1",1,949,521,0.57,0.00194833252268403,20,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -448,"1",1,950,522,0.8,0.00116213705058902,20,10,"generate","low","within","mixed","words","recognition","source","low","incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -448,"1",1,951,522,0.84,0.000959941672490842,20,10,"read","low","within","mixed","words","recognition","source",NA,"incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -448,"1",1,952,523,0.84,0.000959941672490842,20,10,"generate","high","within","mixed","words","recognition","source","low","incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -448,"1",1,953,523,0.8,0.00116213705058902,20,10,"read","high","within","mixed","words","recognition","source",NA,"incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -448,"1",2,954,524,0.85,0.000910867817606875,20,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",2,955,524,0.72,0.00155662571946211,20,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",2,956,525,0.85,0.000910867817606875,20,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",2,957,525,0.73,0.00151066877205531,20,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",2,958,526,0.73,0.00151066877205531,20,10,"generate","low","within","mixed","words","recognition","source","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",2,959,526,0.72,0.00155662571946211,20,10,"read","low","within","mixed","words","recognition","source",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",2,960,527,0.77,0.00131511582458486,20,10,"generate","high","within","mixed","words","recognition","source","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",2,961,527,0.84,0.000959941672490842,20,10,"read","high","within","mixed","words","recognition","source",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",3,962,528,0.86,0.000862683170670081,20,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",3,963,528,0.85,0.000910867817606875,20,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",3,964,529,0.88,0.000769484058884594,20,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",3,965,529,0.88,0.000769484058884594,20,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",3,966,530,0.68,0.00172225936296812,20,10,"generate","low","within","mixed","words","recognition","source","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",3,967,530,0.71,0.00160097520975145,20,10,"read","low","within","mixed","words","recognition","source",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",3,968,531,0.84,0.000959941672490842,20,10,"generate","high","within","mixed","words","recognition","source","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"1",3,969,531,0.81,0.00111103064754952,20,10,"read","high","within","mixed","words","recognition","source",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"2",1,970,532,0.84,0.000959941672490842,20,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -448,"2",1,971,532,0.45,0.00172063965964124,20,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -448,"2",1,972,533,0.91,0.000639165011493308,20,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -448,"2",1,973,533,0.51,0.0018938183071053,20,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","self-paced","yes","younger","immediate" -448,"2",2,974,534,0.79,0.00121331652016343,20,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"2",2,975,534,0.78,0.00126437625042934,20,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"2",2,976,535,0.88,0.000769484058884594,20,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"2",2,977,535,0.67,0.00175808869239275,20,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"2",3,978,536,0.82,0.001060181412997,20,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"2",3,979,536,0.85,0.000910867817606875,20,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"2",3,980,537,0.86,0.000862683170670081,20,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -448,"2",3,981,537,0.86,0.000862683170670081,20,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -449,"1",1,982,538,0.3714,0.000268249655172414,29,20,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -449,"1",1,983,538,0.2103,0.000482582413793103,29,20,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -449,"1",2,984,539,0.2192,0.000292496896551724,29,20,"generate",NA,"within","mixed","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" -449,"1",2,985,539,0.1508,0.000113216896551724,29,20,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","older","immediate" -465,"1",1,986,328,0.83,0.000400000000071788,32,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" -465,"1",1,987,328,0.61,0.000899999994858223,32,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" -465,"1",1,988,329,0.81,0.000899999994858223,32,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" -465,"1",1,989,329,0.62,0.000400000000071788,32,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" -465,"1",1,990,330,0.87,0.00160000000028715,32,10,"generate","high","within","mixed","words","recognition","source","low","incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" -465,"1",1,991,330,0.7,0.000899999994858223,32,10,"read","high","within","mixed","words","recognition","source",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" -465,"1",1,992,331,0.8,0.00249999999160984,32,10,"generate","low","within","mixed","words","recognition","source","low","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" -465,"1",1,993,331,0.65,0.00249999999160984,32,10,"read","low","within","mixed","words","recognition","source",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" -465,"2",1,994,332,0.84,0.000399999998533143,70,10,"generate","high","within","mixed","words","recognition","item","low","incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" -465,"2",1,995,332,0.54,0.000399999998533143,70,10,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" -465,"2",1,996,333,0.65,0.000399999998533143,70,10,"generate","low","within","mixed","words","recognition","item","low","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" -465,"2",1,997,333,0.46,0.000900000000285258,70,10,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" -465,"2",1,998,334,0.49,0.0016000000036944,70,10,"generate","high","within","mixed","words","recognition",NA,"low","incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" -465,"2",1,999,334,0.52,0.000900000000285258,70,10,"read","high","within","mixed","words","recognition",NA,NA,"incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" -465,"2",1,1000,335,0.8,0.000399999998533143,70,10,"generate","low","within","mixed","words","recognition",NA,"low","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" -465,"2",1,1001,335,0.72,0.000900000000285258,70,10,"read","low","within","mixed","words","recognition",NA,NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" -465,"3",1,1002,336,0.74,0.00040000000282785,14,20,"generate","high","between","mixed","words","recognition","item","low","incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" -465,"3",2,1003,336,0.78,0.00040000000282785,14,20,"read","high","between","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" -465,"3",1,1004,337,0.65,0.00040000000282785,14,20,"generate","low","between","mixed","words","recognition","item","low","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" -465,"3",2,1005,337,0.46,0.000900000006362663,14,20,"read","low","between","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" -465,"3",1,1006,338,0.44,0.00489999999722459,14,20,"generate","high","between","mixed","words","recognition",NA,"low","incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" -465,"3",2,1007,338,0.55,0.00249999999094794,14,20,"read","high","between","mixed","words","recognition",NA,NA,"incidental",NA,"writing/typing","anagram","full","self-paced","yes","younger","immediate" -465,"3",1,1008,339,0.67,0.00249999999094794,14,20,"generate",NA,"between","mixed","words","recognition",NA,"low","incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" -465,"3",2,1009,339,0.66,0.00249999999094794,14,20,"read",NA,"between","mixed","words","recognition",NA,NA,"incidental",NA,"writing/typing","letter transposition","full","self-paced","yes","younger","immediate" -501,"1",1,1010,540,0.83,0.000202396781064771,120,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -501,"1",1,1011,540,0.5,0.000375333292505174,120,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -501,"1",1,1012,541,0.54,0.000388284415630931,120,20,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -501,"1",1,1013,541,0.58,0.000389807431703346,120,20,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -501,"1",1,1014,542,0.67,0.000352390826081717,120,20,"generate",NA,"within","mixed","words","recognition","source","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -501,"1",1,1015,542,0.71,0.000320899041750182,120,20,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -515,"1",1,1016,543,0.81,0.000290909090909091,22,40,"generate","low","within","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -515,"1",1,1017,543,0.68,0.000454545454545455,22,40,"read","low","within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -515,"1",2,1018,544,0.8,0.000368181818181818,22,40,"generate","high","within","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -515,"1",2,1019,544,0.53,0.000368181818181818,22,40,"read","high","within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -515,"1",3,1020,545,0.69,0.000890909090909091,22,40,"generate","low","within","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -515,"1",3,1021,545,0.53,0.000654545454545455,22,40,"read","low","within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -515,"1",4,1022,546,0.43,0.000890909090909091,22,40,"generate","high","within","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -515,"1",4,1023,546,0.38,0.000768181818181818,22,40,"read","high","within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -544,"1a",1,1024,547,0.8,0.000885819600482599,24,15,"generate",NA,"within","mixed","words","recognition","item","medium","incidental","antonym","verbal/speaking","cue only","full","self-paced","yes","younger","immediate" -544,"1a",1,1025,547,0.7,0.00125273267719112,24,15,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","antonym","verbal/speaking","cue only","full","self-paced","yes","younger","immediate" -553,"3",1,1026,548,0.31,0.000942189984668704,16,16,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -553,"3",1,1027,548,0.2,0.000496801942258548,16,16,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -553,"3",2,1028,549,0.29,0.000852966702130405,16,16,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -553,"3",2,1029,549,0.16,0.000372110842126861,16,16,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -553,"4",1,1030,550,0.57,0.00184301794328077,12,16,"generate",NA,"within","pure","words","free recall","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -553,"4",1,1031,550,0.56,0.00184294254975373,12,16,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -553,"4",2,1032,551,0.54,0.00183245209603555,12,16,"generate",NA,"within","pure","words","free recall","item","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -553,"4",2,1033,551,0.56,0.00184294254975373,12,16,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -553,"5",1,1034,552,0.3,0.00089731009336808,16,16,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -553,"5",1,1035,552,0.28,0.000809295373309163,16,16,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -553,"5",2,1036,553,0.27,0.000766421170793167,16,16,"generate",NA,"within","pure","words","free recall","item","low","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -553,"5",2,1037,553,0.24,0.000643667423222436,16,16,"read",NA,"within","pure","words","free recall","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -553,"6",1,1038,554,0.89,0.000645381245565124,16,16,"generate",NA,"within","pure","words","recognition","item","low","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -553,"6",1,1039,554,0.75,0.00125996968908304,16,16,"read",NA,"within","pure","words","recognition","item",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","short" -690,"1",1,1040,575,0.62,0.0012259353726749,36,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"1",1,1041,575,0.26,0.000526359952371774,36,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"1",1,1042,576,0.65,0.00117873297989746,36,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"1",1,1043,576,0.29,0.000619728592183584,36,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"1",1,1044,577,0.67,0.00113756079683267,36,12,"generate",NA,"within","mixed","words","recognition","source","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"1",1,1045,577,0.76,0.000883427611337388,36,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"1",1,1046,578,0.79,0.000785069213777194,36,12,"generate",NA,"within","mixed","words","recognition","source","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"1",1,1047,578,0.63,0.00121226641600956,36,12,"read",NA,"within","mixed","words","recognition","source",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"2",1,1048,579,0.64,0.00126979762620967,33,12,"generate",NA,"between","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"2",2,1049,579,0.49,0.00126901868279548,33,12,"read",NA,"between","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"2",1,1050,580,0.67,0.0012072441257709,33,12,"generate",NA,"between","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"2",2,1051,580,0.25,0.000527029188757082,33,12,"read",NA,"between","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"2",1,1052,581,0.6,0.00132307185379243,33,12,"generate",NA,"between","mixed","words","recognition","font color","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"2",2,1053,581,0.51,0.00130044692080843,33,12,"read",NA,"between","mixed","words","recognition","font color",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"2",1,1054,582,0.49,0.00126901868279548,33,12,"generate",NA,"between","mixed","words","recognition","font color","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -690,"2",2,1055,582,0.63,0.00128652597177376,33,12,"read",NA,"between","mixed","words","recognition","font color",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -691,"1",1,1056,340,0.83,0.000686321940111699,24,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -691,"1",1,1057,340,0.6,0.0013095955926349,24,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -691,"1",1,1058,341,0.8,0.000789887864829155,24,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"1",1,1059,341,0.65,0.00123819684526803,24,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"1",1,1060,342,0.59,0.00131693115743597,24,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -691,"1",1,1061,342,0.66,0.0012175212684897,24,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -691,"1",1,1062,343,0.53,0.00130922063133622,24,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"1",1,1063,343,0.62,0.0012877804700778,24,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"2",1,1064,344,0.81,0.000634546880739736,32,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"2",1,1065,344,0.52,0.00109185879122239,32,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"2",1,1066,345,0.63,0.00107004468036678,32,22,"generate",NA,"within","mixed","words","recognition","font type","high","intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"2",1,1067,345,0.73,0.000862793622527772,32,22,"read",NA,"within","mixed","words","recognition","font type",NA,"intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"3",1,1068,346,0.82,0.000720590082055566,24,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -691,"3",1,1069,346,0.65,0.00123819684526803,24,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -691,"3",1,1070,347,0.85,0.000619103775433735,24,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"3",1,1071,347,0.75,0.000961620718105151,24,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"3",1,1072,348,0.57,0.0013242536373314,24,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -691,"3",1,1073,348,0.64,0.00125686399423877,24,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -691,"3",1,1074,349,0.65,0.00123819684526803,24,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"3",1,1075,349,0.74,0.000994598617618907,24,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"4",1,1076,350,0.7,0.00100104357222735,28,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"4",1,1077,350,0.59,0.00118015076448994,28,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"4",1,1078,351,0.65,0.00110959403252113,28,24,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","rhyme","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"4",1,1079,351,0.74,0.000891296642437175,28,24,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","rhyme","covert/thinking","word stem","full","timed","yes","younger","immediate" -691,"5",1,1080,352,0.82,0.000605505176764716,32,22,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -691,"5",1,1081,352,0.52,0.00109185879122239,32,22,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -691,"5",1,1082,353,0.55,0.00111058211999225,32,22,"generate",NA,"within","mixed","words","recognition","font color","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -691,"5",1,1083,353,0.63,0.00107004468036678,32,22,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -691,"6",1,1084,354,0.85,0.000570419932473886,32,16,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","antonym","writing/typing","letter transposition","full","timed","yes","younger","immediate" -691,"6",1,1085,354,0.66,0.0011217802690201,32,16,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","letter transposition","full","timed","yes","younger","immediate" -691,"6",1,1086,355,0.8,0.000727774244636333,32,16,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional","antonym","writing/typing","letter transposition","full","timed","yes","younger","immediate" -691,"6",1,1087,355,0.82,0.000663925762138214,32,16,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","antonym","writing/typing","letter transposition","full","timed","yes","younger","immediate" -691,"6",1,1088,356,0.63,0.00117328514634733,32,16,"generate",NA,"within","mixed","words","recognition","location","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -691,"6",1,1089,356,0.53,0.00120626876099572,32,16,"read",NA,"within","mixed","words","recognition","location",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -691,"6",1,1090,357,0.59,0.00121337296218409,32,16,"generate",NA,"within","mixed","non-words","recognition","location","medium","intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -691,"6",1,1091,357,0.52,0.00119720393470941,32,16,"read",NA,"within","mixed","non-words","recognition","location",NA,"intentional",NA,"writing/typing","letter transposition","full","timed","yes","younger","immediate" -702,"1",1,1092,555,0.66,0.00045,18,40,"generate",NA,"within","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","self-paced","yes","younger","immediate" -702,"1",1,1093,555,0.58,0.00108888888888889,18,40,"read",NA,"within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","self-paced","yes","younger","immediate" -702,"1",2,1094,556,0.5,0.00142222222222222,18,40,"generate",NA,"within","pure","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word stem","full","self-paced","yes","older","immediate" -702,"1",2,1095,556,0.36,0.000672222222222222,18,40,"read",NA,"within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word stem","full","self-paced","yes","older","immediate" -738,"1",1,1096,557,0.95,0.000223391151204524,36,50,"generate",NA,"within","mixed","words","recognition","source","low","intentional","semantic","writing/typing","cue only","full","self-paced","yes","younger","immediate" -738,"1",1,1097,557,0.72,0.000677675845204443,36,100,"generate",NA,"within","mixed","words","recognition","source","medium","intentional","semantic","covert/thinking","word fragment","full","self-paced","yes","younger","immediate" -738,"1",1,1098,557,0.61,0.000878808285020297,36,50,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","semantic","covert/thinking","word fragment","full","self-paced","yes","younger","immediate" -745,"1",1,1099,558,0.162,0.000423646549109065,26,8,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","immediate" -745,"1",1,1100,558,0.038,0.000143587572232117,26,8,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","immediate" -745,"1",1,1101,559,0.806,0.00112991809034689,26,8,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","immediate" -745,"1",1,1102,559,0.457,0.00174369507725389,26,8,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","immediate" -745,"2a",1,1103,560,0.262,0.000753133798350955,30,8,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","immediate" -745,"2a",1,1104,560,0.071,0.000180532028719863,30,8,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","immediate" -745,"2b",1,1105,561,0.614,0.00113912614952628,54,8,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","long" -745,"2b",1,1106,561,0.355,0.000769632077661941,54,8,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","definitions","verbal/speaking","word stem","full","self-paced","no","younger","long" -762,"1",1,1107,562,0.59,0.000795737526219401,52,20,"generate","low","between","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -762,"1",1,1108,562,0.755,0.000570930315739496,52,20,"generate","high","between","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -762,"1",2,1109,562,0.445,0.00077336168389306,38,40,"read","low","between","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -762,"1",1,1110,563,0.63,0.000984615384615385,26,20,"generate","low","between","pure","words","recognition","font color","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -762,"1",1,1111,563,0.54,0.000753846153846154,26,20,"generate","high","between","pure","words","recognition","font color","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -762,"1",2,1112,563,0.67,0.00118421052631579,19,40,"read","low","between","pure","words","recognition","font color",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -762,"1",3,1113,564,0.57,0.000753846153846154,26,20,"generate","low","between","pure","words","recognition","background color","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -762,"1",3,1114,564,0.49,0.00065,26,20,"generate","high","between","pure","words","recognition","background color","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -762,"1",4,1115,564,0.56,0.000889473684210526,19,40,"read","low","between","pure","words","recognition","background color",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -762,"1a",1,1116,565,0.73,0.000946038011541772,32,16,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -762,"1a",1,1117,565,0.62,0.0011865145682052,32,16,"read",NA,"within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -762,"1a",1,1118,566,0.63,0.0015125,32,16,"generate",NA,"within","pure","words","recognition","background color","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -762,"1a",1,1119,566,0.62,8e-04,32,16,"read",NA,"within","pure","words","recognition","background color",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -762,"2",1,1120,567,0.76,0.00090916033849736,26,20,"generate","low","within","pure","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"2",1,1121,567,0.61,0.00127347975878325,26,20,"read","low","within","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"2",2,1122,568,0.73,0.00100594121120931,26,20,"generate","high","within","pure","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"2",2,1123,568,0.61,0.00127347975878325,26,20,"read","high","within","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"2",1,1124,569,0.61,0.00124615384615385,26,20,"generate","low","within","pure","words","recognition","font color","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"2",1,1125,569,0.7,0.00153846153846154,26,20,"read","low","within","pure","words","recognition","font color",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"2",2,1126,570,0.53,0.000984615384615385,26,20,"generate","high","within","pure","words","recognition","font color","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"2",2,1127,570,0.67,0.000753846153846154,26,20,"read","high","within","pure","words","recognition","font color",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"3",1,1128,571,0.73,0.000962516388027311,28,20,"generate","low","within","pure","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"3",1,1129,571,0.54,0.00123425537637249,28,20,"read","low","within","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"3",2,1130,572,0.78,0.000805592121967955,28,20,"generate","high","within","pure","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"3",2,1131,572,0.54,0.00123425537637249,28,20,"read","high","within","pure","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"3",1,1132,573,0.81,0.000432142857142857,28,20,"generate","low","within","pure","words","recognition","location","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"3",1,1133,573,0.74,0.000603571428571429,28,20,"read","low","within","pure","words","recognition","location",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"3",2,1134,574,0.75,0.000514285714285714,28,20,"generate","high","within","pure","words","recognition","location","medium","intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -762,"3",2,1135,574,0.7,0.000803571428571429,28,20,"read","high","within","pure","words","recognition","location",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","no","younger","immediate" -767,"1",1,1136,583,0.273,0.000402769978970339,49,16,"generate",NA,"between","pure","words","cued recall","item","medium","intentional","antonym","verbal/speaking","cue only","full","timed","no","younger","immediate" -767,"1",2,1137,583,0.381,0.000506670644509153,67,16,"read",NA,"between","pure","words","cued recall","item",NA,"intentional","antonym","verbal/speaking","cue only","full","timed","no","younger","immediate" -781,"1",1,1138,584,0.84,0.000253125,32,46,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -781,"1",1,1139,584,0.52,0.000528125,32,46,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","self-paced","no","younger","immediate" -797,"1",1,1140,585,0.87,0.0004830643975113,24,50,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","synonym","covert/thinking","word fragment","full","timed","yes","younger","immediate" -797,"1",1,1141,585,0.65,0.00107908058934245,24,50,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","synonym","covert/thinking","word fragment","full","timed","yes","younger","immediate" -816,"1.1a",1,1142,586,0.92,0.000286867326628475,40,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","synonym","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -816,"1.1a",1,1143,586,0.67,0.00084255871370062,40,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","synonym","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -816,"1.1b",1,1144,587,0.86,0.000406047374689354,41,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","synonym","verbal/speaking","word fragment","full","timed","yes","younger","long" -816,"1.1b",1,1145,587,0.56,0.000917002869753181,41,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","synonym","verbal/speaking","word fragment","full","timed","yes","younger","long" -816,"1.2a",1,1146,588,0.88,0.000561062544109181,22,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word fragment","full","timed","yes","younger","immediate" -816,"1.2a",1,1147,588,0.6,0.00140488494948208,22,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word fragment","full","timed","yes","younger","immediate" -816,"1.2b",1,1148,589,0.85,0.000634498444671833,24,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word fragment","divided","timed","yes","younger","immediate" -816,"1.2b",1,1149,589,0.53,0.00134177578505822,24,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word fragment","divided","timed","yes","younger","immediate" -816,"1.3a",1,1150,590,0.69,0.000713254176697615,50,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"1.3a",1,1151,590,0.57,0.000825212162228509,50,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"1.3a",1,1152,591,0.59,0.000820649139483445,50,20,"generate",NA,"within","mixed","words","recognition","font color","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"1.3a",1,1153,591,0.68,0.000729459348589701,50,20,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"1.3b",1,1154,592,0.71,0.000699949082840342,48,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"1.3b",1,1155,592,0.6,0.000842385634494674,48,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"1.3b",1,1156,593,0.73,0.000660466954788024,48,20,"generate",NA,"within","mixed","words","recognition","location","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"1.3b",1,1157,593,0.68,0.000752974720770273,48,20,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"1.3c",1,1158,594,0.72,0.000752926802129705,42,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"1.3c",1,1159,594,0.6,0.000931960843293269,42,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"1.3c",1,1160,595,0.52,0.000924692544246027,42,20,"generate",NA,"within","mixed","words","recognition","background color","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"1.3c",1,1161,595,0.55,0.000940549285663635,42,20,"read",NA,"within","mixed","words","recognition","background color",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.1",1,1162,596,0.69,0.000713254176697615,50,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.1",1,1163,596,0.57,0.000825212162228509,50,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.1",2,1164,597,0.61,0.00084979298030137,47,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.1",2,1165,597,0.49,0.000821179572419141,47,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.1",1,1166,598,0.59,0.000820649139483445,50,20,"generate",NA,"within","mixed","words","recognition","font color","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.1",1,1167,598,0.68,0.000729459348589701,50,20,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.1",2,1168,599,0.52,0.000849480164211435,47,20,"generate",NA,"within","mixed","words","recognition","font color","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.1",2,1169,599,0.61,0.00084979298030137,47,20,"read",NA,"within","mixed","words","recognition","font color",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.2",1,1170,600,0.71,0.000699949082840342,48,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.2",1,1171,600,0.6,0.000842385634494674,48,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.2",2,1172,601,0.58,0.00109308567475003,34,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.2",2,1173,601,0.46,0.000987314667440042,34,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.2",1,1174,602,0.73,0.000660466954788024,48,20,"generate",NA,"within","mixed","words","recognition","location","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.2",1,1175,602,0.68,0.000752974720770273,48,20,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.2",2,1176,603,0.66,0.00100683050008629,34,20,"generate",NA,"within","mixed","words","recognition","location","low","intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"2.2",2,1177,603,0.75,0.000795213269419232,34,20,"read",NA,"within","mixed","words","recognition","location",NA,"intentional","semantic","writing/typing","sentence completion","full","timed","yes","younger","immediate" -816,"3",1,1178,604,0.87,0.0004830643975113,24,50,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","immediate" -816,"3",1,1179,604,0.65,0.00107908058934245,24,50,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","immediate" -831,"1",1,1180,605,0.25,0.000648717948001455,12,24,"generate",NA,"within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -831,"1",1,1181,605,0.18,0.000409607668892396,12,24,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -831,"2",1,1182,606,0.39,0.00145637506202935,16,12,"generate","low","within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -831,"2",1,1183,606,0.24,0.000720364740979009,16,12,"read","low","within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -831,"2",1,1184,607,0.18,0.000483000757986598,16,12,"generate","high","within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -831,"2",1,1185,607,0.16,0.000416450360439577,16,12,"read","high","within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -831,"3",1,1186,608,0.43,0.00173799362186167,12,12,"generate","low","within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -831,"3",1,1187,608,0.26,0.000861204725854024,12,12,"read","low","within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -831,"3",1,1188,609,0.22,0.000674752524503319,12,12,"generate","high","within","mixed","words","cued recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -831,"3",1,1189,609,0.12,0.000321530124072486,12,12,"read","high","within","mixed","words","cued recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -854,"1",1,1190,610,0.58,0.00130161397128949,62,6,"generate","low","within","mixed","words","recognition","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -854,"1",1,1191,610,0.2,0.000373366032411905,62,6,"read","low","within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -854,"1",1,1192,611,0.76,0.000913803953695206,62,6,"generate","high","within","mixed","words","recognition","item","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -854,"1",1,1193,611,0.67,0.0011766754178542,62,6,"read","high","within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -854,"1",1,1194,612,0.79,0.000812063537823934,62,6,"generate","low","within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -854,"1",1,1195,612,0.21,0.000399462653942955,62,6,"read","low","within","mixed","words","recognition","source",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -854,"1",1,1196,613,0.68,0.00115269511961636,62,6,"generate","high","within","mixed","words","recognition","source","low","intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -854,"1",1,1197,613,0.39,0.000977988696597485,62,6,"read","high","within","mixed","words","recognition","source",NA,"intentional",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -861,"1a",1,1198,614,0.7,0.00112032467016286,28,16,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","synonym","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -861,"1a",1,1199,614,0.56,0.00132806320845584,28,16,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","synonym","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -861,"1b",1,1200,615,0.69,0.00125502257588276,24,16,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -861,"1b",1,1201,615,0.74,0.00109055986730372,24,16,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -861,"2a",1,1202,616,0.69,0.000845585193207683,30,72,"generate",NA,"between","mixed","words","recognition","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -861,"2a",2,1203,616,0.66,0.000899464543253568,30,72,"read",NA,"between","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -905,"2",1,1204,617,0.56,0.00110086453772964,28,36,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -905,"2",2,1205,617,0.72,0.000879574783424165,28,36,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -905,"2",3,1206,618,0.38,0.000798227951323498,28,36,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","long" -905,"2",4,1207,618,0.31,0.000597809306081094,28,36,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","long" -905,"2",3,1208,619,0.86,0.000289285714285714,28,36,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","long" -905,"2",4,1209,619,0.73,0.00115714285714286,28,36,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","yes","younger","long" -982,"1",1,1210,620,0.85,0.000520372671041832,31,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -982,"1",1,1211,620,0.61,0.00109256634811495,31,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -982,"1",1,1212,621,0.77,0.00075131684437661,31,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -982,"1",1,1213,621,0.58,0.00111102907359971,31,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -982,"1",1,1214,622,0.62,0.00108241265765244,31,24,"generate",NA,"within","mixed","words","recognition","source","high","intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -982,"1",1,1215,622,0.65,0.00104073634375156,31,24,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","antonym","writing/typing","word stem","full","timed","yes","younger","immediate" -982,"1",1,1216,623,0.65,0.00104073634375156,31,24,"generate",NA,"within","mixed","words","recognition","source","high","intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -982,"1",1,1217,623,0.59,0.00110691456128346,31,24,"read",NA,"within","mixed","words","recognition","source",NA,"intentional","rhyme","writing/typing","word stem","full","timed","yes","younger","immediate" -999,"1",1,1218,358,0.9,0.000290909090909091,22,12,"generate","low","within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -999,"1",1,1219,358,0.81,0.00055,22,12,"generate","low","within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"1",1,1220,358,0.64,0.0022,22,12,"read","low","within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"1",1,1221,359,0.92,0.00055,22,12,"generate","high","within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -999,"1",1,1222,359,0.71,0.00131363636363636,22,12,"generate","high","within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"1",1,1223,359,0.55,0.00284090909090909,22,12,"read","high","within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"1",1,1224,361,0.89,0.000768181818181818,22,12,"generate","low","within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -999,"1",1,1225,361,0.68,0.00240454545454545,22,12,"generate","low","within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"1",1,1226,361,0.75,0.00284090909090909,22,12,"read","low","within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"1",1,1227,362,0.89,0.00102272727272727,22,12,"generate","high","within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -999,"1",1,1228,362,0.67,0.00240454545454545,22,12,"generate","high","within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"1",1,1229,362,0.76,0.00382272727272727,22,12,"read","high","within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"1",1,1230,364,0.9,0.00055,22,12,"generate","low","within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -999,"1",1,1231,364,0.83,0.00147272727272727,22,12,"generate","low","within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"1",1,1232,364,0.62,0.00261818181818182,22,12,"read","low","within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"1",1,1233,365,0.87,0.00131363636363636,22,12,"generate","high","within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -999,"1",1,1234,365,0.57,0.00331363636363636,22,12,"generate","high","within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"1",1,1235,365,0.3,0.00284090909090909,22,12,"read","high","within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"2",1,1236,366,0.84,0.0018375,24,24,"generate",NA,"within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -999,"2",1,1237,366,0.86,0.00135,24,24,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"2",1,1238,366,0.62,0.0024,24,24,"read",NA,"within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"2",1,1239,367,0.8,0.00166666666666667,24,24,"generate",NA,"within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -999,"2",1,1240,367,0.68,0.00201666666666667,24,24,"generate",NA,"within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"2",1,1241,367,0.63,0.0024,24,24,"read",NA,"within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"2",1,1242,368,0.95,0.00015,24,24,"generate",NA,"within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -999,"2",1,1243,368,0.91,0.000416666666666667,24,24,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"2",1,1244,368,0.81,0.00106666666666667,24,24,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"3",1,1245,369,0.8,0.00201666666666667,24,24,"generate",NA,"within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -999,"3",1,1246,369,0.84,0.000704166666666667,24,24,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"3",1,1247,369,0.6,0.00106666666666667,24,24,"read",NA,"within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"3",1,1248,370,0.79,0.00106666666666667,24,24,"generate",NA,"within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -999,"3",1,1249,370,0.66,0.00106666666666667,24,24,"generate",NA,"within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"3",1,1250,370,0.71,0.00166666666666667,24,24,"read",NA,"within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"3",1,1251,371,0.92,0.000266666666666667,24,24,"generate",NA,"within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -999,"3",1,1252,371,0.88,0.000416666666666667,24,24,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -999,"3",1,1253,371,0.75,0.00135,24,24,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1152,"1",1,1254,624,0.82,0.00125,32,12,"generate",NA,"within","pure","words","recognition","item","medium","intentional","definitions","covert/thinking","word fragment","full","timed","yes","younger","immediate" -1152,"1",1,1255,624,0.55,0.0018,32,12,"read",NA,"within","pure","words","recognition","item",NA,"intentional","definitions","covert/thinking","word fragment","full","timed","yes","younger","immediate" -1152,"1",2,1256,625,0.74,0.00125,32,12,"generate",NA,"within","pure","words","recognition","item","medium","intentional","definitions","covert/thinking","word fragment","full","timed","yes","older","immediate" -1152,"1",2,1257,625,0.49,0.0021125,32,12,"read",NA,"within","pure","words","recognition","item",NA,"intentional","definitions","covert/thinking","word fragment","full","timed","yes","older","immediate" -1152,"2b",1,1258,626,0.87,0.000672222222222222,18,12,"generate",NA,"within","pure","words","recognition","item","medium","intentional","definitions","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1152,"2b",1,1259,626,0.61,0.0018,18,12,"read",NA,"within","pure","words","recognition","item",NA,"intentional","definitions","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1152,"2b",2,1260,627,0.86,8e-04,18,12,"generate",NA,"within","pure","words","recognition","item","medium","intentional","definitions","verbal/speaking","word fragment","full","timed","yes","older","immediate" -1152,"2b",2,1261,627,0.63,0.00222222222222222,18,12,"read",NA,"within","pure","words","recognition","item",NA,"intentional","definitions","verbal/speaking","word fragment","full","timed","yes","older","immediate" -1444,"1",1,1262,628,0.82,0.000527205553620001,38,24,"generate","low","between","pure","words","cued recall","item","high","incidental",NA,"verbal/speaking","word stem","full","self-paced","no","younger","long" -1444,"1",2,1263,628,0.97,0.000305880960843912,20,24,"generate","high","between","pure","words","cued recall","item","medium","incidental",NA,"verbal/speaking","word stem","full","self-paced","no","younger","long" -1444,"1",3,1264,628,0.65,0.00132918988587701,20,24,"read","low","between","pure","words","cued recall","item",NA,"incidental",NA,"verbal/speaking","word stem","full","self-paced","no","younger","long" -1445,"1",1,1265,629,0.68,0.00269828841576483,24,5,"generate",NA,"within","pure","numbers","free recall","item","low","intentional",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1445,"1",1,1266,629,0.38,0.00221323830214398,24,5,"read",NA,"within","pure","numbers","free recall","item",NA,"intentional",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1445,"2",1,1267,630,0.55,0.00364046988352862,16,5,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1445,"2",1,1268,630,0.42,0.00299373823192371,16,5,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1445,"2",2,1269,631,0.49,0.003459856891865,16,5,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" -1445,"2",2,1270,631,0.24,0.00135313643836072,16,5,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" -1445,"2",3,1271,632,0.4,0.00282440780440771,16,5,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" -1445,"2",3,1272,632,0.1,0.000479346542582598,16,5,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" -1445,"2",1,1273,633,0.81,0.00208003421578239,16,5,"generate",NA,"within","pure","numbers","recognition","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1445,"2",1,1274,633,0.81,0.00208003421578239,16,5,"read",NA,"within","pure","numbers","recognition","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1445,"2",2,1275,634,0.75,0.00264874504444061,16,5,"generate",NA,"within","pure","numbers","recognition","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" -1445,"2",2,1276,634,0.61,0.00358041310123274,16,5,"read",NA,"within","pure","numbers","recognition","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" -1445,"2",3,1277,635,0.69,0.0031527259644885,16,5,"generate",NA,"within","pure","numbers","recognition","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" -1445,"2",3,1278,635,0.52,0.00357909512043901,16,5,"read",NA,"within","pure","numbers","recognition","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","long" -1447,"1",1,1279,636,0.4,0.00105228171721961,20,30,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -1447,"1",1,1280,636,0.26,0.000567411410100094,20,30,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -1447,"2",1,1281,637,0.32,0.000773400682312095,20,30,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -1447,"2",1,1282,637,0.26,0.000567411410100094,20,30,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -1447,"3",1,1283,638,0.37,0.0011384626233811,20,15,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -1447,"3",1,1284,638,0.28,0.000758957065330976,20,15,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -1447,"3",2,1285,639,0.68,0.00143837817727036,20,15,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -1447,"3",2,1286,639,0.65,0.00152144455310718,20,15,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","no","younger","immediate" -1448,"4",1,1287,640,0.355,0.0010930390922655,11,24,"generate",NA,"within","mixed","words","free recall","item","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",1,1288,640,0.21,0.000506664153269232,11,24,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",2,1289,641,0.316,0.000923975755467458,11,24,"generate",NA,"within","mixed","words","free recall","item","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",2,1290,641,0.228,0.000569484629531175,11,24,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",3,1291,642,0.581,0.00165044752056318,11,24,"generate",NA,"within","pure","words","free recall","item","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",3,1292,642,0.172,0.000388051675693025,11,24,"read",NA,"within","pure","words","free recall","item",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",4,1293,643,0.453,0.00147003840025331,11,24,"generate",NA,"within","pure","words","free recall","item","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",4,1294,643,0.267,0.000718476061226675,11,24,"read",NA,"within","pure","words","free recall","item",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",1,1295,644,0.331,0.000988995031456238,11,24,"generate",NA,"within","mixed","words","free recall","cue word","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",1,1296,644,0.191,0.000444913029348881,11,24,"read",NA,"within","mixed","words","free recall","cue word",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",2,1297,645,0.313,0.000911032650362313,11,24,"generate",NA,"within","mixed","words","free recall","cue word","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",2,1298,645,0.254,0.00066703012957821,11,24,"read",NA,"within","mixed","words","free recall","cue word",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",3,1299,646,0.53,0.0016351765182408,11,24,"generate",NA,"within","pure","words","free recall","cue word","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",3,1300,646,0.204,0.000486645931881284,11,24,"read",NA,"within","pure","words","free recall","cue word",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",4,1301,647,0.412,0.00132741185687012,11,24,"generate",NA,"within","pure","words","free recall","cue word","high","intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1448,"4",4,1302,647,0.235,0.000594990444626934,11,24,"read",NA,"within","pure","words","free recall","cue word",NA,"intentional","synonym","writing/typing","word fragment","full","self-paced","no","younger","immediate" -1449,"1",1,1303,648,0.56,0.00162497239126158,24,12,"generate",NA,"within","mixed","words",NA,"item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1449,"1",1,1304,648,0.44,0.00140313125293507,24,12,"read",NA,"within","mixed","words",NA,"item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1450,"1",1,1305,649,0.9,0.000568185860784074,24,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1450,"1",1,1306,649,0.79,0.00101198665075202,24,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1450,"2",1,1307,650,0.88,0.000641800867800594,24,12,"generate","high","within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1450,"2",1,1308,650,0.79,0.00101198665075202,24,12,"read","high","within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1450,"2",1,1309,651,0.81,0.000926673432044785,24,12,"generate","low","within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1450,"2",1,1310,651,0.56,0.00162497239126158,24,12,"read","low","within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1450,"3",1,1311,652,0.77,0.00109689403923499,24,12,"generate","high","within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","long" -1450,"3",1,1312,652,0.66,0.00149406377136989,24,12,"read","high","within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","long" -1450,"3",1,1313,653,0.67,0.00146636286407761,24,12,"generate","low","within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","long" -1450,"3",1,1314,653,0.54,0.001615722673919,24,12,"read","low","within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","long" -1450,"4",1,1315,654,0.328,0.00105065804611659,20,12,"generate","high","within","mixed","words","free recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -1450,"4",1,1316,654,0.228,0.000613069028475398,20,12,"read","high","within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -1450,"4",2,1317,655,0.407,0.0014082867509981,20,12,"generate","low","within","mixed","words","free recall","item","medium","intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -1450,"4",2,1318,655,0.274,0.000803977600790431,20,12,"read","low","within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","anagram","full","timed","yes","younger","immediate" -1451,"1",1,1319,656,0.77,0.00125207338734244,20,11,"generate","low","between","pure","words","cued recall","item","low","intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1451,"1",2,1320,656,0.695,0.00158425003302347,20,11,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1451,"1",1,1321,657,0.909,0.000612467579438924,20,11,"generate","high","between","pure","words","cued recall","item","low","intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1451,"1",2,1322,657,0.709,0.00152835988041879,20,11,"read","high","between","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1451,"2",1,1323,658,0.527,0.00183009346766694,20,11,"generate","low","between","pure","words","cued recall","cue word","low","intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1451,"2",2,1324,658,0.5,0.0017827853501076,20,11,"read","low","between","pure","words","cued recall","cue word",NA,"intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1451,"2",1,1325,659,0.682,0.00163259380802793,20,11,"generate","high","between","pure","words","cued recall","cue word","low","intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1451,"2",2,1326,659,0.523,0.00182457992695315,20,11,"read","high","between","pure","words","cued recall","cue word",NA,"intentional","semantic","verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1452,"1",1,1327,660,0.645625,0.00173496789714787,12,16,"generate","low","within","pure","words","cued recall","item","high","intentional","semantic","verbal/speaking","sentence completion","full","timed","yes","younger","immediate" -1452,"1",1,1328,660,0.28125,0.000865379959559237,12,16,"read","low","within","pure","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","sentence completion","full","timed","yes","younger","immediate" -1452,"1",2,1329,661,0.208125,0.00055755447186366,12,16,"generate","high","within","pure","words","cued recall","item","high","intentional","unrelated","verbal/speaking","sentence completion","full","timed","yes","younger","immediate" -1452,"1",2,1330,661,0.265625,0.000794458379436909,12,16,"read","high","within","pure","words","cued recall","item",NA,"intentional","unrelated","verbal/speaking","sentence completion","full","timed","yes","younger","immediate" -1453,"1",1,1331,662,0.58,0.00196923076923077,13,10,"generate",NA,"within","mixed","words","recognition","item","high","incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1453,"1",1,1332,662,0.35,0.00173076923076923,13,10,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1453,"1",1,1333,663,0.37,0.00307692307692308,13,10,"generate",NA,"within","mixed","non-words","recognition","item","high","incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1453,"1",1,1334,663,0.33,0.00307692307692308,13,10,"read",NA,"within","mixed","non-words","recognition","item",NA,"incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1453,"2",1,1335,664,0.69,0.00240666666666667,15,10,"generate",NA,"between","pure","words","recognition","item","high","incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1453,"2",2,1336,664,0.4,0.00352666666666667,15,10,"read",NA,"between","pure","words","recognition","item",NA,"incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1453,"2",1,1337,665,0.3,0.00322666666666667,15,10,"generate",NA,"between","pure","non-words","recognition","item","high","incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1453,"2",2,1338,665,0.28,0.000806666666666667,15,10,"read",NA,"between","pure","non-words","recognition","item",NA,"incidental","rhyme","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1454,"1",1,1339,666,0.35,0.00126215408572274,20,10,"generate","low","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","letter transposition","divided","timed","yes","younger","short" -1454,"1",2,1340,666,0.23,0.000679359112776965,20,10,"read","low","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","letter transposition","divided","timed","yes","younger","short" -1454,"1",1,1341,667,0.34,0.00121108500252425,20,10,"generate","high","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","letter transposition","divided","timed","yes","younger","short" -1454,"1",2,1342,667,0.27,0.000860603508859858,20,10,"read","high","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","letter transposition","divided","timed","yes","younger","short" -1454,"1",1,1343,668,0.36,0.00131291189821108,20,10,"generate","low","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","sentence completion","divided","timed","yes","younger","short" -1454,"1",2,1344,668,0.29,0.000957784263754569,20,10,"read","low","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","sentence completion","divided","timed","yes","younger","short" -1454,"1",1,1345,669,0.53,0.00192621493609153,20,10,"generate","high","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","sentence completion","divided","timed","yes","younger","short" -1454,"1",2,1346,669,0.4,0.00150863077542918,20,10,"read","high","between","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","sentence completion","divided","timed","yes","younger","short" -1455,"1",1,1347,670,0.39,0.00125218222142207,20,14,"generate","low","between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"1",2,1348,670,0.3,0.000863431265326123,20,14,"read","low","between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"1",1,1349,671,0.47,0.00153384155601851,20,14,"generate","high","between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"1",2,1350,671,0.41,0.00133224176259285,20,14,"read","high","between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"1",3,1351,672,0.9,0.000583766739733228,20,14,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"1",4,1352,672,0.82,0.000908510150542145,20,14,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"1",3,1353,673,0.85,0.000780557598872337,20,14,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"1",4,1354,673,0.5,0.00160465943297614,20,14,"read","high","between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"2",1,1355,674,0.27,0.000484402833615334,40,14,"generate","low","between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"2",2,1356,674,0.31,0.000595494377986952,40,14,"read","low","between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"2",1,1357,675,0.53,0.00108419726806721,40,14,"generate","high","between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"2",2,1358,675,0.38,0.000795136931676846,40,14,"read","high","between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"2",3,1359,676,0.71,0.00105214886887039,32,14,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","long" -1455,"2",4,1360,676,0.48,0.00119638829839465,32,14,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","long" -1455,"2",3,1361,677,0.48,0.00119638829839465,32,14,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","long" -1455,"2",4,1362,677,0.29,0.000629448615814405,32,14,"read","high","between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","long" -1455,"3",1,1363,678,0.36,0.00046347485729449,72,14,"generate","low","between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"3",2,1364,678,0.47,0.0006318609223835,72,14,"read","low","between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"3",1,1365,679,0.51,0.000668542322469078,72,14,"generate","high","between","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"3",2,1366,679,0.44,0.000593865670105506,72,14,"read","high","between","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"3",3,1367,680,0.96,0.000145756049272542,80,14,"generate","low","between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"3",4,1368,680,0.84,0.000309642376785892,80,14,"read","low","between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"3",3,1369,681,0.86,0.000278270310618296,80,14,"generate","high","between","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"3",4,1370,681,0.63,0.000604337835392008,80,14,"read","high","between","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"4",1,1371,682,0.41,0.00133224176259285,20,14,"generate",NA,"within","pure","words","free recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"4",1,1372,682,0.13,0.000282664716379196,20,14,"read",NA,"within","pure","words","free recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"4",2,1373,683,0.86,0.000739266325222654,20,14,"generate",NA,"within","pure","words","cued recall","item","medium","intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1455,"4",2,1374,683,0.48,0.00156001641853688,20,14,"read",NA,"within","pure","words","cued recall","item",NA,"intentional","semantic","writing/typing","word fragment","full","timed","yes","younger","short" -1456,"1",1,1375,684,0.569,0.00186214264099333,18,12,"generate",NA,"within","mixed","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1456,"1",1,1376,684,0.268,0.000813378036841678,18,12,"read",NA,"within","mixed","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1456,"2",1,1377,685,0.592,0.00202424320458542,18,10,"generate","low","within","mixed","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1456,"2",1,1378,685,0.273,0.000914972899109627,18,10,"read","low","within","mixed","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1456,"2",1,1379,686,0.523,0.00200412512715549,18,10,"generate","high","within","mixed","words","cued recall","item","medium","incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1456,"2",1,1380,686,0.24,0.000755831296889721,18,10,"read","high","within","mixed","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1457,"2R",1,1381,687,0.75,0.00128865980083696,16,15,"generate",NA,"within","mixed","words","recognition","item","medium","incidental","antonym","verbal/speaking","cue only","full","timed","no","younger","immediate" -1457,"2R",1,1382,687,0.654,0.00164852923512303,16,15,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","antonym","verbal/speaking","cue only","full","timed","no","younger","immediate" -1457,"2R",1,1383,688,0.73,0.00137597903111027,16,15,"generate",NA,"within","mixed","words","recognition","source","medium","incidental","antonym","verbal/speaking","cue only","full","timed","no","younger","immediate" -1457,"2R",1,1384,688,0.71,0.0014582338356993,16,15,"read",NA,"within","mixed","words","recognition","source",NA,"incidental","antonym","verbal/speaking","cue only","full","timed","no","younger","immediate" -1458,"2",1,1385,689,0.41,0.0010829506080182,24,20,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional",NA,"verbal/speaking","word stem","full","timed","yes","younger","immediate" -1458,"2",1,1386,689,0.22,0.000443978889313459,24,20,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","word stem","full","timed","yes","younger","immediate" -1459,"1",1,1387,690,0.837,0.00135669444444444,36,10,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","antonym","verbal/speaking","word fragment","full","self-paced","yes","younger","short" -1459,"1",1,1388,690,0.608,0.001521,36,10,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","self-paced","yes","younger","short" -1459,"1",2,1389,691,0.778,0.00121212121212121,33,10,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","antonym","verbal/speaking","word fragment","full","self-paced","yes","younger","short" -1459,"1",2,1390,691,0.554,0.00189393939393939,33,10,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","antonym","verbal/speaking","word fragment","full","self-paced","yes","younger","short" -1460,"1",1,1391,692,0.77,0.00104649574225132,16,24,"generate","low","between","pure","words","cued recall","item","low","intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1460,"1",2,1392,692,0.69,0.00134003223489858,16,24,"read","low","between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1460,"1",3,1393,693,0.78,0.00100612002223886,16,24,"generate","high","between","pure","words","cued recall","item","low","intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1460,"1",4,1394,693,0.66,0.00142541696778751,16,24,"read","high","between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1460,"1",5,1395,694,0.76,0.00108645212805488,16,24,"generate",NA,"between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1460,"1",6,1396,694,0.7,0.00130780781978892,16,24,"read",NA,"between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1460,"2",1,1397,695,0.84,0.000932768439062087,11,15,"generate","low","between","pure","words","cued recall","item","low","intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1460,"2",2,1398,695,0.69,0.00163632957912,11,15,"read","low","between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1460,"2",3,1399,696,0.83,0.000981180222491805,11,15,"generate","high","between","pure","words","cued recall","item","low","intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1460,"2",4,1400,696,0.65,0.00177015214744703,11,15,"read","high","between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","immediate" -1460,"2",1,1401,697,0.5,0.00181954278873119,11,15,"generate","low","between","pure","words","cued recall","item","low","intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","long" -1460,"2",2,1402,697,0.26,0.000790456546063613,11,15,"read","low","between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","long" -1460,"2",3,1403,698,0.4,0.0014659257055345,11,15,"generate","high","between","pure","words","cued recall","item","low","intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","long" -1460,"2",4,1404,698,0.28,0.000883022306841228,11,15,"read","high","between","pure","words","cued recall","item",NA,"intentional",NA,"verbal/speaking","sentence completion","full","timed","no","younger","long" -1461,"1",1,1405,699,0.36,0.00145943586259934,15,10,"generate",NA,"within","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"1",1,1406,699,0.18,0.000538693758538642,15,10,"read",NA,"within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"3",1,1407,700,0.319,0.00126334831844911,20,8,"generate","low","within","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"3",1,1408,700,0.1,0.000293071954767802,20,8,"read","low","within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"3",1,1409,701,0.175,0.000534897942610358,20,8,"generate","high","within","mixed","words","free recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"3",1,1410,701,0.138,0.00040280126130783,20,8,"read","high","within","mixed","words","free recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"3",1,1411,702,0.85,0.0010426161787894,20,8,"generate","low","within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"3",1,1412,702,0.638,0.00212251743036805,20,8,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"3",1,1413,703,0.763,0.00154564524796609,20,8,"generate","high","within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"3",1,1414,703,0.6,0.00220545505734616,20,8,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"4",1,1415,704,0.3,0.000953534904726992,10,16,"generate","low","between","pure","words","free recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"4",2,1416,704,0.231,0.000646970169737329,10,16,"read","low","between","pure","words","free recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"4",1,1417,705,0.113,0.000270980237781153,10,16,"generate","high","between","pure","words","free recall","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"4",2,1418,705,0.119,0.000285031012543448,10,16,"read","high","between","pure","words","free recall","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"4",1,1419,706,0.85,0.000862012930923389,10,16,"generate","low","between","pure","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"4",2,1420,706,0.706,0.00153142283783426,10,16,"read","low","between","pure","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"4",1,1421,707,0.75,0.00133891849241226,10,16,"generate","high","between","pure","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1461,"4",2,1422,707,0.65,0.00172401095583988,10,16,"read","high","between","pure","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","yes","younger","immediate" -1463,"1",1,1423,708,0.454,0.002048,8,25,"generate",NA,"between","pure","words","free recall","item","low","incidental","semantic","verbal/speaking","cue only","full","timed","no","younger","immediate" -1463,"1",2,1424,708,0.3,0.002850125,8,25,"read",NA,"between","pure","words","free recall","item",NA,"incidental","semantic","verbal/speaking","cue only","full","timed","no","younger","immediate" -1464,"1",1,1425,709,0.35,0.00333333333333333,12,8,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" -1464,"1",1,1426,709,0.21,0.0027,12,8,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" -1464,"1",1,1427,710,0.21,0.00440833333333333,12,8,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" -1464,"1",1,1428,710,0.08,0.0012,12,8,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" -1464,"1",1,1429,711,0.13,0.00140833333333333,12,8,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" -1464,"1",1,1430,711,0.08,0.0012,12,8,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" -1464,"1",1,1431,712,0.1,0.00440833333333333,12,8,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" -1464,"1",1,1432,712,0.1,0.00333333333333333,12,8,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" -1464,"2",1,1433,713,0.48,0.001225,16,6,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1464,"2",1,1434,713,0.25,0.0025,16,6,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1464,"2",1,1435,714,0.29,0.0025,16,6,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1464,"2",1,1436,714,0.19,0.001225,16,6,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1464,"2",1,1437,715,0.59,0.0025,16,6,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1464,"2",1,1438,715,0.31,0.004225,16,6,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1464,"2",1,1439,716,0.48,0.00180625,16,6,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1464,"2",1,1440,716,0.31,0.001225,16,6,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1465,"2",1,1441,717,0.039,0.000140488643858,12,15,"generate",NA,"within","mixed","non-words","free recall","item","high","intentional",NA,"verbal/speaking","letter transposition","full","timed","no","younger","immediate" -1465,"2",1,1442,717,0.085,0.000216866422744824,12,15,"read",NA,"within","mixed","non-words","free recall","item",NA,"intentional",NA,"verbal/speaking","letter transposition","full","timed","no","younger","immediate" -1466,"1",1,1443,718,0.42,0.00174396360173455,16,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional",NA,"verbal/speaking","word stem","full","timed","no","younger","immediate" -1466,"1",1,1444,718,0.25,0.000837044180514044,16,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word stem","full","timed","no","younger","immediate" -1466,"1",2,1445,719,0.2,0.00060839682323773,16,10,"generate",NA,"within","mixed","words","free recall","item","high","intentional",NA,"verbal/speaking","word stem","full","timed","no","older","immediate" -1466,"1",2,1446,719,0.18,0.000528518929677485,16,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"verbal/speaking","word stem","full","timed","no","older","immediate" -1466,"1",3,1447,720,0.4,0.00125577777415851,16,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional",NA,"verbal/speaking","word stem","full","timed","no","younger","long" -1466,"1",3,1448,720,0.36,0.00109286222185988,16,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word stem","full","timed","no","younger","long" -1466,"1",4,1449,721,0.32,0.000922965182682021,16,20,"generate",NA,"within","mixed","words","recognition","item","high","intentional",NA,"verbal/speaking","word stem","full","timed","no","older","long" -1466,"1",4,1450,721,0.29,0.000797255505091755,16,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"verbal/speaking","word stem","full","timed","no","older","long" -1467,"1",1,1451,722,0.75,0.00234972366730021,12,6,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1467,"1",1,1452,722,0.36,0.00218050284766186,12,6,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1467,"1",2,1453,723,0.28,0.00150925892025627,12,6,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1467,"1",2,1454,723,0.22,0.00105854223484453,12,6,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1467,"2",1,1455,724,0.66,0.00576846354816151,24,3,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1467,"2",1,1456,724,0.38,0.00454914786754626,24,3,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1467,"2",1,1457,725,0.49,0.00595121151765886,24,3,"generate",NA,"within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1467,"2",1,1458,725,0.17,0.00145043807509523,24,3,"read",NA,"within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1467,"3",1,1459,726,0.46,0.00291735152112187,12,6,"generate",NA,"within","pure","numbers","free recall","item","low","intentional",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1467,"3",1,1460,726,0.2,0.000926488384442939,12,6,"read",NA,"within","pure","numbers","free recall","item",NA,"intentional",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1468,"1",1,1461,727,0.762,0.00225096501214792,12,6,"generate","low","within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" -1468,"1",1,1462,727,0.307,0.00173189646308368,12,6,"read","low","within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" -1468,"1",2,1463,728,0.505,0.00312830209217885,12,6,"generate","high","within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" -1468,"1",2,1464,728,0.266,0.00139778471809584,12,6,"read","high","within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" -1468,"2",1,1465,729,0.456,0.00228002009657054,24,6,"generate","low","within","pure","numbers","free recall","cue word","low","incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" -1468,"2",1,1466,729,0.229,0.000883342602357207,24,6,"read","low","within","pure","numbers","free recall","cue word",NA,"incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" -1468,"2",2,1467,730,0.468,0.00233360726417561,24,6,"generate","high","within","pure","numbers","free recall","cue word","low","incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" -1468,"2",2,1468,730,0.167,0.000576338333862081,24,6,"read","high","within","pure","numbers","free recall","cue word",NA,"incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" -1468,"2",1,1469,731,0.656,0.00236023805039198,24,6,"generate","low","within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" -1468,"2",1,1470,731,0.328,0.00150431390771393,24,6,"read","low","within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" -1468,"2",2,1471,732,0.342,0.00159805486406143,24,6,"generate","high","within","pure","numbers","free recall","item","low","incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" -1468,"2",2,1472,732,0.18,0.000634098694862471,24,6,"read","high","within","pure","numbers","free recall","item",NA,"incidental",NA,"verbal/speaking","calculation","full","self-paced","yes","younger","immediate" -1468,"3",1,1473,733,0.613,0.00273469360849841,20,6,"generate","low","within","pure","numbers","free recall","item","low","incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" -1468,"3",1,1474,733,0.387,0.00207419951758513,20,6,"read","low","within","pure","numbers","free recall","item",NA,"incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" -1468,"3",2,1475,734,0.275,0.00126816467315788,20,6,"generate","high","within","pure","numbers","free recall","item","low","incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" -1468,"3",2,1476,734,0.297,0.00142302160998718,20,6,"read","high","within","pure","numbers","free recall","item",NA,"incidental",NA,"writing/typing","calculation","full","self-paced","yes","younger","immediate" -1469,"1",1,1477,735,0.39,0.000738108255596697,32,44,"generate",NA,"between","pure","words","free recall","item","high","intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" -1469,"1",2,1478,735,0.32,0.00056008973908654,32,44,"read",NA,"between","pure","words","free recall","item",NA,"intentional","antonym","writing/typing","word stem","full","timed","no","younger","immediate" -1469,"2a",1,1479,736,0.34,0.000568093898246645,36,42,"generate",NA,"between","pure","words","free recall","item","high","intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" -1469,"2a",2,1480,736,0.41,0.000729254208711281,36,42,"read",NA,"between","pure","words","free recall","item",NA,"intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" -1469,"2b",1,1481,737,0.86,0.000623330369338189,16,42,"generate",NA,"between","pure","words","recognition","item","high","intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" -1469,"2b",2,1482,737,0.74,0.00105732065840132,16,42,"read",NA,"between","pure","words","recognition","item",NA,"intentional","rhyme","writing/typing","word fragment","full","timed","no","younger","immediate" -1470,"1",1,1483,738,0.6,0.000965928257942499,40,20,"generate",NA,"within","mixed","words","recognition","item","low","incidental",NA,"writing/typing","anagram","full","timed","no","younger","immediate" -1470,"1",1,1484,738,0.34,0.000607142154007979,40,20,"read",NA,"within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","no","younger","immediate" -1470,"1",2,1485,739,0.66,0.000898016307090657,40,20,"generate",NA,"within","mixed","words","recognition","item","low","intentional",NA,"writing/typing","anagram","full","timed","no","younger","immediate" -1470,"1",2,1486,739,0.44,0.000843360752244818,40,20,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","no","younger","immediate" -1470,"2",1,1487,740,0.61,0.000958747972703158,40,20,"generate","low","within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","timed","no","younger","immediate" -1470,"2",1,1488,740,0.34,0.000607142154007979,40,20,"read","low","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","no","younger","immediate" -1470,"2",2,1489,741,0.66,0.000898016307090657,40,20,"generate","high","within","mixed","words","recognition","item","medium","incidental",NA,"writing/typing","anagram","full","timed","no","younger","immediate" -1470,"2",2,1490,741,0.34,0.000607142154007979,40,20,"read","high","within","mixed","words","recognition","item",NA,"incidental",NA,"writing/typing","anagram","full","timed","no","younger","immediate" -1471,"1",1,1491,742,0.18,0.002025,16,12,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1471,"1",1,1492,742,0.05,0.00075625,16,12,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1471,"2",1,1493,743,0.242,0.000660083333333333,12,50,"generate",NA,"between","pure","words","free recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1471,"2",2,1494,743,0.2,0.000752083333333333,12,50,"read",NA,"between","pure","words","free recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1472,"1",1,1495,744,0.358,0.004056,24,5,"generate","low","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"1",1,1496,744,0.3,0.002904,24,5,"read","low","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"1",1,1497,745,0.634,0.0018375,24,5,"generate","high","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"1",1,1498,745,0.342,0.00166666666666667,24,5,"read","high","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"2",1,1499,746,0.382,0.001711125,32,5,"generate","low","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"2",1,1500,746,0.368,0.001953125,32,5,"read","low","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"2",1,1501,747,0.588,0.002080125,32,5,"generate","high","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"2",1,1502,747,0.318,0.001682,32,5,"read","high","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"2",2,1503,748,0.506,0.001922,32,5,"generate","low","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"2",2,1504,748,0.306,0.002415125,32,5,"read","low","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"2",2,1505,749,0.532,0.001891125,32,5,"generate","high","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"2",2,1506,749,0.306,8e-04,32,5,"read","high","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"3",1,1507,750,0.378,0.000945851851851852,54,5,"generate","low","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"3",1,1508,750,0.204,0.000654518518518519,54,5,"read","low","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"3",1,1509,751,0.526,0.001014,54,5,"generate","high","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"3",1,1510,751,0.24,0.000962666666666667,54,5,"read","high","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","self-paced","no","younger","immediate" -1472,"4",1,1511,752,0.6,0.00224266666666667,24,5,"generate","low","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","timed","yes","younger","immediate" -1472,"4",1,1512,752,0.558,0.0024,24,5,"read","low","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","timed","yes","younger","immediate" -1472,"4",1,1513,753,0.806,0.00138016666666667,24,5,"generate","high","within","mixed","numbers","free recall","item","low","intentional",NA,"writing/typing","calculation","full","timed","yes","younger","immediate" -1472,"4",1,1514,753,0.546,0.00375,24,5,"read","high","within","mixed","numbers","free recall","item",NA,"intentional",NA,"writing/typing","calculation","full","timed","yes","younger","immediate" -1473,"1",1,1515,754,0.632,0.000578338160908212,23,15,"generate",NA,"within","pure","numbers","free recall","item","low","intentional",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1473,"1",1,1516,754,0.406,0.000772946856038647,23,15,"read",NA,"within","pure","numbers","free recall","item",NA,"intentional",NA,"verbal/speaking","calculation","full","timed","yes","younger","immediate" -1473,"1",1,1517,755,0.408666667,0.000429004828038647,23,15,"generate",NA,"within","pure","words","free recall","item","high","intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1473,"1",1,1518,755,0.234666667,0.000507130434782609,23,15,"read",NA,"within","pure","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1473,"1",2,1519,756,0.378666667,0.000598830413099415,19,15,"generate",NA,"within","pure","numbers","free recall","item","low","intentional",NA,"verbal/speaking","calculation","full","timed","yes","older","immediate" -1473,"1",2,1520,756,0.326,0.00116325146720468,19,15,"read",NA,"within","pure","numbers","free recall","item",NA,"intentional",NA,"verbal/speaking","calculation","full","timed","yes","older","immediate" -1473,"1",2,1521,757,0.228,0.000629146194994152,19,15,"generate",NA,"within","pure","words","free recall","item","high","intentional","antonym","verbal/speaking","word stem","full","timed","yes","older","immediate" -1473,"1",2,1522,757,0.102,0.000505473684210526,19,15,"read",NA,"within","pure","words","free recall","item",NA,"intentional","antonym","verbal/speaking","word stem","full","timed","yes","older","immediate" -1474,"1",1,1523,758,0.84,9e-04,16,14,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1474,"1",1,1524,758,0.67,0.00225625,16,14,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1474,"1",1,1525,759,0.36,0.00140625,16,14,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1474,"1",1,1526,759,0.35,0.00140625,16,14,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","verbal/speaking","word fragment","full","timed","no","younger","immediate" -1474,"2",1,1527,760,0.742,0.00161428046220556,18,9,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word stem","full","timed","no","younger","immediate" -1474,"2",1,1528,760,0.56,0.00216345662120962,18,9,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word stem","full","timed","no","younger","immediate" -1474,"2",1,1529,761,0.48,0.00202154051222739,18,9,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word stem","full","timed","no","younger","immediate" -1474,"2",1,1530,761,0.361,0.00146354467126032,18,9,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word stem","full","timed","no","younger","immediate" -1474,"2",1,1531,762,0.285,0.0010362388806843,18,9,"generate",NA,"within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word stem","full","timed","no","younger","immediate" -1474,"2",1,1532,762,0.243,0.000817354605734414,18,9,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word stem","full","timed","no","younger","immediate" -1474,"2",2,1533,763,0.412,0.0017363955924796,18,9,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","covert/thinking","word stem","full","timed","no","younger","immediate" -1474,"2",2,1534,763,0.244,0.000822301442812225,18,9,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","covert/thinking","word stem","full","timed","no","younger","immediate" -1474,"2",2,1535,764,0.335,0.00131644637828836,18,9,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","covert/thinking","word stem","full","timed","no","younger","immediate" -1474,"2",2,1536,764,0.236,0.000783138680520348,18,9,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","covert/thinking","word stem","full","timed","no","younger","immediate" -1474,"2",2,1537,765,0.236,0.000783138680520348,18,9,"generate",NA,"within","mixed","words","cued recall","item","high","intentional","rhyme","covert/thinking","word stem","full","timed","no","younger","immediate" -1474,"2",2,1538,765,0.231,0.000759151950472002,18,9,"read",NA,"within","mixed","words","cued recall","item",NA,"intentional","rhyme","covert/thinking","word stem","full","timed","no","younger","immediate" -1474,"3",1,1539,766,0.47,0.00078255116713397,48,20,"generate","high","within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" -1474,"3",1,1540,766,0.45,0.00075226658372279,48,20,"read","high","within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" -1474,"3",1,1541,767,0.46,0.00076797932675915,48,20,"generate","high","within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" -1474,"3",1,1542,767,0.35,0.000551815911529305,48,20,"read","high","within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" -1474,"3",2,1543,768,0.72,0.000680559410306137,48,20,"generate","low","within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" -1474,"3",2,1544,768,0.64,0.0008084665061602,48,20,"read","low","within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" -1474,"3",2,1545,769,0.57,0.000851814290448889,48,20,"generate","low","within","mixed","words","cued recall","item","medium","intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" -1474,"3",2,1546,769,0.53,0.000842144443997947,48,20,"read","low","within","mixed","words","cued recall","item",NA,"intentional","semantic","covert/thinking","word fragment","full","timed","yes","younger","short" -1475,"1",1,1547,770,0.7,0.00143485358199369,22,12,"generate",NA,"within","mixed","words","recognition","item","low","incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" -1475,"1",1,1548,770,0.7,0.00143485358199369,22,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" -1475,"1",2,1549,771,0.78,0.00110385860673168,22,12,"generate",NA,"within","mixed","words","recognition","item","low","incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" -1475,"1",2,1550,771,0.69,0.00147020840764018,22,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" -1475,"1",1,1551,772,0.75,0.00123518735148415,22,12,"generate",NA,"within","mixed","words","recognition","item","low","incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" -1475,"1",1,1552,772,0.73,0.0013188833034374,22,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" -1475,"1",2,1553,773,0.74,0.00127754696748553,22,12,"generate",NA,"within","mixed","words","recognition","item","low","incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" -1475,"1",2,1554,773,0.72,0.00135900583177252,22,12,"read",NA,"within","mixed","words","recognition","item",NA,"incidental","definitions","covert/thinking","sentence completion","full","timed","no","younger","immediate" -1476,"1",1,1555,774,0.81875,0.000949800389313956,16,16,"generate",NA,"within","pure","words","free recall","item","low","incidental",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1476,"1",1,1556,774,0.5,0.00166762215297351,16,16,"read",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1476,"2",1,1557,775,0.800625,0.00103210738236076,16,16,"generate",NA,"within","pure","words","free recall","item","low","incidental",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1476,"2",1,1558,775,0.65625,0.00160572335095546,16,16,"read",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1476,"3",1,1559,776,0.71875,0.00139129164842427,16,16,"generate",NA,"within","pure","words","free recall","item","low","incidental",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1476,"3",1,1560,776,0.6375,0.00165250181914906,16,16,"read",NA,"within","pure","words","free recall","item",NA,"incidental",NA,"verbal/speaking","word fragment","full","timed","yes","younger","immediate" -1477,"1",1,1561,777,0.143,0.000280269010149057,14,36,"generate",NA,"within","mixed","words","free recall","item","high","incidental","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1477,"1",1,1562,777,0.028,9.95887803248024e-05,14,36,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1477,"2",1,1563,778,0.333,0.0011713558324575,16,12,"generate",NA,"within","mixed","words","free recall","item","high","incidental","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1477,"2",1,1564,778,0.078,0.000209663215834566,16,12,"read",NA,"within","mixed","words","free recall","item",NA,"incidental","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1477,"2",2,1565,779,0.37,0.00135862482048027,16,12,"generate",NA,"within","mixed","words","free recall","item","high","intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1477,"2",2,1566,779,0.287,0.000939855347890906,16,12,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","synonym","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1478,"1",1,1567,780,0.75,0.0011618945121358,48,6,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"1",1,1568,780,0.74,0.00120174061751329,48,6,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"1",1,1569,781,0.88,0.000631932381944497,48,6,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"1",1,1570,781,0.62,0.00155598255408578,48,6,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"1",1,1571,782,0.83,0.000829260103032616,48,6,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"1",1,1572,782,0.66,0.00147109068433372,48,6,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"2",1,1573,783,0.19,0.000427399455915919,48,6,"generate",NA,"within","mixed","non-words","free recall","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"2",1,1574,783,0.17,0.000369895020166257,48,6,"read",NA,"within","mixed","non-words","free recall","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"2",1,1575,784,0.48,0.00149503222686217,48,6,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"2",1,1576,784,0.34,0.000994593483186358,48,6,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"2",1,1577,785,0.48,0.00149503222686217,48,6,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"2",1,1578,785,0.43,0.00134822308797829,48,6,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"3",1,1579,786,0.72,0.00178456835525953,30,6,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"3",1,1580,786,0.78,0.00144952368282697,30,6,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"3",1,1581,787,0.8,0.00133231320736011,30,6,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"3",1,1582,787,0.6,0.00220891038090001,30,6,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"3",1,1583,788,0.81,0.00127372309897687,30,6,"generate",NA,"within","mixed","words","recognition","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"3",1,1584,788,0.63,0.00214789587292843,30,6,"read",NA,"within","mixed","words","recognition","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"4",1,1585,789,0.2,0.000639540262105929,30,6,"generate",NA,"within","mixed","non-words","free recall","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"4",1,1586,789,0.18,0.000555573470970947,30,6,"read",NA,"within","mixed","non-words","free recall","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"4",1,1587,790,0.28,0.00104181753560436,30,6,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"4",1,1588,790,0.3,0.00115512014645922,30,6,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"4",1,1589,791,0.4,0.00172954532868175,30,6,"generate",NA,"within","mixed","words","free recall","item","medium","intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1478,"4",1,1590,791,0.4,0.00172954532868175,30,6,"read",NA,"within","mixed","words","free recall","item",NA,"intentional",NA,"writing/typing","anagram","full","timed","yes","younger","short" -1479,"1",1,1591,372,0.79,0.001024,25,24,"generate",NA,"within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -1479,"1",1,1592,372,0.85,0.000484,25,24,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1479,"1",1,1593,372,0.52,0.001024,25,24,"read",NA,"within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1479,"1",1,1594,373,0.83,0.001156,25,24,"generate",NA,"within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -1479,"1",1,1595,373,0.69,0.001024,25,24,"generate",NA,"within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1479,"1",1,1596,373,0.57,0.001296,25,24,"read",NA,"within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1479,"1",1,1597,374,0.44,0.001444,25,24,"generate",NA,"within","pure","words","recognition","font color","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -1479,"1",1,1598,374,0.39,0.001156,25,24,"generate",NA,"within","pure","words","recognition","font color","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1479,"1",1,1599,374,0.34,0.001764,25,24,"read",NA,"within","pure","words","recognition","font color",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1479,"1",1,1600,375,0.89,0.000256,25,24,"generate",NA,"within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -1479,"1",1,1601,375,0.84,0.000576,25,24,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1479,"1",1,1602,375,0.69,0.001444,25,24,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1480,"1",1,1603,376,0.84,0.00055,22,24,"generate",NA,"within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -1480,"1",1,1604,376,0.91,0.000454545454545455,22,24,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1480,"1",1,1605,376,0.59,0.00200454545454545,22,24,"read",NA,"within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1480,"1",2,1606,377,0.76,0.001024,25,24,"generate",NA,"within","pure","words","recognition","item","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","older","immediate" -1480,"1",2,1607,377,0.82,9e-04,25,24,"generate",NA,"within","pure","words","recognition","item","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","older","immediate" -1480,"1",2,1608,377,0.57,0.001024,25,24,"read",NA,"within","pure","words","recognition","item",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","older","immediate" -1480,"1",1,1609,378,0.85,0.000454545454545455,22,24,"generate",NA,"within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -1480,"1",1,1610,378,0.74,0.00116363636363636,22,24,"generate",NA,"within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1480,"1",1,1611,378,0.72,0.00116363636363636,22,24,"read",NA,"within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1480,"1",2,1612,379,0.69,0.002704,25,24,"generate",NA,"within","pure","words","recognition","source","low","intentional","semantic","verbal/speaking","cue only","full","self-paced","no","older","immediate" -1480,"1",2,1613,379,0.7,0.001296,25,24,"generate",NA,"within","pure","words","recognition","source","medium","intentional","semantic","verbal/speaking","anagram","full","self-paced","no","older","immediate" -1480,"1",2,1614,379,0.51,0.0025,25,24,"read",NA,"within","pure","words","recognition","source",NA,"intentional","semantic","verbal/speaking","anagram","full","self-paced","no","older","immediate" -1480,"1",1,1615,380,0.96,0.000163636363636364,22,24,"generate",NA,"within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","younger","immediate" -1480,"1",1,1616,380,0.93,0.000222727272727273,22,24,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1480,"1",1,1617,380,0.8,0.00102272727272727,22,24,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","younger","immediate" -1480,"1",2,1618,381,0.88,0.001024,25,24,"generate",NA,"within","pure","words","cued recall","item","low","incidental","semantic","verbal/speaking","cue only","full","self-paced","no","older","immediate" -1480,"1",2,1619,381,0.87,0.000676,25,24,"generate",NA,"within","pure","words","cued recall","item","medium","incidental","semantic","verbal/speaking","anagram","full","self-paced","no","older","immediate" -1480,"1",2,1620,381,0.79,0.001444,25,24,"read",NA,"within","pure","words","cued recall","item",NA,"incidental","semantic","verbal/speaking","anagram","full","self-paced","no","older","immediate" -1482,"1",1,1621,792,0.563,0.00287875526977768,40,4,"generate",NA,"within","mixed","words","free recall","item","high","intentional","category","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1482,"1",1,1622,792,0.54,0.00286176996868038,40,4,"generate",NA,"within","mixed","words","free recall","item","high","intentional","category","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1482,"1",1,1623,792,0.49,0.00273012335911365,40,4,"generate",NA,"within","mixed","words","free recall","item","high","intentional","category","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1482,"1",1,1624,792,0.407,0.0022765248910312,40,4,"generate",NA,"within","mixed","words","free recall","item","high","intentional","category","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1482,"1",1,1625,792,0.395,0.00219392027845902,40,4,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","category","verbal/speaking","word stem","full","timed","yes","younger","immediate" -1483,"1",1,1626,793,0.279,0.000824952195489342,24,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" -1483,"1",1,1627,793,0.213,0.000555670406023729,24,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" -1483,"1",1,1628,794,0.308,0.000956342569805185,24,10,"generate",NA,"within","mixed","words","free recall","item","medium","intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" -1483,"1",1,1629,794,0.192,0.000481695664297381,24,10,"read",NA,"within","mixed","words","free recall","item",NA,"intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" -1483,"1",1,1630,795,0.958,0.000418542446139199,24,10,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" -1483,"1",1,1631,795,0.896,0.000637449502591045,24,10,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" -1483,"1",1,1632,796,0.962,0.000406328053068962,24,10,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" -1483,"1",1,1633,796,0.904,0.000606219915423057,24,10,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","unrelated","verbal/speaking","cue only","full","timed","no","younger","immediate" -1483,"2",1,1634,797,0.789,0.000780402237197774,32,15,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"2",1,1635,797,0.715,0.00101135526818727,32,15,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"2",1,1636,798,0.702,0.00104731175395771,32,15,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"2",1,1637,798,0.669,0.0011282561819553,32,15,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"2",1,1638,799,0.759,0.000877681944493614,32,15,"generate",NA,"within","mixed","words","recognition","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"2",1,1639,799,0.683,0.00109590919000164,32,15,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"2",1,1640,800,0.696,0.00106319826162378,32,15,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"2",1,1641,800,0.644,0.00117759517549497,32,15,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"3",1,1642,801,0.67,0.00117073773647316,24,24,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"3",1,1643,801,0.623,0.00125770055667922,24,24,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"3",1,1644,802,0.693,0.00111346033961841,24,24,"generate",NA,"within","mixed","non-words","recognition","item","medium","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"3",1,1645,802,0.623,0.00125770055667922,24,24,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"4",1,1646,803,0.843,0.000528861488656449,32,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"4",1,1647,803,0.716,0.000881070227337962,32,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"4",1,1648,804,0.699,0.000921961255170747,32,24,"generate",NA,"within","mixed","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"4",1,1649,804,0.64,0.0010347337323824,32,24,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"4",2,1650,805,0.784,0.00069608392450272,32,24,"generate",NA,"within","mixed","words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"4",2,1651,805,0.705,0.00090787858526174,32,24,"read",NA,"within","mixed","words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"4",2,1652,806,0.642,0.00103179650522306,32,24,"generate",NA,"within","mixed","non-words","recognition","item","high","intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" -1483,"4",2,1653,806,0.643,0.00103030203347687,32,24,"read",NA,"within","mixed","non-words","recognition","item",NA,"intentional","rhyme","verbal/speaking","word stem","full","timed","no","younger","immediate" +article,experiment,sample,id,pairing,yi,vi,sei,ni,stimuli,condition,gen_difficulty,manip_type,present_style,word_status,memory_test,memory_type,gen_constraint,learning_type,stimuli_relation,gen_mode,gen_task,attention,pacing,filler_task,age_grp,retention_delay +12,1,1,1,1,0.879,0.000684371,0.026160483,12,20,generate,NA,between,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,word stem,full,NA,no,younger,immediate +12,1,2,2,1,0.713,0.001403919,0.037468903,12,20,read,NA,between,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,word stem,full,NA,no,younger,immediate +12,1,1,3,2,0.906,0.000579847,0.024080011,12,20,generate,NA,between,pure,words,recognition,item,high,intentional,category,verbal/speaking,word stem,full,NA,no,younger,immediate +12,1,2,4,2,0.684,0.001509474,0.038851945,12,20,read,NA,between,pure,words,recognition,item,NA,intentional,category,verbal/speaking,word stem,full,NA,no,younger,immediate +12,1,1,5,3,0.842,0.000840009,0.028982912,12,20,generate,NA,between,pure,words,recognition,item,high,intentional,antonym,verbal/speaking,word stem,full,NA,no,younger,immediate +12,1,2,6,3,0.753,0.001237872,0.0351834,12,20,read,NA,between,pure,words,recognition,item,NA,intentional,antonym,verbal/speaking,word stem,full,NA,no,younger,immediate +12,1,1,7,4,0.893,0.000629087,0.025081608,12,20,generate,NA,between,pure,words,recognition,item,high,intentional,synonym,verbal/speaking,word stem,full,NA,no,younger,immediate +12,1,2,8,4,0.697,0.001464062,0.038263057,12,20,read,NA,between,pure,words,recognition,item,NA,intentional,synonym,verbal/speaking,word stem,full,NA,no,younger,immediate +12,1,1,9,5,0.733,0.001323238,0.036376334,12,20,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,NA,no,younger,immediate +12,1,2,10,5,0.643,0.001627976,0.040348188,12,20,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,NA,no,younger,immediate +12,2,1,11,6,0.838,0.001123505,0.033518731,12,10,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,no,younger,immediate +12,2,1,12,6,0.652,0.002103557,0.04586455,12,10,read,NA,within,pure,words,recognition,item,NA,NA,semantic,verbal/speaking,word stem,full,timed,no,younger,immediate +12,2,1,13,7,0.872,0.000933945,0.030560518,12,10,generate,NA,within,pure,words,recognition,item,high,NA,category,verbal/speaking,word stem,full,timed,no,younger,immediate +12,2,1,14,7,0.665,0.002056253,0.045345927,12,10,read,NA,within,pure,words,recognition,item,NA,NA,category,verbal/speaking,word stem,full,timed,no,younger,immediate +12,2,1,15,8,0.878,0.000901948,0.030032451,12,10,generate,NA,within,pure,words,recognition,item,high,NA,antonym,verbal/speaking,word stem,full,timed,no,younger,immediate +12,2,1,16,8,0.699,0.001908686,0.043688506,12,10,read,NA,within,pure,words,recognition,item,NA,NA,antonym,verbal/speaking,word stem,full,timed,no,younger,immediate +12,2,1,17,9,0.871,0.000939326,0.030648422,12,10,generate,NA,within,pure,words,recognition,item,high,NA,synonym,verbal/speaking,word stem,full,timed,no,younger,immediate +12,2,1,18,9,0.677,0.002007876,0.044809329,12,10,read,NA,within,pure,words,recognition,item,NA,NA,synonym,verbal/speaking,word stem,full,timed,no,younger,immediate +12,2,1,19,10,0.741,0.001689593,0.041104661,12,10,generate,NA,within,pure,words,recognition,item,high,NA,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +12,2,1,20,10,0.548,0.002251225,0.047447077,12,10,read,NA,within,pure,words,recognition,item,NA,NA,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +12,3,1,21,11,0.521,0.001520901,0.038998726,12,33,generate,NA,within,pure,words,recognition,cue word,high,NA,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +12,3,1,22,11,0.492,0.001473094,0.038380911,12,33,read,NA,within,pure,words,recognition,cue word,NA,NA,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +12,3,2,23,12,0.711,0.001269138,0.03562497,12,33,generate,NA,within,pure,words,recognition,item,high,NA,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +12,3,2,24,12,0.533,0.001534039,0.039166814,12,33,read,NA,within,pure,words,recognition,item,NA,NA,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +13,1,1,25,13,0.354,0.001468008,0.038314596,20,8,generate,NA,within,pure,words,free recall,item,medium,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,immediate +13,1,1,26,13,0.151,0.000446315,0.021126157,20,8,read,NA,within,pure,words,free recall,item,NA,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,immediate +13,1,1,27,14,0.361,0.001508593,0.038840615,20,8,generate,NA,within,pure,words,free recall,item,medium,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,immediate +13,1,1,28,14,0.21,0.000683171,0.026137539,20,8,read,NA,within,pure,words,free recall,item,NA,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,immediate +13,2,1,29,15,0.302,0.000830958,0.028826335,20,16,generate,NA,between,pure,words,free recall,item,medium,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,immediate +13,2,2,30,15,0.162,0.000346409,0.01861207,20,16,read,NA,between,pure,words,free recall,item,NA,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,immediate +13,2,1,31,16,0.368,0.001104954,0.033240842,20,16,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,immediate +13,2,2,32,16,0.287,0.00077002,0.027749236,20,16,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,immediate +13,3a,1,33,17,0.861,0.000982008,0.031337014,20,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,immediate +13,3a,1,34,17,0.512,0.002172154,0.046606376,20,8,read,NA,within,pure,words,cued recall,item,NA,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,immediate +13,3a,1,35,18,0.928,0.000649249,0.025480365,20,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,immediate +13,3a,1,36,18,0.893,0.000814419,0.028538028,20,8,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,immediate +13,3b,1,37,19,0.819,0.001219328,0.034918877,20,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,long +13,3b,1,38,19,0.346,0.00142136,0.03770093,20,8,read,NA,within,pure,words,cued recall,item,NA,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,long +13,3b,1,39,20,0.906,0.000750673,0.027398404,20,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,long +13,3b,1,40,20,0.727,0.001745132,0.041774781,20,8,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,long +13,4,1,41,21,0.783,0.001429751,0.037812043,20,8,generate,NA,within,pure,words,recognition,item,medium,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,long +13,4,1,42,21,0.542,0.00221937,0.047110194,20,8,read,NA,within,pure,words,recognition,item,NA,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,long +13,4,1,43,22,0.785,0.001418065,0.037657204,20,8,generate,NA,within,pure,words,recognition,item,medium,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,long +13,4,1,44,22,0.684,0.001954172,0.044206013,20,8,read,NA,within,pure,words,recognition,item,NA,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,long +17,1,1,45,23,0.41,0.000700411,0.026465276,48,18,generate,NA,within,pure,words,free recall,item,NA,incidental,NA,writing/typing,NA,full,timed,no,younger,immediate +17,1,1,46,23,0.31,0.000476643,0.021832163,48,18,read,NA,within,pure,words,free recall,item,NA,incidental,NA,writing/typing,NA,full,timed,no,younger,immediate +17,1,2,47,24,0.33,0.000522567,0.022859718,48,18,generate,NA,within,pure,words,free recall,item,NA,incidental,NA,covert/thinking,NA,full,timed,no,younger,immediate +17,1,2,48,24,0.2,0.000251327,0.015853281,48,18,read,NA,within,pure,words,free recall,item,NA,incidental,NA,covert/thinking,NA,full,timed,no,younger,immediate +17,1,1,49,25,0.99,0.000161657,0.012714444,48,18,generate,NA,within,pure,words,cued recall,item,NA,incidental,category,NA,NA,full,timed,no,younger,immediate +17,1,1,50,25,0.96,0.000203578,0.01426807,48,18,read,NA,within,pure,words,cued recall,item,NA,incidental,category,NA,NA,full,timed,no,younger,immediate +17,1,2,51,26,0.97,0.000188872,0.013743053,48,18,generate,NA,within,pure,words,cued recall,item,NA,incidental,antonym,NA,NA,full,timed,no,younger,immediate +17,1,2,52,26,0.83,0.000454924,0.021328956,48,18,read,NA,within,pure,words,cued recall,item,NA,incidental,antonym,NA,NA,full,timed,no,younger,immediate +17,1,1,53,27,0.98,0.000174899,0.013224947,48,18,generate,NA,within,pure,words,cued recall,item,NA,incidental,NA,writing/typing,NA,full,timed,no,younger,immediate +17,1,1,54,27,0.9,0.000306909,0.017518809,48,18,read,NA,within,pure,words,cued recall,item,NA,incidental,NA,writing/typing,NA,full,timed,no,younger,immediate +17,1,2,55,28,0.98,0.000174899,0.013224947,48,18,generate,NA,within,pure,words,cued recall,item,NA,incidental,NA,covert/thinking,NA,full,timed,no,younger,immediate +17,1,2,56,28,0.89,0.000326491,0.018069065,48,18,read,NA,within,pure,words,cued recall,item,NA,incidental,NA,covert/thinking,NA,full,timed,no,younger,immediate +17,1,1,57,29,0.96,0.000324357,0.018009925,24,18,generate,NA,within,pure,words,recognition,source,NA,incidental,category,writing/typing,NA,full,timed,no,younger,immediate +17,1,1,58,29,0.92,0.000429669,0.02072847,24,18,read,NA,within,pure,words,recognition,source,NA,incidental,category,writing/typing,NA,full,timed,no,younger,immediate +17,1,2,59,30,0.95,0.000348958,0.018680421,24,18,generate,NA,within,pure,words,recognition,source,NA,incidental,category,covert/thinking,NA,full,timed,no,younger,immediate +17,1,2,60,30,0.81,0.000797515,0.028240307,24,18,read,NA,within,pure,words,recognition,source,NA,incidental,category,covert/thinking,NA,full,timed,no,younger,immediate +17,1,3,61,31,0.76,0.000980054,0.031305811,24,18,generate,NA,within,pure,words,recognition,source,NA,incidental,antonym,writing/typing,NA,full,timed,no,younger,immediate +17,1,3,62,31,0.8,0.0008342,0.028882519,24,18,read,NA,within,pure,words,recognition,source,NA,incidental,antonym,writing/typing,NA,full,timed,no,younger,immediate +17,1,4,63,32,0.64,0.001327373,0.03643313,24,18,generate,NA,within,pure,words,recognition,source,NA,incidental,antonym,covert/thinking,NA,full,timed,no,younger,immediate +17,1,4,64,32,0.71,0.001149205,0.033899922,24,18,read,NA,within,pure,words,recognition,source,NA,incidental,antonym,covert/thinking,NA,full,timed,no,younger,immediate +22,1,1,65,33,0.207,0.000384235,0.019601923,40,10,generate,NA,within,pure,words,free recall,item,high,intentional,synonym,verbal/speaking,word stem,full,timed,no,younger,immediate +22,1,1,66,33,0.138,0.00023114,0.015203299,40,10,read,NA,within,pure,words,free recall,item,NA,intentional,synonym,verbal/speaking,word stem,full,timed,no,younger,immediate +22,1,1,67,34,0.227,0.00043785,0.020924862,40,10,generate,NA,within,pure,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +22,1,1,68,34,0.125,0.000207945,0.014420305,40,10,read,NA,within,pure,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +24,1,1,69,35,0.23,0.000504167,0.022453656,24,16,generate,low,within,mixed,words,free recall,item,high,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,immediate +24,1,1,70,35,0.27,0.0009375,0.030618622,24,16,generate,high,within,mixed,words,free recall,item,medium,intentional,antonym,verbal/speaking,word stem,full,timed,no,younger,immediate +24,1,1,71,35,0.09,0.000266667,0.016329932,24,16,read,low,within,mixed,words,free recall,item,NA,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,immediate +24,2,1,72,36,0.319,0.000894478,0.029907826,36,8,generate,low,within,mixed,words,free recall,item,high,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,immediate +24,2,1,73,36,0.332,0.000948317,0.030794759,36,8,generate,high,within,mixed,words,free recall,item,medium,intentional,antonym,verbal/speaking,word stem,full,timed,no,younger,immediate +24,2,1,74,36,0.092,0.000193395,0.013906648,36,8,read,low,within,mixed,words,free recall,item,NA,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,immediate +24,2,1,75,37,0.772,0.001057614,0.032520982,36,8,generate,low,within,mixed,words,recognition,item,high,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,immediate +24,2,1,76,37,0.694,0.001351844,0.036767435,36,8,generate,high,within,mixed,words,recognition,item,medium,intentional,antonym,verbal/speaking,word stem,full,timed,no,younger,immediate +24,2,1,77,37,0.348,0.001014625,0.031853183,36,8,read,low,within,mixed,words,recognition,item,NA,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,immediate +24,2,2,78,38,0.111,0.000228145,0.01510448,36,8,generate,low,within,mixed,words,free recall,item,high,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,long +24,2,2,79,38,0.123,0.000252361,0.015885884,36,8,generate,high,within,mixed,words,free recall,item,medium,intentional,antonym,verbal/speaking,word stem,full,timed,no,younger,long +24,2,2,80,38,0.022,9.92358083701705e-05,0.009961717,36,8,read,low,within,mixed,words,free recall,item,NA,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,long +24,2,2,81,39,0.61,0.001549902,0.039368801,36,8,generate,low,within,mixed,words,recognition,item,high,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,long +24,2,2,82,39,0.437,0.001353682,0.036792423,36,8,generate,high,within,mixed,words,recognition,item,medium,intentional,antonym,verbal/speaking,word stem,full,timed,no,younger,long +24,2,2,83,39,0.13,0.000267324,0.016350041,36,8,read,low,within,mixed,words,recognition,item,NA,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,long +33,1,1,84,40,0.28,0.000620475,0.024909341,16,75,generate,NA,within,mixed,non-words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +33,1,1,85,40,0.26,0.000555432,0.023567603,16,75,read,NA,within,mixed,non-words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +33,1,2,86,41,0.253,0.00053337,0.023094797,16,75,generate,NA,within,mixed,non-words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +33,1,2,87,41,0.253,0.00053337,0.023094797,16,75,read,NA,within,mixed,non-words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +33,3,1,88,42,0.645,0.001341584,0.036627646,30,12,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +33,3,1,89,43,0.783,0.000912802,0.030212611,30,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +33,3,1,90,44,0.798,0.000856744,0.029270193,30,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +33,3,1,91,45,0.727,0.001114152,0.033378921,30,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +33,3,1,92,42,0.719,0.001140844,0.03377638,30,12,read,NA,within,mixed,non-words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +33,3,1,93,43,0.764,0.00098313,0.031354904,30,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +33,3,1,94,44,0.623,0.001380205,0.037151116,30,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +33,3,1,95,45,0.525,0.001402665,0.037452167,30,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +34,1,1,96,46,0.86,0.000625,0.025,16,30,generate,NA,within,mixed,words,NA,item,low,incidental,NA,writing/typing,word fragment,full,timed,yes,younger,short +34,1,1,97,46,0.59,0.00225625,0.0475,16,30,read,NA,within,mixed,words,NA,item,NA,incidental,NA,writing/typing,word fragment,full,timed,yes,younger,short +34,1,1,98,47,0.76,0.0016,0.04,16,30,generate,NA,within,mixed,words,recognition,item,low,incidental,NA,writing/typing,word fragment,full,timed,yes,younger,short +34,1,1,99,47,0.6,0.003025,0.055,16,30,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,word fragment,full,timed,yes,younger,short +34,4,1,100,48,0.78,0.000672222,0.025927249,18,64,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,writing/typing,word fragment,full,timed,no,younger,long +34,4,1,101,48,0.59,0.0018,0.042426407,18,32,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,writing/typing,word fragment,full,timed,no,younger,long +34,5,1,102,49,0.83,0.000731785,0.027051532,15,48,generate,NA,within,mixed,words,NA,item,low,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,short +34,5,1,103,49,0.59,0.001404168,0.037472223,15,48,read,NA,within,mixed,words,NA,item,NA,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,short +34,5,1,104,50,0.69,0.00122041,0.034934366,15,48,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,short +34,5,1,105,50,0.59,0.001404168,0.037472223,15,48,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,short +34,5,2,106,51,0.81,0.000805174,0.028375596,15,48,generate,NA,within,mixed,words,NA,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +34,5,2,107,51,0.6,0.001396346,0.037367714,15,48,read,NA,within,mixed,words,NA,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +34,5,2,108,52,0.78,0.000916305,0.030270538,15,48,generate,NA,within,mixed,words,recognition,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +34,5,2,109,52,0.63,0.001357776,0.036848014,15,48,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +39,1,1,110,53,0.86,0.000377067,0.019418203,42,32,generate,NA,within,pure,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,1,1,111,53,0.77,0.000574818,0.023975373,42,32,read,NA,within,pure,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,1,2,112,54,0.72,0.000680379,0.026084077,42,32,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,1,2,113,54,0.7,0.000718352,0.026802086,42,32,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,1,3,114,55,0.68,0.000752775,0.027436748,42,32,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,1,3,115,55,0.67,0.000768436,0.027720672,42,32,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,1,4,116,56,0.82,0.00046339,0.021526502,42,32,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,1,4,117,56,0.74,0.000639597,0.025290257,42,32,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,2,1,118,57,0.88,0.000504532,0.022461791,48,8,generate,NA,within,pure,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,2,1,119,57,0.74,0.000959464,0.030975224,48,8,read,NA,within,pure,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,2,1,120,58,0.74,0.000959464,0.030975224,48,8,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,2,1,121,58,0.69,0.001104157,0.033228862,48,8,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,2,1,122,59,0.76,0.000895213,0.029920107,48,8,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,2,1,123,59,0.73,0.000990509,0.031472352,48,8,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,2,1,124,60,0.84,0.000629411,0.025088055,48,8,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,2,1,125,60,0.73,0.000990509,0.031472352,48,8,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,3,1,126,61,0.86,0.00056564,0.023783197,48,8,generate,NA,within,pure,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,3,1,127,61,0.81,0.000728476,0.026990293,48,8,read,NA,within,pure,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,3,1,128,62,0.73,0.000990509,0.031472352,48,8,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,3,1,129,62,0.74,0.000959464,0.030975224,48,8,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,3,1,130,63,0.74,0.000959464,0.030975224,48,8,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,3,1,131,63,0.71,0.001049721,0.032399393,48,8,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,3,1,132,64,0.9,0.000446662,0.021134377,48,8,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +39,3,1,133,64,0.79,0.000795542,0.028205359,48,8,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +46,3,1,134,65,0.389,0.000779074,0.027911896,32,30,generate,NA,within,pure,words,free recall,item,high,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +46,3,1,135,65,0.373,0.000737174,0.02715095,32,30,read,NA,within,pure,words,free recall,item,NA,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +46,3,1,136,66,0.398,0.000801987,0.02831937,32,30,generate,NA,within,pure,words,free recall,item,high,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +46,3,1,137,66,0.373,0.000737174,0.02715095,32,30,read,NA,within,pure,words,free recall,item,NA,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +46,3,2,138,67,0.425,0.00086691,0.029443333,32,30,generate,NA,within,mixed,words,free recall,item,high,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +46,3,2,139,67,0.243,0.000393731,0.019842658,32,30,read,NA,within,mixed,words,free recall,item,NA,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +46,3,2,140,68,0.449,0.000918416,0.030305378,32,30,generate,NA,within,mixed,words,free recall,item,high,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +46,3,2,141,68,0.24,0.000386624,0.019662765,32,30,read,NA,within,mixed,words,free recall,item,NA,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +46,4,1,142,69,0.376,0.001059633,0.032552008,16,30,generate,NA,within,mixed,words,free recall,item,high,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +46,4,1,143,69,0.379,0.001070885,0.032724374,16,30,read,NA,within,mixed,words,free recall,item,NA,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +46,4,1,144,70,0.359,0.000994894,0.031541948,16,30,generate,NA,within,mixed,words,free recall,item,high,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +46,4,1,145,70,0.344,0.000936838,0.030607812,16,30,read,NA,within,mixed,words,free recall,item,NA,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +52,1,1,146,71,0.376,0.00120125,0.034659054,20,20,generate,NA,within,mixed,words,recognition,source,low,incidental,category,covert/thinking,sentence completion,full,timed,no,younger,immediate +52,1,1,147,71,0.565,0.00114005,0.033764626,20,20,read,NA,within,mixed,words,recognition,source,NA,incidental,category,NA,sentence completion,full,timed,no,younger,immediate +52,1,2,148,72,0.295,0.0014792,0.038460369,20,20,generate,NA,within,mixed,words,recognition,source,low,incidental,category,covert/thinking,sentence completion,full,timed,no,older,immediate +52,1,2,149,72,0.527,0.00108045,0.032870199,20,20,read,NA,within,mixed,words,recognition,source,NA,incidental,category,NA,sentence completion,full,timed,no,older,immediate +54,1a,1,150,73,0.624,0.00171891,0.041459742,12,18,generate,NA,within,mixed,words,free recall,item,medium,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate +54,1a,1,151,73,0.383,0.001300461,0.036061903,12,18,read,NA,within,mixed,words,free recall,item,NA,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate +54,1a,2,152,74,0.708,0.001466549,0.038295543,12,18,generate,NA,within,mixed,words,free recall,item,medium,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate +54,1a,2,153,74,0.622,0.00172264,0.041504698,12,18,read,NA,within,mixed,words,free recall,item,NA,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate +54,1b,1,154,75,0.635,0.001696264,0.04118573,12,18,generate,NA,within,mixed,words,free recall,item,medium,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate +54,1b,1,155,75,0.376,0.001269135,0.035624927,12,18,read,NA,within,mixed,words,free recall,item,NA,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate +54,1b,2,156,76,0.73,0.001376381,0.037099613,12,18,generate,NA,within,mixed,words,free recall,item,medium,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate +54,1b,2,157,76,0.614,0.001736337,0.041669375,12,18,read,NA,within,mixed,words,free recall,item,NA,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate +54,2,1,158,77,0.694,0.001519779,0.038984346,12,18,generate,NA,within,mixed,words,free recall,item,medium,intentional,category,verbal/speaking,word fragment,full,timed,yes,younger,immediate +54,2,1,159,77,0.351,0.001154598,0.033979379,12,18,read,NA,within,mixed,words,free recall,item,NA,intentional,category,verbal/speaking,word fragment,full,timed,yes,younger,immediate +54,2,2,160,78,0.632,0.001702794,0.041264924,12,18,generate,NA,within,mixed,words,free recall,item,medium,incidental,category,verbal/speaking,word fragment,full,timed,yes,younger,immediate +54,2,2,161,78,0.314,0.000982413,0.031343461,12,18,read,NA,within,mixed,words,free recall,item,NA,incidental,category,verbal/speaking,word fragment,full,timed,yes,younger,immediate +54,2,3,162,79,0.621,0.001724459,0.04152661,12,18,generate,NA,within,mixed,words,free recall,item,medium,incidental,category,verbal/speaking,word fragment,full,timed,yes,younger,immediate +54,2,3,163,79,0.621,0.001724459,0.04152661,12,18,read,NA,within,mixed,words,free recall,item,NA,incidental,category,verbal/speaking,word fragment,full,timed,yes,younger,immediate +58,1,1,164,80,0.66,0.001529652,0.039110761,18,16,generate,NA,within,mixed,words,recognition,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,long +58,1,1,165,80,0.51,0.001617195,0.040214363,18,16,read,NA,within,mixed,words,recognition,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,long +58,2,1,166,81,0.76,0.0011659,0.034145274,18,16,generate,NA,within,mixed,words,recognition,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,long +58,2,1,167,81,0.59,0.001654547,0.04067612,18,16,read,NA,within,mixed,words,recognition,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,long +62,1,1,168,82,0.63,0.001124619,0.033535342,40,12,generate,NA,within,mixed,non-words,recognition,item,medium,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,short +62,1,1,169,82,0.63,0.001124619,0.033535342,40,12,read,NA,within,mixed,non-words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,short +62,1,1,170,83,0.87,0.000489524,0.022125189,40,12,generate,NA,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,short +62,1,1,171,83,0.86,0.000517836,0.022756018,40,12,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,short +62,1,1,172,84,0.97,0.000251645,0.015863321,40,12,generate,NA,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,short +62,1,1,173,84,0.93,0.000335859,0.018326458,40,12,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,short +62,2,1,174,85,0.43,0.001199709,0.034636823,30,12,generate,NA,within,mixed,non-words,recognition,item,medium,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,long +62,2,1,175,85,0.47,0.001308026,0.036166635,30,12,read,NA,within,mixed,non-words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,long +62,2,1,176,86,0.77,0.000961057,0.031000925,30,12,generate,NA,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,long +62,2,1,177,86,0.79,0.000886665,0.029776916,30,12,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,long +62,2,1,178,87,0.9,0.000497823,0.02231195,30,12,generate,NA,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,long +62,2,1,179,87,0.74,0.001069363,0.032701113,30,12,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,long +63,1,1,180,88,0.55,0.001524736,0.039047867,12,36,generate,NA,between,pure,words,free recall,item,medium,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +63,1,2,181,88,0.41,0.001219032,0.034914637,12,36,read,NA,between,pure,words,free recall,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +63,1,3,182,89,0.27,0.000674815,0.025977202,12,36,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +63,1,4,183,89,0.31,0.000829575,0.028802346,12,36,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +63,1,1,184,90,0.89,0.000568242,0.023837834,12,36,generate,NA,between,pure,words,recognition,item,medium,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +63,1,2,185,90,0.67,0.00137855,0.037128825,12,36,read,NA,between,pure,words,recognition,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +63,1,3,186,91,0.8,0.000911253,0.030186967,12,36,generate,NA,between,pure,words,recognition,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +63,1,4,187,91,0.7,0.001288701,0.035898479,12,36,read,NA,between,pure,words,recognition,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +63,2,1,188,92,0.57,0.001438277,0.037924625,16,36,generate,NA,between,pure,words,free recall,item,medium,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +63,2,2,189,92,0.43,0.00121191,0.034812495,16,36,read,NA,between,pure,words,free recall,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +63,2,3,190,93,0.44,0.001241873,0.035240217,16,36,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +63,2,4,191,93,0.3,0.000743803,0.027272745,16,36,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +63,2,1,192,94,0.63,0.001383069,0.037189632,16,36,generate,NA,between,pure,words,cued recall,item,medium,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +63,2,2,193,94,0.53,0.00142195,0.03770875,16,36,read,NA,between,pure,words,cued recall,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +63,2,3,194,95,0.74,0.001080238,0.032866968,16,36,generate,NA,between,pure,words,cued recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +63,2,4,195,95,0.6,0.001422357,0.037714149,16,36,read,NA,between,pure,words,cued recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +63,2,1,196,96,0.88,0.00056804,0.023833596,16,36,generate,NA,between,pure,words,recognition,item,medium,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +63,2,2,197,96,0.72,0.001149116,0.033898608,16,36,read,NA,between,pure,words,recognition,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +63,2,3,198,97,0.92,0.000441877,0.021020866,16,36,generate,NA,between,pure,words,recognition,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +63,2,4,199,97,0.71,0.001181855,0.034378115,16,36,read,NA,between,pure,words,recognition,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +63,3,1,200,98,0.56,0.001465906,0.038287157,15,36,generate,NA,between,pure,words,free recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,yes,younger,short +63,3,2,201,98,0.54,0.001482593,0.038504453,14,36,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,yes,younger,short +63,3,3,202,99,0.46,0.001363539,0.036926135,13,36,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +63,3,4,203,99,0.43,0.001274356,0.035698124,13,36,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +63,3,1,204,100,0.89,0.000545272,0.023351051,15,36,generate,NA,between,pure,words,recognition,item,medium,intentional,category,writing/typing,word fragment,full,timed,yes,younger,short +63,3,2,205,100,0.87,0.000624149,0.024982981,14,36,read,NA,between,pure,words,recognition,item,NA,intentional,category,writing/typing,word fragment,full,timed,yes,younger,short +63,3,3,206,101,0.89,0.000562538,0.023717887,13,36,generate,NA,between,pure,words,recognition,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +63,3,4,207,101,0.82,0.000822963,0.028687328,13,36,read,NA,between,pure,words,recognition,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +64,1,1,208,102,0.609,0.00178975,0.042305432,29,8,generate,NA,within,mixed,words,free recall,item,medium,incidental,NA,covert/thinking,word stem,full,timed,yes,younger,immediate +64,1,1,209,102,0.446,0.001594827,0.039935287,29,8,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,covert/thinking,word stem,full,timed,yes,younger,immediate +76,1,1,210,103,0.872,0.000508776,0.022556073,34,14,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,1,2,211,103,0.899,0.000415919,0.020394093,36,14,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,1,3,212,103,0.961,0.00025713,0.016035263,39,14,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,1,1,213,104,0.976,0.000252693,0.015896322,34,14,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,1,2,214,104,0.974,0.000246712,0.015707055,36,14,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,1,3,215,104,0.989,0.000207344,0.014399456,39,14,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,1,4,216,105,0.287,0.000583411,0.024153912,35,14,generate,high,between,pure,words,free recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,1,5,217,105,0.367,0.000758823,0.02754675,40,14,generate,low,between,pure,words,free recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,1,6,218,105,0.377,0.000816431,0.028573261,38,14,read,low,between,pure,words,free recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,1,4,219,106,0.447,0.001057565,0.032520222,35,14,generate,high,between,pure,words,free recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,1,5,220,106,0.527,0.00108196,0.032893155,40,14,generate,low,between,pure,words,free recall,item,medium,intentional,NA,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,1,6,221,106,0.547,0.001134615,0.033684043,38,14,read,low,between,pure,words,free recall,item,NA,intentional,NA,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,2,1,222,107,0.365,0.000644351,0.025384075,38,28,generate,NA,between,pure,words,free recall,NA,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,2,2,223,107,0.453,0.000803636,0.028348473,40,28,read,NA,between,pure,words,free recall,NA,NA,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,2,3,224,108,0.33,0.000569199,0.023857898,37,28,generate,NA,between,pure,words,free recall,NA,medium,intentional,semantic,writing/typing,word fragment,full,self-paced,no,younger,immediate +76,2,4,225,108,0.349,0.00059416,0.02437539,39,28,read,NA,between,pure,words,free recall,NA,NA,intentional,semantic,writing/typing,word fragment,full,self-paced,no,younger,immediate +76,3,1,226,109,0.439,0.00083957,0.028975329,36,28,generate,high,between,pure,words,free recall,NA,medium,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,3,2,227,109,0.498,0.000899468,0.029991124,38,28,generate,low,between,pure,words,free recall,NA,medium,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,3,3,228,109,0.504,0.000857531,0.029283622,41,28,read,low,between,pure,words,free recall,NA,NA,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,3,4,229,110,0.346,0.000659233,0.025675525,33,28,generate,high,between,pure,words,free recall,NA,medium,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,3,5,230,110,0.353,0.000603786,0.024572049,39,28,generate,low,between,pure,words,free recall,NA,medium,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,3,6,231,110,0.439,0.000778869,0.027908216,40,28,read,low,between,pure,words,free recall,NA,NA,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,4,1,232,111,0.239,0.00055354,0.023527421,16,28,generate,high,between,pure,words,free recall,NA,medium,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate +76,4,2,233,111,0.42,0.00123218,0.035102416,16,28,read,high,between,pure,words,free recall,NA,NA,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate +76,5,1,234,112,0.988,0.000175554,0.013249669,38,28,generate,NA,between,pure,words,recognition,item,medium,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate +76,5,2,235,112,0.934,0.000252613,0.015893809,40,28,read,NA,between,pure,words,recognition,item,NA,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate +78,1,1,236,113,0.87,0.00072,0.026832816,20,12,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,writing/typing,word fragment,full,timed,no,younger,immediate +78,1,1,237,113,0.78,0.00128,0.035777088,20,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,word fragment,full,timed,no,younger,immediate +78,1,2,238,114,0.71,0.001805,0.042485292,20,12,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,writing/typing,word fragment,full,timed,no,older,immediate +78,1,2,239,114,0.52,0.002205,0.046957428,20,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,word fragment,full,timed,no,older,immediate +78,1,1,240,115,0.79,0.00098,0.031304952,20,12,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,writing/typing,word fragment,full,timed,no,younger,immediate +78,1,1,241,115,0.92,0.001125,0.03354102,20,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,writing/typing,word fragment,full,timed,no,younger,immediate +78,1,2,242,116,0.66,0.00338,0.058137767,20,12,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,writing/typing,word fragment,full,timed,no,older,immediate +78,1,2,243,116,0.64,0.00578,0.076026311,20,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,writing/typing,word fragment,full,timed,no,older,immediate +78,2,1,244,117,0.95,0.000125,0.01118034,20,14,generate,low,within,mixed,words,recognition,item,medium,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +78,2,1,245,117,0.8,0.00098,0.031304952,20,14,read,low,within,mixed,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +78,2,1,246,118,0.97,0.00018,0.013416408,20,14,generate,high,within,mixed,words,recognition,item,medium,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +78,2,1,247,118,0.89,0.00072,0.026832816,20,14,read,high,within,mixed,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +78,2,2,248,119,0.93,0.000405,0.020124612,20,14,generate,low,within,mixed,words,recognition,item,medium,intentional,category,writing/typing,word stem,full,timed,no,older,immediate +78,2,2,249,119,0.66,0.002205,0.046957428,20,14,read,low,within,mixed,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,no,older,immediate +78,2,2,250,120,0.94,5e-04,0.02236068,20,14,generate,high,within,mixed,words,recognition,item,medium,intentional,category,writing/typing,word stem,full,timed,no,older,immediate +78,2,2,251,120,0.73,0.001805,0.042485292,20,14,read,high,within,mixed,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,no,older,immediate +78,2,1,252,121,0.8,0.001445,0.038013156,20,14,generate,low,within,mixed,words,recognition,source,medium,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +78,2,1,253,121,0.9,0.00098,0.031304952,20,14,read,low,within,mixed,words,recognition,source,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +78,2,1,254,122,0.93,5e-04,0.02236068,20,14,generate,high,within,mixed,words,recognition,source,medium,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +78,2,1,255,122,0.93,0.000405,0.020124612,20,14,read,high,within,mixed,words,recognition,source,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +78,2,2,256,123,0.82,0.00128,0.035777088,20,14,generate,low,within,mixed,words,recognition,source,medium,intentional,category,writing/typing,word stem,full,timed,no,older,immediate +78,2,2,257,123,0.71,0.004205,0.064845971,20,14,read,low,within,mixed,words,recognition,source,NA,intentional,category,writing/typing,word stem,full,timed,no,older,immediate +78,2,2,258,124,0.88,0.000845,0.029068884,20,14,generate,high,within,mixed,words,recognition,source,medium,intentional,category,writing/typing,word stem,full,timed,no,older,immediate +78,2,2,259,124,0.68,0.003645,0.060373835,20,14,read,high,within,mixed,words,recognition,source,NA,intentional,category,writing/typing,word stem,full,timed,no,older,immediate +78,2,1,260,125,0.85,0.00072,0.026832816,20,14,generate,low,within,mixed,words,cued recall,item,medium,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +78,2,1,261,125,0.57,0.002205,0.046957428,20,14,read,low,within,mixed,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +78,2,1,262,126,0.81,0.00072,0.026832816,20,14,generate,high,within,mixed,words,cued recall,item,medium,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +78,2,1,263,126,0.57,0.002205,0.046957428,20,14,read,high,within,mixed,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +78,2,2,264,127,0.73,0.00128,0.035777088,20,14,generate,low,within,mixed,words,cued recall,item,medium,intentional,category,writing/typing,word stem,full,timed,no,older,immediate +78,2,2,265,127,0.42,0.002,0.04472136,20,14,read,low,within,mixed,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,older,immediate +78,2,2,266,128,0.6,0.00288,0.053665631,20,14,generate,high,within,mixed,words,cued recall,item,medium,intentional,category,writing/typing,word stem,full,timed,no,older,immediate +78,2,2,267,128,0.36,0.00288,0.053665631,20,14,read,high,within,mixed,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,older,immediate +80,1,1,268,129,0.24,0.000506556,0.022506797,32,12,generate,NA,within,mixed,words,free recall,item,high,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short +80,1,1,269,129,0.089,0.000162839,0.012760848,32,12,read,NA,within,mixed,words,free recall,item,NA,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short +80,1,1,270,130,0.06,0.000124693,0.01116661,32,12,generate,NA,within,mixed,words,free recall,cue word,high,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short +80,1,1,271,130,0.026,8.93751632063962e-05,0.009453844,32,12,read,NA,within,mixed,words,free recall,cue word,NA,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short +80,1,2,272,131,0.365,0.001333666,0.03651939,16,12,generate,NA,within,mixed,words,cued recall,item,high,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short +80,1,2,273,131,0.151,0.000388622,0.019713494,16,12,read,NA,within,mixed,words,cued recall,item,NA,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short +80,1,3,274,132,0.177,0.000472604,0.021739468,16,12,generate,NA,within,mixed,words,cued recall,cue word,high,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short +80,1,3,275,132,0.094,0.00024209,0.015559251,16,12,read,NA,within,mixed,words,cued recall,cue word,NA,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short +80,2,1,276,135,0.903,0.000533331,0.023093955,22,15,generate,NA,between,mixed,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short +80,2,2,277,135,0.736,0.001182752,0.034391161,22,15,read,NA,between,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short +80,2,1,278,136,0.779,0.001012852,0.031825341,22,15,generate,NA,between,pure,words,cued recall,cue word,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short +80,2,2,279,136,0.676,0.00138579,0.037226207,22,15,read,NA,between,pure,words,cued recall,cue word,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short +80,2,2,280,139,0.885,0.000595939,0.024411867,22,15,generate,NA,between,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short +80,2,1,281,139,0.755,0.001109156,0.033303994,22,15,read,NA,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short +80,2,2,282,140,0.803,0.000914972,0.030248506,22,15,generate,NA,between,pure,words,cued recall,cue word,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short +80,2,1,283,140,0.745,0.00114827,0.03388613,22,15,read,NA,between,pure,words,cued recall,cue word,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short +85,1,1,284,143,0.28,0.000959444,0.030974896,34,6,generate,NA,between,pure,words,free recall,item,low,intentional,NA,covert/thinking,word fragment,full,timed,yes,younger,short +85,1,2,285,143,0.24,0.000763087,0.027624034,34,6,read,NA,between,pure,words,free recall,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,yes,younger,short +85,1,3,286,144,0.22,0.000672921,0.025940723,34,6,generate,NA,between,pure,words,free recall,item,low,intentional,NA,covert/thinking,word fragment,full,timed,yes,younger,short +85,1,4,287,144,0.15,0.00040848,0.02021089,34,6,read,NA,between,pure,words,free recall,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,yes,younger,short +86,1,1,288,145,0.34,0.000894034,0.029900405,16,36,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +86,1,2,289,145,0.25,0.000566578,0.023802903,16,36,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +86,1,1,290,146,0.66,0.001322355,0.036364196,16,36,generate,NA,between,pure,words,cued recall,cue word,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +86,1,2,291,146,0.46,0.001296723,0.03601004,16,36,read,NA,between,pure,words,cued recall,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +86,2,1,292,147,0.7,0.001288701,0.035898479,12,36,generate,NA,between,pure,words,recognition,cue word,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +86,2,2,293,147,0.68,0.001350455,0.03674854,12,36,read,NA,between,pure,words,recognition,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +86,2,3,294,148,0.61,0.001324051,0.036387506,19,36,generate,NA,between,pure,words,cued recall,cue word,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +86,2,4,295,148,0.45,0.001294645,0.035981182,15,36,read,NA,between,pure,words,cued recall,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +86,3,1,296,149,0.73,0.000684057,0.026154476,39,36,generate,NA,between,pure,words,recognition,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +86,3,2,297,149,0.64,0.00092176,0.030360498,34,36,read,NA,between,pure,words,recognition,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +86,3,1,298,150,0.55,0.000880513,0.02967344,39,36,generate,NA,between,pure,words,cued recall,cue word,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +86,3,2,299,150,0.42,0.000797089,0.02823277,34,36,read,NA,between,pure,words,cued recall,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +89,1,1,300,151,0.38,0.001107694,0.033282044,12,36,generate,NA,between,pure,words,free recall,item,low,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +89,1,2,301,151,0.29,0.000743477,0.02726678,13,36,read,NA,between,pure,words,free recall,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +89,1,3,302,152,0.4,0.001182945,0.034393969,12,36,generate,NA,between,pure,words,free recall,item,low,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +89,1,4,303,152,0.31,0.000829575,0.028802346,12,36,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +89,1,1,304,153,0.81,0.00087118,0.02951575,12,36,generate,NA,between,pure,words,recognition,item,low,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +89,1,2,305,153,0.63,0.001454334,0.038135736,13,36,read,NA,between,pure,words,recognition,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate +89,1,3,306,154,0.75,0.001109372,0.033307242,12,36,generate,NA,between,pure,words,recognition,item,low,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +89,1,4,307,154,0.71,0.001255354,0.035430976,12,36,read,NA,between,pure,words,recognition,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +89,2,1,308,155,0.22,0.000403998,0.020099694,20,64,generate,NA,between,pure,words,free recall,item,medium,incidental,compound words,writing/typing,word fragment,full,timed,no,younger,immediate +89,2,2,309,155,0.2,0.000353599,0.018804221,20,64,read,NA,between,pure,words,free recall,item,NA,incidental,compound words,writing/typing,word fragment,full,timed,no,younger,immediate +89,2,1,310,156,0.22,0.000403998,0.020099694,20,64,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +89,2,2,311,156,0.18,0.000307174,0.017526377,20,64,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +89,3,1,312,157,0.24,0.000418121,0.020448016,24,64,generate,NA,between,pure,words,free recall,item,medium,incidental,compound words,writing/typing,word fragment,full,timed,no,younger,immediate +89,3,2,313,157,0.17,0.000260563,0.016141963,24,64,read,NA,between,pure,words,free recall,item,NA,incidental,compound words,writing/typing,word fragment,full,timed,no,younger,immediate +89,3,1,314,158,0.19,0.00030107,0.017351383,24,64,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +89,3,2,315,158,0.16,0.00024172,0.015547357,24,64,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +89,3,1,316,159,0.69,0.000974197,0.031212136,24,64,generate,NA,between,pure,words,free recall,item,medium,incidental,compound words,writing/typing,word fragment,full,timed,no,younger,immediate +89,3,2,317,159,0.59,0.001120883,0.033479586,24,64,read,NA,between,pure,words,free recall,item,NA,incidental,compound words,writing/typing,word fragment,full,timed,no,younger,immediate +89,3,1,318,160,0.73,0.000873926,0.029562232,24,64,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +89,3,2,319,160,0.57,0.001127115,0.033572535,24,64,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +93,1a,1,320,161,0.84,0.000806667,0.028401878,15,72,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1a,2,321,161,0.71,0.00096,0.030983867,15,72,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1a,3,322,162,0.57,0.00096,0.030983867,15,72,generate,NA,between,pure,words,cued recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1a,4,323,162,0.54,0.00294,0.054221767,15,72,read,NA,between,pure,words,cued recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1a,5,324,163,0.24,0.000806667,0.028401878,15,72,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1a,6,325,163,0.16,0.000326667,0.018073922,15,72,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1b,1,326,164,0.88,0.000672222,0.025927249,18,72,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1b,2,327,164,0.79,0.000555556,0.023570226,18,72,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1b,3,328,165,0.56,0.001088889,0.032998316,18,72,generate,NA,between,pure,words,cued recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1b,4,329,165,0.44,0.001605556,0.040069384,18,72,read,NA,between,pure,words,cued recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1b,5,330,166,0.36,0.001605556,0.040069384,18,72,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1b,6,331,166,0.32,0.002005556,0.044783429,18,72,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1c,1,332,167,0.89,0.000864286,0.029398737,14,72,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1c,2,333,167,0.93,0.000178571,0.013363062,14,72,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1c,3,334,168,0.64,0.001028571,0.032071349,14,72,generate,NA,between,pure,words,cued recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1c,4,335,168,0.51,0.001207143,0.034743961,14,72,read,NA,between,pure,words,cued recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1c,5,336,169,0.38,0.001828571,0.042761799,14,72,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,1c,6,337,169,0.48,0.001607143,0.040089186,14,72,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,2,1,338,170,0.62,0.001207143,0.034743961,14,72,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,2,2,339,170,0.63,0.000864286,0.029398737,14,72,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,2,1,340,171,0.71,0.001028571,0.032071349,14,72,generate,NA,between,pure,words,cued recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +93,2,2,341,171,0.6,0.000864286,0.029398737,14,72,read,NA,between,pure,words,cued recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +102,1,1,342,172,0.5,0.000901766,0.030029417,32,72,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +102,1,1,343,172,0.59,0.000933073,0.030546239,32,72,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +102,1,1,344,173,0.75,0.000681328,0.026102261,32,72,generate,NA,within,pure,words,recognition,item,low,incidental,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +102,1,1,345,173,0.66,0.000862639,0.029370713,32,72,read,NA,within,pure,words,recognition,item,NA,incidental,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +104,1,1,346,174,0.801,0.000443391,0.02105686,44,75,generate,NA,between,pure,words,recognition,item,low,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate +104,1,2,347,174,0.856,0.000349874,0.01870491,42,75,read,NA,between,pure,words,recognition,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate +104,1,3,348,175,0.769,0.000514699,0.022686985,43,75,generate,NA,between,pure,words,recognition,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +104,1,4,349,175,0.712,0.000589976,0.024289413,46,75,read,NA,between,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +104,1,1,350,176,0.879,0.000395701,0.019892224,44,15,generate,NA,between,pure,words,recognition,item,low,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate +104,1,2,351,176,0.897,0.00036738,0.019167153,42,15,read,NA,between,pure,words,recognition,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate +104,1,3,352,177,0.842,0.000494127,0.022228965,43,15,generate,NA,between,pure,words,recognition,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +104,1,4,353,177,0.782,0.000619935,0.024898493,46,15,read,NA,between,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +104,1,1,354,178,0.84,0.000428729,0.020705771,44,24,generate,NA,between,pure,words,recognition,item,low,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate +104,1,2,355,178,0.876,0.000364253,0.019085406,42,24,read,NA,between,pure,words,recognition,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate +104,1,3,356,179,0.806,0.000514107,0.022673929,43,24,generate,NA,between,pure,words,recognition,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +104,1,4,357,179,0.747,0.000617292,0.024845356,46,24,read,NA,between,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +104,2,1,358,180,0.582,0.001312243,0.036224899,23,25,generate,NA,between,pure,words,cued recall,item,medium,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate +104,2,2,359,180,0.613,0.001287843,0.035886529,23,25,read,NA,between,pure,words,cued recall,item,NA,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate +104,2,3,360,181,0.556,0.001345099,0.036675587,22,25,generate,NA,between,pure,words,cued recall,item,medium,intentional,category,verbal/speaking,word fragment,full,timed,no,younger,immediate +104,2,4,361,181,0.421,0.001107624,0.033280979,22,25,read,NA,between,pure,words,cued recall,item,NA,intentional,category,verbal/speaking,word fragment,full,timed,no,younger,immediate +104,2,5,362,182,0.502,0.001296652,0.036009055,22,25,generate,NA,between,pure,words,cued recall,item,medium,intentional,category,NA,word fragment,full,timed,no,younger,immediate +104,2,6,363,182,0.577,0.001314002,0.036249166,23,25,read,NA,between,pure,words,cued recall,item,NA,intentional,category,NA,word fragment,full,timed,no,younger,immediate +104,3,1,364,183,0.84,0.000556823,0.023597096,23,84,generate,NA,between,pure,words,recognition,item,low,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate +104,3,2,365,183,0.87,0.000473048,0.021749662,23,84,read,NA,between,pure,words,recognition,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate +104,3,3,366,184,0.85,0.000540588,0.02325055,22,84,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate +104,3,3,367,184,0.83,0.000599282,0.024480228,22,84,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate +104,4,1,368,185,0.62,0.001122292,0.033500633,24,50,generate,NA,between,pure,words,cued recall,item,medium,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate +104,4,2,369,185,0.64,0.001095349,0.033096055,24,50,read,NA,between,pure,words,cued recall,item,NA,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate +104,4,3,370,186,0.57,0.001154079,0.033971731,24,50,generate,NA,within,mixed,words,cued recall,item,medium,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate +104,4,3,371,186,0.54,0.001147462,0.033874213,24,50,read,NA,within,mixed,words,cued recall,item,NA,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate +112,1,1,372,187,0.8,0.000622414,0.024948222,58,8,generate,NA,between,pure,words,free recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,yes,younger,immediate +112,1,2,373,187,0.75,0.000760345,0.027574351,58,8,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,yes,younger,immediate +112,1,3,374,188,0.94,0.000248276,0.015756772,58,8,generate,NA,between,pure,words,free recall,item,medium,intentional,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate +112,1,4,375,188,0.92,0.000291379,0.017069836,58,8,read,NA,between,pure,words,free recall,item,NA,intentional,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate +112,1,1,376,189,0.6,0.000387931,0.019695965,58,32,generate,NA,between,pure,words,free recall,cue word,medium,incidental,category,writing/typing,word fragment,full,timed,yes,younger,immediate +112,1,2,377,189,0.65,0.000441379,0.021009029,58,32,read,NA,between,pure,words,free recall,cue word,NA,incidental,category,writing/typing,word fragment,full,timed,yes,younger,immediate +112,1,3,378,190,0.65,0.000337931,0.018382901,58,32,generate,NA,between,pure,words,free recall,cue word,medium,incidental,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate +112,1,4,379,190,0.66,0.000337931,0.018382901,58,32,read,NA,between,pure,words,free recall,cue word,NA,incidental,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate +112,2,1,380,191,0.35,0.000576,0.024,25,36,generate,NA,between,pure,words,free recall,item,low,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,immediate +112,2,2,381,191,0.36,0.000784,0.028,25,36,read,NA,between,pure,words,free recall,item,NA,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,immediate +112,2,3,382,192,0.4,0.0016,0.04,25,6,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,immediate +112,2,3,383,192,0.34,0.000676,0.026,25,30,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,immediate +112,2,4,384,193,0.37,0.000784,0.028,25,30,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,immediate +112,2,4,385,193,0.29,0.001444,0.038,25,6,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,immediate +114,1,1,386,194,0.44,0.001171852,0.034232326,24,20,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +114,1,1,387,194,0.3,0.000701865,0.026492728,24,20,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +114,1,1,388,195,0.54,0.001349402,0.036734208,24,20,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +114,1,1,389,195,0.52,0.001331693,0.036492364,24,20,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +114,2,1,390,196,0.5,0.001275201,0.035709957,25,20,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +114,2,1,391,196,0.39,0.000995092,0.031545081,25,20,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +114,2,1,392,197,0.56,0.001326755,0.036424646,25,20,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +114,2,1,393,197,0.5,0.001275201,0.035709957,25,20,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +115,1a,1,394,198,0.43,0.00035,0.018708287,14,48,generate,NA,between,pure,words,recognition,item,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,long +115,1a,2,395,198,0.32,0.000457143,0.021380899,14,48,read,NA,between,pure,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,long +115,1a,3,396,199,0.49,0.0014,0.037416574,14,48,generate,NA,between,pure,words,recognition,item,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,long +115,1a,4,397,199,0.42,0.001028571,0.032071349,14,48,read,NA,between,pure,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,long +115,1b,1,398,200,0.93,0.00030625,0.0175,16,48,generate,NA,between,pure,words,cued recall,item,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +115,1b,2,399,200,0.79,0.001225,0.035,16,48,read,NA,between,pure,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +115,1b,3,400,201,0.97,5.625e-05,0.0075,16,48,generate,NA,between,pure,words,cued recall,item,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +115,1b,4,401,201,0.75,0.00105625,0.0325,16,48,read,NA,between,pure,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +115,1c,1,402,202,0.36,9e-04,0.03,16,48,generate,NA,between,pure,words,free recall,item,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +115,1c,2,403,202,0.33,0.000625,0.025,16,48,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +115,1c,3,404,203,0.37,9e-04,0.03,16,48,generate,NA,between,pure,words,free recall,item,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +115,1c,4,405,203,0.49,0.00140625,0.0375,16,48,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +115,2,1,406,204,0.35,0.000426667,0.020655911,15,48,generate,NA,between,pure,words,free recall,item,high,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +115,2,2,407,204,0.45,0.00096,0.030983867,15,48,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +115,2,3,408,205,0.34,0.000666667,0.025819889,15,48,generate,NA,between,pure,words,free recall,item,high,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +115,2,4,409,205,0.34,0.000426667,0.020655911,15,48,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +115,2,1,410,206,0.88,0.000426667,0.020655911,15,48,generate,NA,between,pure,words,cued recall,item,high,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +115,2,2,411,206,0.78,0.001306667,0.036147845,15,48,read,NA,between,pure,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +115,2,3,412,207,0.87,0.000426667,0.020655911,15,48,generate,NA,between,pure,words,cued recall,item,high,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +115,2,4,413,207,0.69,0.001926667,0.043893811,15,48,read,NA,between,pure,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +115,3,1,414,208,0.35,0.000918121,0.030300516,12,72,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +115,3,2,415,208,0.47,0.001302023,0.036083552,12,72,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +115,3,1,416,209,0.63,0.001362862,0.036916962,12,72,generate,NA,between,pure,words,cued recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +115,3,2,417,209,0.51,0.001377609,0.037116156,12,72,read,NA,between,pure,words,cued recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +115,4,1,418,210,0.46,0.001294871,0.035984315,14,48,generate,NA,between,pure,words,free recall,item,high,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +115,4,2,419,210,0.39,0.001077151,0.032819984,14,48,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +115,4,1,420,211,0.97,0.000309034,0.017579354,14,48,generate,NA,between,pure,words,cued recall,item,high,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +115,4,2,421,211,0.83,0.000744352,0.027282822,14,48,read,NA,between,pure,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate +116,1,1,422,212,0.58,0.000729573,0.027010605,46,64,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,1,1,423,212,0.68,0.000646102,0.025418531,46,64,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,1,1,424,213,0.63,0.000702856,0.026511438,46,64,generate,NA,within,mixed,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,1,1,425,213,0.63,0.000702856,0.026511438,46,64,read,NA,within,mixed,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,2,1,426,214,0.55,0.001124911,0.033539694,24,64,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,2,1,427,214,0.62,0.001096072,0.033106972,24,64,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,2,1,428,215,0.58,0.001125049,0.033541752,24,64,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,2,1,429,215,0.52,0.001105946,0.033255769,24,64,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,2,1,430,216,0.45,0.000995394,0.031549869,24,64,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,2,1,431,216,0.52,0.001105946,0.033255769,24,64,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,2,1,432,217,0.5,0.001083274,0.032913134,24,64,generate,NA,within,mixed,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,2,1,433,217,0.5,0.001083274,0.032913134,24,64,read,NA,within,mixed,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,3,1,434,218,0.32,0.000407271,0.020180944,96,8,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,3,1,435,218,0.44,0.00061791,0.024857792,96,8,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,3,1,436,219,0.33,0.000837135,0.028933279,96,4,generate,NA,within,mixed,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +116,3,1,437,219,0.32,0.000800255,0.028288781,96,4,read,NA,within,mixed,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +118,2,1,438,220,0.49,0.001200156,0.034643261,22,35,generate,NA,within,pure,words,cued recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long +118,2,1,439,220,0.48,0.001182234,0.034383629,22,35,read,NA,within,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long +118,3,1,440,221,0.66,0.001273416,0.03568495,18,35,generate,NA,within,pure,words,cued recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long +118,3,1,441,221,0.64,0.001314565,0.036256924,18,35,read,NA,within,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long +118,4,1,442,222,0.62,0.001029925,0.032092451,30,35,generate,NA,within,mixed,words,cued recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long +118,4,1,443,222,0.63,0.001018442,0.031913037,30,35,read,NA,within,mixed,words,cued recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long +118,5,1,444,223,0.34,0.000521741,0.022841661,42,35,generate,NA,within,mixed,words,cued recall,item,low,intentional,unrelated,verbal/speaking,anagram,full,timed,yes,younger,short +118,5,1,445,223,0.34,0.000521741,0.022841661,42,35,read,NA,within,mixed,words,cued recall,item,NA,intentional,unrelated,verbal/speaking,anagram,full,timed,yes,younger,short +118,5,2,446,224,0.72,0.000616057,0.024820494,47,35,generate,NA,within,mixed,words,cued recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,short +118,5,2,447,224,0.75,0.000559928,0.023662802,47,35,read,NA,within,mixed,words,cued recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,short +118,6,1,448,225,0.84,0.00053308,0.023088531,29,35,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long +118,6,1,449,225,0.81,0.000616984,0.02483916,29,35,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long +118,7,1,450,226,0.63,0.001162389,0.034093832,24,35,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long +118,7,1,451,226,0.54,0.001201859,0.034667839,24,35,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long +119,1,1,452,227,0.942,0.00028802,0.01697114,32,24,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,word stem,full,timed,no,younger,immediate +119,1,1,453,227,0.795,0.000664609,0.025780004,32,24,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,word stem,full,timed,no,younger,immediate +124,1a,1,454,228,0.75,0.001180039,0.034351697,24,12,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +124,1a,1,455,228,0.83,0.00084221,0.029020857,24,12,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +124,1a,1,456,229,0.67,0.001466363,0.038293118,24,12,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +124,1a,1,457,229,0.74,0.001220507,0.034935762,24,12,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +124,1a,1,458,230,0.49,0.001541397,0.039260623,24,12,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1a,1,459,230,0.49,0.001541397,0.039260623,24,12,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1a,1,460,231,0.58,0.00162206,0.040274809,24,12,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1a,1,461,231,0.63,0.001562661,0.039530513,24,12,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1a,1,462,232,0.47,0.001492903,0.038638102,24,12,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1a,1,463,232,0.39,0.001218761,0.03491076,24,12,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1a,1,464,233,0.52,0.001594518,0.039931418,24,12,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1a,1,465,233,0.73,0.001259998,0.035496453,24,12,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1b,2,466,234,0.7,0.001370791,0.03702419,24,12,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +124,1b,2,467,234,0.76,0.001138775,0.033745736,24,12,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +124,1b,2,468,235,0.6,0.001607051,0.040088046,24,12,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +124,1b,2,469,235,0.7,0.001370791,0.03702419,24,12,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +124,1b,2,470,236,0.59,0.001616053,0.040200164,24,12,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1b,2,471,236,0.64,0.001542343,0.03927267,24,12,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1b,2,472,237,0.59,0.001616053,0.040200164,24,12,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1b,2,473,237,0.64,0.001542343,0.03927267,24,12,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1b,2,474,238,0.58,0.00162206,0.040274809,24,12,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1b,2,475,238,0.61,0.001595105,0.03993877,24,12,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1b,2,476,239,0.56,0.001624972,0.040310946,24,12,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +124,1b,2,477,239,0.72,0.001298329,0.036032338,24,12,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short +126,1,1,478,240,0.385,0.000533556,0.023098822,18,20,generate,NA,between,pure,words,free recall,item,low,incidental,semantic,writing/typing,cue only,full,timed,yes,younger,immediate +126,1,2,479,240,0.448,0.001088889,0.032998316,18,20,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word stem,full,timed,yes,younger,immediate +126,1,3,480,240,0.41,0.0011045,0.033234019,18,20,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word stem,full,timed,yes,younger,immediate +126,1,1,481,241,0.638,0.0019845,0.044547727,18,20,generate,NA,between,pure,words,free recall,item,low,incidental,unrelated,writing/typing,cue only,full,timed,yes,younger,immediate +126,1,2,482,241,0.464,0.001120222,0.033469721,18,20,generate,NA,between,pure,words,free recall,item,medium,incidental,unrelated,writing/typing,word stem,full,timed,yes,younger,immediate +126,1,3,483,241,0.384,0.0008405,0.028991378,18,20,read,NA,between,pure,words,free recall,item,NA,incidental,unrelated,writing/typing,word stem,full,timed,yes,younger,immediate +126,2,1,484,242,0.95,0.0001681,0.012965338,10,20,generate,NA,between,pure,words,cued recall,item,low,incidental,semantic,writing/typing,cue only,full,timed,yes,younger,immediate +126,2,2,485,242,0.795,0.001369513,0.037006925,20,20,read,NA,between,pure,words,cued recall,item,NA,incidental,semantic,writing/typing,cue only,full,timed,yes,younger,immediate +126,2,1,486,243,0.335,0.004389025,0.066249717,10,20,generate,NA,between,pure,words,cued recall,item,low,incidental,unrelated,writing/typing,cue only,full,timed,yes,younger,immediate +126,2,2,487,243,0.3275,0.00496125,0.070436141,20,20,read,NA,between,pure,words,cued recall,item,NA,incidental,unrelated,writing/typing,cue only,full,timed,yes,younger,immediate +126,4,1,488,244,0.258,0.000320601,0.017905337,51,24,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +126,4,2,489,244,0.252,0.000309602,0.017595512,51,24,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +126,4,1,490,245,0.348,0.000499108,0.022340726,51,24,generate,NA,between,pure,words,free recall,item,medium,incidental,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate +126,4,2,491,245,0.22,0.000254092,0.015940276,51,24,read,NA,between,pure,words,free recall,item,NA,incidental,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate +126,4,1,492,246,0.393,0.000588258,0.024254022,51,24,generate,NA,between,pure,words,free recall,item,medium,incidental,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate +126,4,2,493,246,0.364,0.000531449,0.023053172,51,24,read,NA,between,pure,words,free recall,item,NA,incidental,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate +126,5,1,494,247,0.305,0.000602534,0.024546564,30,24,generate,NA,between,pure,words,free recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate +126,5,2,495,247,0.268,0.000486224,0.022050492,31,24,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate +126,5,1,496,248,0.348,0.000730455,0.027026931,30,24,generate,NA,between,pure,words,free recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate +126,5,2,497,248,0.292,0.000552833,0.023512404,31,24,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate +126,5,1,498,249,0.445,0.000992885,0.031510082,30,24,generate,NA,between,pure,words,free recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate +126,5,2,499,249,0.301,0.000578487,0.024051755,31,24,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate +129,1,1,500,250,0.33,0.000799986,0.028284021,20,32,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +129,1,1,501,250,0.19,0.000358941,0.018945736,20,32,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +129,2,1,502,251,0.22,0.000207843,0.014416777,64,26,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +129,2,2,503,251,0.23,0.000221538,0.014884159,64,26,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +129,2,3,504,252,0.25,0.000315271,0.017755875,48,26,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +129,2,3,505,252,0.17,0.000185017,0.01360209,48,26,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +129,3,1,506,253,0.3,0.001007577,0.031742351,20,10,generate,NA,within,mixed,words,free recall,item,low,incidental,NA,verbal/speaking,word fragment,divided,timed,no,younger,immediate +129,3,1,507,253,0.17,0.000450409,0.021222852,20,10,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,verbal/speaking,word fragment,divided,timed,no,younger,immediate +129,4,1,508,254,0.08,0.000157136,0.012535395,19,26,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate +129,4,2,509,254,0.06,0.000130497,0.011423529,19,26,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate +129,4,3,510,255,0.12,0.000237529,0.015411965,16,26,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate +129,4,3,511,255,0.04,0.000114691,0.010709403,16,26,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate +139,1,1,512,256,0.33,0.00056,0.023664319,35,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word stem,full,timed,yes,younger,immediate +139,1,1,513,256,0.29,0.001031429,0.032115862,35,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word stem,full,timed,yes,younger,immediate +139,1,1,514,256,0.29,0.001785714,0.042257713,35,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +139,1,1,515,256,0.07,0.000285714,0.016903085,35,8,read,NA,within,pure,words,cued recall,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +140,1,1,516,257,0.88,0.000429187,0.020716833,30,30,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +140,1,1,517,257,0.74,0.000816182,0.028568894,30,30,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +140,1,1,518,258,0.68,0.000960607,0.030993658,30,30,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +140,1,1,519,258,0.8,0.000648193,0.025459638,30,30,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +147,1,1,520,259,0.59,0.001540386,0.039247749,37,8,generate,NA,within,mixed,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +147,1,1,521,259,0.331,0.000926208,0.030433673,37,8,read,NA,within,mixed,words,cued recall,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +147,1,2,522,260,0.24,0.000609246,0.0246829,34,8,generate,NA,within,mixed,words,free recall,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +147,1,2,523,260,0.07,0.000164722,0.012834422,34,8,read,NA,within,mixed,words,free recall,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +147,2,1,524,261,0.6,0.001435949,0.037893911,24,16,generate,NA,between,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +147,2,2,525,261,0.38,0.001052805,0.032446963,24,16,read,NA,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +147,2,3,526,262,0.241,0.000541941,0.023279623,24,16,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +147,2,4,527,262,0.168,0.000330722,0.018185752,24,16,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +150,1,1,528,263,0.38,0.000943433,0.03071535,30,15,generate,NA,within,mixed,words,recognition,item,high,incidental,NA,covert/thinking,anagram,full,timed,yes,younger,short +150,1,1,529,263,0.28,0.000606897,0.024635287,30,15,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,covert/thinking,anagram,full,timed,yes,younger,short +150,1,2,530,264,0.5,0.001250564,0.035363312,30,15,generate,NA,within,mixed,words,cued recall,item,high,incidental,NA,covert/thinking,anagram,full,timed,yes,younger,short +150,1,2,531,264,0.38,0.000943433,0.03071535,30,15,read,NA,within,mixed,words,cued recall,item,NA,incidental,NA,covert/thinking,anagram,full,timed,yes,younger,short +155,1,1,532,265,0.23,0.000463336,0.021525252,19,40,generate,NA,between,pure,words,free recall,item,medium,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,1,2,533,265,0.33,0.000791078,0.028126113,19,40,read,NA,between,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,1,1,534,266,0.04,0.000100017,0.010000873,19,40,generate,NA,between,pure,words,NA,order,medium,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,1,2,535,266,0.1,0.000174623,0.013214512,19,40,read,NA,between,pure,words,NA,order,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,2a,1,536,267,0.52,0.000623077,0.024961509,52,32,generate,NA,between,pure,words,free recall,item,medium,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,2a,2,537,267,0.63,0.000492308,0.022188008,52,32,read,NA,between,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,2a,3,538,268,0.44,0.000432692,0.020801257,52,32,generate,NA,between,pure,words,free recall,item,medium,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,2a,4,539,268,0.45,0.000555769,0.023574758,52,32,read,NA,between,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,2b,1,540,269,0.1,0.00032,0.017888544,20,32,generate,NA,between,pure,words,NA,order,medium,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,2b,2,541,269,0.21,0.000605,0.024596748,20,32,read,NA,between,pure,words,NA,order,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,2b,3,542,270,0.11,0.00018,0.013416408,20,32,generate,NA,between,pure,words,NA,order,medium,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,2b,4,543,270,0.21,0.00072,0.026832816,20,32,read,NA,between,pure,words,NA,order,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,3a,1,544,271,0.3,0.000272222,0.016499158,18,32,generate,NA,between,pure,words,free recall,item,medium,incidental,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,3a,2,545,271,0.2,0.000555556,0.023570226,18,32,read,NA,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,3b,1,546,272,0.05,0.000138889,0.011785113,18,32,generate,NA,between,pure,words,NA,order,medium,incidental,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +155,3b,2,547,272,0.11,0.000272222,0.016499158,18,32,read,NA,between,pure,words,NA,order,NA,incidental,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +160,1,1,548,273,0.72,0.001271102,0.035652523,20,16,generate,NA,between,pure,words,cued recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,yes,younger,immediate +160,1,2,549,273,0.78,0.001032459,0.032131895,20,16,read,NA,between,pure,words,cued recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,yes,younger,immediate +160,1,3,550,274,0.37,0.001113116,0.0333634,20,16,generate,NA,between,pure,words,free recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,yes,younger,immediate +160,1,4,551,274,0.26,0.000664271,0.025773457,20,16,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,yes,younger,immediate +160,2,1,552,275,0.79,0.000990765,0.031476413,20,16,generate,NA,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +160,2,2,553,275,0.69,0.001375112,0.037082505,20,16,read,NA,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +160,2,3,554,276,0.31,0.000863914,0.029392412,20,16,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +160,2,4,555,276,0.3,0.000822763,0.028683838,20,16,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +162,1,1,556,277,0.63,5e-04,0.02236068,20,20,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +162,1,1,557,277,0.07,0.000125,0.01118034,20,20,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +162,1,2,558,278,0.4,0.000605,0.024596748,20,20,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,older,immediate +162,1,2,559,278,0.06,8e-05,0.008944272,20,20,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,older,immediate +175,1,1,560,279,0.66,0.000898016,0.02996692,40,20,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,self-paced,no,younger,immediate +175,1,1,561,279,0.44,0.000843361,0.029040674,40,20,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,self-paced,no,younger,immediate +175,1,2,562,280,0.6,0.000965928,0.031079386,40,20,generate,NA,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,self-paced,no,younger,immediate +175,1,2,563,280,0.34,0.000607142,0.024640255,40,20,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,self-paced,no,younger,immediate +175,2,1,564,281,0.61,0.000958748,0.030963656,40,20,generate,low,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,self-paced,no,younger,immediate +175,2,1,565,281,0.34,0.000607142,0.024640255,40,20,read,low,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,self-paced,no,younger,immediate +175,2,2,566,282,0.66,0.000898016,0.02996692,40,20,generate,high,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,self-paced,no,younger,immediate +175,2,2,567,282,0.34,0.000607142,0.024640255,40,20,read,high,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,self-paced,no,younger,immediate +182,1,1,568,283,0.89,0.000516835,0.022734015,21,24,generate,NA,within,mixed,words,recognition,item,medium,incidental,semantic,covert/thinking,word stem,full,self-paced,yes,younger,long +182,1,1,569,283,0.5,0.001335468,0.03654406,21,24,read,NA,within,mixed,words,recognition,item,NA,incidental,semantic,covert/thinking,word stem,full,self-paced,yes,younger,long +182,1,1,570,284,0.72,0.001110157,0.033319023,21,24,generate,NA,within,mixed,words,recognition,source,medium,incidental,semantic,covert/thinking,word stem,full,self-paced,yes,younger,long +182,1,1,571,284,0.39,0.001042121,0.032281903,21,24,read,NA,within,mixed,words,recognition,source,NA,incidental,semantic,covert/thinking,word stem,full,self-paced,yes,younger,long +186,1,1,572,285,0.59,0.001445988,0.038026154,19,24,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +186,1,2,573,285,0.61,0.001395385,0.037354856,20,24,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +186,1,3,574,286,0.59,0.001445988,0.038026154,19,24,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +186,1,4,575,286,0.44,0.001227448,0.035034952,20,24,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +186,1,5,576,287,0.54,0.001445693,0.038022265,19,24,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +186,1,6,577,287,0.41,0.001211998,0.034813769,17,24,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +186,2,1,578,288,0.44,0.001227448,0.035034952,20,24,generate,NA,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +186,2,2,579,288,0.46,0.001281661,0.035800291,20,24,read,NA,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +186,2,3,580,289,0.52,0.00142672,0.037771942,19,24,generate,NA,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +186,2,4,581,289,0.63,0.001367004,0.036973012,20,24,read,NA,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +186,2,5,582,290,0.51,0.001381795,0.037172509,20,24,generate,NA,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +186,2,6,583,290,0.41,0.001211998,0.034813769,17,24,read,NA,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate +197,1,1,584,291,0.619,0.00136953,0.037007161,48,7,generate,NA,within,mixed,numbers,free recall,item,low,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate +197,1,1,585,291,0.31,0.000763958,0.027639799,48,7,read,NA,within,mixed,numbers,free recall,item,NA,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate +197,2,1,586,292,0.615,0.002509957,0.050099476,18,7,generate,NA,between,pure,numbers,free recall,item,low,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate +197,2,2,587,292,0.361,0.001737426,0.041682448,18,7,read,NA,between,pure,numbers,free recall,item,NA,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate +229,1,1,588,382,0.265,0.000400849,0.020021224,33,60,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,cue only,full,self-paced,no,younger,immediate +229,1,2,589,382,0.181,0.000233792,0.015290257,33,60,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,cue only,full,self-paced,no,younger,immediate +229,1,1,590,383,0.364,0.000638499,0.025268536,33,60,generate,NA,between,pure,words,free recall,item,medium,intentional,unrelated,writing/typing,cue only,full,self-paced,no,younger,immediate +229,1,2,591,383,0.201,0.000269025,0.01640199,33,60,read,NA,between,pure,words,free recall,item,NA,intentional,unrelated,writing/typing,cue only,full,self-paced,no,younger,immediate +231,1,1,592,293,0.594,0.001927248,0.043900436,16,12,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,writing/typing,NA,full,self-paced,yes,younger,immediate +231,1,1,593,293,0.427,0.001623698,0.040295133,16,12,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,covert/thinking,NA,full,self-paced,yes,younger,immediate +231,1,1,594,294,0.582,0.001937156,0.044013129,16,12,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,NA,full,self-paced,yes,younger,immediate +231,1,1,595,294,0.765,0.00133585,0.036549281,16,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,covert/thinking,NA,full,self-paced,yes,younger,immediate +231,2,1,596,295,0.554,0.001778816,0.042176008,20,12,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,verbal/speaking,NA,full,self-paced,yes,younger,immediate +231,2,1,597,295,0.221,0.000586249,0.024212584,20,12,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,covert/thinking,NA,full,self-paced,yes,younger,immediate +231,2,1,598,296,0.479,0.001660996,0.04075532,20,12,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,NA,full,self-paced,yes,younger,immediate +231,2,1,599,296,0.603,0.001757235,0.041919384,20,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,covert/thinking,NA,full,self-paced,yes,younger,immediate +231,3,1,600,297,0.471,0.001256703,0.035450008,32,12,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,verbal/speaking,NA,full,self-paced,yes,younger,immediate +231,3,1,601,297,0.294,0.000685172,0.026175799,32,12,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,covert/thinking,NA,full,self-paced,yes,younger,immediate +231,3,1,602,298,0.474,0.001263276,0.035542599,32,12,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,NA,full,self-paced,yes,younger,immediate +231,3,1,603,298,0.537,0.001355637,0.03681898,32,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,covert/thinking,NA,full,self-paced,yes,younger,immediate +232,1,1,604,384,0.812180451,0.000481732,0.021948402,40,40,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +232,1,2,605,384,0.795338346,0.000519434,0.022791097,40,40,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +232,1,1,606,385,0.533082707,0.000967534,0.031105205,40,20,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,divided,timed,no,younger,immediate +232,1,2,607,385,0.475338346,0.000905672,0.030094387,40,20,read,high,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,divided,timed,no,younger,immediate +232,1,3,608,386,0.586015038,0.000850044,0.029155513,40,40,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,older,immediate +232,1,4,609,386,0.545112782,0.000850269,0.02915938,40,40,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,older,immediate +232,1,3,610,387,0.381503759,0.000711891,0.026681289,40,20,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,divided,timed,no,older,immediate +232,1,4,611,387,0.294887218,0.000492314,0.022188151,40,20,read,high,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,divided,timed,no,older,immediate +234,1,1,612,388,0.73,0.000730751,0.027032402,34,45,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +234,1,1,613,388,0.67,0.000850434,0.029162207,34,45,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +234,1,2,614,389,0.69,0.000814595,0.028541112,34,45,generate,NA,within,mixed,words,free recall,item,low,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +234,1,2,615,389,0.68,0.000833103,0.028863519,34,45,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +234,1,1,616,390,0.93,0.000270655,0.016451592,34,45,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +234,1,1,617,390,0.93,0.000270655,0.016451592,34,45,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +234,1,2,618,391,0.88,0.00037222,0.019293002,34,45,generate,NA,within,mixed,words,recognition,source,low,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +234,1,2,619,391,0.88,0.00037222,0.019293002,34,45,read,NA,within,mixed,words,recognition,source,NA,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +234,3,1,620,392,0.69,0.000884532,0.029741089,30,45,generate,NA,within,mixed,words,free recall,item,low,incidental,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +234,3,1,621,392,0.64,0.000971297,0.031165642,30,45,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +234,3,1,622,393,0.69,0.000884532,0.029741089,30,45,generate,NA,within,mixed,words,recognition,source,low,incidental,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +234,3,1,623,393,0.84,0.000504216,0.022454759,30,45,read,NA,within,mixed,words,recognition,source,NA,incidental,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +237,1,1,624,394,0.288,0.000990125,0.031466252,32,8,generate,NA,between,mixed,words,free recall,item,medium,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,2,625,394,0.224,8e-04,0.028284271,32,8,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,1,626,395,0.316,0.001152,0.033941125,32,8,generate,NA,between,mixed,words,free recall,item,high,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,2,627,395,0.276,0.000595125,0.024395184,32,8,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,1,628,396,0.306,0.000820125,0.028637825,32,8,generate,NA,between,mixed,words,free recall,item,medium,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,2,629,396,0.281,0.000913781,0.030228815,32,8,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,1,630,397,0.466,0.000780125,0.027930718,32,8,generate,NA,between,mixed,words,free recall,item,high,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,2,631,397,0.417,0.000968,0.031112698,32,8,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,1,632,398,0.906,0.000575696,0.023993675,32,8,generate,NA,between,mixed,words,recognition,cue word,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,2,633,398,0.76,0.001198531,0.034619804,32,8,read,NA,between,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,1,634,399,0.854,0.000782571,0.027974465,32,8,generate,NA,between,mixed,words,recognition,cue word,high,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,2,635,399,0.75,0.001241961,0.035241461,32,8,read,NA,between,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,1,636,400,0.781,0.001105439,0.033248145,32,8,generate,NA,between,mixed,words,recognition,cue word,medium,incidental,antonym,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,2,637,400,0.708,0.00141299,0.037589757,32,8,read,NA,between,mixed,words,recognition,cue word,NA,incidental,antonym,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,1,638,401,0.76,0.001198531,0.034619804,32,8,generate,NA,between,mixed,words,recognition,cue word,high,incidental,antonym,writing/typing,word fragment,full,timed,no,younger,immediate +237,1,2,639,401,0.729,0.001330208,0.036472014,32,8,read,NA,between,mixed,words,recognition,cue word,NA,incidental,antonym,writing/typing,word fragment,full,timed,no,younger,immediate +237,2,1,640,402,0.481,0.000656364,0.025619595,55,8,generate,NA,within,mixed,words,free recall,item,medium,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate +237,2,1,641,402,0.389,0.000698473,0.026428635,55,8,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate +237,2,1,642,403,0.464,0.000741891,0.027237674,55,8,generate,NA,within,mixed,words,free recall,item,high,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate +237,2,1,643,403,0.442,0.000727273,0.026967994,55,8,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate +237,2,1,644,404,0.838,0.000571267,0.023901193,55,8,generate,NA,within,mixed,words,recognition,cue word,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +237,2,1,645,404,0.709,0.000945571,0.030750134,55,8,read,NA,within,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +237,2,1,646,405,0.739,0.000864756,0.029406732,55,8,generate,NA,within,mixed,words,recognition,cue word,high,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +237,2,1,647,405,0.539,0.001140488,0.033771116,55,8,read,NA,within,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +237,3,1,648,406,0.464,0.000880074,0.029666042,54,10,generate,NA,between,mixed,words,free recall,item,medium,incidental,NA,writing/typing,word stem,full,timed,no,younger,immediate +237,3,2,649,406,0.357,0.000785852,0.028033049,54,10,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word stem,full,timed,no,younger,immediate +237,3,1,650,407,0.471,0.000633796,0.025175311,54,10,generate,NA,between,mixed,words,free recall,item,high,incidental,NA,writing/typing,word stem,full,timed,no,younger,immediate +237,3,2,651,407,0.355,0.000785852,0.028033049,54,10,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word stem,full,timed,no,younger,immediate +237,3,1,652,408,0.57,0.000492019,0.02218149,54,10,generate,NA,between,mixed,words,free recall,item,high,incidental,NA,writing/typing,word stem,full,timed,no,younger,immediate +237,3,2,653,408,0.397,0.000528907,0.022997987,54,10,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word stem,full,timed,no,younger,immediate +237,3,1,654,409,0.974,0.00021234,0.014571887,54,10,generate,NA,between,mixed,words,recognition,cue word,medium,incidental,semantic,writing/typing,word stem,full,timed,no,younger,immediate +237,3,2,655,409,0.88,0.000401826,0.020045595,54,10,read,NA,between,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word stem,full,timed,no,younger,immediate +237,3,1,656,410,0.918,0.000316755,0.01779761,54,10,generate,NA,between,mixed,words,recognition,cue word,high,incidental,semantic,writing/typing,word stem,full,timed,no,younger,immediate +237,3,2,657,410,0.768,0.000692025,0.026306376,54,10,read,NA,between,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word stem,full,timed,no,younger,immediate +237,3,1,658,411,0.926,0.000300244,0.017327547,54,10,generate,NA,between,mixed,words,recognition,cue word,high,incidental,semantic,writing/typing,word stem,full,timed,no,younger,immediate +237,3,2,659,411,0.773,0.000678831,0.02605438,54,10,read,NA,between,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word stem,full,timed,no,younger,immediate +237,5,1,660,412,0.39,0.0007225,0.02687936,40,8,generate,NA,within,mixed,words,free recall,item,high,incidental,NA,writing/typing,word stem,full,timed,yes,younger,immediate +237,5,1,661,412,0.22,0.0005625,0.023717082,40,8,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word stem,full,timed,yes,younger,immediate +237,5,1,662,413,0.39,0.0011025,0.033203915,40,8,generate,NA,within,mixed,words,free recall,item,high,incidental,NA,writing/typing,word stem,full,timed,yes,younger,immediate +237,5,1,663,413,0.26,0.0009025,0.030041638,40,8,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word stem,full,timed,yes,younger,immediate +263,3,1,664,414,0.79,0.000428868,0.020709133,54,36,generate,NA,within,mixed,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +263,3,1,665,414,0.75,0.000500087,0.022362622,54,36,read,NA,within,mixed,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate +269,1,1,666,415,0.22,0.000309152,0.017582725,34,44,generate,NA,between,pure,words,free recall,item,high,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate +269,1,2,667,415,0.21,0.000278334,0.01668334,36,44,read,NA,between,pure,words,free recall,item,NA,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate +269,2,1,668,416,0.26,0.000402603,0.020064975,40,21,generate,NA,within,pure,words,free recall,item,high,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate +269,2,1,669,416,0.18,0.00023984,0.015486753,40,21,read,NA,within,pure,words,free recall,item,NA,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate +269,3,1,670,417,0.29,0.000474019,0.021771982,40,21,generate,NA,within,mixed,words,free recall,item,high,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate +269,3,1,671,417,0.15,0.000191479,0.013837608,40,21,read,NA,within,mixed,words,free recall,item,NA,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate +269,4,1,672,418,0.42,0.00076635,0.027683036,36,36,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +269,4,2,673,418,0.34,0.000580407,0.024091639,36,36,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +271,1,1,674,419,0.9585,0.000112667,0.010614456,24,20,generate,NA,within,pure,words,recognition,item,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate +271,1,1,675,419,0.692,0.001204167,0.034701105,24,20,read,NA,within,pure,words,recognition,item,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate +271,1,2,676,420,0.846,0.001107042,0.033272236,24,20,generate,NA,within,pure,words,recognition,item,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate +271,1,2,677,420,0.681,0.001768167,0.042049574,24,20,read,NA,within,pure,words,recognition,item,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate +271,1,1,678,421,0.811,0.000737042,0.027148511,24,20,generate,NA,within,pure,words,recognition,source,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate +271,1,1,679,421,0.61,0.001584375,0.039804208,24,20,read,NA,within,pure,words,recognition,source,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate +271,1,2,680,422,0.578,0.002752042,0.052459905,24,20,generate,NA,within,pure,words,recognition,source,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate +271,1,2,681,422,0.527,0.002860167,0.053480526,24,20,read,NA,within,pure,words,recognition,source,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate +271,2,1,682,423,0.924,0.000330042,0.018167049,24,20,generate,NA,within,pure,words,recognition,item,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate +271,2,1,683,423,0.685,0.0012615,0.035517601,24,20,read,NA,within,pure,words,recognition,item,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate +271,2,2,684,424,0.795,0.001134375,0.033680484,24,20,generate,NA,within,pure,words,recognition,item,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate +271,2,2,685,424,0.594,0.001820042,0.042661946,24,20,read,NA,within,pure,words,recognition,item,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate +271,2,1,686,425,0.803,0.000651042,0.025515518,24,20,generate,NA,within,pure,words,recognition,source,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate +271,2,1,687,425,0.594,0.002562667,0.050622788,24,20,read,NA,within,pure,words,recognition,source,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate +271,2,2,688,426,0.489,0.001908167,0.043682567,24,20,generate,NA,within,pure,words,recognition,source,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate +271,2,2,689,426,0.36,0.0024,0.048989795,24,20,read,NA,within,pure,words,recognition,source,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate +275,1,1,690,299,0.88,0.000590123,0.024292449,32,10,generate,low,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,691,299,0.59,0.001485929,0.038547745,32,10,read,low,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,692,300,0.86,0.000661598,0.025721551,32,10,generate,high,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,693,300,0.69,0.001291471,0.035937047,32,10,read,high,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,694,301,0.91,0.00049018,0.022140019,32,10,generate,low,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,695,301,0.58,0.001491452,0.038619322,32,10,read,low,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,696,302,0.86,0.000661598,0.025721551,32,10,generate,high,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,697,302,0.63,0.001436836,0.037905621,32,10,read,high,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,698,303,0.74,0.001122232,0.033499735,32,10,generate,low,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,699,303,0.68,0.001320814,0.036343,32,10,read,low,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,700,304,0.73,0.001158543,0.03403738,32,10,generate,high,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,701,304,0.7,0.001260415,0.035502319,32,10,read,high,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,702,305,0.85,0.000698551,0.026430122,32,10,generate,low,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,703,305,0.75,0.001085022,0.032939678,32,10,read,low,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,704,306,0.82,0.000813061,0.028514226,32,10,generate,high,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,1,1,705,306,0.73,0.001158543,0.03403738,32,10,read,high,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short +275,2a,1,706,307,0.93,0.000509634,0.022575075,16,15,generate,NA,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2a,1,707,307,0.75,0.00128866,0.035897908,16,15,read,NA,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2a,1,708,308,0.94,0.000475486,0.021805649,16,15,generate,NA,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2a,1,709,308,0.8,0.001058522,0.032534936,16,15,read,NA,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2a,1,710,309,0.87,0.000742806,0.027254465,16,15,generate,NA,within,mixed,words,recognition,location,medium,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2a,1,711,309,0.81,0.001011972,0.031811511,16,15,read,NA,within,mixed,words,recognition,location,NA,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2a,1,712,310,0.88,0.000700878,0.026474093,16,15,generate,NA,within,mixed,words,recognition,location,medium,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2a,1,713,310,0.77,0.001197861,0.034610134,16,15,read,NA,within,mixed,words,recognition,location,NA,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2b,1,714,311,0.86,0.000785767,0.028031539,16,15,generate,NA,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2b,1,715,311,0.71,0.001458234,0.038186828,16,15,read,NA,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2b,1,716,312,0.89,0.000660077,0.025691961,16,15,generate,NA,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2b,1,717,312,0.75,0.00128866,0.035897908,16,15,read,NA,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2b,1,718,313,0.75,0.00128866,0.035897908,16,15,generate,NA,within,mixed,words,recognition,font color,medium,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2b,1,719,313,0.67,0.001601339,0.040016737,16,15,read,NA,within,mixed,words,recognition,font color,NA,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2b,1,720,314,0.7,0.00149697,0.038690694,16,15,generate,NA,within,mixed,words,recognition,font color,medium,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate +275,2b,1,721,314,0.65,0.001659297,0.040734471,16,15,read,NA,within,mixed,words,recognition,font color,NA,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate +281,1,1,722,427,0.88,0.000424383,0.02060055,30,32,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,verbal/speaking,cue only,full,timed,yes,younger,long +281,1,1,723,427,0.68,0.000949853,0.030819691,30,32,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,cue only,full,timed,yes,younger,long +281,1,1,724,428,0.76,0.000753,0.027440851,30,32,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,cue only,full,timed,yes,younger,long +281,1,1,725,428,0.56,0.001074492,0.03277945,30,32,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,verbal/speaking,cue only,full,timed,yes,younger,long +286,1,1,726,429,0.27,0.000444585,0.021085192,36,24,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +286,1,2,727,429,0.28,0.000469456,0.021666928,36,24,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +286,1,1,728,430,0.18,0.000250348,0.015822396,36,24,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +286,1,2,729,430,0.17,0.00023268,0.01525386,36,24,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +286,2,1,730,431,0.24,0.000402316,0.020057808,28,40,generate,NA,between,pure,words,free recall,item,high,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate +286,2,2,731,431,0.23,0.000378154,0.019446193,28,40,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate +286,3,1,732,432,0.28,0.000549484,0.023441074,24,42,generate,NA,between,pure,words,free recall,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +286,3,2,733,432,0.27,0.000520374,0.022811704,24,42,read,NA,between,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +286,3,3,734,433,0.12,0.000183644,0.013551529,24,42,generate,NA,between,pure,non-words,free recall,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +286,3,4,735,433,0.13,0.00019945,0.014122682,24,42,read,NA,between,pure,non-words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +286,4,1,736,434,0.36,0.000902866,0.030047727,24,21,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +286,4,1,737,434,0.24,0.000497033,0.022294227,24,21,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +286,4,2,738,435,0.12,0.000208858,0.014451934,24,21,generate,NA,within,mixed,non-words,free recall,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +286,4,2,739,435,0.11,0.000191946,0.013854467,24,21,read,NA,within,mixed,non-words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +286,5,1,740,436,0.21,0.000292376,0.017099008,33,48,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +286,5,2,741,436,0.22,0.000312226,0.01766991,33,48,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate +291,1a,1,742,437,0.38,0.000984895,0.031383038,28,15,generate,NA,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +291,1a,1,743,437,0.27,0.000600005,0.024494995,28,15,read,NA,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +291,1b,1,744,438,0.43,0.00125135,0.035374422,24,15,generate,NA,within,mixed,words,cued recall,item,low,incidental,NA,writing/typing,word fragment,full,timed,yes,younger,immediate +291,1b,1,745,438,0.33,0.000884118,0.029734123,24,15,read,NA,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,yes,younger,immediate +291,2,1,746,439,0.39,0.001113797,0.033373591,24,15,generate,NA,within,mixed,words,cued recall,item,medium,incidental,semantic,writing/typing,word stem,full,timed,yes,younger,immediate +291,2,1,747,439,0.22,0.00048582,0.022041316,24,15,read,NA,within,mixed,words,cued recall,item,NA,incidental,semantic,writing/typing,word stem,full,timed,yes,younger,immediate +291,3,1,748,440,0.29,0.000698833,0.026435441,20,24,generate,NA,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +291,3,1,749,440,0.21,0.000435477,0.020868097,20,24,read,NA,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +291,3,2,750,441,0.4,0.001100749,0.033177541,20,24,generate,NA,within,pure,words,cued recall,item,medium,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +291,3,2,751,441,0.28,0.000663053,0.025749811,20,24,read,NA,within,pure,words,cued recall,item,NA,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +293,1,1,752,807,0.74,0.000818819,0.028615022,32,24,generate,NA,within,pure,words,recognition,item,high,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +293,1,1,753,807,0.66,0.001002344,0.03165982,32,24,read,NA,within,pure,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +293,1,1,754,808,0.65,0.001019366,0.031927507,32,24,generate,NA,within,pure,non-words,recognition,item,high,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +293,1,1,755,808,0.67,0.00098376,0.03136495,32,24,read,NA,within,pure,non-words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +293,2,1,756,809,0.587,0.000810867,0.028475718,48,24,generate,NA,within,pure,words,free recall,item,high,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +293,2,1,757,809,0.642,0.000770675,0.027761029,48,24,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +293,2,1,758,810,0.266,0.000351759,0.018755228,48,24,generate,NA,within,pure,non-words,free recall,item,high,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +293,2,1,759,810,0.333,0.000491201,0.022163049,48,24,read,NA,within,pure,non-words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate +293,3,1,760,811,0.82,0.000520415,0.022812607,48,14,generate,low,within,pure,words,recognition,item,high,intentional,compound words,writing/typing,letter transposition,full,timed,no,younger,immediate +293,3,1,761,811,0.71,0.000785876,0.028033487,48,14,read,low,within,pure,words,recognition,item,NA,intentional,compound words,writing/typing,letter transposition,full,timed,no,younger,immediate +293,3,1,762,812,0.65,0.000894234,0.029903748,48,14,generate,high,within,pure,non-words,recognition,item,high,intentional,compound words,writing/typing,letter transposition,full,timed,no,younger,immediate +293,3,1,763,812,0.64,0.000907716,0.03012832,48,14,read,high,within,pure,non-words,recognition,item,NA,intentional,compound words,writing/typing,letter transposition,full,timed,no,younger,immediate +308,1,1,764,442,0.082,0.000182118,0.013495117,28,10,generate,NA,within,NA,non-words,free recall,item,medium,NA,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +308,1,1,765,442,0.132,0.000279881,0.016729634,28,10,read,NA,within,NA,non-words,free recall,item,NA,NA,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +308,1,1,766,443,0.704,0.001357972,0.036850677,28,10,generate,NA,within,NA,non-words,recognition,item,medium,NA,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +308,1,1,767,443,0.707,0.001347296,0.036705529,28,10,read,NA,within,NA,non-words,recognition,item,NA,NA,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +308,2,1,768,444,0.071,0.000224982,0.014999389,9,10,generate,NA,within,NA,non-words,free recall,item,medium,NA,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +308,2,1,769,444,0.136,0.000395008,0.019874804,9,10,read,NA,within,NA,non-words,free recall,item,NA,NA,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +308,2,1,770,445,0.656,0.002057555,0.045360282,9,10,generate,NA,within,NA,non-words,recognition,item,medium,NA,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +308,2,1,771,445,0.778,0.001453848,0.038129361,9,10,read,NA,within,NA,non-words,recognition,item,NA,NA,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate +344,1,1,772,446,0.85,0.000520227,0.022808489,32,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,1,1,773,446,0.64,0.001056131,0.032498172,32,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,1,1,774,447,0.58,0.001110718,0.033327443,32,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,1,1,775,447,0.66,0.001023072,0.031985494,32,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,2,1,776,448,0.81,0.000634547,0.025190214,32,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,2,1,777,448,0.51,0.001081623,0.03288804,32,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,2,1,778,449,0.64,0.001056131,0.032498172,32,22,generate,NA,within,mixed,words,recognition,location,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,2,1,779,449,0.62,0.00108211,0.032895441,32,22,read,NA,within,mixed,words,recognition,location,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,3,1,780,450,0.84,0.000577055,0.024021974,24,44,generate,NA,between,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,3,2,781,450,0.77,0.000790563,0.028116954,24,44,read,NA,between,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,3,1,782,451,0.59,0.001164736,0.03412823,24,44,generate,NA,between,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,3,2,783,451,0.69,0.001012312,0.031816849,24,44,read,NA,between,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,4,1,784,452,0.81,0.000634547,0.025190214,32,22,generate,NA,between,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,4,2,785,452,0.74,0.000835752,0.028909376,32,22,read,NA,between,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,4,1,786,453,0.66,0.001023072,0.031985494,32,22,generate,NA,between,mixed,words,recognition,location,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,4,2,787,453,0.65,0.001040445,0.032255935,32,22,read,NA,between,mixed,words,recognition,location,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,5,1,788,454,0.76,0.000779785,0.027924628,32,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,5,1,789,454,0.6,0.001100441,0.033172896,32,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,5,1,790,455,0.61,0.001092261,0.03304937,32,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,5,1,791,455,0.68,0.00098364,0.031363037,32,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,6,1,792,456,0.83,0.000493933,0.022224614,40,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,6,1,793,456,0.61,0.000935486,0.030585718,40,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,6,1,794,457,0.63,0.000916459,0.030273069,40,22,generate,NA,within,mixed,words,recognition,background color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,6,1,795,457,0.61,0.000935486,0.030585718,40,22,read,NA,within,mixed,words,recognition,background color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,7,1,796,458,0.77,0.000751107,0.027406327,32,22,generate,NA,within,mixed,words,recognition,cue word,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,7,1,797,458,0.64,0.001056131,0.032498172,32,22,read,NA,within,mixed,words,recognition,cue word,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,7,1,798,459,0.62,0.00108211,0.032895441,32,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,7,1,799,459,0.63,0.001070045,0.032711537,32,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,8,1,800,460,0.84,0.000409505,0.020236238,48,22,generate,NA,within,mixed,words,recognition,cue word,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,8,1,801,460,0.52,0.000815537,0.028557604,48,22,read,NA,within,mixed,words,recognition,cue word,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,8,1,802,461,0.53,0.000821712,0.028665514,48,22,generate,NA,within,mixed,words,recognition,font color,high,incidental,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,8,1,803,461,0.56,0.000831113,0.02882903,48,22,read,NA,within,mixed,words,recognition,font color,NA,incidental,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,9,1,804,462,0.86,0.000368015,0.019183729,48,22,generate,NA,within,mixed,words,recognition,cue word,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,9,1,805,462,0.6,0.000821947,0.028669619,48,22,read,NA,within,mixed,words,recognition,cue word,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,9,1,806,463,0.56,0.000831113,0.02882903,48,22,generate,NA,within,mixed,words,recognition,font color,high,incidental,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,9,1,807,463,0.63,0.000799243,0.02827089,48,22,read,NA,within,mixed,words,recognition,font color,NA,incidental,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +344,10a,1,808,464,0.89,0.000354267,0.018821994,32,60,generate,NA,within,mixed,words,recognition,cue word,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +344,10a,1,809,464,0.67,0.000859449,0.02931636,32,60,read,NA,within,mixed,words,recognition,cue word,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +344,10a,1,810,465,0.623,0.000923289,0.030385673,32,60,generate,NA,within,mixed,words,recognition,font color,high,incidental,category,writing/typing,word stem,full,timed,yes,younger,immediate +344,10a,1,811,465,0.7,0.000803433,0.028344898,32,60,read,NA,within,mixed,words,recognition,font color,NA,incidental,category,writing/typing,word stem,full,timed,yes,younger,immediate +344,10b,1,812,466,0.92,0.000239161,0.015464839,48,30,generate,NA,within,mixed,words,recognition,item,high,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +344,10b,1,813,466,0.72,0.000621947,0.024938863,48,30,read,NA,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +344,10b,1,814,467,0.598,0.000770812,0.027763504,48,30,generate,NA,within,mixed,words,recognition,font color,high,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate +344,10b,1,815,467,0.66,0.000715711,0.026752772,48,30,read,NA,within,mixed,words,recognition,font color,NA,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate +344,11,1,816,468,0.95,0.000182458,0.013507697,52,30,generate,NA,within,mixed,words,recognition,item,high,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +344,11,1,817,468,0.76,0.000512436,0.02263704,52,30,read,NA,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +344,11,1,818,469,0.622,0.000709622,0.026638733,52,30,generate,NA,within,mixed,words,recognition,location,high,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate +344,11,1,819,469,0.63,0.00070318,0.026517537,52,30,read,NA,within,mixed,words,recognition,location,NA,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate +345,1,1,820,470,0.37,0.001,0.031622777,10,10,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +345,1,1,821,470,0.26,0.00081,0.028460499,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +345,1,2,822,471,0.58,0.00025,0.015811388,10,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,yes,younger,immediate +345,1,2,823,471,0.36,0.00064,0.025298221,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,timed,yes,younger,immediate +345,1,3,824,472,0.14,0.00064,0.025298221,10,10,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate +345,1,3,825,472,0.16,0.00025,0.015811388,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate +345,1,4,826,473,0.43,0.00049,0.022135944,10,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate +345,1,4,827,473,0.25,0.001,0.031622777,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate +345,1,5,828,474,0.13,0.00064,0.025298221,10,10,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate +345,1,5,829,474,0.14,0.00016,0.012649111,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate +345,1,6,830,475,0.35,0.00049,0.022135944,10,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate +345,1,6,831,475,0.15,9e-05,0.009486833,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate +345,2,1,832,476,0.37,0.000555556,0.023570226,18,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +345,2,1,833,476,0.16,5e-05,0.007071068,18,10,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +345,2,1,834,477,0.48,0.000555556,0.023570226,18,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,yes,younger,immediate +345,2,1,835,477,0.29,0.00045,0.021213203,18,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,timed,yes,younger,immediate +345,2,2,836,478,0.15,0.000405,0.020124612,20,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,older,immediate +345,2,2,837,478,0.12,0.000125,0.01118034,20,10,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,older,immediate +345,2,2,838,479,0.39,0.000245,0.015652476,20,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate +345,2,2,839,479,0.13,0.00018,0.013416408,20,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate +345,2,3,840,480,0.11,5e-05,0.007071068,18,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,older,immediate +345,2,3,841,480,0.09,8.88888888888889e-05,0.00942809,18,10,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,older,immediate +345,2,3,842,481,0.27,0.000355556,0.018856181,18,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate +345,2,3,843,481,0.09,8.88888888888889e-05,0.00942809,18,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate +345,3,1,844,482,0.51,0.001422222,0.037712362,18,10,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,anagram,full,timed,yes,younger,immediate +345,3,1,845,482,0.37,0.000938889,0.030641294,18,10,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,anagram,full,timed,yes,younger,immediate +345,3,1,846,483,0.53,0.001088889,0.032998316,18,10,generate,NA,within,mixed,words,cued recall,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +345,3,1,847,483,0.32,0.00045,0.021213203,18,10,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +345,3,2,848,484,0.38,0.000355556,0.018856181,18,10,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,anagram,full,timed,yes,older,immediate +345,3,2,849,484,0.26,0.000672222,0.025927249,18,10,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,anagram,full,timed,yes,older,immediate +345,3,2,850,485,0.25,2e-04,0.014142136,18,10,generate,NA,within,mixed,words,cued recall,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate +345,3,2,851,485,0.25,0.000272222,0.016499158,18,10,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate +345,4,1,852,486,0.42,0.00045,0.021213203,18,10,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,anagram,divided,timed,yes,younger,immediate +345,4,1,853,486,0.21,0.000672222,0.025927249,18,10,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,anagram,divided,timed,yes,younger,immediate +345,4,1,854,487,0.23,2.22222222222222e-05,0.004714045,18,10,generate,NA,within,mixed,words,cued recall,item,medium,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate +345,4,1,855,487,0.19,0.000138889,0.011785113,18,10,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate +345,5,1,856,488,0.16,9e-05,0.009486833,10,10,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate +345,5,1,857,488,0.155,9e-05,0.009486833,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate +345,5,2,858,489,0.41,0.00081,0.028460499,10,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,divided,timed,yes,younger,immediate +345,5,2,859,489,0.18,0.00025,0.015811388,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,divided,timed,yes,younger,immediate +345,5,3,860,490,0.1,0.00016,0.012649111,10,10,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,older,immediate +345,5,3,861,490,0.09,9e-05,0.009486833,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,older,immediate +345,5,4,862,491,0.39,0.00064,0.025298221,10,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,divided,timed,yes,older,immediate +345,5,4,863,491,0.11,0.00016,0.012649111,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,divided,timed,yes,older,immediate +345,5,5,864,492,0.09,0.00016,0.012649111,10,10,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,older,immediate +345,5,5,865,492,0.07,4e-05,0.006324555,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,older,immediate +345,5,6,866,493,0.33,0.00081,0.028460499,10,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,divided,timed,yes,older,immediate +345,5,6,867,493,0.06,9e-05,0.009486833,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,divided,timed,no,older,immediate +346,1,1,868,315,0.61,0.00075,0.027386128,30,12,generate,NA,within,mixed,words,free recall,item,medium,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate +346,1,1,869,315,0.38,0.000853333,0.02921187,30,12,read,NA,within,mixed,words,free recall,item,NA,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate +346,1,1,870,316,0.73,0.00108,0.032863353,30,12,generate,NA,within,mixed,words,recognition,source,medium,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate +346,1,1,871,316,0.53,0.002083333,0.045643546,30,12,read,NA,within,mixed,words,recognition,source,NA,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate +346,2,1,872,317,0.65,0.00035,0.018708287,56,12,generate,NA,within,mixed,words,free recall,item,medium,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate +346,2,1,873,317,0.31,0.00035,0.018708287,56,12,read,NA,within,mixed,words,free recall,item,NA,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate +346,2,1,874,318,0.81,0.00035,0.018708287,56,12,generate,NA,within,mixed,words,recognition,source,medium,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate +346,2,1,875,318,0.54,0.001301786,0.036080268,56,12,read,NA,within,mixed,words,recognition,source,NA,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate +362,1,1,876,494,0.93,0.000113636,0.010660036,22,50,generate,NA,within,mixed,words,recognition,item,medium,intentional,semantic,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +362,1,1,877,494,0.83,0.000222727,0.01492405,22,50,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +362,1,1,878,495,0.78,0.000290909,0.017056057,22,50,generate,NA,within,mixed,words,recognition,source,medium,intentional,semantic,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +362,1,1,879,495,0.68,0.000654545,0.025584086,22,50,read,NA,within,mixed,words,recognition,source,NA,intentional,semantic,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +404,1,1,880,496,0.89,0.000640743,0.025312903,12,20,generate,NA,between,pure,words,recognition,item,low,intentional,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +404,1,2,881,496,0.74,0.001293814,0.03596962,12,20,read,NA,between,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +404,2,1,882,497,0.86,0.000718094,0.026797272,16,20,generate,NA,between,pure,words,recognition,item,low,intentional,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +404,2,2,883,497,0.7,0.001368045,0.036987089,16,20,read,NA,between,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +434,1,1,884,498,0.84,0.000596783,0.024429147,28,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +434,1,1,885,498,0.51,0.001177362,0.034312712,28,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +434,1,1,886,499,0.59,0.001204555,0.034706704,28,22,generate,NA,within,mixed,words,recognition,font type,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +434,1,1,887,499,0.7,0.001021744,0.031964736,28,22,read,NA,within,mixed,words,recognition,font type,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +434,2a,1,888,500,0.73,0.001005977,0.031717142,24,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2a,1,889,500,0.57,0.001297424,0.036019772,24,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2a,1,890,501,0.6,0.001283063,0.035819867,24,24,generate,NA,within,mixed,words,recognition,font color,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2a,1,891,501,0.7,0.001094433,0.033082221,24,24,read,NA,within,mixed,words,recognition,font color,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2b,1,892,502,0.79,0.000739021,0.027184936,28,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2b,1,893,502,0.64,0.001126322,0.033560726,28,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2b,1,894,503,0.61,0.001164853,0.034129946,28,24,generate,NA,within,mixed,words,recognition,font type,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2b,1,895,503,0.7,0.001001044,0.031639273,28,24,read,NA,within,mixed,words,recognition,font type,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2c,1,896,504,0.83,0.000483926,0.021998324,40,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2c,1,897,504,0.7,0.000787644,0.028064993,40,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2c,1,898,505,0.62,0.000908015,0.030133291,40,24,generate,NA,within,mixed,words,recognition,location,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2c,1,899,505,0.63,0.000897891,0.02996483,40,24,read,NA,within,mixed,words,recognition,location,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2d,1,900,506,0.84,0.000584692,0.024180411,28,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2d,1,901,506,0.68,0.001049013,0.032388478,28,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2d,1,902,507,0.67,0.001070837,0.032723643,28,24,generate,NA,within,mixed,words,recognition,background color,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,2d,1,903,507,0.66,0.001091066,0.033031286,28,24,read,NA,within,mixed,words,recognition,background color,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,4a,1,904,508,0.71,0.000937107,0.030612211,32,20,generate,NA,within,mixed,non-words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,4a,1,905,508,0.72,0.000911148,0.03018523,32,20,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,4a,1,906,509,0.55,0.001138198,0.033737189,32,20,generate,NA,within,mixed,non-words,recognition,font color,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,4a,1,907,509,0.63,0.001096652,0.033115744,32,20,read,NA,within,mixed,non-words,recognition,font color,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,4b,1,908,510,0.62,0.001064931,0.032633287,34,20,generate,NA,within,mixed,non-words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,4b,1,909,510,0.66,0.001006831,0.031730592,34,20,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,4b,1,910,511,0.53,0.001082661,0.03290382,34,20,generate,NA,within,mixed,non-words,recognition,font type,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,4b,1,911,511,0.63,0.001053058,0.032450849,34,20,read,NA,within,mixed,non-words,recognition,font type,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,5,1,912,512,0.63,0.000939247,0.030647143,40,20,generate,NA,within,mixed,non-words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,5,1,913,512,0.66,0.000898016,0.02996692,40,20,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,5,1,914,513,0.62,0.000949838,0.030819441,40,20,generate,NA,within,mixed,non-words,recognition,location,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,5,1,915,513,0.6,0.000965928,0.031079386,40,20,read,NA,within,mixed,non-words,recognition,location,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +434,6a,1,916,514,0.86,0.000478397,0.021872289,32,25,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +434,6a,1,917,514,0.71,0.000887814,0.0297962,32,25,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +434,6a,1,918,515,0.64,0.001025457,0.032022753,32,25,generate,NA,within,mixed,words,recognition,font color,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +434,6a,1,919,515,0.62,0.001050681,0.03241421,32,25,read,NA,within,mixed,words,recognition,font color,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +434,6b,1,920,516,0.85,0.000488546,0.022103082,40,16,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +434,6b,1,921,516,0.68,0.000923738,0.03039306,40,16,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +434,6b,1,922,517,0.67,0.000942955,0.030707577,40,16,generate,NA,within,mixed,words,recognition,font color,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +434,6b,1,923,517,0.66,0.000960769,0.030996267,40,16,read,NA,within,mixed,words,recognition,font color,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +434,6b,1,924,518,0.81,0.000595904,0.024411146,40,16,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +434,6b,1,925,518,0.8,0.000623315,0.02496628,40,16,read,NA,within,mixed,non-words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +434,6b,1,926,519,0.57,0.001044993,0.032326352,40,16,generate,NA,within,mixed,non-words,recognition,font color,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +434,6b,1,927,519,0.58,0.001043078,0.032296712,40,16,read,NA,within,mixed,non-words,recognition,font color,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +442,1,1,928,319,0.91,0.000784,0.028,16,30,generate,NA,within,mixed,words,recognition,item,medium,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +442,1,1,929,319,0.73,0.002950662,0.05432,16,30,read,NA,within,mixed,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +442,1,1,930,320,0.65,0.001385794,0.037226255,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +442,1,1,931,320,0.6,0.001465704,0.038284511,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +442,1,1,932,321,0.59,0.001473914,0.038391584,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +442,1,1,933,321,0.59,0.001473914,0.038391584,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +442,1,1,934,322,0.66,0.001362654,0.036914142,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +442,1,1,935,322,0.57,0.001482109,0.03849817,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +442,1,1,936,323,0.6,0.001465704,0.038284511,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +442,1,1,937,323,0.56,0.001482048,0.038497383,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate +442,1,1,938,324,0.76,0.001038614,0.032227537,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +442,1,1,939,324,0.61,0.001454808,0.03814195,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +442,1,1,940,325,0.81,0.000845168,0.029071776,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +442,1,1,941,325,0.79,0.000922978,0.030380548,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +442,1,1,942,326,0.79,0.000922978,0.030380548,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +442,1,1,943,326,0.69,0.001281029,0.035791462,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +442,1,1,944,327,0.81,0.000845168,0.029071776,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +442,1,1,945,327,0.69,0.001281029,0.035791462,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate +448,1,1,946,520,0.8,0.001162137,0.034090131,20,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +448,1,1,947,520,0.55,0.001944523,0.044096742,20,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +448,1,1,948,521,0.9,0.000681224,0.026100262,20,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +448,1,1,949,521,0.57,0.001948333,0.04413992,20,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +448,1,1,950,522,0.8,0.001162137,0.034090131,20,10,generate,low,within,mixed,words,recognition,source,low,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +448,1,1,951,522,0.84,0.000959942,0.030982925,20,10,read,low,within,mixed,words,recognition,source,NA,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +448,1,1,952,523,0.84,0.000959942,0.030982925,20,10,generate,high,within,mixed,words,recognition,source,low,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +448,1,1,953,523,0.8,0.001162137,0.034090131,20,10,read,high,within,mixed,words,recognition,source,NA,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +448,1,2,954,524,0.85,0.000910868,0.030180587,20,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,2,955,524,0.72,0.001556626,0.039454096,20,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,2,956,525,0.85,0.000910868,0.030180587,20,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,2,957,525,0.73,0.001510669,0.038867323,20,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,2,958,526,0.73,0.001510669,0.038867323,20,10,generate,low,within,mixed,words,recognition,source,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,2,959,526,0.72,0.001556626,0.039454096,20,10,read,low,within,mixed,words,recognition,source,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,2,960,527,0.77,0.001315116,0.036264526,20,10,generate,high,within,mixed,words,recognition,source,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,2,961,527,0.84,0.000959942,0.030982925,20,10,read,high,within,mixed,words,recognition,source,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,3,962,528,0.86,0.000862683,0.029371469,20,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,3,963,528,0.85,0.000910868,0.030180587,20,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,3,964,529,0.88,0.000769484,0.027739576,20,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,3,965,529,0.88,0.000769484,0.027739576,20,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,3,966,530,0.68,0.001722259,0.041500113,20,10,generate,low,within,mixed,words,recognition,source,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,3,967,530,0.71,0.001600975,0.040012188,20,10,read,low,within,mixed,words,recognition,source,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,3,968,531,0.84,0.000959942,0.030982925,20,10,generate,high,within,mixed,words,recognition,source,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,1,3,969,531,0.81,0.001111031,0.033332126,20,10,read,high,within,mixed,words,recognition,source,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,2,1,970,532,0.84,0.000959942,0.030982925,20,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +448,2,1,971,532,0.45,0.00172064,0.041480594,20,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +448,2,1,972,533,0.91,0.000639165,0.025281713,20,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +448,2,1,973,533,0.51,0.001893818,0.043518023,20,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate +448,2,2,974,534,0.79,0.001213317,0.034832693,20,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,2,2,975,534,0.78,0.001264376,0.035558069,20,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,2,2,976,535,0.88,0.000769484,0.027739576,20,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,2,2,977,535,0.67,0.001758089,0.041929568,20,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,2,3,978,536,0.82,0.001060181,0.032560427,20,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,2,3,979,536,0.85,0.000910868,0.030180587,20,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,2,3,980,537,0.86,0.000862683,0.029371469,20,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +448,2,3,981,537,0.86,0.000862683,0.029371469,20,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +449,1,1,982,538,0.3714,0.00026825,0.016378329,29,20,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +449,1,1,983,538,0.2103,0.000482582,0.021967759,29,20,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +449,1,2,984,539,0.2192,0.000292497,0.017102541,29,20,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate +449,1,2,985,539,0.1508,0.000113217,0.010640343,29,20,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate +465,1,1,986,328,0.83,0.0004,0.02,32,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate +465,1,1,987,328,0.61,0.0009,0.03,32,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate +465,1,1,988,329,0.81,0.0009,0.03,32,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate +465,1,1,989,329,0.62,0.0004,0.02,32,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate +465,1,1,990,330,0.87,0.0016,0.04,32,10,generate,high,within,mixed,words,recognition,source,low,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate +465,1,1,991,330,0.7,0.0009,0.03,32,10,read,high,within,mixed,words,recognition,source,NA,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate +465,1,1,992,331,0.8,0.0025,0.05,32,10,generate,low,within,mixed,words,recognition,source,low,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate +465,1,1,993,331,0.65,0.0025,0.05,32,10,read,low,within,mixed,words,recognition,source,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate +465,2,1,994,332,0.84,0.0004,0.02,70,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate +465,2,1,995,332,0.54,0.0004,0.02,70,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate +465,2,1,996,333,0.65,0.0004,0.02,70,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate +465,2,1,997,333,0.46,0.0009,0.03,70,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate +465,2,1,998,334,0.49,0.0016,0.04,70,10,generate,high,within,mixed,words,recognition,NA,low,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate +465,2,1,999,334,0.52,0.0009,0.03,70,10,read,high,within,mixed,words,recognition,NA,NA,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate +465,2,1,1000,335,0.8,0.0004,0.02,70,10,generate,low,within,mixed,words,recognition,NA,low,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate +465,2,1,1001,335,0.72,0.0009,0.03,70,10,read,low,within,mixed,words,recognition,NA,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate +465,3,1,1002,336,0.74,0.0004,0.02,14,20,generate,high,between,mixed,words,recognition,item,low,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate +465,3,2,1003,336,0.78,0.0004,0.02,14,20,read,high,between,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate +465,3,1,1004,337,0.65,0.0004,0.02,14,20,generate,low,between,mixed,words,recognition,item,low,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate +465,3,2,1005,337,0.46,0.0009,0.03,14,20,read,low,between,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate +465,3,1,1006,338,0.44,0.0049,0.07,14,20,generate,high,between,mixed,words,recognition,NA,low,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate +465,3,2,1007,338,0.55,0.0025,0.05,14,20,read,high,between,mixed,words,recognition,NA,NA,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate +465,3,1,1008,339,0.67,0.0025,0.05,14,20,generate,NA,between,mixed,words,recognition,NA,low,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate +465,3,2,1009,339,0.66,0.0025,0.05,14,20,read,NA,between,mixed,words,recognition,NA,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate +501,1,1,1010,540,0.83,0.000202397,0.014226622,120,20,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +501,1,1,1011,540,0.5,0.000375333,0.01937352,120,20,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +501,1,1,1012,541,0.54,0.000388284,0.019704934,120,20,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +501,1,1,1013,541,0.58,0.000389807,0.019743542,120,20,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +501,1,1,1014,542,0.67,0.000352391,0.018772076,120,20,generate,NA,within,mixed,words,recognition,source,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +501,1,1,1015,542,0.71,0.000320899,0.017913655,120,20,read,NA,within,mixed,words,recognition,source,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +515,1,1,1016,543,0.81,0.000290909,0.017056057,22,40,generate,low,within,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +515,1,1,1017,543,0.68,0.000454545,0.021320072,22,40,read,low,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +515,1,2,1018,544,0.8,0.000368182,0.019188064,22,40,generate,high,within,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +515,1,2,1019,544,0.53,0.000368182,0.019188064,22,40,read,high,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +515,1,3,1020,545,0.69,0.000890909,0.0298481,22,40,generate,low,within,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +515,1,3,1021,545,0.53,0.000654545,0.025584086,22,40,read,low,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +515,1,4,1022,546,0.43,0.000890909,0.0298481,22,40,generate,high,within,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +515,1,4,1023,546,0.38,0.000768182,0.027716093,22,40,read,high,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +544,1a,1,1024,547,0.8,0.00088582,0.029762722,24,15,generate,NA,within,mixed,words,recognition,item,medium,incidental,antonym,verbal/speaking,cue only,full,self-paced,yes,younger,immediate +544,1a,1,1025,547,0.7,0.001252733,0.035393964,24,15,read,NA,within,mixed,words,recognition,item,NA,incidental,antonym,verbal/speaking,cue only,full,self-paced,yes,younger,immediate +553,3,1,1026,548,0.31,0.00094219,0.030695113,16,16,generate,NA,within,pure,words,free recall,item,low,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +553,3,1,1027,548,0.2,0.000496802,0.022289054,16,16,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +553,3,2,1028,549,0.29,0.000852967,0.029205594,16,16,generate,NA,within,pure,words,free recall,item,low,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +553,3,2,1029,549,0.16,0.000372111,0.019290175,16,16,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +553,4,1,1030,550,0.57,0.001843018,0.042930385,12,16,generate,NA,within,pure,words,free recall,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +553,4,1,1031,550,0.56,0.001842943,0.042929507,12,16,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +553,4,2,1032,551,0.54,0.001832452,0.04280715,12,16,generate,NA,within,pure,words,free recall,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +553,4,2,1033,551,0.56,0.001842943,0.042929507,12,16,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +553,5,1,1034,552,0.3,0.00089731,0.029955135,16,16,generate,NA,within,pure,words,free recall,item,low,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +553,5,1,1035,552,0.28,0.000809295,0.028448117,16,16,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +553,5,2,1036,553,0.27,0.000766421,0.027684313,16,16,generate,NA,within,pure,words,free recall,item,low,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +553,5,2,1037,553,0.24,0.000643667,0.025370602,16,16,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +553,6,1,1038,554,0.89,0.000645381,0.025404355,16,16,generate,NA,within,pure,words,recognition,item,low,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +553,6,1,1039,554,0.75,0.00125997,0.035496052,16,16,read,NA,within,pure,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short +690,1,1,1040,575,0.62,0.001225935,0.03501336,36,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,1,1,1041,575,0.26,0.00052636,0.022942536,36,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,1,1,1042,576,0.65,0.001178733,0.034332681,36,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,1,1,1043,576,0.29,0.000619729,0.024894349,36,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,1,1,1044,577,0.67,0.001137561,0.033727745,36,12,generate,NA,within,mixed,words,recognition,source,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,1,1,1045,577,0.76,0.000883428,0.02972251,36,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,1,1,1046,578,0.79,0.000785069,0.028019087,36,12,generate,NA,within,mixed,words,recognition,source,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,1,1,1047,578,0.63,0.001212266,0.034817616,36,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,2,1,1048,579,0.64,0.001269798,0.03563422,33,12,generate,NA,between,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,2,2,1049,579,0.49,0.001269019,0.035623288,33,12,read,NA,between,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,2,1,1050,580,0.67,0.001207244,0.034745419,33,12,generate,NA,between,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,2,2,1051,580,0.25,0.000527029,0.022957116,33,12,read,NA,between,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,2,1,1052,581,0.6,0.001323072,0.036374055,33,12,generate,NA,between,mixed,words,recognition,font color,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,2,2,1053,581,0.51,0.001300447,0.03606171,33,12,read,NA,between,mixed,words,recognition,font color,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,2,1,1054,582,0.49,0.001269019,0.035623288,33,12,generate,NA,between,mixed,words,recognition,font color,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +690,2,2,1055,582,0.63,0.001286526,0.035868175,33,12,read,NA,between,mixed,words,recognition,font color,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +691,1,1,1056,340,0.83,0.000686322,0.026197747,24,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +691,1,1,1057,340,0.6,0.001309596,0.036188335,24,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +691,1,1,1058,341,0.8,0.000789888,0.028104944,24,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate +691,1,1,1059,341,0.65,0.001238197,0.035188021,24,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate +691,1,1,1060,342,0.59,0.001316931,0.036289546,24,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +691,1,1,1061,342,0.66,0.001217521,0.034892997,24,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +691,1,1,1062,343,0.53,0.001309221,0.036183154,24,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate +691,1,1,1063,343,0.62,0.00128778,0.035885658,24,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate +691,2,1,1064,344,0.81,0.000634547,0.025190214,32,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate +691,2,1,1065,344,0.52,0.001091859,0.033043287,32,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate +691,2,1,1066,345,0.63,0.001070045,0.032711537,32,22,generate,NA,within,mixed,words,recognition,font type,high,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate +691,2,1,1067,345,0.73,0.000862794,0.029373349,32,22,read,NA,within,mixed,words,recognition,font type,NA,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate +691,3,1,1068,346,0.82,0.00072059,0.026843809,24,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +691,3,1,1069,346,0.65,0.001238197,0.035188021,24,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +691,3,1,1070,347,0.85,0.000619104,0.024881796,24,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate +691,3,1,1071,347,0.75,0.000961621,0.03101001,24,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate +691,3,1,1072,348,0.57,0.001324254,0.036390296,24,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +691,3,1,1073,348,0.64,0.001256864,0.035452278,24,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +691,3,1,1074,349,0.65,0.001238197,0.035188021,24,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate +691,3,1,1075,349,0.74,0.000994599,0.031537258,24,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate +691,4,1,1076,350,0.7,0.001001044,0.031639273,28,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,covert/thinking,word stem,full,timed,yes,younger,immediate +691,4,1,1077,350,0.59,0.001180151,0.034353322,28,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,covert/thinking,word stem,full,timed,yes,younger,immediate +691,4,1,1078,351,0.65,0.001109594,0.033310569,28,24,generate,NA,within,mixed,words,recognition,font color,high,intentional,rhyme,covert/thinking,word stem,full,timed,yes,younger,immediate +691,4,1,1079,351,0.74,0.000891297,0.029854592,28,24,read,NA,within,mixed,words,recognition,font color,NA,intentional,rhyme,covert/thinking,word stem,full,timed,yes,younger,immediate +691,5,1,1080,352,0.82,0.000605505,0.024607015,32,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +691,5,1,1081,352,0.52,0.001091859,0.033043287,32,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +691,5,1,1082,353,0.55,0.001110582,0.033325398,32,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +691,5,1,1083,353,0.63,0.001070045,0.032711537,32,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +691,6,1,1084,354,0.85,0.00057042,0.023883466,32,16,generate,NA,within,mixed,words,recognition,item,medium,intentional,antonym,writing/typing,letter transposition,full,timed,yes,younger,immediate +691,6,1,1085,354,0.66,0.00112178,0.033492988,32,16,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,letter transposition,full,timed,yes,younger,immediate +691,6,1,1086,355,0.8,0.000727774,0.026977291,32,16,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,antonym,writing/typing,letter transposition,full,timed,yes,younger,immediate +691,6,1,1087,355,0.82,0.000663926,0.025766757,32,16,read,NA,within,mixed,non-words,recognition,item,NA,intentional,antonym,writing/typing,letter transposition,full,timed,yes,younger,immediate +691,6,1,1088,356,0.63,0.001173285,0.03425325,32,16,generate,NA,within,mixed,words,recognition,location,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +691,6,1,1089,356,0.53,0.001206269,0.03473138,32,16,read,NA,within,mixed,words,recognition,location,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +691,6,1,1090,357,0.59,0.001213373,0.034833503,32,16,generate,NA,within,mixed,non-words,recognition,location,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +691,6,1,1091,357,0.52,0.001197204,0.034600635,32,16,read,NA,within,mixed,non-words,recognition,location,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate +702,1,1,1092,555,0.66,0.00045,0.021213203,18,40,generate,NA,within,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,self-paced,yes,younger,immediate +702,1,1,1093,555,0.58,0.001088889,0.032998316,18,40,read,NA,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,self-paced,yes,younger,immediate +702,1,2,1094,556,0.5,0.001422222,0.037712362,18,40,generate,NA,within,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,self-paced,yes,older,immediate +702,1,2,1095,556,0.36,0.000672222,0.025927249,18,40,read,NA,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,self-paced,yes,older,immediate +738,1,1,1096,557,0.95,0.000223391,0.014946275,36,50,generate,NA,within,mixed,words,recognition,source,low,intentional,semantic,writing/typing,cue only,full,self-paced,yes,younger,immediate +738,1,1,1097,557,0.72,0.000677676,0.026032208,36,100,generate,NA,within,mixed,words,recognition,source,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,yes,younger,immediate +738,1,1,1098,557,0.61,0.000878808,0.029644701,36,50,read,NA,within,mixed,words,recognition,source,NA,intentional,semantic,covert/thinking,word fragment,full,self-paced,yes,younger,immediate +745,1,1,1099,558,0.162,0.000423647,0.020582676,26,8,generate,NA,within,mixed,words,free recall,item,medium,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,immediate +745,1,1,1100,558,0.038,0.000143588,0.011982803,26,8,read,NA,within,mixed,words,free recall,item,NA,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,immediate +745,1,1,1101,559,0.806,0.001129918,0.033614254,26,8,generate,NA,within,mixed,words,recognition,item,medium,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,immediate +745,1,1,1102,559,0.457,0.001743695,0.041757575,26,8,read,NA,within,mixed,words,recognition,item,NA,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,immediate +745,2a,1,1103,560,0.262,0.000753134,0.027443283,30,8,generate,NA,within,mixed,words,free recall,item,medium,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,immediate +745,2a,1,1104,560,0.071,0.000180532,0.013436221,30,8,read,NA,within,mixed,words,free recall,item,NA,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,immediate +745,2b,1,1105,561,0.614,0.001139126,0.033750943,54,8,generate,NA,within,mixed,words,recognition,item,medium,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,long +745,2b,1,1106,561,0.355,0.000769632,0.027742244,54,8,read,NA,within,mixed,words,recognition,item,NA,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,long +762,1,1,1107,562,0.59,0.000795738,0.02820882,52,20,generate,low,between,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +762,1,1,1108,562,0.755,0.00057093,0.023894148,52,20,generate,high,between,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +762,1,2,1109,562,0.445,0.000773362,0.027809381,38,40,read,low,between,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +762,1,1,1110,563,0.63,0.000984615,0.031378582,26,20,generate,low,between,pure,words,recognition,font color,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +762,1,1,1111,563,0.54,0.000753846,0.027456259,26,20,generate,high,between,pure,words,recognition,font color,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +762,1,2,1112,563,0.67,0.001184211,0.03441236,19,40,read,low,between,pure,words,recognition,font color,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +762,1,3,1113,564,0.57,0.000753846,0.027456259,26,20,generate,low,between,pure,words,recognition,background color,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +762,1,3,1114,564,0.49,0.00065,0.025495098,26,20,generate,high,between,pure,words,recognition,background color,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +762,1,4,1115,564,0.56,0.000889474,0.029824045,19,40,read,low,between,pure,words,recognition,background color,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +762,1a,1,1116,565,0.73,0.000946038,0.030757731,32,16,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +762,1a,1,1117,565,0.62,0.001186515,0.034445821,32,16,read,NA,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +762,1a,1,1118,566,0.63,0.0015125,0.038890873,32,16,generate,NA,within,pure,words,recognition,background color,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +762,1a,1,1119,566,0.62,8e-04,0.028284271,32,16,read,NA,within,pure,words,recognition,background color,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +762,2,1,1120,567,0.76,0.00090916,0.030152286,26,20,generate,low,within,pure,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,2,1,1121,567,0.61,0.00127348,0.035685848,26,20,read,low,within,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,2,2,1122,568,0.73,0.001005941,0.031716576,26,20,generate,high,within,pure,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,2,2,1123,568,0.61,0.00127348,0.035685848,26,20,read,high,within,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,2,1,1124,569,0.61,0.001246154,0.035300904,26,20,generate,low,within,pure,words,recognition,font color,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,2,1,1125,569,0.7,0.001538462,0.039223227,26,20,read,low,within,pure,words,recognition,font color,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,2,2,1126,570,0.53,0.000984615,0.031378582,26,20,generate,high,within,pure,words,recognition,font color,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,2,2,1127,570,0.67,0.000753846,0.027456259,26,20,read,high,within,pure,words,recognition,font color,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,3,1,1128,571,0.73,0.000962516,0.031024448,28,20,generate,low,within,pure,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,3,1,1129,571,0.54,0.001234255,0.035131971,28,20,read,low,within,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,3,2,1130,572,0.78,0.000805592,0.028382955,28,20,generate,high,within,pure,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,3,2,1131,572,0.54,0.001234255,0.035131971,28,20,read,high,within,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,3,1,1132,573,0.81,0.000432143,0.020788046,28,20,generate,low,within,pure,words,recognition,location,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,3,1,1133,573,0.74,0.000603571,0.024567691,28,20,read,low,within,pure,words,recognition,location,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,3,2,1134,574,0.75,0.000514286,0.022677868,28,20,generate,high,within,pure,words,recognition,location,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +762,3,2,1135,574,0.7,0.000803571,0.028347335,28,20,read,high,within,pure,words,recognition,location,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate +767,1,1,1136,583,0.273,0.00040277,0.02006913,49,16,generate,NA,between,pure,words,cued recall,item,medium,intentional,antonym,verbal/speaking,cue only,full,timed,no,younger,immediate +767,1,2,1137,583,0.381,0.000506671,0.022509346,67,16,read,NA,between,pure,words,cued recall,item,NA,intentional,antonym,verbal/speaking,cue only,full,timed,no,younger,immediate +781,1,1,1138,584,0.84,0.000253125,0.015909903,32,46,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +781,1,1,1139,584,0.52,0.000528125,0.02298097,32,46,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate +797,1,1,1140,585,0.87,0.000483064,0.021978726,24,50,generate,NA,within,mixed,words,recognition,item,medium,intentional,synonym,covert/thinking,word fragment,full,timed,yes,younger,immediate +797,1,1,1141,585,0.65,0.001079081,0.032849362,24,50,read,NA,within,mixed,words,recognition,item,NA,intentional,synonym,covert/thinking,word fragment,full,timed,yes,younger,immediate +816,1.1a,1,1142,586,0.92,0.000286867,0.016937158,40,24,generate,NA,within,mixed,words,recognition,item,high,intentional,synonym,verbal/speaking,word fragment,full,timed,yes,younger,immediate +816,1.1a,1,1143,586,0.67,0.000842559,0.029026862,40,24,read,NA,within,mixed,words,recognition,item,NA,intentional,synonym,verbal/speaking,word fragment,full,timed,yes,younger,immediate +816,1.1b,1,1144,587,0.86,0.000406047,0.020150617,41,24,generate,NA,within,mixed,words,recognition,item,high,intentional,synonym,verbal/speaking,word fragment,full,timed,yes,younger,long +816,1.1b,1,1145,587,0.56,0.000917003,0.030282055,41,24,read,NA,within,mixed,words,recognition,item,NA,intentional,synonym,verbal/speaking,word fragment,full,timed,yes,younger,long +816,1.2a,1,1146,588,0.88,0.000561063,0.023686759,22,20,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word fragment,full,timed,yes,younger,immediate +816,1.2a,1,1147,588,0.6,0.001404885,0.037481795,22,20,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word fragment,full,timed,yes,younger,immediate +816,1.2b,1,1148,589,0.85,0.000634498,0.025189253,24,20,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word fragment,divided,timed,yes,younger,immediate +816,1.2b,1,1149,589,0.53,0.001341776,0.036630258,24,20,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word fragment,divided,timed,yes,younger,immediate +816,1.3a,1,1150,590,0.69,0.000713254,0.026706819,50,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,1.3a,1,1151,590,0.57,0.000825212,0.028726506,50,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,1.3a,1,1152,591,0.59,0.000820649,0.028646974,50,20,generate,NA,within,mixed,words,recognition,font color,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,1.3a,1,1153,591,0.68,0.000729459,0.027008505,50,20,read,NA,within,mixed,words,recognition,font color,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,1.3b,1,1154,592,0.71,0.000699949,0.026456551,48,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,1.3b,1,1155,592,0.6,0.000842386,0.02902388,48,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,1.3b,1,1156,593,0.73,0.000660467,0.025699552,48,20,generate,NA,within,mixed,words,recognition,location,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,1.3b,1,1157,593,0.68,0.000752975,0.027440385,48,20,read,NA,within,mixed,words,recognition,location,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,1.3c,1,1158,594,0.72,0.000752927,0.027439512,42,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,1.3c,1,1159,594,0.6,0.000931961,0.030528034,42,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,1.3c,1,1160,595,0.52,0.000924693,0.030408758,42,20,generate,NA,within,mixed,words,recognition,background color,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,1.3c,1,1161,595,0.55,0.000940549,0.030668376,42,20,read,NA,within,mixed,words,recognition,background color,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.1,1,1162,596,0.69,0.000713254,0.026706819,50,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.1,1,1163,596,0.57,0.000825212,0.028726506,50,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.1,2,1164,597,0.61,0.000849793,0.029151209,47,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.1,2,1165,597,0.49,0.00082118,0.028656231,47,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.1,1,1166,598,0.59,0.000820649,0.028646974,50,20,generate,NA,within,mixed,words,recognition,font color,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.1,1,1167,598,0.68,0.000729459,0.027008505,50,20,read,NA,within,mixed,words,recognition,font color,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.1,2,1168,599,0.52,0.00084948,0.029145843,47,20,generate,NA,within,mixed,words,recognition,font color,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.1,2,1169,599,0.61,0.000849793,0.029151209,47,20,read,NA,within,mixed,words,recognition,font color,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.2,1,1170,600,0.71,0.000699949,0.026456551,48,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.2,1,1171,600,0.6,0.000842386,0.02902388,48,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.2,2,1172,601,0.58,0.001093086,0.033061846,34,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.2,2,1173,601,0.46,0.000987315,0.031421564,34,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.2,1,1174,602,0.73,0.000660467,0.025699552,48,20,generate,NA,within,mixed,words,recognition,location,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.2,1,1175,602,0.68,0.000752975,0.027440385,48,20,read,NA,within,mixed,words,recognition,location,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.2,2,1176,603,0.66,0.001006831,0.031730592,34,20,generate,NA,within,mixed,words,recognition,location,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,2.2,2,1177,603,0.75,0.000795213,0.028199526,34,20,read,NA,within,mixed,words,recognition,location,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate +816,3,1,1178,604,0.87,0.000483064,0.021978726,24,50,generate,NA,within,mixed,words,recognition,item,medium,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,immediate +816,3,1,1179,604,0.65,0.001079081,0.032849362,24,50,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,immediate +831,1,1,1180,605,0.25,0.000648718,0.025469942,12,24,generate,NA,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +831,1,1,1181,605,0.18,0.000409608,0.020238766,12,24,read,NA,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +831,2,1,1182,606,0.39,0.001456375,0.038162482,16,12,generate,low,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +831,2,1,1183,606,0.24,0.000720365,0.026839611,16,12,read,low,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +831,2,1,1184,607,0.18,0.000483001,0.021977278,16,12,generate,high,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +831,2,1,1185,607,0.16,0.00041645,0.020407115,16,12,read,high,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +831,3,1,1186,608,0.43,0.001737994,0.041689251,12,12,generate,low,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +831,3,1,1187,608,0.26,0.000861205,0.02934629,12,12,read,low,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +831,3,1,1188,609,0.22,0.000674753,0.025975999,12,12,generate,high,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +831,3,1,1189,609,0.12,0.00032153,0.017931261,12,12,read,high,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +854,1,1,1190,610,0.58,0.001301614,0.036077888,62,6,generate,low,within,mixed,words,recognition,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +854,1,1,1191,610,0.2,0.000373366,0.019322682,62,6,read,low,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +854,1,1,1192,611,0.76,0.000913804,0.03022919,62,6,generate,high,within,mixed,words,recognition,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +854,1,1,1193,611,0.67,0.001176675,0.034302703,62,6,read,high,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +854,1,1,1194,612,0.79,0.000812064,0.028496729,62,6,generate,low,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +854,1,1,1195,612,0.21,0.000399463,0.019986562,62,6,read,low,within,mixed,words,recognition,source,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +854,1,1,1196,613,0.68,0.001152695,0.033951364,62,6,generate,high,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +854,1,1,1197,613,0.39,0.000977989,0.031272811,62,6,read,high,within,mixed,words,recognition,source,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +861,1a,1,1198,614,0.7,0.001120325,0.033471251,28,16,generate,NA,within,mixed,words,recognition,item,medium,intentional,synonym,verbal/speaking,word fragment,full,timed,yes,younger,immediate +861,1a,1,1199,614,0.56,0.001328063,0.036442602,28,16,read,NA,within,mixed,words,recognition,item,NA,intentional,synonym,verbal/speaking,word fragment,full,timed,yes,younger,immediate +861,1b,1,1200,615,0.69,0.001255023,0.035426298,24,16,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +861,1b,1,1201,615,0.74,0.00109056,0.033023626,24,16,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +861,2a,1,1202,616,0.69,0.000845585,0.029078948,30,72,generate,NA,between,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +861,2a,2,1203,616,0.66,0.000899465,0.029991074,30,72,read,NA,between,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +905,2,1,1204,617,0.56,0.001100865,0.033179279,28,36,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +905,2,2,1205,617,0.72,0.000879575,0.029657626,28,36,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +905,2,3,1206,618,0.38,0.000798228,0.028252928,28,36,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,long +905,2,4,1207,618,0.31,0.000597809,0.024450139,28,36,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,long +905,2,3,1208,619,0.86,0.000289286,0.017008401,28,36,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,long +905,2,4,1209,619,0.73,0.001157143,0.034016803,28,36,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,long +982,1,1,1210,620,0.85,0.000520373,0.022811678,31,24,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +982,1,1,1211,620,0.61,0.001092566,0.033053991,31,24,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +982,1,1,1212,621,0.77,0.000751317,0.02741016,31,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +982,1,1,1213,621,0.58,0.001111029,0.033332103,31,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +982,1,1,1214,622,0.62,0.001082413,0.03290004,31,24,generate,NA,within,mixed,words,recognition,source,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +982,1,1,1215,622,0.65,0.001040736,0.032260445,31,24,read,NA,within,mixed,words,recognition,source,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate +982,1,1,1216,623,0.65,0.001040736,0.032260445,31,24,generate,NA,within,mixed,words,recognition,source,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +982,1,1,1217,623,0.59,0.001106915,0.033270326,31,24,read,NA,within,mixed,words,recognition,source,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate +999,1,1,1218,358,0.9,0.000290909,0.017056057,22,12,generate,low,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +999,1,1,1219,358,0.81,0.00055,0.023452079,22,12,generate,low,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,1,1,1220,358,0.64,0.0022,0.046904158,22,12,read,low,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,1,1,1221,359,0.92,0.00055,0.023452079,22,12,generate,high,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +999,1,1,1222,359,0.71,0.001313636,0.036244122,22,12,generate,high,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,1,1,1223,359,0.55,0.002840909,0.053300179,22,12,read,high,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,1,1,1224,361,0.89,0.000768182,0.027716093,22,12,generate,low,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +999,1,1,1225,361,0.68,0.002404545,0.049036165,22,12,generate,low,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,1,1,1226,361,0.75,0.002840909,0.053300179,22,12,read,low,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,1,1,1227,362,0.89,0.001022727,0.031980107,22,12,generate,high,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +999,1,1,1228,362,0.67,0.002404545,0.049036165,22,12,generate,high,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,1,1,1229,362,0.76,0.003822727,0.061828208,22,12,read,high,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,1,1,1230,364,0.9,0.00055,0.023452079,22,12,generate,low,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +999,1,1,1231,364,0.83,0.001472727,0.038376129,22,12,generate,low,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,1,1,1232,364,0.62,0.002618182,0.051168172,22,12,read,low,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,1,1,1233,365,0.87,0.001313636,0.036244122,22,12,generate,high,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +999,1,1,1234,365,0.57,0.003313636,0.057564193,22,12,generate,high,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,1,1,1235,365,0.3,0.002840909,0.053300179,22,12,read,high,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,2,1,1236,366,0.84,0.0018375,0.04286607,24,24,generate,NA,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +999,2,1,1237,366,0.86,0.00135,0.036742346,24,24,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,2,1,1238,366,0.62,0.0024,0.048989795,24,24,read,NA,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,2,1,1239,367,0.8,0.001666667,0.040824829,24,24,generate,NA,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +999,2,1,1240,367,0.68,0.002016667,0.044907312,24,24,generate,NA,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,2,1,1241,367,0.63,0.0024,0.048989795,24,24,read,NA,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,2,1,1242,368,0.95,0.00015,0.012247449,24,24,generate,NA,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +999,2,1,1243,368,0.91,0.000416667,0.020412415,24,24,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,2,1,1244,368,0.81,0.001066667,0.032659863,24,24,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,3,1,1245,369,0.8,0.002016667,0.044907312,24,24,generate,NA,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +999,3,1,1246,369,0.84,0.000704167,0.026536139,24,24,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,3,1,1247,369,0.6,0.001066667,0.032659863,24,24,read,NA,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,3,1,1248,370,0.79,0.001066667,0.032659863,24,24,generate,NA,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +999,3,1,1249,370,0.66,0.001066667,0.032659863,24,24,generate,NA,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,3,1,1250,370,0.71,0.001666667,0.040824829,24,24,read,NA,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,3,1,1251,371,0.92,0.000266667,0.016329932,24,24,generate,NA,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +999,3,1,1252,371,0.88,0.000416667,0.020412415,24,24,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +999,3,1,1253,371,0.75,0.00135,0.036742346,24,24,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1152,1,1,1254,624,0.82,0.00125,0.035355339,32,12,generate,NA,within,pure,words,recognition,item,medium,intentional,definitions,covert/thinking,word fragment,full,timed,yes,younger,immediate +1152,1,1,1255,624,0.55,0.0018,0.042426407,32,12,read,NA,within,pure,words,recognition,item,NA,intentional,definitions,covert/thinking,word fragment,full,timed,yes,younger,immediate +1152,1,2,1256,625,0.74,0.00125,0.035355339,32,12,generate,NA,within,pure,words,recognition,item,medium,intentional,definitions,covert/thinking,word fragment,full,timed,yes,older,immediate +1152,1,2,1257,625,0.49,0.0021125,0.045961941,32,12,read,NA,within,pure,words,recognition,item,NA,intentional,definitions,covert/thinking,word fragment,full,timed,yes,older,immediate +1152,2b,1,1258,626,0.87,0.000672222,0.025927249,18,12,generate,NA,within,pure,words,recognition,item,medium,intentional,definitions,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1152,2b,1,1259,626,0.61,0.0018,0.042426407,18,12,read,NA,within,pure,words,recognition,item,NA,intentional,definitions,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1152,2b,2,1260,627,0.86,8e-04,0.028284271,18,12,generate,NA,within,pure,words,recognition,item,medium,intentional,definitions,verbal/speaking,word fragment,full,timed,yes,older,immediate +1152,2b,2,1261,627,0.63,0.002222222,0.047140452,18,12,read,NA,within,pure,words,recognition,item,NA,intentional,definitions,verbal/speaking,word fragment,full,timed,yes,older,immediate +1444,1,1,1262,628,0.82,0.000527206,0.022960957,38,24,generate,low,between,pure,words,cued recall,item,high,incidental,NA,verbal/speaking,word stem,full,self-paced,no,younger,long +1444,1,2,1263,628,0.97,0.000305881,0.017489453,20,24,generate,high,between,pure,words,cued recall,item,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,no,younger,long +1444,1,3,1264,628,0.65,0.00132919,0.036458057,20,24,read,low,between,pure,words,cued recall,item,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,no,younger,long +1445,1,1,1265,629,0.68,0.002698288,0.051945052,24,5,generate,NA,within,pure,numbers,free recall,item,low,intentional,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1445,1,1,1266,629,0.38,0.002213238,0.047045067,24,5,read,NA,within,pure,numbers,free recall,item,NA,intentional,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1445,2,1,1267,630,0.55,0.00364047,0.060336307,16,5,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1445,2,1,1268,630,0.42,0.002993738,0.054715064,16,5,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1445,2,2,1269,631,0.49,0.003459857,0.058820548,16,5,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long +1445,2,2,1270,631,0.24,0.001353136,0.036785003,16,5,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long +1445,2,3,1271,632,0.4,0.002824408,0.053145158,16,5,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long +1445,2,3,1272,632,0.1,0.000479347,0.021893984,16,5,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long +1445,2,1,1273,633,0.81,0.002080034,0.045607392,16,5,generate,NA,within,pure,numbers,recognition,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1445,2,1,1274,633,0.81,0.002080034,0.045607392,16,5,read,NA,within,pure,numbers,recognition,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1445,2,2,1275,634,0.75,0.002648745,0.05146596,16,5,generate,NA,within,pure,numbers,recognition,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long +1445,2,2,1276,634,0.61,0.003580413,0.059836553,16,5,read,NA,within,pure,numbers,recognition,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long +1445,2,3,1277,635,0.69,0.003152726,0.05614914,16,5,generate,NA,within,pure,numbers,recognition,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long +1445,2,3,1278,635,0.52,0.003579095,0.059825539,16,5,read,NA,within,pure,numbers,recognition,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long +1447,1,1,1279,636,0.4,0.001052282,0.032438892,20,30,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +1447,1,1,1280,636,0.26,0.000567411,0.023820399,20,30,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +1447,2,1,1281,637,0.32,0.000773401,0.027810082,20,30,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +1447,2,1,1282,637,0.26,0.000567411,0.023820399,20,30,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +1447,3,1,1283,638,0.37,0.001138463,0.033741112,20,15,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +1447,3,1,1284,638,0.28,0.000758957,0.027549175,20,15,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +1447,3,2,1285,639,0.68,0.001438378,0.037925957,20,15,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +1447,3,2,1286,639,0.65,0.001521445,0.039005699,20,15,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate +1448,4,1,1287,640,0.355,0.001093039,0.033061142,11,24,generate,NA,within,mixed,words,free recall,item,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,1,1288,640,0.21,0.000506664,0.022509202,11,24,read,NA,within,mixed,words,free recall,item,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,2,1289,641,0.316,0.000923976,0.03039697,11,24,generate,NA,within,mixed,words,free recall,item,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,2,1290,641,0.228,0.000569485,0.023863877,11,24,read,NA,within,mixed,words,free recall,item,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,3,1291,642,0.581,0.001650448,0.0406257,11,24,generate,NA,within,pure,words,free recall,item,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,3,1292,642,0.172,0.000388052,0.019699027,11,24,read,NA,within,pure,words,free recall,item,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,4,1293,643,0.453,0.001470038,0.03834108,11,24,generate,NA,within,pure,words,free recall,item,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,4,1294,643,0.267,0.000718476,0.026804404,11,24,read,NA,within,pure,words,free recall,item,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,1,1295,644,0.331,0.000988995,0.031448291,11,24,generate,NA,within,mixed,words,free recall,cue word,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,1,1296,644,0.191,0.000444913,0.021092962,11,24,read,NA,within,mixed,words,free recall,cue word,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,2,1297,645,0.313,0.000911033,0.030183317,11,24,generate,NA,within,mixed,words,free recall,cue word,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,2,1298,645,0.254,0.00066703,0.025826926,11,24,read,NA,within,mixed,words,free recall,cue word,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,3,1299,646,0.53,0.001635177,0.040437316,11,24,generate,NA,within,pure,words,free recall,cue word,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,3,1300,646,0.204,0.000486646,0.022060053,11,24,read,NA,within,pure,words,free recall,cue word,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,4,1301,647,0.412,0.001327412,0.036433664,11,24,generate,NA,within,pure,words,free recall,cue word,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1448,4,4,1302,647,0.235,0.00059499,0.024392426,11,24,read,NA,within,pure,words,free recall,cue word,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate +1449,1,1,1303,648,0.56,0.001624972,0.040310946,24,12,generate,NA,within,mixed,words,NA,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1449,1,1,1304,648,0.44,0.001403131,0.037458394,24,12,read,NA,within,mixed,words,NA,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1450,1,1,1305,649,0.9,0.000568186,0.02383665,24,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1450,1,1,1306,649,0.79,0.001011987,0.031811738,24,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1450,2,1,1307,650,0.88,0.000641801,0.025333789,24,12,generate,high,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1450,2,1,1308,650,0.79,0.001011987,0.031811738,24,12,read,high,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1450,2,1,1309,651,0.81,0.000926673,0.030441311,24,12,generate,low,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1450,2,1,1310,651,0.56,0.001624972,0.040310946,24,12,read,low,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1450,3,1,1311,652,0.77,0.001096894,0.033119391,24,12,generate,high,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,long +1450,3,1,1312,652,0.66,0.001494064,0.038653121,24,12,read,high,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,long +1450,3,1,1313,653,0.67,0.001466363,0.038293118,24,12,generate,low,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,long +1450,3,1,1314,653,0.54,0.001615723,0.040196053,24,12,read,low,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,long +1450,4,1,1315,654,0.328,0.001050658,0.032413856,20,12,generate,high,within,mixed,words,free recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +1450,4,1,1316,654,0.228,0.000613069,0.024760231,20,12,read,high,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +1450,4,2,1317,655,0.407,0.001408287,0.037527147,20,12,generate,low,within,mixed,words,free recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +1450,4,2,1318,655,0.274,0.000803978,0.028354499,20,12,read,low,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate +1451,1,1,1319,656,0.77,0.001252073,0.035384649,20,11,generate,low,between,pure,words,cued recall,item,low,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1451,1,2,1320,656,0.695,0.00158425,0.039802639,20,11,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1451,1,1,1321,657,0.909,0.000612468,0.024748082,20,11,generate,high,between,pure,words,cued recall,item,low,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1451,1,2,1322,657,0.709,0.00152836,0.039094244,20,11,read,high,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1451,2,1,1323,658,0.527,0.001830093,0.042779592,20,11,generate,low,between,pure,words,cued recall,cue word,low,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1451,2,2,1324,658,0.5,0.001782785,0.042223043,20,11,read,low,between,pure,words,cued recall,cue word,NA,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1451,2,1,1325,659,0.682,0.001632594,0.040405369,20,11,generate,high,between,pure,words,cued recall,cue word,low,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1451,2,2,1326,659,0.523,0.00182458,0.042715102,20,11,read,high,between,pure,words,cued recall,cue word,NA,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1452,1,1,1327,660,0.645625,0.001734968,0.041652946,12,16,generate,low,within,pure,words,cued recall,item,high,intentional,semantic,verbal/speaking,sentence completion,full,timed,yes,younger,immediate +1452,1,1,1328,660,0.28125,0.00086538,0.029417341,12,16,read,low,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,sentence completion,full,timed,yes,younger,immediate +1452,1,2,1329,661,0.208125,0.000557554,0.023612591,12,16,generate,high,within,pure,words,cued recall,item,high,intentional,unrelated,verbal/speaking,sentence completion,full,timed,yes,younger,immediate +1452,1,2,1330,661,0.265625,0.000794458,0.028186138,12,16,read,high,within,pure,words,cued recall,item,NA,intentional,unrelated,verbal/speaking,sentence completion,full,timed,yes,younger,immediate +1453,1,1,1331,662,0.58,0.001969231,0.044376016,13,10,generate,NA,within,mixed,words,recognition,item,high,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +1453,1,1,1332,662,0.35,0.001730769,0.041602515,13,10,read,NA,within,mixed,words,recognition,item,NA,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +1453,1,1,1333,663,0.37,0.003076923,0.05547002,13,10,generate,NA,within,mixed,non-words,recognition,item,high,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +1453,1,1,1334,663,0.33,0.003076923,0.05547002,13,10,read,NA,within,mixed,non-words,recognition,item,NA,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +1453,2,1,1335,664,0.69,0.002406667,0.049057789,15,10,generate,NA,between,pure,words,recognition,item,high,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +1453,2,2,1336,664,0.4,0.003526667,0.059385745,15,10,read,NA,between,pure,words,recognition,item,NA,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +1453,2,1,1337,665,0.3,0.003226667,0.056803756,15,10,generate,NA,between,pure,non-words,recognition,item,high,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +1453,2,2,1338,665,0.28,0.000806667,0.028401878,15,10,read,NA,between,pure,non-words,recognition,item,NA,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate +1454,1,1,1339,666,0.35,0.001262154,0.035526808,20,10,generate,low,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,letter transposition,divided,timed,yes,younger,short +1454,1,2,1340,666,0.23,0.000679359,0.026064518,20,10,read,low,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,letter transposition,divided,timed,yes,younger,short +1454,1,1,1341,667,0.34,0.001211085,0.034800647,20,10,generate,high,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,letter transposition,divided,timed,yes,younger,short +1454,1,2,1342,667,0.27,0.000860604,0.029336045,20,10,read,high,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,letter transposition,divided,timed,yes,younger,short +1454,1,1,1343,668,0.36,0.001312912,0.036234126,20,10,generate,low,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,sentence completion,divided,timed,yes,younger,short +1454,1,2,1344,668,0.29,0.000957784,0.03094809,20,10,read,low,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,sentence completion,divided,timed,yes,younger,short +1454,1,1,1345,669,0.53,0.001926215,0.043888665,20,10,generate,high,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,sentence completion,divided,timed,yes,younger,short +1454,1,2,1346,669,0.4,0.001508631,0.038841096,20,10,read,high,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,sentence completion,divided,timed,yes,younger,short +1455,1,1,1347,670,0.39,0.001252182,0.035386187,20,14,generate,low,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,1,2,1348,670,0.3,0.000863431,0.029384201,20,14,read,low,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,1,1,1349,671,0.47,0.001533842,0.039164289,20,14,generate,high,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,1,2,1350,671,0.41,0.001332242,0.036499887,20,14,read,high,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,1,3,1351,672,0.9,0.000583767,0.024161265,20,14,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,1,4,1352,672,0.82,0.00090851,0.030141502,20,14,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,1,3,1353,673,0.85,0.000780558,0.027938461,20,14,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,1,4,1354,673,0.5,0.001604659,0.040058201,20,14,read,high,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,2,1,1355,674,0.27,0.000484403,0.022009153,40,14,generate,low,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,2,2,1356,674,0.31,0.000595494,0.024402753,40,14,read,low,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,2,1,1357,675,0.53,0.001084197,0.032927151,40,14,generate,high,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,2,2,1358,675,0.38,0.000795137,0.028198172,40,14,read,high,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,2,3,1359,676,0.71,0.001052149,0.032436844,32,14,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,long +1455,2,4,1360,676,0.48,0.001196388,0.034588846,32,14,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,long +1455,2,3,1361,677,0.48,0.001196388,0.034588846,32,14,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,long +1455,2,4,1362,677,0.29,0.000629449,0.025088815,32,14,read,high,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,long +1455,3,1,1363,678,0.36,0.000463475,0.021528466,72,14,generate,low,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,3,2,1364,678,0.47,0.000631861,0.025136844,72,14,read,low,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,3,1,1365,679,0.51,0.000668542,0.025856185,72,14,generate,high,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,3,2,1366,679,0.44,0.000593866,0.024369359,72,14,read,high,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,3,3,1367,680,0.96,0.000145756,0.012072947,80,14,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,3,4,1368,680,0.84,0.000309642,0.017596658,80,14,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,3,3,1369,681,0.86,0.00027827,0.016681436,80,14,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,3,4,1370,681,0.63,0.000604338,0.024583284,80,14,read,high,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,4,1,1371,682,0.41,0.001332242,0.036499887,20,14,generate,NA,within,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,4,1,1372,682,0.13,0.000282665,0.016812636,20,14,read,NA,within,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,4,2,1373,683,0.86,0.000739266,0.027189452,20,14,generate,NA,within,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1455,4,2,1374,683,0.48,0.001560016,0.039497043,20,14,read,NA,within,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short +1456,1,1,1375,684,0.569,0.001862143,0.043152551,18,12,generate,NA,within,mixed,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +1456,1,1,1376,684,0.268,0.000813378,0.028519783,18,12,read,NA,within,mixed,words,cued recall,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +1456,2,1,1377,685,0.592,0.002024243,0.04499159,18,10,generate,low,within,mixed,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +1456,2,1,1378,685,0.273,0.000914973,0.030248519,18,10,read,low,within,mixed,words,cued recall,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +1456,2,1,1379,686,0.523,0.002004125,0.044767456,18,10,generate,high,within,mixed,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +1456,2,1,1380,686,0.24,0.000755831,0.027492386,18,10,read,high,within,mixed,words,cued recall,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +1457,2R,1,1381,687,0.75,0.00128866,0.035897908,16,15,generate,NA,within,mixed,words,recognition,item,medium,incidental,antonym,verbal/speaking,cue only,full,timed,no,younger,immediate +1457,2R,1,1382,687,0.654,0.001648529,0.040602084,16,15,read,NA,within,mixed,words,recognition,item,NA,incidental,antonym,verbal/speaking,cue only,full,timed,no,younger,immediate +1457,2R,1,1383,688,0.73,0.001375979,0.037094191,16,15,generate,NA,within,mixed,words,recognition,source,medium,incidental,antonym,verbal/speaking,cue only,full,timed,no,younger,immediate +1457,2R,1,1384,688,0.71,0.001458234,0.038186828,16,15,read,NA,within,mixed,words,recognition,source,NA,incidental,antonym,verbal/speaking,cue only,full,timed,no,younger,immediate +1458,2,1,1385,689,0.41,0.001082951,0.032908215,24,20,generate,NA,within,mixed,words,cued recall,item,medium,intentional,NA,verbal/speaking,word stem,full,timed,yes,younger,immediate +1458,2,1,1386,689,0.22,0.000443979,0.021070807,24,20,read,NA,within,mixed,words,cued recall,item,NA,intentional,NA,verbal/speaking,word stem,full,timed,yes,younger,immediate +1459,1,1,1387,690,0.837,0.001356694,0.036833333,36,10,generate,NA,within,mixed,words,recognition,item,medium,intentional,antonym,verbal/speaking,word fragment,full,self-paced,yes,younger,short +1459,1,1,1388,690,0.608,0.001521,0.039,36,10,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,verbal/speaking,word fragment,full,self-paced,yes,younger,short +1459,1,2,1389,691,0.778,0.001212121,0.034815531,33,10,generate,NA,within,mixed,words,recognition,item,medium,intentional,antonym,verbal/speaking,word fragment,full,self-paced,yes,younger,short +1459,1,2,1390,691,0.554,0.001893939,0.043519414,33,10,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,verbal/speaking,word fragment,full,self-paced,yes,younger,short +1460,1,1,1391,692,0.77,0.001046496,0.032349586,16,24,generate,low,between,pure,words,cued recall,item,low,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1460,1,2,1392,692,0.69,0.001340032,0.036606451,16,24,read,low,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1460,1,3,1393,693,0.78,0.00100612,0.031719395,16,24,generate,high,between,pure,words,cued recall,item,low,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1460,1,4,1394,693,0.66,0.001425417,0.037754695,16,24,read,high,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1460,1,5,1395,694,0.76,0.001086452,0.032961373,16,24,generate,NA,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1460,1,6,1396,694,0.7,0.001307808,0.036163626,16,24,read,NA,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1460,2,1,1397,695,0.84,0.000932768,0.030541258,11,15,generate,low,between,pure,words,cued recall,item,low,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1460,2,2,1398,695,0.69,0.00163633,0.040451571,11,15,read,low,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1460,2,3,1399,696,0.83,0.00098118,0.031323796,11,15,generate,high,between,pure,words,cued recall,item,low,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1460,2,4,1400,696,0.65,0.001770152,0.042073176,11,15,read,high,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate +1460,2,1,1401,697,0.5,0.001819543,0.042656099,11,15,generate,low,between,pure,words,cued recall,item,low,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,long +1460,2,2,1402,697,0.26,0.000790457,0.028115059,11,15,read,low,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,long +1460,2,3,1403,698,0.4,0.001465926,0.038287409,11,15,generate,high,between,pure,words,cued recall,item,low,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,long +1460,2,4,1404,698,0.28,0.000883022,0.029715691,11,15,read,high,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,long +1461,1,1,1405,699,0.36,0.001459436,0.038202564,15,10,generate,NA,within,mixed,words,free recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,1,1,1406,699,0.18,0.000538694,0.023209777,15,10,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,3,1,1407,700,0.319,0.001263348,0.035543611,20,8,generate,low,within,mixed,words,free recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,3,1,1408,700,0.1,0.000293072,0.017119344,20,8,read,low,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,3,1,1409,701,0.175,0.000534898,0.023127861,20,8,generate,high,within,mixed,words,free recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,3,1,1410,701,0.138,0.000402801,0.020069909,20,8,read,high,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,3,1,1411,702,0.85,0.001042616,0.032289568,20,8,generate,low,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,3,1,1412,702,0.638,0.002122517,0.046070787,20,8,read,low,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,3,1,1413,703,0.763,0.001545645,0.039314695,20,8,generate,high,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,3,1,1414,703,0.6,0.002205455,0.046962273,20,8,read,high,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,4,1,1415,704,0.3,0.000953535,0.03087936,10,16,generate,low,between,pure,words,free recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,4,2,1416,704,0.231,0.00064697,0.025435608,10,16,read,low,between,pure,words,free recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,4,1,1417,705,0.113,0.00027098,0.016461477,10,16,generate,high,between,pure,words,free recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,4,2,1418,705,0.119,0.000285031,0.016882862,10,16,read,high,between,pure,words,free recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,4,1,1419,706,0.85,0.000862013,0.029360057,10,16,generate,low,between,pure,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,4,2,1420,706,0.706,0.001531423,0.039133398,10,16,read,low,between,pure,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,4,1,1421,707,0.75,0.001338918,0.036591235,10,16,generate,high,between,pure,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1461,4,2,1422,707,0.65,0.001724011,0.041521211,10,16,read,high,between,pure,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate +1463,1,1,1423,708,0.454,0.002048,0.045254834,8,25,generate,NA,between,pure,words,free recall,item,low,incidental,semantic,verbal/speaking,cue only,full,timed,no,younger,immediate +1463,1,2,1424,708,0.3,0.002850125,0.053386562,8,25,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,verbal/speaking,cue only,full,timed,no,younger,immediate +1464,1,1,1425,709,0.35,0.003333333,0.057735027,12,8,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate +1464,1,1,1426,709,0.21,0.0027,0.051961524,12,8,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate +1464,1,1,1427,710,0.21,0.004408333,0.066395281,12,8,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate +1464,1,1,1428,710,0.08,0.0012,0.034641016,12,8,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate +1464,1,1,1429,711,0.13,0.001408333,0.037527767,12,8,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate +1464,1,1,1430,711,0.08,0.0012,0.034641016,12,8,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate +1464,1,1,1431,712,0.1,0.004408333,0.066395281,12,8,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate +1464,1,1,1432,712,0.1,0.003333333,0.057735027,12,8,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate +1464,2,1,1433,713,0.48,0.001225,0.035,16,6,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate +1464,2,1,1434,713,0.25,0.0025,0.05,16,6,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate +1464,2,1,1435,714,0.29,0.0025,0.05,16,6,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate +1464,2,1,1436,714,0.19,0.001225,0.035,16,6,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate +1464,2,1,1437,715,0.59,0.0025,0.05,16,6,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate +1464,2,1,1438,715,0.31,0.004225,0.065,16,6,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate +1464,2,1,1439,716,0.48,0.00180625,0.0425,16,6,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate +1464,2,1,1440,716,0.31,0.001225,0.035,16,6,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate +1465,2,1,1441,717,0.039,0.000140489,0.011852791,12,15,generate,NA,within,mixed,non-words,free recall,item,high,intentional,NA,verbal/speaking,letter transposition,full,timed,no,younger,immediate +1465,2,1,1442,717,0.085,0.000216866,0.014726385,12,15,read,NA,within,mixed,non-words,free recall,item,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,no,younger,immediate +1466,1,1,1443,718,0.42,0.001743964,0.04176079,16,10,generate,NA,within,mixed,words,free recall,item,high,intentional,NA,verbal/speaking,word stem,full,timed,no,younger,immediate +1466,1,1,1444,718,0.25,0.000837044,0.028931716,16,10,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,word stem,full,timed,no,younger,immediate +1466,1,2,1445,719,0.2,0.000608397,0.024665701,16,10,generate,NA,within,mixed,words,free recall,item,high,intentional,NA,verbal/speaking,word stem,full,timed,no,older,immediate +1466,1,2,1446,719,0.18,0.000528519,0.02298954,16,10,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,word stem,full,timed,no,older,immediate +1466,1,3,1447,720,0.4,0.001255778,0.035436955,16,20,generate,NA,within,mixed,words,recognition,item,high,intentional,NA,verbal/speaking,word stem,full,timed,no,younger,long +1466,1,3,1448,720,0.36,0.001092862,0.033058467,16,20,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word stem,full,timed,no,younger,long +1466,1,4,1449,721,0.32,0.000922965,0.030380342,16,20,generate,NA,within,mixed,words,recognition,item,high,intentional,NA,verbal/speaking,word stem,full,timed,no,older,long +1466,1,4,1450,721,0.29,0.000797256,0.028235713,16,20,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word stem,full,timed,no,older,long +1467,1,1,1451,722,0.75,0.002349724,0.048473948,12,6,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1467,1,1,1452,722,0.36,0.002180503,0.046695855,12,6,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1467,1,2,1453,723,0.28,0.001509259,0.038849182,12,6,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1467,1,2,1454,723,0.22,0.001058542,0.032535246,12,6,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1467,2,1,1455,724,0.66,0.005768464,0.075950402,24,3,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1467,2,1,1456,724,0.38,0.004549148,0.067447371,24,3,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1467,2,1,1457,725,0.49,0.005951212,0.077144096,24,3,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1467,2,1,1458,725,0.17,0.001450438,0.038084617,24,3,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1467,3,1,1459,726,0.46,0.002917352,0.054012513,12,6,generate,NA,within,pure,numbers,free recall,item,low,intentional,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1467,3,1,1460,726,0.2,0.000926488,0.030438272,12,6,read,NA,within,pure,numbers,free recall,item,NA,intentional,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1468,1,1,1461,727,0.762,0.002250965,0.047444336,12,6,generate,low,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate +1468,1,1,1462,727,0.307,0.001731896,0.04161606,12,6,read,low,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate +1468,1,2,1463,728,0.505,0.003128302,0.055931226,12,6,generate,high,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate +1468,1,2,1464,728,0.266,0.001397785,0.037386959,12,6,read,high,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate +1468,2,1,1465,729,0.456,0.00228002,0.047749556,24,6,generate,low,within,pure,numbers,free recall,cue word,low,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate +1468,2,1,1466,729,0.229,0.000883343,0.02972108,24,6,read,low,within,pure,numbers,free recall,cue word,NA,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate +1468,2,2,1467,730,0.468,0.002333607,0.048307425,24,6,generate,high,within,pure,numbers,free recall,cue word,low,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate +1468,2,2,1468,730,0.167,0.000576338,0.024007048,24,6,read,high,within,pure,numbers,free recall,cue word,NA,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate +1468,2,1,1469,731,0.656,0.002360238,0.048582281,24,6,generate,low,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate +1468,2,1,1470,731,0.328,0.001504314,0.038785486,24,6,read,low,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate +1468,2,2,1471,732,0.342,0.001598055,0.039975678,24,6,generate,high,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate +1468,2,2,1472,732,0.18,0.000634099,0.025181316,24,6,read,high,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate +1468,3,1,1473,733,0.613,0.002734694,0.052294298,20,6,generate,low,within,pure,numbers,free recall,item,low,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate +1468,3,1,1474,733,0.387,0.0020742,0.045543381,20,6,read,low,within,pure,numbers,free recall,item,NA,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate +1468,3,2,1475,734,0.275,0.001268165,0.0356113,20,6,generate,high,within,pure,numbers,free recall,item,low,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate +1468,3,2,1476,734,0.297,0.001423022,0.037722959,20,6,read,high,within,pure,numbers,free recall,item,NA,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate +1469,1,1,1477,735,0.39,0.000738108,0.027168148,32,44,generate,NA,between,pure,words,free recall,item,high,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate +1469,1,2,1478,735,0.32,0.00056009,0.023666215,32,44,read,NA,between,pure,words,free recall,item,NA,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate +1469,2a,1,1479,736,0.34,0.000568094,0.02383472,36,42,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate +1469,2a,2,1480,736,0.41,0.000729254,0.027004707,36,42,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate +1469,2b,1,1481,737,0.86,0.00062333,0.024966585,16,42,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate +1469,2b,2,1482,737,0.74,0.001057321,0.032516467,16,42,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate +1470,1,1,1483,738,0.6,0.000965928,0.031079386,40,20,generate,NA,within,mixed,words,recognition,item,low,incidental,NA,writing/typing,anagram,full,timed,no,younger,immediate +1470,1,1,1484,738,0.34,0.000607142,0.024640255,40,20,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,no,younger,immediate +1470,1,2,1485,739,0.66,0.000898016,0.02996692,40,20,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,writing/typing,anagram,full,timed,no,younger,immediate +1470,1,2,1486,739,0.44,0.000843361,0.029040674,40,20,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,no,younger,immediate +1470,2,1,1487,740,0.61,0.000958748,0.030963656,40,20,generate,low,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,timed,no,younger,immediate +1470,2,1,1488,740,0.34,0.000607142,0.024640255,40,20,read,low,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,no,younger,immediate +1470,2,2,1489,741,0.66,0.000898016,0.02996692,40,20,generate,high,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,timed,no,younger,immediate +1470,2,2,1490,741,0.34,0.000607142,0.024640255,40,20,read,high,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,no,younger,immediate +1471,1,1,1491,742,0.18,0.002025,0.045,16,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1471,1,1,1492,742,0.05,0.00075625,0.0275,16,12,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1471,2,1,1493,743,0.242,0.000660083,0.025692087,12,50,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1471,2,2,1494,743,0.2,0.000752083,0.027424138,12,50,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1472,1,1,1495,744,0.358,0.004056,0.063686733,24,5,generate,low,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,1,1,1496,744,0.3,0.002904,0.053888774,24,5,read,low,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,1,1,1497,745,0.634,0.0018375,0.04286607,24,5,generate,high,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,1,1,1498,745,0.342,0.001666667,0.040824829,24,5,read,high,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,2,1,1499,746,0.382,0.001711125,0.041365747,32,5,generate,low,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,2,1,1500,746,0.368,0.001953125,0.044194174,32,5,read,low,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,2,1,1501,747,0.588,0.002080125,0.045608387,32,5,generate,high,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,2,1,1502,747,0.318,0.001682,0.041012193,32,5,read,high,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,2,2,1503,748,0.506,0.001922,0.04384062,32,5,generate,low,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,2,2,1504,748,0.306,0.002415125,0.049143921,32,5,read,low,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,2,2,1505,749,0.532,0.001891125,0.043487067,32,5,generate,high,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,2,2,1506,749,0.306,8e-04,0.028284271,32,5,read,high,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,3,1,1507,750,0.378,0.000945852,0.030754705,54,5,generate,low,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,3,1,1508,750,0.204,0.000654519,0.02558356,54,5,read,low,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,3,1,1509,751,0.526,0.001014,0.031843367,54,5,generate,high,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,3,1,1510,751,0.24,0.000962667,0.03102687,54,5,read,high,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate +1472,4,1,1511,752,0.6,0.002242667,0.047356802,24,5,generate,low,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,timed,yes,younger,immediate +1472,4,1,1512,752,0.558,0.0024,0.048989795,24,5,read,low,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,timed,yes,younger,immediate +1472,4,1,1513,753,0.806,0.001380167,0.037150594,24,5,generate,high,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,timed,yes,younger,immediate +1472,4,1,1514,753,0.546,0.00375,0.061237244,24,5,read,high,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,timed,yes,younger,immediate +1473,1,1,1515,754,0.632,0.000578338,0.024048662,23,15,generate,NA,within,pure,numbers,free recall,item,low,intentional,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1473,1,1,1516,754,0.406,0.000772947,0.027801922,23,15,read,NA,within,pure,numbers,free recall,item,NA,intentional,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate +1473,1,1,1517,755,0.408666667,0.000429005,0.020712432,23,15,generate,NA,within,pure,words,free recall,item,high,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +1473,1,1,1518,755,0.234666667,0.00050713,0.022519557,23,15,read,NA,within,pure,words,free recall,item,NA,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +1473,1,2,1519,756,0.378666667,0.00059883,0.024471012,19,15,generate,NA,within,pure,numbers,free recall,item,low,intentional,NA,verbal/speaking,calculation,full,timed,yes,older,immediate +1473,1,2,1520,756,0.326,0.001163251,0.034106473,19,15,read,NA,within,pure,numbers,free recall,item,NA,intentional,NA,verbal/speaking,calculation,full,timed,yes,older,immediate +1473,1,2,1521,757,0.228,0.000629146,0.025082787,19,15,generate,NA,within,pure,words,free recall,item,high,intentional,antonym,verbal/speaking,word stem,full,timed,yes,older,immediate +1473,1,2,1522,757,0.102,0.000505474,0.022482742,19,15,read,NA,within,pure,words,free recall,item,NA,intentional,antonym,verbal/speaking,word stem,full,timed,yes,older,immediate +1474,1,1,1523,758,0.84,9e-04,0.03,16,14,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +1474,1,1,1524,758,0.67,0.00225625,0.0475,16,14,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +1474,1,1,1525,759,0.36,0.00140625,0.0375,16,14,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +1474,1,1,1526,759,0.35,0.00140625,0.0375,16,14,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate +1474,2,1,1527,760,0.742,0.00161428,0.040178109,18,9,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word stem,full,timed,no,younger,immediate +1474,2,1,1528,760,0.56,0.002163457,0.046512973,18,9,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word stem,full,timed,no,younger,immediate +1474,2,1,1529,761,0.48,0.002021541,0.044961545,18,9,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word stem,full,timed,no,younger,immediate +1474,2,1,1530,761,0.361,0.001463545,0.038256302,18,9,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word stem,full,timed,no,younger,immediate +1474,2,1,1531,762,0.285,0.001036239,0.032190664,18,9,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word stem,full,timed,no,younger,immediate +1474,2,1,1532,762,0.243,0.000817355,0.028589414,18,9,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word stem,full,timed,no,younger,immediate +1474,2,2,1533,763,0.412,0.001736396,0.04167008,18,9,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,covert/thinking,word stem,full,timed,no,younger,immediate +1474,2,2,1534,763,0.244,0.000822301,0.028675799,18,9,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,covert/thinking,word stem,full,timed,no,younger,immediate +1474,2,2,1535,764,0.335,0.001316446,0.036282866,18,9,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,covert/thinking,word stem,full,timed,no,younger,immediate +1474,2,2,1536,764,0.236,0.000783139,0.027984615,18,9,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,covert/thinking,word stem,full,timed,no,younger,immediate +1474,2,2,1537,765,0.236,0.000783139,0.027984615,18,9,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,covert/thinking,word stem,full,timed,no,younger,immediate +1474,2,2,1538,765,0.231,0.000759152,0.027552712,18,9,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,covert/thinking,word stem,full,timed,no,younger,immediate +1474,3,1,1539,766,0.47,0.000782551,0.027974116,48,20,generate,high,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short +1474,3,1,1540,766,0.45,0.000752267,0.027427479,48,20,read,high,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short +1474,3,1,1541,767,0.46,0.000767979,0.02771244,48,20,generate,high,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short +1474,3,1,1542,767,0.35,0.000551816,0.023490762,48,20,read,high,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short +1474,3,2,1543,768,0.72,0.000680559,0.026087534,48,20,generate,low,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short +1474,3,2,1544,768,0.64,0.000808467,0.028433545,48,20,read,low,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short +1474,3,2,1545,769,0.57,0.000851814,0.029185858,48,20,generate,low,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short +1474,3,2,1546,769,0.53,0.000842144,0.029019725,48,20,read,low,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short +1475,1,1,1547,770,0.7,0.001434854,0.037879461,22,12,generate,NA,within,mixed,words,recognition,item,low,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate +1475,1,1,1548,770,0.7,0.001434854,0.037879461,22,12,read,NA,within,mixed,words,recognition,item,NA,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate +1475,1,2,1549,771,0.78,0.001103859,0.033224368,22,12,generate,NA,within,mixed,words,recognition,item,low,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate +1475,1,2,1550,771,0.69,0.001470208,0.038343297,22,12,read,NA,within,mixed,words,recognition,item,NA,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate +1475,1,1,1551,772,0.75,0.001235187,0.035145232,22,12,generate,NA,within,mixed,words,recognition,item,low,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate +1475,1,1,1552,772,0.73,0.001318883,0.036316433,22,12,read,NA,within,mixed,words,recognition,item,NA,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate +1475,1,2,1553,773,0.74,0.001277547,0.035742789,22,12,generate,NA,within,mixed,words,recognition,item,low,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate +1475,1,2,1554,773,0.72,0.001359006,0.036864696,22,12,read,NA,within,mixed,words,recognition,item,NA,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate +1476,1,1,1555,774,0.81875,0.0009498,0.030818832,16,16,generate,NA,within,pure,words,free recall,item,low,incidental,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1476,1,1,1556,774,0.5,0.001667622,0.04083653,16,16,read,NA,within,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1476,2,1,1557,775,0.800625,0.001032107,0.032126428,16,16,generate,NA,within,pure,words,free recall,item,low,incidental,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1476,2,1,1558,775,0.65625,0.001605723,0.040071478,16,16,read,NA,within,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1476,3,1,1559,776,0.71875,0.001391292,0.037300022,16,16,generate,NA,within,pure,words,free recall,item,low,incidental,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1476,3,1,1560,776,0.6375,0.001652502,0.040650976,16,16,read,NA,within,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate +1477,1,1,1561,777,0.143,0.000280269,0.016741237,14,36,generate,NA,within,mixed,words,free recall,item,high,incidental,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +1477,1,1,1562,777,0.028,9.95887803248024e-05,0.009979418,14,36,read,NA,within,mixed,words,free recall,item,NA,incidental,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +1477,2,1,1563,778,0.333,0.001171356,0.034225076,16,12,generate,NA,within,mixed,words,free recall,item,high,incidental,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +1477,2,1,1564,778,0.078,0.000209663,0.014479752,16,12,read,NA,within,mixed,words,free recall,item,NA,incidental,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +1477,2,2,1565,779,0.37,0.001358625,0.036859528,16,12,generate,NA,within,mixed,words,free recall,item,high,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +1477,2,2,1566,779,0.287,0.000939855,0.03065706,16,12,read,NA,within,mixed,words,free recall,item,NA,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate +1478,1,1,1567,780,0.75,0.001161895,0.034086574,48,6,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,1,1,1568,780,0.74,0.001201741,0.034666131,48,6,read,NA,within,mixed,non-words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,1,1,1569,781,0.88,0.000631932,0.025138265,48,6,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,1,1,1570,781,0.62,0.001555983,0.039445945,48,6,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,1,1,1571,782,0.83,0.00082926,0.028796877,48,6,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,1,1,1572,782,0.66,0.001471091,0.0383548,48,6,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,2,1,1573,783,0.19,0.000427399,0.020673642,48,6,generate,NA,within,mixed,non-words,free recall,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,2,1,1574,783,0.17,0.000369895,0.019232655,48,6,read,NA,within,mixed,non-words,free recall,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,2,1,1575,784,0.48,0.001495032,0.038665647,48,6,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,2,1,1576,784,0.34,0.000994593,0.031537176,48,6,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,2,1,1577,785,0.48,0.001495032,0.038665647,48,6,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,2,1,1578,785,0.43,0.001348223,0.036718157,48,6,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,3,1,1579,786,0.72,0.001784568,0.042244152,30,6,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,3,1,1580,786,0.78,0.001449524,0.038072611,30,6,read,NA,within,mixed,non-words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,3,1,1581,787,0.8,0.001332313,0.036500866,30,6,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,3,1,1582,787,0.6,0.00220891,0.046999047,30,6,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,3,1,1583,788,0.81,0.001273723,0.035689257,30,6,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,3,1,1584,788,0.63,0.002147896,0.046345398,30,6,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,4,1,1585,789,0.2,0.00063954,0.025289133,30,6,generate,NA,within,mixed,non-words,free recall,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,4,1,1586,789,0.18,0.000555573,0.023570606,30,6,read,NA,within,mixed,non-words,free recall,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,4,1,1587,790,0.28,0.001041818,0.032277198,30,6,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,4,1,1588,790,0.3,0.00115512,0.033987059,30,6,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,4,1,1589,791,0.4,0.001729545,0.041587803,30,6,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1478,4,1,1590,791,0.4,0.001729545,0.041587803,30,6,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short +1479,1,1,1591,372,0.79,0.001024,0.032,25,24,generate,NA,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +1479,1,1,1592,372,0.85,0.000484,0.022,25,24,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1479,1,1,1593,372,0.52,0.001024,0.032,25,24,read,NA,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1479,1,1,1594,373,0.83,0.001156,0.034,25,24,generate,NA,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +1479,1,1,1595,373,0.69,0.001024,0.032,25,24,generate,NA,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1479,1,1,1596,373,0.57,0.001296,0.036,25,24,read,NA,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1479,1,1,1597,374,0.44,0.001444,0.038,25,24,generate,NA,within,pure,words,recognition,font color,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +1479,1,1,1598,374,0.39,0.001156,0.034,25,24,generate,NA,within,pure,words,recognition,font color,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1479,1,1,1599,374,0.34,0.001764,0.042,25,24,read,NA,within,pure,words,recognition,font color,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1479,1,1,1600,375,0.89,0.000256,0.016,25,24,generate,NA,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +1479,1,1,1601,375,0.84,0.000576,0.024,25,24,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1479,1,1,1602,375,0.69,0.001444,0.038,25,24,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1480,1,1,1603,376,0.84,0.00055,0.023452079,22,24,generate,NA,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +1480,1,1,1604,376,0.91,0.000454545,0.021320072,22,24,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1480,1,1,1605,376,0.59,0.002004545,0.04477215,22,24,read,NA,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1480,1,2,1606,377,0.76,0.001024,0.032,25,24,generate,NA,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,older,immediate +1480,1,2,1607,377,0.82,9e-04,0.03,25,24,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,older,immediate +1480,1,2,1608,377,0.57,0.001024,0.032,25,24,read,NA,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,older,immediate +1480,1,1,1609,378,0.85,0.000454545,0.021320072,22,24,generate,NA,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +1480,1,1,1610,378,0.74,0.001163636,0.034112115,22,24,generate,NA,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1480,1,1,1611,378,0.72,0.001163636,0.034112115,22,24,read,NA,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1480,1,2,1612,379,0.69,0.002704,0.052,25,24,generate,NA,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,older,immediate +1480,1,2,1613,379,0.7,0.001296,0.036,25,24,generate,NA,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,older,immediate +1480,1,2,1614,379,0.51,0.0025,0.05,25,24,read,NA,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,older,immediate +1480,1,1,1615,380,0.96,0.000163636,0.012792043,22,24,generate,NA,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate +1480,1,1,1616,380,0.93,0.000222727,0.01492405,22,24,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1480,1,1,1617,380,0.8,0.001022727,0.031980107,22,24,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate +1480,1,2,1618,381,0.88,0.001024,0.032,25,24,generate,NA,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,older,immediate +1480,1,2,1619,381,0.87,0.000676,0.026,25,24,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,older,immediate +1480,1,2,1620,381,0.79,0.001444,0.038,25,24,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,older,immediate +1482,1,1,1621,792,0.563,0.002878755,0.053654033,40,4,generate,NA,within,mixed,words,free recall,item,high,intentional,category,verbal/speaking,word stem,full,timed,yes,younger,immediate +1482,1,1,1622,792,0.54,0.00286177,0.053495514,40,4,generate,NA,within,mixed,words,free recall,item,high,intentional,category,verbal/speaking,word stem,full,timed,yes,younger,immediate +1482,1,1,1623,792,0.49,0.002730123,0.052250582,40,4,generate,NA,within,mixed,words,free recall,item,high,intentional,category,verbal/speaking,word stem,full,timed,yes,younger,immediate +1482,1,1,1624,792,0.407,0.002276525,0.047712943,40,4,generate,NA,within,mixed,words,free recall,item,high,intentional,category,verbal/speaking,word stem,full,timed,yes,younger,immediate +1482,1,1,1625,792,0.395,0.00219392,0.046839303,40,4,read,NA,within,mixed,words,free recall,item,NA,intentional,category,verbal/speaking,word stem,full,timed,yes,younger,immediate +1483,1,1,1626,793,0.279,0.000824952,0.028721981,24,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate +1483,1,1,1627,793,0.213,0.00055567,0.023572662,24,10,read,NA,within,mixed,words,free recall,item,NA,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate +1483,1,1,1628,794,0.308,0.000956343,0.030924789,24,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate +1483,1,1,1629,794,0.192,0.000481696,0.021947566,24,10,read,NA,within,mixed,words,free recall,item,NA,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate +1483,1,1,1630,795,0.958,0.000418542,0.02045831,24,10,generate,NA,within,mixed,words,recognition,item,medium,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate +1483,1,1,1631,795,0.896,0.00063745,0.025247762,24,10,read,NA,within,mixed,words,recognition,item,NA,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate +1483,1,1,1632,796,0.962,0.000406328,0.020157581,24,10,generate,NA,within,mixed,words,recognition,item,medium,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate +1483,1,1,1633,796,0.904,0.00060622,0.024621534,24,10,read,NA,within,mixed,words,recognition,item,NA,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate +1483,2,1,1634,797,0.789,0.000780402,0.02793568,32,15,generate,NA,within,mixed,words,recognition,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,2,1,1635,797,0.715,0.001011355,0.031801812,32,15,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,2,1,1636,798,0.702,0.001047312,0.032362196,32,15,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,2,1,1637,798,0.669,0.001128256,0.033589525,32,15,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,2,1,1638,799,0.759,0.000877682,0.029625697,32,15,generate,NA,within,mixed,words,recognition,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,2,1,1639,799,0.683,0.001095909,0.033104519,32,15,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,2,1,1640,800,0.696,0.001063198,0.032606721,32,15,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,2,1,1641,800,0.644,0.001177595,0.034316107,32,15,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,3,1,1642,801,0.67,0.001170738,0.034216045,24,24,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,3,1,1643,801,0.623,0.001257701,0.035464074,24,24,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,3,1,1644,802,0.693,0.00111346,0.033368553,24,24,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,3,1,1645,802,0.623,0.001257701,0.035464074,24,24,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,4,1,1646,803,0.843,0.000528861,0.022996989,32,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,4,1,1647,803,0.716,0.00088107,0.029682827,32,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,4,1,1648,804,0.699,0.000921961,0.030363815,32,24,generate,NA,within,mixed,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,4,1,1649,804,0.64,0.001034734,0.032167277,32,24,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,4,2,1650,805,0.784,0.000696084,0.026383402,32,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,4,2,1651,805,0.705,0.000907879,0.030131024,32,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,4,2,1652,806,0.642,0.001031797,0.032121589,32,24,generate,NA,within,mixed,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate +1483,4,2,1653,806,0.643,0.001030302,0.032098318,32,24,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate From 08f1a0127b9fe7e1e7232741bc8d8366036e4b00 Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 26 Jun 2024 07:50:10 +0200 Subject: [PATCH 050/127] fix tables --- ...ssicalmetaanalysismultilevelmultivariate.R | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/R/classicalmetaanalysismultilevelmultivariate.R b/R/classicalmetaanalysismultilevelmultivariate.R index 7bc4d35b..8383e9c6 100644 --- a/R/classicalmetaanalysismultilevelmultivariate.R +++ b/R/classicalmetaanalysismultilevelmultivariate.R @@ -345,7 +345,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N tableS$setData(resultsS) } - return() + ### create summary for the remaining types if (fit[["withG"]]) { @@ -375,7 +375,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N "compoundSymmetry" = "CS", "heteroscedasticCompoundSymmetry" = "HCS", "unstructured" = "UN", - "identity" = "UD", + "identity" = "ID", "diagonal" = "DIAG", "ar1" = "AR", "heteroskedasticAr1" = "HAR", @@ -396,7 +396,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N "CS" = gettextf("Compound Symmetry"), "HCS" = gettextf("Heteroscedastic Compound Symmetry"), "UN" = gettextf("Unstructured"), - "UD" = gettextf("Identity"), + "ID" = gettextf("Identity"), "DIAG" = gettextf("Diagonal"), "AR1" = gettextf("AR(1)"), "HAR" = gettextf("heteroskedastic AR(1)"), @@ -452,6 +452,9 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N vc <- data.frame(vc) colnames(vc) <- c("estimate", "estimateSqrt", "fixed") vc$parameter <- c("\U1D70F\U00B2", "\U03C1") + for(colName in c("estimate", "estimateSqrt")) { + vc[,colName] <- as.numeric(vc[,colName]) + } if (struct == "ID") { vc <- vc[1, , drop = FALSE] @@ -473,9 +476,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N tempTable$addFootnote(message1, symbol = gettext("Levels: ")) tempTable$addFootnote(message2, symbol = gettext("Component: ")) - - - } + } if (is.element(struct, c("HCS", "HAR", "DIAG"))) { @@ -484,6 +485,9 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N vc <- data.frame(vc) colnames(vc) <- c("estimate", "estimateSqrt", "nLevels", "fixed", "level") + for(colName in c("estimate", "estimateSqrt", "nLevels")) { + vc[,colName] <- as.numeric(vc[,colName]) + } if (length(x[[tau2Name]]) == 1L) { vc$parameter <- c("\U1D70F\U00B2", "\U03C1") @@ -526,6 +530,9 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N } vc <- data.frame(vc) colnames(vc) <- c("estimate", "estimateSqrt", "nLevels", "fixed", "level") + for(colName in c("estimate", "estimateSqrt", "nLevels")) { + vc[,colName] <- as.numeric(vc[,colName]) + } if (length(x[[g.levels.kName]]) == 1L) { vc$parameter <- c("\U1D70F\U00B2") @@ -614,13 +621,16 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N tempContainer[["table2"]] <- tempTable2 } - if (struct == "GEN") { + if (is.element(struct, c("GEN"))) { vc <- cbind(tau2, tau, ifelse(x$vc.fix[[tau2Name]], "yes", "no")) vc <- data.frame(vc) colnames(vc) <- c("estimate", "estimateSqrt", "fixed") vc$parameter <- .maVariableNames(x[[g.namesName]][-length(x[[g.namesName]])], unlist(.mammExtractRandomVariableNames(options))) + for(colName in c("estimate", "estimateSqrt")) { + vc[,colName] <- as.numeric(vc[,colName]) + } if (!.mammAddIsFixedRandom(options, indx)) vc <- vc[,colnames(vc) != "fixed", drop = FALSE] @@ -680,7 +690,6 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N tempContainer[["table2"]] <- tempTable2 } - if (is.element(struct, c("GDIAG"))) { vc <- cbind(tau2, tau, ifelse(x$vc.fix[["tau2"]], "yes", "no")) @@ -688,6 +697,9 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N vc <- data.frame(vc) colnames(vc) <- c("estimate", "estimateSqrt", "fixed") vc$parameter <- .maVariableNames(x[[g.namesName]][-length(x[[g.namesName]])], unlist(.mammExtractRandomVariableNames(options))) + for(colName in c("estimate", "estimateSqrt")) { + vc[,colName] <- as.numeric(vc[,colName]) + } if (!.mammAddIsFixedRandom(options, indx)) vc <- vc[,colnames(vc) != "fixed", drop = FALSE] From bf3d0d11ddd9d1fa162f95e49d2602fae8e98df9 Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 26 Jun 2024 18:55:55 +0200 Subject: [PATCH 051/127] updates --- R/classicalmetaanalysis.R | 4 +- R/classicalmetaanalysiscommon.R | 127 +++++++++--------- R/forestplot.R | 49 +++++-- ...icalMetaAnalysisMultilevelMultivariate.qml | 5 +- .../ClassicalMetaAnalysisForestPlot.qml | 21 ++- 5 files changed, 128 insertions(+), 78 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 6716542b..d3d27df1 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -101,7 +101,9 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "forestPlotAuxiliaryEffectLabel", "forestPlotAuxiliarySetXAxisLimit", "forestPlotAuxiliarySetXAxisLimitLower", - "forestPlotAuxiliarySetXAxisLimitUpper" + "forestPlotAuxiliarySetXAxisLimitUpper", + "forestPlotStudyInformationSecondaryConfidenceInterval", + "forestPlotStudyInformationSecondaryConfidenceIntervalLevel" ) .maBubblePlotDependencies <- c( .maDependencies, "transformEffectSize", "confidenceIntervalsLevel", diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index bfa2fca0..3ee769c0 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -1336,17 +1336,8 @@ } # to data.frame - predictedEffect <- data.frame(predictedEffect) - - # add empty prediction interval for FE and EE, or models without - if (!"pi.lb" %in% colnames(predictedEffect)) { - predictedEffect$pi.lb <- NA - predictedEffect$pi.ub <- NA - } - - # fix column names - colnames(predictedEffect) <- c("est", "se", "lCi", "uCi", "lPi", "uPi") - predictedEffect$par <- "Effect Size" + predictedEffect <- .maExtractAndFormatPrediction(predictedEffect) + predictedEffect$par <- "Effect Size" # apply effect size transformation if (options[["transformEffectSize"]] != "none") @@ -1388,29 +1379,20 @@ # compute test against specified value if (.maIsMetaregressionFtest(options)) { - predictedEffect <- cbind(data.frame(predictedEffect), "df" = predictedEffect$ddf) - predictedEffect$stat <- (predictedEffect$pred - 0) / predictedEffect$se - predictedEffect$pval <- 2 * pt(abs(predictedEffect$stat), predictedEffect$df, lower.tail = FALSE) - # add empty prediction interval for FE and EE - if (.maGetMethodOptions(options) %in% c("FE", "EE")) { - predictedEffect$pi.lb <- predictedEffect$ci.lb - predictedEffect$pi.ub <- predictedEffect$ci.ub - } + # to extract the degrees of freedom + tempDf <- predictedEffect$ddf + predictedEffect <- .maExtractAndFormatPrediction(predictedEffect) + predictedEffect$df <- tempDf + predictedEffect$stat <- (predictedEffect$est - 0) / predictedEffect$se + predictedEffect$pval <- 2 * pt(abs(predictedEffect$stat), predictedEffect$df, lower.tail = FALSE) - colnames(predictedEffect) <- c("est", "se", "lCi", "uCi", "lPi", "uPi", "df", "stat", "pval") } else { - predictedEffect <- data.frame(predictedEffect) - predictedEffect$stat <- (predictedEffect$pred - 0) / predictedEffect$se - predictedEffect$pval <- 2 * pnorm(abs(predictedEffect$stat), lower.tail = FALSE) - # add empty prediction interval for FE and EE - if (.maGetMethodOptions(options) %in% c("FE", "EE")) { - predictedEffect$pi.lb <- predictedEffect$ci.lb - predictedEffect$pi.ub <- predictedEffect$ci.ub - } + predictedEffect <- .maExtractAndFormatPrediction(predictedEffect) + predictedEffect$stat <- (predictedEffect$est - 0) / predictedEffect$se + predictedEffect$pval <- 2 * pnorm(abs(predictedEffect$stat), lower.tail = FALSE) - colnames(predictedEffect) <- c("est", "se", "lCi", "uCi", "lPi", "uPi", "stat", "pval") } # fix column names @@ -1776,17 +1758,23 @@ ) } + # compute test against specified value if (.maIsMetaregressionFtest(options)) { - computedMarginalMeans <- cbind(data.frame(computedMarginalMeans), "df" = computedMarginalMeans$ddf) - computedMarginalMeans$stat <- (computedMarginalMeans$pred - testAgainst) / computedMarginalMeans$se + + # extract degrees of freedom + tempDf <- computedMarginalMeans$ddf + computedMarginalMeans <- .maExtractAndFormatPrediction(computedMarginalMeans) + computedMarginalMeans$df <- tempDf + computedMarginalMeans$stat <- (computedMarginalMeans$est - testAgainst) / computedMarginalMeans$se computedMarginalMeans$pval <- 2 * pt(abs(computedMarginalMeans$stat), computedMarginalMeans$df, lower.tail = FALSE) - colnames(computedMarginalMeans) <- c("est", "se", "lCi", "uCi", "lPi", "uPi", "df", "stat", "pval") + } else { - computedMarginalMeans <- data.frame(computedMarginalMeans) - computedMarginalMeans$stat <- (computedMarginalMeans$pred - testAgainst) / computedMarginalMeans$se + + computedMarginalMeans <- .maExtractAndFormatPrediction(computedMarginalMeans) + computedMarginalMeans$stat <- (computedMarginalMeans$est - testAgainst) / computedMarginalMeans$se computedMarginalMeans$pval <- 2 * pnorm(abs(computedMarginalMeans$stat), lower.tail = FALSE) - colnames(computedMarginalMeans) <- c("est", "se", "lCi", "uCi", "lPi", "uPi", "stat", "pval") + } # apply effect size transformation @@ -1819,8 +1807,8 @@ level = 100 * options[["confidenceIntervalsLevel"]] ) - computedMarginalMeans <- data.frame(computedMarginalMeans) - colnames(computedMarginalMeans) <- c("est", "se", "lCi", "uCi") + computedMarginalMeans <- .maExtractAndFormatPrediction(computedMarginalMeans) + # apply link transform if (options[["heterogeneityModelLink"]] == "log") { @@ -1911,12 +1899,7 @@ selectedGrid <- selectedGrid[,setdiff(names(selectedGrid), c(selectedVariable, separateLines, separatePlots)),drop = FALSE] ### modify marginal means - if (.maGetMethodOptions(options) %in% c("EE", "FE")) { - computedMarginalMeans$pi.lb <- computedMarginalMeans$ci.lb - computedMarginalMeans$pi.ub <- computedMarginalMeans$ci.ub - } - computedMarginalMeans <- data.frame(computedMarginalMeans) - colnames(computedMarginalMeans) <- c("y", "se", "lCi", "uCi", "lPi", "uPi") + computedMarginalMeans <- .maExtractAndFormatPrediction(computedMarginalMeans) ### merge and add attributes dfPlot <- cbind.data.frame(selectedGrid, computedMarginalMeans) @@ -2366,7 +2349,7 @@ } # misc -.maVariableNames <- function(varNames, variables) { +.maVariableNames <- function(varNames, variables) { return(sapply(varNames, function(varName){ @@ -2396,11 +2379,11 @@ })) } -.maPrintQTest <- function(fit) { +.maPrintQTest <- function(fit) { return(sprintf("Heterogeneity: Q(%1$i) = %2$.2f, %3$s", fit[["k"]] - fit[["p"]], fit[["QE"]], .maPrintPValue(fit[["QEp"]]))) } -.maPrintModerationTest <- function(fit, options, parameter) { +.maPrintModerationTest <- function(fit, options, parameter) { out <- .maOmnibusTest(fit, options, parameter) outPrint <- .maPrintTermTest(out, testStatistic = TRUE) @@ -2410,7 +2393,7 @@ else if (parameter == "effectSize") return(gettextf("Moderation (Heterogeneity): %1$s", outPrint)) } -.maPrintHeterogeneityEstimate <- function(fit, options, digits, keepText) { +.maPrintHeterogeneityEstimate <- function(fit, options, digits, keepText) { out <- .maComputePooledHeterogeneityPlot(fit, options) @@ -2429,7 +2412,7 @@ "]" ), prefix, out$est, out$lCi, out$uCi)) } -.maPrintTermTest <- function(out, testStatistic = TRUE) { +.maPrintTermTest <- function(out, testStatistic = TRUE) { if (testStatistic) { if (!is.null(out[["df2"]])) { @@ -2441,7 +2424,7 @@ return(.maPrintPValue(out[["pval"]])) } } -.maPrintCoefficientTest <- function(out, testStatistic = TRUE) { +.maPrintCoefficientTest <- function(out, testStatistic = TRUE) { if (testStatistic) { if (!is.null(out[["df"]])) { @@ -2453,14 +2436,14 @@ return(.maPrintPValue(out[["pval"]])) } } -.maPrintPValue <- function(pValue) { +.maPrintPValue <- function(pValue) { if (pValue < 0.001) { return("p < 0.001") } else { return(sprintf("p = %.3f", pValue)) } } -.maPrintEstimateAndInterval <- function(est, lCi, uCi, digits) { +.maPrintEstimateAndInterval <- function(est, lCi, uCi, digits) { return(sprintf(paste0( .maAddSpaceForPositiveValue(est), "%1$.", digits, "f", " [", @@ -2469,7 +2452,7 @@ .maAddSpaceForPositiveValue(uCi), "%3$.", digits, "f", "]"), est, lCi, uCi)) } -.maPrintPredictionInterval <- function(est, lCi, uCi, digits) { +.maPrintPredictionInterval <- function(est, lCi, uCi, digits) { return(sprintf(paste0( " ", "%1$.", digits, "f", " [", @@ -2478,13 +2461,13 @@ .maAddSpaceForPositiveValue(uCi), "%3$.", digits, "f", "]"), est, lCi, uCi)) } -.maAddSpaceForPositiveValue <- function(value) { +.maAddSpaceForPositiveValue <- function(value) { if (value >= 0) return(" ") else return("") } -.maMakeDiamondDataFrame <- function(est, lCi, uCi, row, id, adj = 1/3) { +.maMakeDiamondDataFrame <- function(est, lCi, uCi, row, id, adj = 1/3) { return(data.frame( id = id, x = c(lCi, est, uCi, est), @@ -2493,7 +2476,7 @@ mapColor = NA )) } -.maMakeRectangleDataFrame <- function(lCi, uCi, row, id, adj = 1/5) { +.maMakeRectangleDataFrame <- function(lCi, uCi, row, id, adj = 1/5) { return(data.frame( id = id, x = c(lCi, uCi, uCi, lCi), @@ -2502,7 +2485,7 @@ mapColor = NA )) } -.maGetDigitsBeforeDecimal <- function(x) { +.maGetDigitsBeforeDecimal <- function(x) { dNAs <- is.na(x) dPos <- floor(log10(x[!dNAs & x >= 0])) + 1 @@ -2518,7 +2501,7 @@ return(nDigits) } -.maFormatDigits <- function(x, digits) { +.maFormatDigits <- function(x, digits) { xOut <- rep("", length(x)) xNa <- is.na(x) @@ -2534,7 +2517,7 @@ return(xOut) } -.maBubblePlotMakeConfidenceBands <- function(dfPlot, lCi = "lCi", uCi = "uCi") { +.maBubblePlotMakeConfidenceBands <- function(dfPlot, lCi = "lCi", uCi = "uCi") { if (!is.null(dfPlot[["separateLines"]])) { dfBands <- do.call(rbind, lapply(unique(dfPlot[["separateLines"]]), function(lvl) { @@ -2555,7 +2538,7 @@ return(dfBands) } -.maMergeVariablesLevels <- function(df, variables, mergedName) { +.maMergeVariablesLevels <- function(df, variables, mergedName) { if (length(variables) == 1) { df[[mergedName]] <- df[,variables] } else if (length(variables) > 1) { @@ -2563,7 +2546,7 @@ } return(df) } -.maTransformToHtml <- function(rCode) { +.maTransformToHtml <- function(rCode) { # Replace special characters with HTML entities htmlCode <- gsub("&", "&", rCode) @@ -2577,7 +2560,7 @@ return(htmlCode) } -.maExtractVifResults <- function(vifResults, options, parameter) { +.maExtractVifResults <- function(vifResults, options, parameter) { if (.maIsMetaregressionHeterogeneity(options)) vifResults <- vifResults[[switch( @@ -2595,7 +2578,7 @@ return(vifResults) } -.maGetVariableColumnType <- function(variable, options) { +.maGetVariableColumnType <- function(variable, options) { if (variable %in% c(options[["effectSize"]], options[["effectSizeStandardError"]])) { return("number") @@ -2611,7 +2594,7 @@ return("string") } } -.maSuppressPlot <- function(plotExpression) { +.maSuppressPlot <- function(plotExpression) { temp <- tempfile() pdf(file = temp) dfOut <- plotExpression @@ -2619,6 +2602,24 @@ unlink(temp) return(dfOut) } +.maExtractAndFormatPrediction <- function(out) { + + # save as a data.frame + out <- data.frame(out) + + # TODO: decide whether those should be added as NAs or CIs + # - if NAs, need to be adjusted for in the rest of the code / GUI + if (!"pi.lb" %in% colnames(out)) { + out$pi.lb <- out$ci.lb + out$pi.ub <- out$ci.ub + } + + # rename into a consistent format + out <- out[,c("pred", "se", "ci.lb", "ci.ub", "pi.lb", "pi.ub")] + colnames(out) <- c("est", "se", "lCi", "uCi", "lPi", "uPi") + + return(out) +} # messages .maFixedEffectTextMessage <- function(options) { diff --git a/R/forestplot.R b/R/forestplot.R index caf5f8d4..db388991 100644 --- a/R/forestplot.R +++ b/R/forestplot.R @@ -20,14 +20,26 @@ ) # add CI using normal approximation - dfForrest$lCi <- dfForrest$effectSize - 1.96 * dfForrest$standardError - dfForrest$uCi <- dfForrest$effectSize + 1.96 * dfForrest$standardError + dfForrest$lCi <- dfForrest$effectSize - qnorm((1 - options[["confidenceIntervalsLevel"]]) / 2, lower.tail = F) * dfForrest$standardError + dfForrest$uCi <- dfForrest$effectSize + qnorm((1 - options[["confidenceIntervalsLevel"]]) / 2, lower.tail = F) * dfForrest$standardError + + if (options[["forestPlotStudyInformationSecondaryConfidenceInterval"]]) { + dfForrest$lCi2 <- dfForrest$effectSize - qnorm((1 - options[["forestPlotStudyInformationSecondaryConfidenceIntervalLevel"]]) / 2, lower.tail = F) * dfForrest$standardError + dfForrest$uCi2 <- dfForrest$effectSize + qnorm((1 - options[["forestPlotStudyInformationSecondaryConfidenceIntervalLevel"]]) / 2, lower.tail = F) * dfForrest$standardError + } + # transform effect size when requested - if (options[["transformEffectSize"]] != "none") - dfForrest[,c("effectSize", "lCi", "uCi")] <- do.call( - .maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), - list(dfForrest[,c("effectSize", "lCi", "uCi")])) + if (options[["transformEffectSize"]] != "none") { + + dfForrest[,c( + "effectSize", "lCi", "uCi", + if (options[["forestPlotStudyInformationSecondaryConfidenceInterval"]]) c("lCi2", "uCi2"))] <- do.call( + .maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), + list(dfForrest[,c( + "effectSize", "lCi", "uCi", + if (options[["forestPlotStudyInformationSecondaryConfidenceInterval"]]) c("lCi2", "uCi2"))])) + } xRangeStudyInformationPanel <- range(c(dfForrest$lCi, dfForrest$uCi)) @@ -67,7 +79,7 @@ # create prediction diamond coordinates for each estimate fitPrediction <- do.call(rbind, lapply(1:nrow(fitPrediction), function(i) { - with(fitPrediction[i,], .maMakeDiamondDataFrame(est = pred,lCi = pi.lb, uCi = pi.ub, row = row, id = id)) + with(fitPrediction[i,], .maMakeDiamondDataFrame(est = pred, lCi = pi.lb, uCi = pi.ub, row = row, id = id)) })) fitPrediction <- merge(fitPrediction, dfForrest[,!colnames(dfForrest) %in% c("effectSize", "standardError", "weights", "lCi", "uCi")], by = "id") @@ -414,16 +426,18 @@ x = as.name("effectSize"), y = as.name("y"), color = if (options[["forestPlotMappingColor"]] != "") as.name(options[["forestPlotMappingColor"]]), - shape = if (options[["forestPlotMappingShape"]] != "") as.name(options[["forestPlotMappingShape"]]) + shape = if (options[["forestPlotMappingShape"]] != "") as.name(options[["forestPlotMappingShape"]]), + size = as.name("weights") ) geomCall <- list( data = dfForrest, mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), color = if (options[["forestPlotMappingColor"]] == "") options[["forestPlotAuxiliaryPlotColor"]], - shape = if (options[["forestPlotMappingShape"]] == "") 15, - size = dfForrest[["weights"]] * options[["forestPlotRelativeSizeEstimates"]] + shape = if (options[["forestPlotMappingShape"]] == "") 15 ) - plotForest <- plotForest + do.call(ggplot2::geom_point, geomCall[!sapply(geomCall, is.null)]) + plotForest <- plotForest + do.call(ggplot2::geom_point, geomCall[!sapply(geomCall, is.null)]) + + ggplot2::scale_size(range = c(1, 6) * options[["forestPlotRelativeSizeEstimates"]]) + # change scale for shapes to full shapes if used if (options[["forestPlotMappingShape"]] != "") @@ -441,6 +455,19 @@ height = 0 ) + if (options[["forestPlotStudyInformationSecondaryConfidenceInterval"]]) { + plotForest <- plotForest + ggplot2::geom_errorbarh( + data = dfForrest, + mapping = ggplot2::aes( + xmin = lCi2, + xmax = uCi2, + y = y + ), + color = "darkblue", + height = 0.3 + ) + } + } # add additional information diff --git a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml index d226fcd4..e3669b7b 100644 --- a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml +++ b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml @@ -362,7 +362,10 @@ Form module: "metaAnalysisMultilevelMultivariate" } - MA.ClassicalMetaAnalysisForestPlot {} + MA.ClassicalMetaAnalysisForestPlot + { + module: "metaAnalysisMultilevelMultivariate" + } MA.ClassicalMetaAnalysisBubblePlot {} diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml b/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml index b44fddc2..552c5211 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml @@ -130,6 +130,21 @@ Section text: qsTr("Study weights") enabled: forestPlotStudyInformation.checked } + + CheckBox + { + name: "forestPlotStudyInformationSecondaryConfidenceInterval" + text: qsTr("Secondary confidence interval") + enabled: forestPlotStudyInformation.checked + childrenOnSameRow: true + + CIField + { + name: "forestPlotStudyInformationSecondaryConfidenceIntervalLevel" + text: "" + defaultValue: 89 + } + } } Group @@ -268,7 +283,8 @@ Section name: "forestPlotResidualHeterogeneityEstimate" text: qsTr("Residual heterogeneity estimate") enabled: (method.value != "fixedEffects" || method.value != "equalEffects") - checked: true + visible: module == "metaAnalysis" + checked: module == "metaAnalysis" } CheckBox @@ -284,7 +300,8 @@ Section name: "forestPlotHeterogeneityModerationTest" text: qsTr("Heterogeneity moderation test") enabled: sectionModel.heterogeneityModelTermsCount > 0 - checked: true + visible: module == "metaAnalysis" + checked: module == "metaAnalysis" } } From 378cbde22726b059d6a671cb9178a9cf826ac3f4 Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 26 Jun 2024 22:42:16 +0200 Subject: [PATCH 052/127] fix NAs --- R/classicalmetaanalysiscommon.R | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 3ee769c0..a17bb414 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -53,6 +53,8 @@ .maResidualHeterogeneityTable(jaspResults, dataset, options) .maModeratorsTable(jaspResults, dataset, options) .maPooledEstimatesTable(jaspResults, dataset, options) + + # random effects if (.maIsMultilevelMultivariate(options)) .mammRandomEstimatesTable(jaspResults, dataset, options) @@ -1936,7 +1938,10 @@ mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), alpha = options[["bubblePlotPredictionIntervalsTransparency"]] ) - bubblePlot <- bubblePlot + do.call(ggplot2::geom_polygon, geomCall) + + if (any(!is.na(dfPiBands[["y"]]))) + bubblePlot <- bubblePlot + do.call(ggplot2::geom_polygon, geomCall) + yRange <- range(c(yRange, dfPiBands$y)) } @@ -1955,14 +1960,17 @@ mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), alpha = options[["bubblePlotCondifenceIntervalsTransparency"]] ) - bubblePlot <- bubblePlot + do.call(ggplot2::geom_polygon, geomCall) - yRange <- range(c(yRange, dfCiBands$y)) + + if (any(!is.na(dfCiBands[["y"]]))) + bubblePlot <- bubblePlot + do.call(ggplot2::geom_polygon, geomCall) + + yRange <- range(c(yRange, dfCiBands$y), na.rm = TRUE) } ### add predictiction line aesCall <- list( x = as.name("selectedVariable"), - y = as.name("y"), + y = as.name("est"), color = if (hasSeparateLines) as.name("separateLines") ) dfPlot[["y"]] <- do.call(.maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), list(dfPlot[["y"]])) @@ -1971,7 +1979,7 @@ mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]) ) bubblePlot <- bubblePlot + do.call(jaspGraphs::geom_line, geomCall) - yRange <- range(c(yRange, dfPlot$pred)) + yRange <- range(c(yRange, dfPlot$pred), na.rm = TRUE) ### add studies as bubbles dfStudies <- data.frame( @@ -2039,8 +2047,10 @@ name = if (options[["transformEffectSize"]] == "none") gettext("Effect Size") else .maGetOptionsNameEffectSizeTransformation(options[["transformEffectSize"]]), breaks = jaspGraphs::getPrettyAxisBreaks(yRange), limits = yRange - ) + - ggplot2::labs(fill = attr(dfPlot, "separateLines"), color = attr(dfPlot, "separateLines")) + ) + + if (attr(dfPlot, "separateLines") != "") + plot <- plot + ggplot2::labs(fill = attr(dfPlot, "separateLines"), color = attr(dfPlot, "separateLines")) if (options[["bubblePlotTheme"]] == "jasp") { @@ -2610,8 +2620,10 @@ # TODO: decide whether those should be added as NAs or CIs # - if NAs, need to be adjusted for in the rest of the code / GUI if (!"pi.lb" %in% colnames(out)) { - out$pi.lb <- out$ci.lb - out$pi.ub <- out$ci.ub + out$pi.lb <- NA + out$pi.ub <- NA + #out$pi.lb <- out$ci.lb + #out$pi.ub <- out$ci.ub } # rename into a consistent format From 03ebb57298a2cb26dd385cc7f097d68ea4ff90cf Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 26 Jun 2024 23:07:35 +0200 Subject: [PATCH 053/127] Update classicalmetaanalysiscommon.R --- R/classicalmetaanalysiscommon.R | 121 +++++++++++++++++++++++--------- 1 file changed, 88 insertions(+), 33 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index a17bb414..59f887e0 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -1844,24 +1844,41 @@ .maMakeBubblePlotDataset <- function(fit, options, dataset) { # extract options - separateLines <- unlist(options[["bubblePlotSeparateLines"]]) - separatePlots <- unlist(options[["bubblePlotSeparatePlots"]]) - selectedVariable <- options[["bubblePlotSelectedVariable"]][[1]][["variable"]] - - # create nice plotting range - xRange <- range(jaspGraphs::getPrettyAxisBreaks(range(dataset[[selectedVariable]]))) - trendSequence <- seq(xRange[1], xRange[2], length.out = 101) - - predictorMatrixEffectSize <- .maGetMarginalMeansPredictorMatrix( - fit = fit, - options = options, - dataset = dataset, - selectedVariables = c(separateLines, separatePlots), - sdFactor = options[["bubblePlotSdFactorCovariates"]], - trendVarible = selectedVariable, - trendSequence = trendSequence, - parameter = "effectSize" - ) + separateLines <- unlist(options[["bubblePlotSeparateLines"]]) + separatePlots <- unlist(options[["bubblePlotSeparatePlots"]]) + selectedVariable <- options[["bubblePlotSelectedVariable"]][[1]][["variable"]] + selectedVariableType <- options[["predictors.types"]][options[["predictors"]] == selectedVariable] + + # create a range of values for continuous predictors to plot the trend but use lvls for factors + if (selectedVariableType == "scale") { + + xRange <- range(jaspGraphs::getPrettyAxisBreaks(range(dataset[[selectedVariable]]))) + trendSequence <- seq(xRange[1], xRange[2], length.out = 101) + + predictorMatrixEffectSize <- .maGetMarginalMeansPredictorMatrix( + fit = fit, + options = options, + dataset = dataset, + selectedVariables = c(separateLines, separatePlots), + sdFactor = options[["bubblePlotSdFactorCovariates"]], + trendVarible = selectedVariable, + trendSequence = trendSequence, + parameter = "effectSize" + ) + + } else if (selectedVariableType == "nominal") { + + predictorMatrixEffectSize <- .maGetMarginalMeansPredictorMatrix( + fit = fit, + options = options, + dataset = dataset, + selectedVariables = c(selectedVariable, separateLines, separatePlots), + sdFactor = options[["bubblePlotSdFactorCovariates"]], + parameter = "effectSize" + ) + + } + if (.maIsMetaregressionHeterogeneity(options)) { @@ -1906,12 +1923,13 @@ ### merge and add attributes dfPlot <- cbind.data.frame(selectedGrid, computedMarginalMeans) - attr(dfPlot, "selectedVariable") <- selectedVariable + attr(dfPlot, "selectedVariable") <- selectedVariable + attr(dfPlot, "selectedVariableType") <- selectedVariableType attr(dfPlot, "separateLines") <- paste(separateLines, collapse = " | ") attr(dfPlot, "separatePlots") <- paste(separatePlots, collapse = " | ") attr(dfPlot, "variablesLines") <- separateLines attr(dfPlot, "variablesPlots") <- separatePlots - attr(dfPlot, "xRange") <- xRange + attr(dfPlot, "xRange") <- if (selectedVariableType == "scale") xRange return(dfPlot) } @@ -2529,21 +2547,58 @@ } .maBubblePlotMakeConfidenceBands <- function(dfPlot, lCi = "lCi", uCi = "uCi") { - if (!is.null(dfPlot[["separateLines"]])) { - dfBands <- do.call(rbind, lapply(unique(dfPlot[["separateLines"]]), function(lvl) { - dfSubset <- dfPlot[dfPlot[["separateLines"]] == lvl,] - dfPolygon <- data.frame( - selectedVariable = c(dfSubset$selectedVariable, rev(dfSubset$selectedVariable)), - y = c(dfSubset[[lCi]], rev(dfSubset[[uCi]])) + if (attr(dfPlot, "selectedVariableType") == "scale") { + + if (!is.null(dfPlot[["separateLines"]])) { + dfBands <- do.call(rbind, lapply(unique(dfPlot[["separateLines"]]), function(lvl) { + dfSubset <- dfPlot[dfPlot[["separateLines"]] == lvl,] + dfPolygon <- data.frame( + selectedVariable = c(dfSubset$selectedVariable, rev(dfSubset$selectedVariable)), + y = c(dfSubset[[lCi]], rev(dfSubset[[uCi]])) + ) + dfPolygon$separateLines <- lvl + return(dfPolygon) + })) + } else { + dfBands <- data.frame( + selectedVariable = c(dfPlot$selectedVariable, rev(dfPlot$selectedVariable)), + y = c(dfPlot[[lCi]], rev(dfPlot[[uCi]])) ) - dfPolygon$separateLines <- lvl - return(dfPolygon) - })) + } + } else { - dfBands <- data.frame( - selectedVariable = c(dfPlot$selectedVariable, rev(dfPlot$selectedVariable)), - y = c(dfPlot[[lCi]], rev(dfPlot[[uCi]])) - ) + + selectedLevels <- levels(dfPlot[["selectedVariable"]]) + nLevels <- length(selectedLevels) + xWidth <- 0.20 + + if (!is.null(dfPlot[["separateLines"]])) { + dfBands <- do.call(rbind, lapply(unique(dfPlot[["separateLines"]]), function(lvl) { + dfSubset <- dfPlot[dfPlot[["separateLines"]] == lvl,] + dfPolygon <- do.call(rbind, lapply(seq_along(selectedLevels), function(i) { + dfSubset <- dfPlot[dfPlot[["selectedVariable"]] == selectedLevels[i],] + dfPolygon <- data.frame( + selectedVariable = c(i - xWidth, i + xWidth, i + xWidth, i - xWidth), + y = c(rep(dfSubset[[lCi]], 2), rep(dfSubset[[uCi]], 2)) + ) + dfPolygon$selectedLevel <- selectedLevels[i] + return(dfPolygon) + })) + dfPolygon$separateLines <- lvl + return(dfPolygon) + })) + } else { + dfBands <- do.call(rbind, lapply(seq_along(selectedLevels), function(i) { + dfSubset <- dfPlot[dfPlot[["selectedVariable"]] == selectedLevels[i],] + dfPolygon <- data.frame( + selectedVariable = c(i - xWidth, i + xWidth, i + xWidth, i - xWidth), + y = c(rep(dfSubset[[lCi]], 2), rep(dfSubset[[uCi]], 2)) + ) + dfPolygon$selectedLevel <- selectedLevels[i] + return(dfPolygon) + })) + } + } return(dfBands) From 4f6e917e54d81194f8f6f756bfe1d68e0529a83a Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 27 Jun 2024 18:52:49 +0200 Subject: [PATCH 054/127] update --- R/classicalmetaanalysiscommon.R | 196 ++++++++++++------ .../ClassicalMetaAnalysisBubblePlot.qml | 2 +- 2 files changed, 130 insertions(+), 68 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 59f887e0..026a836c 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -22,15 +22,25 @@ # TODO: +# Coefficient tests +# - parwise() from new metafor version +# - add permutaion test # Estimated Marginal Means # - add variable interactions # - specify and test contrasts +# Forest plot +# - allow aggregation of studies by a factor (then show simple REML aggregation within and overlaying shaded estimates) # Bubble plot # - binning of continuous covariates (requires returning continous levels returned in gridMatrix) # - allow factors as dependent variables # AIC/BIC Model-averaging # Diagnostics # - model re-run on presence of influential cases +# - residual +# - forest plot +# - vs predicted +# - vs outcome +# - vs covariates # Generic # - allow different covariates factoring across all settings @@ -1943,46 +1953,28 @@ ### add prediction bads if (options[["bubblePlotPredictionIntervals"]]) { - aesCall <- list( - x = as.name("selectedVariable"), - y = as.name("y"), - fill = if (hasSeparateLines) as.name("separateLines"), - group = if (hasSeparateLines) as.name("separateLines") - ) - dfPiBands <- .maBubblePlotMakeConfidenceBands(dfPlot, lCi = "lPi", uCi = "uPi") - dfPiBands[["y"]] <- do.call(.maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), list(dfPiBands[["y"]])) - geomCall <- list( - data = dfPiBands, - mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), - alpha = options[["bubblePlotPredictionIntervalsTransparency"]] - ) - if (any(!is.na(dfPiBands[["y"]]))) - bubblePlot <- bubblePlot + do.call(ggplot2::geom_polygon, geomCall) + geomPi <- .maBubblePlotMakeCiGeom(dfPlot, options, ci = FALSE) + + if (!is.null(geomPi)) { + bubblePlot <- bubblePlot + do.call(geomPi$what, geomPi$args) + yRange <- attr(geomPi, "yRange") + } else { + yRange <- NA + } - yRange <- range(c(yRange, dfPiBands$y)) } ### add confidence bands if (options[["bubblePlotCondifenceIntervals"]]) { - aesCall <- list( - x = as.name("selectedVariable"), - y = as.name("y"), - fill = if (hasSeparateLines) as.name("separateLines"), - group = if (hasSeparateLines) as.name("separateLines") - ) - dfCiBands <- .maBubblePlotMakeConfidenceBands(dfPlot) - dfCiBands[["y"]] <- do.call(.maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), list(dfCiBands[["y"]])) - geomCall <- list( - data = dfCiBands, - mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), - alpha = options[["bubblePlotCondifenceIntervalsTransparency"]] - ) - if (any(!is.na(dfCiBands[["y"]]))) - bubblePlot <- bubblePlot + do.call(ggplot2::geom_polygon, geomCall) + geomCi <- .maBubblePlotMakeCiGeom(dfPlot, options, ci = TRUE) + + if (!is.null(geomCi)) { + bubblePlot <- bubblePlot + do.call(geomCi$what, geomCi$args) + yRange <- range(c(yRange, attr(geomCi, "yRange")), na.rm = TRUE) + } - yRange <- range(c(yRange, dfCiBands$y), na.rm = TRUE) } ### add predictiction line @@ -2035,12 +2027,26 @@ fill = if (hasSeparateLines) as.name("separateLines"), alpha = options[["bubblePlotBubblesTransparency"]] ) + dfStudies[["effectSize"]] <- do.call(.maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), list(dfStudies[["effectSize"]])) + geomCall <- list( data = dfStudies, mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), show.legend = FALSE ) + if (attr(dfPlot, "selectedVariableType") == "nominal" && hasSeparateLines) { + geomCall$position <- ggplot2::position_jitterdodge( + jitter.width = 0.2 * options[["bubblePlotBubblesJitter"]], + jitter.height = 0 + ) + }else if (attr(dfPlot, "selectedVariableType") == "nominal") { + geomCall$position <- ggplot2::position_jitter( + width = 0.2 * options[["bubblePlotBubblesJitter"]], + height = 0 + ) + } + bubblePlot <- bubblePlot + do.call(jaspGraphs::geom_point, geomCall) + ggplot2::scale_size(range = c(1.5, 10) * options[["bubblePlotBubblesRelativeSize"]]) yRange <- range(c(yRange, dfStudies[["effectSize"]])) @@ -2055,12 +2061,24 @@ } .maAddBubblePlotTheme <- function(plot, options, dfPlot, yRange) { + + selectedVariableType <- attr(dfPlot, "selectedVariableType") + + if (selectedVariableType == "scale") { + plot <- plot + + jaspGraphs::scale_x_continuous( + name = attr(dfPlot, "selectedVariable"), + breaks = jaspGraphs::getPrettyAxisBreaks(attr(dfPlot, "xRange")), + limits = attr(dfPlot, "xRange") + ) + } else if (selectedVariableType == "nominal") { + plot <- plot + + ggplot2::scale_x_discrete( + name = attr(dfPlot, "selectedVariable") + ) + } + plot <- plot + - jaspGraphs::scale_x_continuous( - name = attr(dfPlot, "selectedVariable"), - breaks = jaspGraphs::getPrettyAxisBreaks(attr(dfPlot, "xRange")), - limits = attr(dfPlot, "xRange") - ) + jaspGraphs::scale_y_continuous( name = if (options[["transformEffectSize"]] == "none") gettext("Effect Size") else .maGetOptionsNameEffectSizeTransformation(options[["transformEffectSize"]]), breaks = jaspGraphs::getPrettyAxisBreaks(yRange), @@ -2225,6 +2243,73 @@ return(tableVif) } +.maBubblePlotMakeCiGeom <- function(dfPlot, options, ci = TRUE) { + + hasSeparateLines <- attr(dfPlot, "separateLines") != "" + hasSeparatePlots <- attr(dfPlot, "separatePlots") != "" + selectedVariableType <- attr(dfPlot, "selectedVariableType") + + aesCall <- list( + x = as.name("selectedVariable"), + fill = if (hasSeparateLines) as.name("separateLines"), + group = if (hasSeparateLines && selectedVariableType == "scale") as.name("separateLines") + ) + + if (selectedVariableType == "scale") { + aesCall$y <- as.name("y") + } else if (selectedVariableType == "nominal") { + aesCall$lower <- as.name("lower") + aesCall$upper <- as.name("upper") + aesCall$ymin <- as.name("lower") + aesCall$ymax <- as.name("upper") + aesCall$middle <- as.name("middle") + } + + dfBands <- .maBubblePlotMakeConfidenceBands( + dfPlot, + lCi = if (ci) "lCi" else "lPi", + uCi = if (ci) "uCi" else "uPi" + ) + + if (selectedVariableType == "scale") { + dfBands[["y"]] <- do.call(.maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), list(dfBands[["y"]])) + } else if (selectedVariableType == "nominal") { + dfBands[,c("lower","middle","upper")] <- do.call( + .maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), + list(dfBands[,c("lower","middle","upper")])) + } + + geomCall <- list( + data = dfBands, + mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]), + alpha = options[["bubblePlotPredictionIntervalsTransparency"]] + ) + + if (selectedVariableType == "nominal") { + geomCall$stat = "identity" + if (!hasSeparateLines) + geomCall$fill = "grey" + } + + + if (selectedVariableType == "scale" && any(!is.na(dfBands[["y"]]))) { + geom <- list( + what = ggplot2::geom_polygon, + args = geomCall + ) + attr(geom, "yRange") <- range(c(dfBands$y)) + } else if (selectedVariableType == "nominal" && any(!is.na(dfBands[["lower"]]))) { + geom <- list( + what = ggplot2::geom_boxplot, + args = geomCall + ) + attr(geom, "yRange") <- range(c(dfBands$lower, dfBands$upper)) + } else { + geom <- NULL + } + + return(geom) +} # check functions .maIsMetaregression <- function(options) { @@ -2568,36 +2653,13 @@ } else { - selectedLevels <- levels(dfPlot[["selectedVariable"]]) - nLevels <- length(selectedLevels) - xWidth <- 0.20 - - if (!is.null(dfPlot[["separateLines"]])) { - dfBands <- do.call(rbind, lapply(unique(dfPlot[["separateLines"]]), function(lvl) { - dfSubset <- dfPlot[dfPlot[["separateLines"]] == lvl,] - dfPolygon <- do.call(rbind, lapply(seq_along(selectedLevels), function(i) { - dfSubset <- dfPlot[dfPlot[["selectedVariable"]] == selectedLevels[i],] - dfPolygon <- data.frame( - selectedVariable = c(i - xWidth, i + xWidth, i + xWidth, i - xWidth), - y = c(rep(dfSubset[[lCi]], 2), rep(dfSubset[[uCi]], 2)) - ) - dfPolygon$selectedLevel <- selectedLevels[i] - return(dfPolygon) - })) - dfPolygon$separateLines <- lvl - return(dfPolygon) - })) - } else { - dfBands <- do.call(rbind, lapply(seq_along(selectedLevels), function(i) { - dfSubset <- dfPlot[dfPlot[["selectedVariable"]] == selectedLevels[i],] - dfPolygon <- data.frame( - selectedVariable = c(i - xWidth, i + xWidth, i + xWidth, i - xWidth), - y = c(rep(dfSubset[[lCi]], 2), rep(dfSubset[[uCi]], 2)) - ) - dfPolygon$selectedLevel <- selectedLevels[i] - return(dfPolygon) - })) - } + dfBands <- data.frame( + lower = dfPlot[[lCi]], + upper = dfPlot[[uCi]], + middle = dfPlot[["est"]], + selectedVariable = dfPlot[["selectedVariable"]], + separateLines = if (!is.null(dfPlot[["separateLines"]])) dfPlot[["separateLines"]] + ) } diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml b/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml index deaf893a..1fd8a3c1 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml @@ -118,7 +118,7 @@ Section enabled: bubblePlotSelectedVariable.columnsTypes.includes("nominal") name: "bubblePlotBubblesJitter" label: qsTr("Jitter") - defaultValue: 0.1 + defaultValue: 1 min: 0 } } From 7d0a7b4588c9754b8e1a043a6e2eb15b03613bc8 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 1 Jul 2024 19:56:02 +0200 Subject: [PATCH 055/127] Update classicalmetaanalysiscommon.R --- R/classicalmetaanalysiscommon.R | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 026a836c..9bbd5ed8 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -2037,13 +2037,14 @@ ) if (attr(dfPlot, "selectedVariableType") == "nominal" && hasSeparateLines) { geomCall$position <- ggplot2::position_jitterdodge( - jitter.width = 0.2 * options[["bubblePlotBubblesJitter"]], - jitter.height = 0 + jitter.width = 0.35 * options[["bubblePlotBubblesJitter"]], + jitter.height = 0, + dodge.width = 0.9 ) }else if (attr(dfPlot, "selectedVariableType") == "nominal") { geomCall$position <- ggplot2::position_jitter( - width = 0.2 * options[["bubblePlotBubblesJitter"]], - height = 0 + width = 0.35 * options[["bubblePlotBubblesJitter"]], + height = 0 ) } @@ -2286,9 +2287,10 @@ ) if (selectedVariableType == "nominal") { - geomCall$stat = "identity" + geomCall$stat <- "identity" + geomCall$position <- ggplot2::position_dodge2(width = 0.9) if (!hasSeparateLines) - geomCall$fill = "grey" + geomCall$fill <- "grey" } @@ -2635,6 +2637,7 @@ if (attr(dfPlot, "selectedVariableType") == "scale") { if (!is.null(dfPlot[["separateLines"]])) { + dfBands <- do.call(rbind, lapply(unique(dfPlot[["separateLines"]]), function(lvl) { dfSubset <- dfPlot[dfPlot[["separateLines"]] == lvl,] dfPolygon <- data.frame( @@ -2644,11 +2647,14 @@ dfPolygon$separateLines <- lvl return(dfPolygon) })) + } else { + dfBands <- data.frame( selectedVariable = c(dfPlot$selectedVariable, rev(dfPlot$selectedVariable)), y = c(dfPlot[[lCi]], rev(dfPlot[[uCi]])) ) + } } else { @@ -2657,10 +2663,12 @@ lower = dfPlot[[lCi]], upper = dfPlot[[uCi]], middle = dfPlot[["est"]], - selectedVariable = dfPlot[["selectedVariable"]], - separateLines = if (!is.null(dfPlot[["separateLines"]])) dfPlot[["separateLines"]] + selectedVariable = dfPlot[["selectedVariable"]] ) + if (!is.null(dfPlot[["separateLines"]])) + dfBands$separateLines <- dfPlot[["separateLines"]] + } return(dfBands) From 363779c76e1b233e8200ff10b1f2de6c888e5280 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 1 Jul 2024 22:17:11 +0200 Subject: [PATCH 056/127] finish bubble plot --- R/classicalmetaanalysiscommon.R | 96 +++++++++++++++++++++++++-------- 1 file changed, 73 insertions(+), 23 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 9bbd5ed8..aab14cfc 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -30,9 +30,6 @@ # - specify and test contrasts # Forest plot # - allow aggregation of studies by a factor (then show simple REML aggregation within and overlaying shaded estimates) -# Bubble plot -# - binning of continuous covariates (requires returning continous levels returned in gridMatrix) -# - allow factors as dependent variables # AIC/BIC Model-averaging # Diagnostics # - model re-run on presence of influential cases @@ -1921,6 +1918,9 @@ ### modify and rename selectedGrid selectedGrid <- attr(predictorMatrixEffectSize, "selectedGrid") selectedGrid$selectedVariable <- selectedGrid[,selectedVariable] + # deal with continuous variables dichotomization + selectedGrid <- .maDichotomizeVariablesLevels(selectedGrid, c(separateLines, separatePlots), options) + continuousLevels <- attr(selectedGrid, "continuousLevels") # collapse factor levels if multiple selected selectedGrid <- .maMergeVariablesLevels(selectedGrid, separateLines, "separateLines") selectedGrid <- .maMergeVariablesLevels(selectedGrid, separatePlots, "separatePlots") @@ -1935,11 +1935,12 @@ attr(dfPlot, "selectedVariable") <- selectedVariable attr(dfPlot, "selectedVariableType") <- selectedVariableType - attr(dfPlot, "separateLines") <- paste(separateLines, collapse = " | ") - attr(dfPlot, "separatePlots") <- paste(separatePlots, collapse = " | ") - attr(dfPlot, "variablesLines") <- separateLines - attr(dfPlot, "variablesPlots") <- separatePlots - attr(dfPlot, "xRange") <- if (selectedVariableType == "scale") xRange + attr(dfPlot, "separateLines") <- paste(separateLines, collapse = " | ") + attr(dfPlot, "separatePlots") <- paste(separatePlots, collapse = " | ") + attr(dfPlot, "variablesLines") <- separateLines + attr(dfPlot, "variablesPlots") <- separatePlots + attr(dfPlot, "continuousLevels") <- continuousLevels[!sapply(continuousLevels, is.null)] + attr(dfPlot, "xRange") <- if (selectedVariableType == "scale") xRange return(dfPlot) } @@ -1977,19 +1978,21 @@ } - ### add predictiction line - aesCall <- list( - x = as.name("selectedVariable"), - y = as.name("est"), - color = if (hasSeparateLines) as.name("separateLines") - ) - dfPlot[["y"]] <- do.call(.maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), list(dfPlot[["y"]])) - geomCall <- list( - data = dfPlot, - mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]) - ) - bubblePlot <- bubblePlot + do.call(jaspGraphs::geom_line, geomCall) - yRange <- range(c(yRange, dfPlot$pred), na.rm = TRUE) + ### add prediction line + if (attr(dfPlot, "selectedVariableType") == "scale") { + aesCall <- list( + x = as.name("selectedVariable"), + y = as.name("est"), + color = if (hasSeparateLines) as.name("separateLines") + ) + dfPlot[["y"]] <- do.call(.maGetEffectSizeTransformationOptions(options[["transformEffectSize"]]), list(dfPlot[["y"]])) + geomCall <- list( + data = dfPlot, + mapping = do.call(ggplot2::aes, aesCall[!sapply(aesCall, is.null)]) + ) + bubblePlot <- bubblePlot + do.call(jaspGraphs::geom_line, geomCall) + yRange <- range(c(yRange, dfPlot$pred), na.rm = TRUE) + } ### add studies as bubbles dfStudies <- data.frame( @@ -2007,8 +2010,11 @@ dfStudies[attr(dfPlot, "variablesPlots")] <- fit[["data"]][attr(dfPlot, "variablesPlots")] # make same encoding + dfStudies <- .maDichotomizeVariablesDataset(dfStudies, c(attr(dfPlot, "variablesLines"), attr(dfPlot, "variablesPlots")), attr(dfPlot, "continuousLevels"), options) dfStudies <- .maMergeVariablesLevels(dfStudies, variablesLines <- attr(dfPlot, "variablesLines"), "separateLines") dfStudies <- .maMergeVariablesLevels(dfStudies, variablesLines <- attr(dfPlot, "variablesPlots"), "separatePlots") + if (hasSeparateLines) + levels(dfStudies[,"separateLines"]) <- levels(dfPlot[,"separateLines"]) # subset original data across plots if (!is.null(separatePlotsLvl)) @@ -2675,9 +2681,15 @@ } .maMergeVariablesLevels <- function(df, variables, mergedName) { if (length(variables) == 1) { - df[[mergedName]] <- df[,variables] + df[[mergedName]] <- factor( + df[,variables], + levels = unique(df[,variables]) + ) } else if (length(variables) > 1) { - df[[mergedName]] <- apply(df[,variables], 1, function(x) paste(x, collapse = " | ")) + df[[mergedName]] <- factor( + apply(df[,variables], 1, function(x) paste(x, collapse = " | ")), + levels = unique(apply(df[,variables], 1, function(x) paste(x, collapse = " | "))) + ) } return(df) } @@ -2757,6 +2769,44 @@ return(out) } +.maDichotomizeVariablesLevels <- function(df, variables, options) { + + variablesContinuous <- variables[variables %in% options[["predictors"]][options[["predictors.types"]] == "scale"]] + for (i in seq_along(variablesContinuous)){ + tempUnique <- sort(unique(df[[variablesContinuous[i]]])) + df[[variablesContinuous[i]]] <- as.character(factor( + df[[variablesContinuous[i]]], + levels = tempUnique, + labels = c(paste0("Mean - ", options[["bubblePlotSdFactorCovariates"]], "SD"), "Mean", paste0("Mean + ", options[["bubblePlotSdFactorCovariates"]], "SD")) + )) + attr(df, "continuousLevels") <- list( + attr(df, "continuousLevels"), + list( + variable = variablesContinuous[i], + levels = tempUnique + ) + ) + } + return(df) +} +.maDichotomizeVariablesDataset <- function(df, variables, variablesInformation, options) { + + variablesContinuous <- variables[variables %in% options[["predictors"]][options[["predictors.types"]] == "scale"]] + + for (i in seq_along(variablesContinuous)){ + + tempUnique <- variablesInformation[[sapply(variablesInformation, function(x) x[["variable"]]) == variablesContinuous[i]]] + + df[[variablesContinuous[i]]] <- cut( + df[[variablesContinuous[i]]], + breaks = c(-Inf, mean(tempUnique[["levels"]][1:2]), mean(tempUnique[["levels"]][2:3]), Inf), + labels = c(paste0("Mean - ", options[["bubblePlotSdFactorCovariates"]], "SD"), "Mean", paste0("Mean + ", options[["bubblePlotSdFactorCovariates"]], "SD")) + ) + + } + + return(df) +} # messages .maFixedEffectTextMessage <- function(options) { From 15e7205e8bb6829bfae85725e90dba4113794d71 Mon Sep 17 00:00:00 2001 From: FBartos Date: Tue, 2 Jul 2024 15:23:13 +0200 Subject: [PATCH 057/127] add residual funnel plot --- R/classicalmetaanalysiscommon.R | 113 +++++++++++++++++- .../ClassicalMetaAnalysisDiagnostics.qml | 6 + 2 files changed, 118 insertions(+), 1 deletion(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index aab14cfc..32bb43f3 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -34,7 +34,6 @@ # Diagnostics # - model re-run on presence of influential cases # - residual -# - forest plot # - vs predicted # - vs outcome # - vs covariates @@ -105,6 +104,8 @@ .maProfileLikelihoodPlot(jaspResults, dataset, options) if (options[["diagnosticsPlotsBaujat"]]) .maBaujatPlot(jaspResults, dataset, options) + if (options[["diagnosticsResidualFunnel"]]) + .maResidualFunnelPlot(jaspResults, dataset, options) # additional @@ -1246,6 +1247,30 @@ return() } +.maResidualFunnelPlot <- function(jaspResults, dataset, options) { + + if (!is.null(jaspResults[["residualFunnelPlot"]])) + return() + + fit <- .maExtractFit(jaspResults, options) + + # stop on error + if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) + return() + + # create plot + residualFunnelPlot <- createJaspPlot(title = gettext("Residual Funnel Plot"), width = 480, height = 480) + residualFunnelPlot$dependOn(c(.maDependencies, "diagnosticsResidualFunnel", "studyLabels")) + residualFunnelPlot$position <- 10 + jaspResults[["residualFunnelPlot"]] <- residualFunnelPlot + + # obtain residual funnel plot + plotOut <- .maMakeResidualFunnelPlot(fit, options, dataset) + + residualFunnelPlot$plotObject <- plotOut + + return() +} # containers/state functions .maExtractFit <- function(jaspResults, options, nonClustered = FALSE) { @@ -2318,6 +2343,92 @@ return(geom) } +.maMakeResidualFunnelPlot <- function(fit, options, dataset) { + + dfPlot <- data.frame( + x = resid(fit), + y = sqrt(fit[["vi"]]) + ) + + yTicks <- jaspGraphs::getPrettyAxisBreaks(range(dfPlot$y)) + + dfFunnel <- data.frame( + x = c(-max(yTicks), 0, max(yTicks)) / 1.96, + y = c(max(yTicks), 0, max(yTicks)) + ) + dfFunnelEdge1 <- dfFunnel[1:2,] + dfFunnelEdge2 <- dfFunnel[2:3,] + + xTicks <- jaspGraphs::getPrettyAxisBreaks(range(c(dfPlot$x, dfFunnel$x))) + + dfBackground <- data.frame( + x = c(min(xTicks), max(xTicks), max(xTicks), min(xTicks)), + y = c(min(yTicks), min(yTicks), max(yTicks), max(yTicks)) + ) + + out <- ggplot2::ggplot() + + ggplot2::geom_polygon( + data = dfBackground, + mapping = ggplot2::aes(x = x, y = y), + fill = "grey", + ) + + ggplot2::geom_polygon( + data = dfFunnel, + mapping = ggplot2::aes(x = x, y = y), + fill = "white", + ) + + ggplot2::geom_line( + mapping = ggplot2::aes( + x = c(0, 0), + y = range(yTicks) + ), linetype = "dotted" + ) + + ggplot2::geom_line( + data = dfFunnelEdge1, + mapping = ggplot2::aes(x = x, y = y), linetype = "dotted" + ) + + ggplot2::geom_line( + data = dfFunnelEdge2, + mapping = ggplot2::aes(x = x, y = y), linetype = "dotted" + ) + + ggplot2::geom_line( + mapping = ggplot2::aes( + x = c(0, 0), + y = range(yTicks) + ), linetype = "dotted" + ) + + jaspGraphs::geom_point( + data = dfPlot, + mapping = ggplot2::aes(x = x, y = y), + fill = "black" + ) + + # add labels if specified + if (options[["studyLabels"]] != "") { + + dfLabels <- cbind( + dfPlot, + label = dataset[[options[["studyLabels"]]]] + ) + dfLabels <- dfLabels[abs(dfLabels$y/1.96) < abs(dfLabels$x),] + dfLabels$position <- ifelse(dfLabels$x < 0, "right", "left") + dfLabels$nudge_x <- ifelse(dfLabels$x < 0, -0.1, 0.1) + + out <- out + + ggplot2::geom_text( + data = dfLabels, + mapping = ggplot2::aes(x = x, y = y, label = label, hjust = position), nudge_x = dfLabels$nudge_x + ) + } + + out <- out + + jaspGraphs::scale_x_continuous(breaks = xTicks, limits = range(xTicks), name = gettext("Residual Value")) + + ggplot2::scale_y_reverse(breaks = rev(yTicks), limits = rev(range(yTicks)), name = gettext("Standard Error")) + + jaspGraphs::geom_rangeframe() + + jaspGraphs::themeJaspRaw() + + return(out) +} # check functions .maIsMetaregression <- function(options) { diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml b/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml index 491a246a..e23b6021 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml @@ -108,6 +108,12 @@ Section name: "diagnosticsPlotsBaujat" text: qsTr("Baujat") } + + CheckBox + { + name: "diagnosticsResidualFunnel" + text: qsTr("Residual funnel") + } } } } \ No newline at end of file From 5d971c4f87ce939622f36bc4a580f86b37344b3e Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 3 Jul 2024 16:50:22 +0200 Subject: [PATCH 058/127] Update classicalmetaanalysiscommon.R --- R/classicalmetaanalysiscommon.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 32bb43f3..0ae672db 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -1259,7 +1259,7 @@ return() # create plot - residualFunnelPlot <- createJaspPlot(title = gettext("Residual Funnel Plot"), width = 480, height = 480) + residualFunnelPlot <- createJaspPlot(title = gettext("Residual Funnel Plot"), width = 550, height = 480) residualFunnelPlot$dependOn(c(.maDependencies, "diagnosticsResidualFunnel", "studyLabels")) residualFunnelPlot$position <- 10 jaspResults[["residualFunnelPlot"]] <- residualFunnelPlot From 7a067cf25371f41f3378084f4b42cd19b5ff1685 Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 22 Aug 2024 13:22:16 +0200 Subject: [PATCH 059/127] Update classicalmetaanalysiscommon.R --- R/classicalmetaanalysiscommon.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 0ae672db..4dbe9950 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -39,6 +39,7 @@ # - vs covariates # Generic # - allow different covariates factoring across all settings +# Power-enhanced funnel plot # TODO fix QML # - remove selected variables in estimated marginal means when removed from the model components From 1fbab34c92541722d11109e9c707e5de43aa32fd Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 10 Oct 2024 09:57:50 +0200 Subject: [PATCH 060/127] add randomization test --- .Rbuildignore | 2 + .gitignore | 2 + R/classicalmetaanalysis.R | 15 ++-- R/classicalmetaanalysiscommon.R | 76 +++++++++++++++++-- inst/Description.qml | 7 ++ .../ClassicalMetaAnalysisAdvanced.qml | 47 ++++++++++++ ...icalMetaAnalysisEstimatedMarginalMeans.qml | 2 +- renv/.gitignore | 7 ++ 8 files changed, 146 insertions(+), 12 deletions(-) create mode 100644 renv/.gitignore diff --git a/.Rbuildignore b/.Rbuildignore index 4f1ae1ab..e4e5d139 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,3 +1,5 @@ +^renv$ +^renv\.lock$ ^.*\.Rproj$ ^\.Rproj\.user$ ^tests/upgrades$ diff --git a/.gitignore b/.gitignore index 9df2ee70..977ab6a0 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,5 @@ Thumbs.db # RStudio files .Rproj.user _processedLockFile.lock +renv/activate.R +.Rprofile diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index d3d27df1..9e882c5d 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -37,19 +37,22 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { } .maDependencies <- c( - "effectSize", "effectSizeStandardError", "effectSizeModelTerms", "effectSizeModelIncludeIntercept", - "heterogeneityModelTerms", "heterogeneityModelIncludeIntercept", "predictors", "predictors.types", - "clustering", - "method", "fixedEffectTest", "confidenceIntervalsLevel", + "effectSize", "effectSizeStandardError", "predictors", "predictors.types", "clustering", "method", "fixedEffectTest", + "effectSizeModelTerms", "effectSizeModelIncludeIntercept", "clusteringUseClubSandwich", "clusteringSmallSampleCorrection", + "confidenceIntervalsLevel", "fixParametersTau2", "fixParametersTau2Value", "fixParametersWeights", "fixParametersWeightsVariable", - "heterogeneityModelLink", "weightedEstimation", + "weightedEstimation", + "diagnosticsCasewiseDiagnosticsRerunWithoutInfluentialCases", + # optimizer settings "optimizerMethod", "optimizerInitialTau2", "optimizerInitialTau2Value", "optimizerMinimumTau2", "optimizerMinimumTau2Value", "optimizerMaximumTau2", "optimizerMaximumTau2Value", "optimizerMaximumIterations", "optimizerMaximumIterationsValue", "optimizerConvergenceTolerance", "optimizerConvergenceToleranceValue", "optimizerConvergenceRelativeTolerance", "optimizerConvergenceRelativeToleranceValue", "optimizerStepAdjustment", "optimizerStepAdjustmentValue", - "diagnosticsCasewiseDiagnosticsRerunWithoutInfluentialCases", + # simple ma specific + "heterogeneityModelTerms", "heterogeneityModelIncludeIntercept", "heterogeneityModelLink", + "permutationTest", "permutationTestIteration", "permutationTestType", # multilevel/multivariate specific "randomEffects", "randomEffectsSpecification", "computeCovarianceMatrix", "computeCovarianceMatrix" diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 4dbe9950..7afd4799 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -24,7 +24,7 @@ # TODO: # Coefficient tests # - parwise() from new metafor version -# - add permutaion test +# - add permutation test for omnibus moderation tests if this is implemented: https://github.com/wviechtb/metafor/issues/88 # Estimated Marginal Means # - add variable interactions # - specify and test contrasts @@ -228,6 +228,20 @@ } + # add permutation test if requested (only available for non-clustered fits) + if (options[["permutationTest"]]) { + .setSeedJASP(options) + fitPermutation <- try(metafor::permutest( + fit, + exact = options[["permutationTestType"]] == "exact", + iter = options[["permutationTestIteration"]] + )) + fit <- .maFitAddPermutationPValues(fit, fitPermutation, options) + } else { + fitPermutation <- NULL + } + + # add information about dropped levels to the fit if (.maIsMultilevelMultivariate(options)) { attr(fit, "skipped") <- attr(randomFormulaList, "skipped") @@ -236,15 +250,33 @@ } } - # return the results jaspResults[[objectName]]$object <- list( - fit = fit, - fitClustered = fitClustered + fit = fit, + fitClustered = fitClustered, + fitPermutation = fitPermutation ) saveRDS(fit, file = "C:/JASP/fit.RDS") return() } +.maFitAddPermutationPValues <- function(fit, fitPerumation, options) { + + # stores the permutation p-values in the fit object + # this simplifies object dispatching later in the code + # the whole fitPermutation object can be essentially forgotten + + if (.maIsMetaregressionEffectSize(options)) { + attr(fit[["QMp"]], "permutation") <- fitPerumation[["QMp"]] + attr(fit[["pval"]], "permutation") <- fitPerumation[["pval"]] + } + + if (.maIsMetaregressionEffectSize(options)) { + attr(fit[["QSp"]], "permutation") <- fitPerumation[["QSp"]] + attr(fit[["pval.alpha"]], "permutation") <- fitPerumation[["pval.alpha"]] + } + + return(fit) +} .maRemoveInfluentialObservations <- function(jaspResults, dataset, options) { if (!.maReady(options) || !is.null(jaspResults[["fit"]])) @@ -336,12 +368,18 @@ moderatorsTable$addColumnInfo(name = "df2", type = "number", title = gettext("df\U2082")) moderatorsTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) + if (.maIsPermutation(options)) { + moderatorsTable$addColumnInfo(name = "pval2", type = "pvalue", title = gettext("p (permutation)")) + moderatorsTable$addFootnote(.maPermutationMessage(options)) + } + + # stop on error if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) return() # effect size moderation - if (.maIsMetaregression(options)) { + if (.maIsMetaregressionEffectSize(options)) { testEffectSize <- .maOmnibusTest(fit, options, parameter = "effectSize") moderatorsTable$addRows(testEffectSize) @@ -568,6 +606,11 @@ coefficientsTable$addColumnInfo(name = "df", type = "number", title = gettext("df")) coefficientsTable$addColumnInfo(name = "pval", type = "pvalue", title = gettext("p")) + if (.maIsPermutation(options)) { + coefficientsTable$addColumnInfo(name = "pval2", type = "pvalue", title = gettext("p (permutation)")) + coefficientsTable$addFootnote(.maPermutationMessage(options)) + } + if (options[["confidenceIntervals"]]) { overtitleCi <- gettextf("%s%% CI", 100 * options[["confidenceIntervalsLevel"]]) coefficientsTable$addColumnInfo(name = "lCi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) @@ -589,6 +632,9 @@ pval = fit[["pval"]] ) + if (.maIsPermutation(options)) + estimates$pval2 <- attr(fit[["pval"]], "permutation") + if (.maIsMetaregressionFtest(options)) estimates$df <- fit[["ddf"]] @@ -609,6 +655,9 @@ pval = fit[["pval.alpha"]] ) + if (.maIsPermutation(options)) + estimates$pval2 <- attr(fit[["pval.alpha"]], "permutation") + if (.maIsMetaregressionFtest(options)) estimates$df <- fit[["ddf.alpha"]] @@ -1578,6 +1627,13 @@ row$df2 <- fit[["QSdf"]][2] } + if (options[["permutationTest"]]) { + if (parameter == "effectSize") + row$pval2 <- attr(fit[["QMp"]], "permutation") + else if (parameter == "heterogeneity") + row$pval2 <- attr(fit[["QSp"]], "permutation") + } + return(row) } .maOmnibusTestCoefficients <- function(fit, options, parameter = "effectSize") { @@ -2447,6 +2503,9 @@ .maIsMultilevelMultivariate <- function(options) { return(options[["module"]] == "metaAnalysisMultilevelMultivariate") } +.maIsPermutation <- function(options) { + return(options[["clustering"]] == "" && options[["permutationTest"]]) +} .maCheckIsPossibleOptions <- function(options) { if (length(options[["heterogeneityModelTerms"]]) > 0 && options[["clustering"]] != "") { @@ -2987,3 +3046,10 @@ return(messages) } +.maPermutationMessage <- function(options) { + return(gettext("Permutation p-value is based on %1$s permutations.", switch( + options[["permutationTestType"]], + "exact" = gettext("exact"), + "approximate" = options[["permutationTestIteration"]] + ))) +} diff --git a/inst/Description.qml b/inst/Description.qml index ffc69200..9663866f 100644 --- a/inst/Description.qml +++ b/inst/Description.qml @@ -29,6 +29,13 @@ Description requiresData: false } + Analysis + { + menu: qsTr("Funnel Plot") + title: qsTr("Funnel Plot") + func: "FunnelPlot" + } + GroupTitle { title: qsTr("Classical") diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml index 89553e8b..90ae7e9c 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml @@ -335,5 +335,52 @@ Section } } } + + CheckBox + { + text: qsTr("Permutation test") + name: "permutationTest" + visible: module == "metaAnalysis" + enabled: clustering.count == 0 + + RadioButtonGroup + { + name: "permutationTestType" + title: qsTr("Type") + columns: 2 + radioButtonsOnSameRow: true + + RadioButton + { + value: "approximate" + label: qsTr("Approximate") + checked: true + id: approximate + } + + RadioButton + { + value: "exact" + label: qsTr("Exact") + } + } + + Group + { + visible: approximate.checked + + IntegerField + { + label: qsTr("Iteration") + name: "permutationTestIteration" + value: 1000 + min: 10 + inclusive: JASP.None + } + + SetSeed{} + } + + } } } \ No newline at end of file diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml b/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml index 1f4f1597..20e12ab5 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml @@ -90,7 +90,7 @@ Section Group { title: qsTr("Heterogeneity") - enabled: heterogeneityModelTerms.count > 0 + enabled: sectionModel.heterogeneityModelTerms.count > 0 visible: module == "metaAnalysis" VariablesForm diff --git a/renv/.gitignore b/renv/.gitignore new file mode 100644 index 00000000..0ec0cbba --- /dev/null +++ b/renv/.gitignore @@ -0,0 +1,7 @@ +library/ +local/ +cellar/ +lock/ +python/ +sandbox/ +staging/ From 9c691b50d3d713d92826cd25afc06eb35ab85aa7 Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 10 Oct 2024 10:02:31 +0200 Subject: [PATCH 061/127] Update classicalmetaanalysiscommon.R --- R/classicalmetaanalysiscommon.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 7afd4799..d7d5bbfa 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -3047,7 +3047,7 @@ return(messages) } .maPermutationMessage <- function(options) { - return(gettext("Permutation p-value is based on %1$s permutations.", switch( + return(gettextf("Permutation p-value is based on %1$s permutations.", switch( options[["permutationTestType"]], "exact" = gettext("exact"), "approximate" = options[["permutationTestIteration"]] From 71b99704379f427bea5c1847b01026530924ebde Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 10 Oct 2024 16:46:05 +0200 Subject: [PATCH 062/127] funnel plot updates --- NAMESPACE | 1 + R/funnnelplot.R | 222 ++++++++++++++++++++++++++++ inst/Description.qml | 1 + inst/qml/FunnelPlot.qml | 316 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 540 insertions(+) create mode 100644 R/funnnelplot.R create mode 100644 inst/qml/FunnelPlot.qml diff --git a/NAMESPACE b/NAMESPACE index 3ce432a0..cedc4374 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -13,3 +13,4 @@ export(.BayesianMetaAnalysisCommon) export(PenalizedMetaAnalysis) export(BayesianBinomialMetaAnalysis) export(EffectSizeComputation) +export(FunnelPlot) diff --git a/R/funnnelplot.R b/R/funnnelplot.R new file mode 100644 index 00000000..47c6e04c --- /dev/null +++ b/R/funnnelplot.R @@ -0,0 +1,222 @@ +# +# Copyright (C) 2013-2018 University of Amsterdam +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + + +FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { + + saveRDS(options, file = "C:/JASP/options.RDS") + saveRDS(dataset, file = "C:/JASP/dataset.RDS") + + if (options[["effectSize"]] == "" || options[["effectSizeStandardError"]] == "") + return() + + if (FALSE) { + options <- readRDS(file = "C:/JASP/options.RDS") + dataset <- readRDS(file = "C:/JASP/dataset.RDS") + } + + # create plot + funnelPlot <- createJaspPlot(title = gettext("Funnel Plot"), width = 550, height = 480) + funnelPlot$dependOn(c( + "effectSize", "effectSizeStandardError", + "funnelUnderH0", "funnelUnderH0ParametersFixedMu", "funnelUnderH0ParametersFixedTau", + "funnelUnderH1", "funnelUnderH1Parameters", "funnelUnderH1ParametersFixedMu", "funnelUnderH1ParametersFixedTau", "funnelUnderH1IncludeHeterogeneity", + "funnelPredictionInterval", "funnelUnderH0LineType", "funnelUnderH0FillColors", "funnelUnderH1LineType", "funnelUnderH1FillColors", + "invertColors" + )) + funnelPlot$position <- 1 + jaspResults[["funnelPlot"]] <- funnelPlot + + + # extract the funnel levels + if (options[["funnelUnderH0"]] || options[["funnelUnderH1"]]) { + funnelLevels <- .parseRCodeInOptions(options[["funnelPredictionInterval"]]) + if (any(funnelLevels < 0 | funnelLevels > 1) || any(is.na(funnelLevels))) + .quitAnalysis(gettext("Funnel plot prediction intervals must be between 0 and 1.")) + if (length(funnelLevels) < 1) + .quitAnalysis(gettext("Funnel plot prediction intervals must be specified.")) + funnelLevels <- (1-funnelLevels)/2 + funnelLevels <- sort(funnelLevels) + + # funnel colors + funnelColorsSteps <- 2*length(funnelLevels) + 1 + funnelColorsSteps <- seq(0, 1, length.out = funnelColorsSteps) + funnelColorsSteps <- funnelColorsSteps[-c(1, length(funnelColorsSteps))] + funnelColors <- paste0("grey", round(funnelColorsSteps*100)) + + if (options[["invertColors"]]) + funnelColors <- rev(funnelColors) + } + + # data-points + dfPlot <- data.frame( + x = dataset[[options[["effectSize"]]]], + y = dataset[[options[["effectSizeStandardError"]]]] + ) + + # y-axis plotting range + yTicks <- jaspGraphs::getPrettyAxisBreaks(range(dfPlot$y)) + + ### specify zero-centered funnels + if (options[["funnelUnderH0"]]) { + dfsFunnel0 <- list() + adjustFunnel0Mean <- options[["funnelUnderH0ParametersFixedMu"]] + adjustFunnel0Heterogeneity <- options[["funnelUnderH0ParametersFixedTau"]] + for (i in seq_along(funnelLevels)) { + dfsFunnel0[[i]] <- data.frame( + x = c(-max(yTicks), 0, 0, max(yTicks)) / qnorm(funnelLevels[i], lower.tail = FALSE), + y = c(max(yTicks), 0, 0, max(yTicks)), + p = 2*funnelLevels[i], + lvl = 1-2*funnelLevels[i] + ) + dfsFunnel0[[i]]$x[1:2] <- dfsFunnel0[[i]]$x[1:2] + adjustFunnel0Mean - adjustFunnel0Heterogeneity + dfsFunnel0[[i]]$x[3:4] <- dfsFunnel0[[i]]$x[3:4] + adjustFunnel0Mean + adjustFunnel0Heterogeneity + } + } + + ### specify meta-analysis centered funnels + # allow user imputed vs meta-analytic estimated values + if (options[["funnelUnderH1"]]) { + + if (options[["funnelUnderH1Parameters"]] == "fixed") { + adjustFunnel1Mean <- options[["funnelUnderH1ParametersFixedMu"]] + adjustFunnel1Heterogeneity <- options[["funnelUnderH1ParametersFixedTau"]] + } else if (options[["funnelUnderH1Parameters"]] == "estimated"){ + fit <- metafor::rma(yi = dfPlot$x, sei = dfPlot$y, method = .maGetMethodOptions(options)) + adjustFunnel1Mean <- fit$b[1] + adjustFunnel1Heterogeneity <- if (options[["funnelUnderH1IncludeHeterogeneity"]]) sqrt(fit$se^2 + fit$tau2) else fit$se + } + + dfsFunnel1 <- list() + for (i in seq_along(funnelLevels)) { + dfsFunnel1[[i]] <- data.frame( + x = c(-max(yTicks), 0, 0, max(yTicks)) / qnorm(funnelLevels[i], lower.tail = FALSE), + y = c(max(yTicks), 0, 0, max(yTicks)), + p = (1-funnelLevels[i]/100), + lvl = funnelLevels[i] + ) + dfsFunnel1[[i]]$x[1:2] <- dfsFunnel1[[i]]$x[1:2] + adjustFunnel1Mean - adjustFunnel1Heterogeneity + dfsFunnel1[[i]]$x[3:4] <- dfsFunnel1[[i]]$x[3:4] + adjustFunnel1Mean + adjustFunnel1Heterogeneity + } + } + + # get x-axis ticks + xTicks <- jaspGraphs::getPrettyAxisBreaks(range(c( + range(dfPlot$x), + if (options[["funnelUnderH0"]]) range(sapply(dfsFunnel0, function(x) x$x)), + if (options[["funnelUnderH1"]]) range(sapply(dfsFunnel1, function(x) x$x)) + ))) + + ### specify "background" for the funnel plot + dfBackground <- data.frame( + x = c(min(xTicks), max(xTicks), max(xTicks), min(xTicks)), + y = c(min(yTicks), min(yTicks), max(yTicks), max(yTicks)) + ) + + ### plot + out <- ggplot2::ggplot() + + if (!options[["powerEnhancement"]] && options[["invertColors"]]) + out <- out + ggplot2::geom_polygon( + data = dfBackground, + mapping = ggplot2::aes(x = x, y = y), + fill = "black" + ) + + # add H0 funnel + if (options[["funnelUnderH0"]]) { + + if (options[["funnelUnderH0FillColors"]]) { + for (i in rev(seq_along(dfsFunnel0))) { + out <- out + ggplot2::geom_polygon( + data = dfsFunnel0[[i]], + mapping = ggplot2::aes(x = x, y = y), + fill = scales::alpha(funnelColors[i], .25) + ) + } + } + + if (options[["funnelUnderH0LineType"]]!= "none") { + for (i in rev(seq_along(dfsFunnel0))) { + out <- out + ggplot2::geom_line( + data = dfsFunnel0[[i]], + mapping = ggplot2::aes(x = x, y = y), + linetype = options[["funnelUnderH0LineType"]] + ) + } + } + } + + # add H1 funnel + if (options[["funnelUnderH1"]]) { + + if (options[["funnelUnderH1FillColors"]]) { + for (i in rev(seq_along(dfsFunnel1))) { + out <- out + ggplot2::geom_polygon( + data = dfsFunnel1[[i]], + mapping = ggplot2::aes(x = x, y = y), + fill = scales::alpha(funnelColors[i], .25) + ) + } + } + + if (options[["funnelUnderH1LineType"]]!= "none") { + for (i in rev(seq_along(dfsFunnel1))) { + out <- out + ggplot2::geom_line( + data = dfsFunnel1[[i]], + mapping = ggplot2::aes(x = x, y = y), + linetype = options[["funnelUnderH1LineType"]] + ) + } + } + } + + # add estimates + out <- out + jaspGraphs::geom_point( + data = dfPlot, + mapping = ggplot2::aes(x = x, y = y), + fill = "grey" + ) + + # add labels if specified + # if (options[["studyLabels"]] != "") { + # + # dfLabels <- cbind( + # dfPlot, + # label = studyLabels + # ) + # dfLabels <- dfLabels[abs(dfLabels$y/1.96) < abs(dfLabels$x),] + # dfLabels$position <- ifelse(dfLabels$x < 0, "right", "left") + # dfLabels$nudge_x <- ifelse(dfLabels$x < 0, -0.1, 0.1) + # + # out <- out + + # ggplot2::geom_text( + # data = dfLabels, + # mapping = ggplot2::aes(x = x, y = y, label = label, hjust = position), nudge_x = dfLabels$nudge_x + # ) + # } + + out <- out + + jaspGraphs::scale_x_continuous(breaks = xTicks, limits = range(xTicks), name = gettext("Effect Size")) + + ggplot2::scale_y_reverse(breaks = rev(yTicks), limits = rev(range(yTicks)), name = gettext("Standard Error")) + + jaspGraphs::geom_rangeframe() + + jaspGraphs::themeJaspRaw() + + funnelPlot$plotObject <- out + + return() +} diff --git a/inst/Description.qml b/inst/Description.qml index 9663866f..590bbe67 100644 --- a/inst/Description.qml +++ b/inst/Description.qml @@ -7,6 +7,7 @@ Description title : qsTr("Meta-Analysis") description: qsTr("Synthesize evidence across multiple studies") requiresData: false + preloadData: true icon: "meta-analysis.svg" version : "0.19.2" author: "JASP Team" diff --git a/inst/qml/FunnelPlot.qml b/inst/qml/FunnelPlot.qml new file mode 100644 index 00000000..41b77299 --- /dev/null +++ b/inst/qml/FunnelPlot.qml @@ -0,0 +1,316 @@ +// +// Copyright (C) 2013-2018 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 2.8 +import QtQuick.Layouts 1.3 +import JASP.Controls 1.0 +import JASP.Widgets 1.0 +import JASP 1.0 + +Form +{ + + VariablesForm + { + preferredHeight: 200 * preferencesModel.uiScale + + AvailableVariablesList + { + name: "allVariables" + } + + AssignedVariablesList + { + title: qsTr("Effect Size") + name: "effectSize" + singleVariable: true + allowedColumns: ["scale"] + } + + AssignedVariablesList + { + name: "effectSizeStandardError" + title: qsTr("Effect Size Standard Error") + singleVariable: true + allowedColumns: ["scale"] + } + + AssignedVariablesList + { + name: "studyLabels" + id: studyLabels + title: qsTr("Study Labels") + singleVariable: true + allowedColumns: ["nominal"] + } + + } + + CheckBox + { + name: "funnelUnderH0" + id: funnelUnderH0 + label: qsTr("Funnel under Hβ‚€") + checked: true + + Group + { + title: qsTr("Parameters") + + DoubleField + { + text: qsTr("ΞΌ") + name: "funnelUnderH0ParametersFixedMu" + defaultValue: 0 + negativeValues: true + } + + DoubleField + { + text: qsTr("𝜏") + name: "funnelUnderH0ParametersFixedTau" + defaultValue: 0 + min: 0 + } + } + + CheckBox + { + name: "funnelUnderH0FillColors" + label: qsTr("Fill colors") + checked: true + } + + DropDown + { + name: "funnelUnderH0LineType" + label: qsTr("Line type") + values: [ + { label: qsTr("None"), value: "none" }, + { label: qsTr("Solid"), value: "solid" }, + { label: qsTr("Dashed"), value: "dashed" }, + { label: qsTr("Dotted"), value: "dotted" } + ] + } + } + + CheckBox + { + name: "funnelUnderH1" + id: funnelUnderH1 + label: qsTr("Funnel under H₁") + checked: false + + RadioButtonGroup + { + name: "funnelUnderH1Parameters" + title: qsTr("Parameters") + columns: 2 + radioButtonsOnSameRow: true + + RadioButton + { + value: "estimated" + label: qsTr("Estimated") + checked: true + id: estimated + } + + RadioButton + { + value: "fixed" + label: qsTr("Fixed") + id: fixed + } + } + + Group + { + visible: estimated.checked + + DropDown + { + name: "method" + label: qsTr("Method") + startValue: "restrictedML" + values: [ + { label: qsTr("Equal Effects") , value: "equalEffects" }, + { label: qsTr("Fixed Effects") , value: "fixedEffects" }, + { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, + { label: qsTr("Restricted ML") , value: "restrictedML" }, + { label: qsTr("DerSimonian-Laird") , value: "derSimonianLaird" }, + { label: qsTr("Hedges") , value: "hedges" }, + { label: qsTr("Hunter-Schmidt") , value: "hunterSchmidt" }, + { label: qsTr("Hunter-Schmidt (SSC)") , value: "hunterSchmidtSsc" }, + { label: qsTr("Sidik-Jonkman") , value: "sidikJonkman" }, + { label: qsTr("Empirical Bayes") , value: "empiricalBayes" }, + { label: qsTr("Paule-Mandel") , value: "pauleMandel" }, + { label: qsTr("Paule-Mandel (MU)") , value: "pauleMandelMu" }, + { label: qsTr("Generalized Q-stat") , value: "qeneralizedQStat" }, + { label: qsTr("Generalized Q-stat (MU)"), value: "qeneralizedQStatMu"} + ] + } + + CheckBox + { + name: "funnelUnderH1IncludeHeterogeneity" + label: qsTr("Include heterogeneity") + } + + CheckBox + { + name: "funnelUnderH1EstimatesTable" + label: qsTr("Estimates table") + } + } + + Group + { + visible: fixed.checked + + DoubleField + { + text: qsTr("ΞΌ") + name: "funnelUnderH1ParametersFixedMu" + defaultValue: 0 + negativeValues: true + } + + DoubleField + { + text: qsTr("𝜏") + name: "funnelUnderH1ParametersFixedTau" + defaultValue: 0 + min: 0 + } + } + + CheckBox + { + name: "funnelUnderH1FillColors" + label: qsTr("Fill colors") + } + + DropDown + { + name: "funnelUnderH1LineType" + label: qsTr("Line type") + startValue: "solid" + values: [ + { label: qsTr("None"), value: "none" }, + { label: qsTr("Solid"), value: "solid" }, + { label: qsTr("Dashed"), value: "dashed" }, + { label: qsTr("Dotted"), value: "dotted" } + ] + } + } + + + Group + { + title: qsTr("Estimates Mapping") + + DropDown + { + label: qsTr("Label") + name: "estimatesMappingLabel" + enabled: studyLabels.count > 0 + values: { + if (funnelUnderH0.checked && funnelUnderH1.checked) { + [ + { label: qsTr("None"), value: "none" }, + { label: qsTr("All"), value: "all" }, + { label: qsTr("Outside Hβ‚€"), value: "outsideH0" }, + { label: qsTr("Outside H₁"), value: "outsideH1" } + ] + } else if (funnelUnderH0.checked) { + [ + { label: qsTr("None"), value: "none" }, + { label: qsTr("All"), value: "all" }, + { label: qsTr("Outside Hβ‚€"), value: "outsideH0" } + ] + } else if (funnelUnderH1.checked) { + [ + { label: qsTr("None"), value: "none" }, + { label: qsTr("All"), value: "all" }, + { label: qsTr("Outside H₁"), value: "outsideH1" } + ] + } else { + [ + { label: qsTr("None"), value: "none" }, + { label: qsTr("All"), value: "all" } + ] + } + } + } + + DropDown + { + name: "estimatesMappingColor" + label: qsTr("Color") + addEmptyValue: true + } + + DropDown + { + name: "estimatesMappingShape" + label: qsTr("Shape") + addEmptyValue: true + } + } + + + Group + { + TextField + { + label: qsTr("Funnel prediction interval") + name: "funnelPredictionInterval" + value: "(0.90, 0.95, 0.99)" + fieldWidth: 120 * preferencesModel.uiScale + } + + CheckBox + { + name: "powerEnhancement" + id: powerEnhancement + label: qsTr("Power enhancement") + + CheckBox + { + name: "powerEnhancementSecondaryAxis" + label: qsTr("Secondary y-axis") + } + + TextField + { + label: qsTr("Breaks") + name: "powerEnhancementBreaks" + value: "(0.15, 0.30, 0.50, 0.70, 0.90)" + fieldWidth: 120 * preferencesModel.uiScale + } + } + + CheckBox + { + name: "invertColors" + label: qsTr("Invert colors") + enabled: !powerEnhancement.checked + } + } + +} From a6619cffeb1e091465f8632052f26ea9b87ddd32 Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 11 Oct 2024 17:24:11 +0200 Subject: [PATCH 063/127] add funnel assymetry tests --- R/funnnelplot.R | 619 ++++++++++++++++++++++++++++++--- R/robustbayesianmetaanalysis.R | 4 +- inst/help/FunnelPlot.md | 3 + inst/qml/FunnelPlot.qml | 90 +++-- jaspMetaAnalysis.Rproj | 1 + 5 files changed, 635 insertions(+), 82 deletions(-) create mode 100644 inst/help/FunnelPlot.md diff --git a/R/funnnelplot.R b/R/funnnelplot.R index 47c6e04c..23eb3753 100644 --- a/R/funnnelplot.R +++ b/R/funnnelplot.R @@ -15,37 +15,129 @@ # along with this program. If not, see . # - FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { saveRDS(options, file = "C:/JASP/options.RDS") saveRDS(dataset, file = "C:/JASP/dataset.RDS") - if (options[["effectSize"]] == "" || options[["effectSizeStandardError"]] == "") - return() - - if (FALSE) { + if(FALSE){ options <- readRDS(file = "C:/JASP/options.RDS") dataset <- readRDS(file = "C:/JASP/dataset.RDS") } - # create plot - funnelPlot <- createJaspPlot(title = gettext("Funnel Plot"), width = 550, height = 480) - funnelPlot$dependOn(c( - "effectSize", "effectSizeStandardError", - "funnelUnderH0", "funnelUnderH0ParametersFixedMu", "funnelUnderH0ParametersFixedTau", - "funnelUnderH1", "funnelUnderH1Parameters", "funnelUnderH1ParametersFixedMu", "funnelUnderH1ParametersFixedTau", "funnelUnderH1IncludeHeterogeneity", - "funnelPredictionInterval", "funnelUnderH0LineType", "funnelUnderH0FillColors", "funnelUnderH1LineType", "funnelUnderH1FillColors", - "invertColors" - )) - funnelPlot$position <- 1 - jaspResults[["funnelPlot"]] <- funnelPlot + if (.fpReady(options)) + .fpH1Fits(jaspResults, dataset, options) + + # make the funnel plots + .fpPlot(jaspResults, dataset, options) + if (options[["funnelUnderH1EstimatesTable"]]) + .fpPlotEstimatesTable(jaspResults, dataset, options) + + # add the funnel plot asymmetry table + if (options[["funnelPlotAsymmetryTests"]]) + .fpTestFunnelPlotAsymmetryTests(jaspResults, dataset, options) + + return() +} + +.fpDependencies <- c("effectSize", "effectSizeStandardError", "split") +.fpReady <- function(options) { + return(options[["effectSize"]] != "" && options[["effectSizeStandardError"]] != "") +} + +.fpH1Fits <- function(jaspResults, dataset, options) { + + if (!is.null(jaspResults[["fitContainer"]])) + return() + + fitContainer <- createJaspState() + fitContainer$dependOn(c(.fpDependencies, "method")) + jaspResults[["fitContainer"]] <- fitContainer + + if (options[["split"]] == "") { + + fitContainer$object <- try(metafor::rma( + yi = dataset[[options[["effectSize"]]]], + sei = dataset[[options[["effectSizeStandardError"]]]], + method = .maGetMethodOptions(options) + )) + + } else { + + splitLevels <- unique(dataset[[options[["split"]]]]) + fits <- lapply(splitLevels, function(splitLevel) { + try(metafor::rma( + yi = dataset[[options[["effectSize"]]]], + sei = dataset[[options[["effectSizeStandardError"]]]], + subset = dataset[[options[["split"]]]] == splitLevel, + method = .maGetMethodOptions(options) + )) + }) + names(fits) <- splitLevels + fitContainer$object <- fits + saveRDS(fits, file = "C:/JASP/fits.RDS") + } + + return() +} +.fpPlot <- function(jaspResults, dataset, options) { + + if (is.null(jaspResults[["funnelPlotContainer"]])) { + funnelPlotContainer <- createJaspContainer(title = gettext("Funnel Plot")) + funnelPlotContainer$dependOn(c( + .fpDependencies, "studyLabel", + "funnelUnderH0", "funnelUnderH0ParametersFixedMu", "funnelUnderH0ParametersFixedTau", + "funnelUnderH1", "funnelUnderH1Parameters", "funnelUnderH1ParametersFixedMu", "funnelUnderH1ParametersFixedTau", "funnelUnderH1IncludeHeterogeneity", "method", + "funnelUnderH1PowerEnhancement", "funnelUnderH1PowerEnhancementBreaks", + "funnelPredictionInterval", "funnelUnderH0LineType", "funnelUnderH0FillColors", "funnelUnderH1LineType", "funnelUnderH1FillColors", + "invertColors", + "estimatesMappingLabel", "estimatesMappingColor", "estimatesMappingShape", "estimatesLegendPosition" + )) + funnelPlotContainer$position <- 1 + jaspResults[["funnelPlotContainer"]] <- funnelPlotContainer + } else { + funnelPlotContainer <- jaspResults[["funnelPlotContainer"]] + } + + # create a waitting plot + if (!.fpReady(options)) { + tempPlot <- createJaspPlot(width = 550, height = 480) + funnelPlotContainer[["tempPlot"]] <- tempPlot + return() + } + + # create funnel plots + if (options[["split"]] == "") { + + funnelPlot <- createJaspPlot(width = 550, height = 480) + funnelPlotContainer[["funnelPlot"]] <- funnelPlot + + out <- .fpMakeFunnelPlot(jaspResults, dataset, options) + funnelPlot$plotObject <- out + } else { + + splitLevels <- unique(dataset[[options[["split"]]]]) + for (splitLevel in splitLevels) { + + funnelPlot <- createJaspPlot(title = paste0(options[["split"]], " = ", splitLevel), width = 550, height = 480) + funnelPlotContainer[[splitLevel]] <- funnelPlot + + out <- .fpMakeFunnelPlot(jaspResults, dataset, options, splitLevel = splitLevel) + funnelPlot$plotObject <- out + + } + + } + + return() +} +.fpMakeFunnelPlot <- function(jaspResults, dataset, options, splitLevel = NULL) { # extract the funnel levels if (options[["funnelUnderH0"]] || options[["funnelUnderH1"]]) { - funnelLevels <- .parseRCodeInOptions(options[["funnelPredictionInterval"]]) - if (any(funnelLevels < 0 | funnelLevels > 1) || any(is.na(funnelLevels))) + funnelLevels <- .robmaCleanOptionsToPriors(options[["funnelPredictionInterval"]], message = gettext("Funnel plot prediction interval was specified in an incorrect format. Try '(0.90, 0.95, 0.99)'.")) + if (any(is.na(funnelLevels)) || any(funnelLevels <= 0 | funnelLevels >= 1)) .quitAnalysis(gettext("Funnel plot prediction intervals must be between 0 and 1.")) if (length(funnelLevels) < 1) .quitAnalysis(gettext("Funnel plot prediction intervals must be specified.")) @@ -67,9 +159,15 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { x = dataset[[options[["effectSize"]]]], y = dataset[[options[["effectSizeStandardError"]]]] ) + if (options[["estimatesMappingShape"]] != "") dfPlot$shape <- dataset[[options[["estimatesMappingShape"]]]] + if (options[["estimatesMappingColor"]] != "") dfPlot$fill <- dataset[[options[["estimatesMappingColor"]]]] + if (options[["studyLabel"]] != "") dfPlot$label <- dataset[[options[["studyLabel"]]]] - # y-axis plotting range - yTicks <- jaspGraphs::getPrettyAxisBreaks(range(dfPlot$y)) + if (!is.null(splitLevel)) + dfPlot <- dfPlot[dataset[[options[["split"]]]] == splitLevel,] + + # y-axis plotting range (based on the common data set to make them common across figures) + yTicks <- jaspGraphs::getPrettyAxisBreaks(range(c(0, dataset[[options[["effectSizeStandardError"]]]]))) ### specify zero-centered funnels if (options[["funnelUnderH0"]]) { @@ -78,13 +176,13 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { adjustFunnel0Heterogeneity <- options[["funnelUnderH0ParametersFixedTau"]] for (i in seq_along(funnelLevels)) { dfsFunnel0[[i]] <- data.frame( - x = c(-max(yTicks), 0, 0, max(yTicks)) / qnorm(funnelLevels[i], lower.tail = FALSE), + x = c(-max(yTicks), 0, 0, max(yTicks)) * qnorm(funnelLevels[i], lower.tail = FALSE), y = c(max(yTicks), 0, 0, max(yTicks)), p = 2*funnelLevels[i], lvl = 1-2*funnelLevels[i] ) - dfsFunnel0[[i]]$x[1:2] <- dfsFunnel0[[i]]$x[1:2] + adjustFunnel0Mean - adjustFunnel0Heterogeneity - dfsFunnel0[[i]]$x[3:4] <- dfsFunnel0[[i]]$x[3:4] + adjustFunnel0Mean + adjustFunnel0Heterogeneity + dfsFunnel0[[i]]$x[1:2] <- dfsFunnel0[[i]]$x[1:2] + adjustFunnel0Mean - 1.96 * adjustFunnel0Heterogeneity + dfsFunnel0[[i]]$x[3:4] <- dfsFunnel0[[i]]$x[3:4] + adjustFunnel0Mean + 1.96 * adjustFunnel0Heterogeneity } } @@ -96,31 +194,119 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { adjustFunnel1Mean <- options[["funnelUnderH1ParametersFixedMu"]] adjustFunnel1Heterogeneity <- options[["funnelUnderH1ParametersFixedTau"]] } else if (options[["funnelUnderH1Parameters"]] == "estimated"){ - fit <- metafor::rma(yi = dfPlot$x, sei = dfPlot$y, method = .maGetMethodOptions(options)) + + if (options[["split"]] == "") { + fit <- jaspResults[["fitContainer"]]$object + } else { + fit <- jaspResults[["fitContainer"]]$object[[splitLevel]] + } + adjustFunnel1Mean <- fit$b[1] - adjustFunnel1Heterogeneity <- if (options[["funnelUnderH1IncludeHeterogeneity"]]) sqrt(fit$se^2 + fit$tau2) else fit$se + adjustFunnel1Heterogeneity <- if(options[["funnelUnderH1IncludeHeterogeneity"]]) sqrt(fit$tau2) else 0 } dfsFunnel1 <- list() for (i in seq_along(funnelLevels)) { dfsFunnel1[[i]] <- data.frame( - x = c(-max(yTicks), 0, 0, max(yTicks)) / qnorm(funnelLevels[i], lower.tail = FALSE), + x = c(-max(yTicks), 0, 0, max(yTicks)) * qnorm(funnelLevels[i], lower.tail = FALSE), y = c(max(yTicks), 0, 0, max(yTicks)), p = (1-funnelLevels[i]/100), lvl = funnelLevels[i] ) - dfsFunnel1[[i]]$x[1:2] <- dfsFunnel1[[i]]$x[1:2] + adjustFunnel1Mean - adjustFunnel1Heterogeneity - dfsFunnel1[[i]]$x[3:4] <- dfsFunnel1[[i]]$x[3:4] + adjustFunnel1Mean + adjustFunnel1Heterogeneity + dfsFunnel1[[i]]$x[1:2] <- dfsFunnel1[[i]]$x[1:2] + adjustFunnel1Mean - 1.96 * adjustFunnel1Heterogeneity + dfsFunnel1[[i]]$x[3:4] <- dfsFunnel1[[i]]$x[3:4] + adjustFunnel1Mean + 1.96 * adjustFunnel1Heterogeneity + } + + # get maximum x value across all funnels in case of a split + if (options[["split"]] == "" || options[["funnelUnderH1Parameters"]] == "fixed") { + dfsFunnel1XRange <- range(sapply(dfsFunnel1, function(x) x$x)) + } else { + dfsFunnel1XMax <- list() + for (i in seq_along(jaspResults[["fitContainer"]]$object)) { + + tempFit <- jaspResults[["fitContainer"]]$object[[i]] + tempAdjustFunnel1Mean <- tempFit$b[1] + tempAdjustFunnel1Heterogeneity <- if(options[["funnelUnderH1IncludeHeterogeneity"]]) sqrt(tempFit$tau2) else 0 + + tempFitX <- c(-max(yTicks), 0, 0, max(yTicks)) * qnorm(funnelLevels[i], lower.tail = FALSE) + tempFitX[1:2] <- tempFitX[1:2] + tempAdjustFunnel1Mean - 1.96 * tempAdjustFunnel1Heterogeneity + tempFitX[3:4] <- tempFitX[3:4] + tempAdjustFunnel1Mean + 1.96 * tempAdjustFunnel1Heterogeneity + + dfsFunnel1XMax[[i]] <- range(tempFitX) + } + dfsFunnel1XRange <- range(unlist(dfsFunnel1XMax)) } } - # get x-axis ticks + + ### get x-axis ticks xTicks <- jaspGraphs::getPrettyAxisBreaks(range(c( - range(dfPlot$x), + range(dataset[[options[["effectSize"]]]]), if (options[["funnelUnderH0"]]) range(sapply(dfsFunnel0, function(x) x$x)), - if (options[["funnelUnderH1"]]) range(sapply(dfsFunnel1, function(x) x$x)) + if (options[["funnelUnderH1"]]) dfsFunnel1XRange ))) + + ### compute power enhancement + if (options[["funnelUnderH1"]] && options[["funnelUnderH1PowerEnhancement"]]) { + powerEnhancementBreaks <- .robmaCleanOptionsToPriors(options[["funnelUnderH1PowerEnhancementBreaks"]], message = gettext("Power enhancement breaks were specified in an incorrect format. Try '(0.30, 0.50, 0.80)'.")) + if (any(is.na(powerEnhancementBreaks)) || any(powerEnhancementBreaks <= 0.05 | powerEnhancementBreaks >= 1)) + .quitAnalysis(gettext("Power enhancement breaks must be between 0.05 and 1.")) + powerEnhancementBreaks <- sort(powerEnhancementBreaks) + powerEnhancementBreaksZ <- .power_to_z(powerEnhancementBreaks, two.sided = TRUE) + + # add the first and last breaks + powerEnhancementBreaks <- c(0.05, powerEnhancementBreaks, 1) + powerEnhancementBreaksZ <- c(0, powerEnhancementBreaksZ, Inf) + + # compute the se ranges and restrict to the plotting range + powerEnhancementBreaksSe <- abs(adjustFunnel1Mean) / powerEnhancementBreaksZ + powerEnhancementBreaks <- powerEnhancementBreaks[(which.max(powerEnhancementBreaksSe < max(yTicks)) - 1):length(powerEnhancementBreaksSe)] + powerEnhancementBreaksSe <- powerEnhancementBreaksSe[(which.max(powerEnhancementBreaksSe < max(yTicks)) - 1):length(powerEnhancementBreaksSe)] + powerEnhancementBreaksSe[1] <- max(yTicks) + powerEnhancementBreaksLabels <- paste0(powerEnhancementBreaks[-length(powerEnhancementBreaks)] * 100, "% - ", round(powerEnhancementBreaks[-1] * 100, 2), "%") + + # get the colors + powerEnhancementColors <- .getPowerEnhancementColors(length(powerEnhancementBreaksLabels)) + + # create segments + dfsPowerEnhancement <- lapply(seq_along(powerEnhancementBreaksLabels), function(i) { + data.frame( + x = c(min(xTicks), max(xTicks), max(xTicks), min(xTicks)), + y = c(powerEnhancementBreaksSe[i], powerEnhancementBreaksSe[i], powerEnhancementBreaksSe[i+1], powerEnhancementBreaksSe[i+1]), + label = powerEnhancementBreaksLabels[i], + color = powerEnhancementColors[i] + ) + }) + } + + + ### prepare lables + if (options[["studyLabel"]] != "" && options[["estimatesMappingLabel"]] != "none") { + + dfLabels <- dfPlot + + if (options[["estimatesMappingLabel"]] == "outsideH0") { + dfLabels$position <- ifelse(dfLabels$x < adjustFunnel0Mean, "right", "left") + dfLabels$nudge_x <- ifelse(dfLabels$x < adjustFunnel0Mean, -0.05, 0.05) + tempDiff <- abs(dfLabels$x - adjustFunnel0Mean) + tempDiff[tempDiff < 1.96 * adjustFunnel0Heterogeneity] <- 0 + tempZ <- tempDiff / dfLabels$y + dfLabels <- dfLabels[tempZ > max(qnorm(funnelLevels, lower.tail = FALSE)),] + } else if (options[["estimatesMappingLabel"]] == "outsideH1") { + dfLabels$position <- ifelse(dfLabels$x < adjustFunnel1Mean, "right", "left") + dfLabels$nudge_x <- ifelse(dfLabels$x < adjustFunnel1Mean, -0.05, 0.05) + tempDiff <- abs(dfLabels$x - adjustFunnel1Mean) + tempDiff[tempDiff < 1.96 * adjustFunnel1Heterogeneity] <- 0 + tempZ <- tempDiff / dfLabels$y + dfLabels <- dfLabels[tempZ > max(qnorm(funnelLevels, lower.tail = FALSE)),] + } else if (options[["estimatesMappingLabel"]] == "all") { + dfLabels$position <- ifelse(dfLabels$x < 0, "right", "left") + dfLabels$nudge_x <- ifelse(dfLabels$x < 0, -0.05, 0.05) + } + } + + ### specify "background" for the funnel plot dfBackground <- data.frame( x = c(min(xTicks), max(xTicks), max(xTicks), min(xTicks)), @@ -130,13 +316,23 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { ### plot out <- ggplot2::ggplot() - if (!options[["powerEnhancement"]] && options[["invertColors"]]) + if (options[["invertColors"]]) out <- out + ggplot2::geom_polygon( data = dfBackground, mapping = ggplot2::aes(x = x, y = y), fill = "black" ) + if (options[["funnelUnderH1"]] && options[["funnelUnderH1PowerEnhancement"]]) { + for (i in seq_along(dfsPowerEnhancement)) { + out <- out + ggplot2::geom_polygon( + data = dfsPowerEnhancement[[i]], + mapping = ggplot2::aes(x = x, y = y), + fill = dfsPowerEnhancement[[i]]$color[1] + ) + } + } + # add H0 funnel if (options[["funnelUnderH0"]]) { @@ -186,37 +382,346 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { } # add estimates + pointAes <- list( + x = as.name("x"), + y = as.name("y") + ) + if (options[["estimatesMappingShape"]] != "") pointAes$shape <- as.name("shape") + if (options[["estimatesMappingColor"]] != "") pointAes$fill <- as.name("fill") + out <- out + jaspGraphs::geom_point( - data = dfPlot, - mapping = ggplot2::aes(x = x, y = y), - fill = "grey" + data = dfPlot, + mapping = do.call(ggplot2::aes, pointAes) ) - # add labels if specified - # if (options[["studyLabels"]] != "") { - # - # dfLabels <- cbind( - # dfPlot, - # label = studyLabels - # ) - # dfLabels <- dfLabels[abs(dfLabels$y/1.96) < abs(dfLabels$x),] - # dfLabels$position <- ifelse(dfLabels$x < 0, "right", "left") - # dfLabels$nudge_x <- ifelse(dfLabels$x < 0, -0.1, 0.1) - # - # out <- out + - # ggplot2::geom_text( - # data = dfLabels, - # mapping = ggplot2::aes(x = x, y = y, label = label, hjust = position), nudge_x = dfLabels$nudge_x - # ) - # } + if (options[["estimatesMappingShape"]] != "") + out <- out + ggplot2::labs(shape = options[["estimatesMappingShape"]]) + if (options[["estimatesMappingColor"]] != "") + out <- out + ggplot2::labs(fill = options[["estimatesMappingColor"]]) + + + # add labels + if (options[["studyLabel"]] != "" && options[["estimatesMappingLabel"]] != "none") { + out <- out + + ggplot2::geom_text( + data = dfLabels, + mapping = ggplot2::aes(x = x, y = y, label = label, hjust = position), nudge_x = dfLabels$nudge_x + ) + } + + out <- out + jaspGraphs::scale_x_continuous(breaks = xTicks, limits = range(xTicks), name = gettext("Effect Size")) + + # add secondary axis whenever needed + if (options[["funnelUnderH1"]] && options[["funnelUnderH1PowerEnhancement"]]) { + out <- out + ggplot2::scale_y_reverse( + breaks = rev(yTicks), limits = rev(range(yTicks)), name = gettext("Standard Error"), + sec.axis = ggplot2::dup_axis( + breaks = rev(powerEnhancementBreaksSe), + labels = rev(paste0(round(c(.z_to_power(abs(adjustFunnel1Mean) / powerEnhancementBreaksSe[1]), powerEnhancementBreaks[-1]) * 100), "% ")), name = gettext("Power")) + ) + } else { + out <- out + ggplot2::scale_y_reverse(breaks = rev(yTicks), limits = rev(range(yTicks)), name = gettext("Standard Error")) + } + out <- out + - jaspGraphs::scale_x_continuous(breaks = xTicks, limits = range(xTicks), name = gettext("Effect Size")) + - ggplot2::scale_y_reverse(breaks = rev(yTicks), limits = rev(range(yTicks)), name = gettext("Standard Error")) + - jaspGraphs::geom_rangeframe() + - jaspGraphs::themeJaspRaw() + jaspGraphs::geom_rangeframe(sides = if (options[["funnelUnderH1"]] && options[["funnelUnderH1PowerEnhancement"]]) "blr" else "bl") + + jaspGraphs::themeJaspRaw(legend.position = options[["estimatesLegendPosition"]]) + + return(out) +} +.fpPlotEstimatesTable <- function(jaspResults, dataset, options) { + + if (!is.null(jaspResults[["funnelParametersTable"]]) || options[["funnelUnderH1Parameters"]] != "estimated") + return() + + # estimates table + funnelParametersTable <- createJaspTable(gettext("H₁ Funnel Parameter Estimates")) + funnelParametersTable$position <- 2 + funnelParametersTable$dependOn(c(.fpDependencies, "funnelUnderH1Parameters", "method", "funnelUnderH1EstimatesTable")) + jaspResults[["funnelParametersTable"]] <- funnelParametersTable + + if (options[["split"]] != "") + funnelParametersTable$addColumnInfo(name = "split", title = "", type = "string") + funnelParametersTable$addColumnInfo(name = "k", title = gettext("Estimates"), type = "integer") + funnelParametersTable$addColumnInfo(name = "mu", title = gettext("\U03BC"), type = "number") + if (!.maGetMethodOptions(options) %in% c("EE", "FE")) + funnelParametersTable$addColumnInfo(name = "tau", title = gettext("\U1D70F"), type = "number") + + + if (!.fpReady(options)) + return() + + if (options[["split"]] == "") { + + fit <- jaspResults[["fitContainer"]]$object + if (jaspBase::isTryError(fit)) { + fitSummary <- data.frame(k = NA, mu = NA) + funnelParametersTable$addFootnote(fit, symbol = gettext("The funnel plot parameter estimation failed with the following error: ")) + } else { + fitSummary <- data.frame( + k = fit$k, + mu = fit$b[1] + ) + if (!.maGetMethodOptions(options) %in% c("EE", "FE")) + fitSummary$tau <- sqrt(fit$tau2) + } + + } else { + + fits <- jaspResults[["fitContainer"]]$object + fitSummary <- do.call(rbind, lapply(fits, function(fit) { + + if (jaspBase::isTryError(fit)) { + funnelParametersTable$addFootnote(fit, symbol = gettext("The funnel plot parameter estimation failed with the following error: ")) + if (!.maGetMethodOptions(options) %in% c("EE", "FE")) + return(data.frame(k = NA, mu = NA)) + else + return(data.frame(k = NA, mu = NA, tau = NA)) + } - funnelPlot$plotObject <- out + tempFitSummary <- data.frame( + k = fit$k, + mu = fit$b[1] + ) + if (!.maGetMethodOptions(options) %in% c("EE", "FE")) + tempFitSummary$tau <- sqrt(fit$tau2) + + return(tempFitSummary) + })) + fitSummary <- data.frame(split = names(fits), fitSummary) + + } + + funnelParametersTable$setData(fitSummary) return() } +.fpTestFunnelPlotAsymmetryTests <- function(jaspResults, dataset, options) { + + if (is.null(jaspResults[["funnelPlotAsymmetryTests"]])) { + funnelAsymetryTests <- createJaspContainer(title = gettext("Funnel Plot Asymmetry Tests")) + funnelAsymetryTests$dependOn(c(.fpDependencies, "funnelPlotAsymmetryTests")) + funnelAsymetryTests$position <- 3 + jaspResults[["funnelAsymetryTests"]] <- funnelAsymetryTests + } else { + funnelAsymetryTests <- jaspResults[["funnelAsymetryTests"]] + } + + ### create table for each test + + # meta-regression + if (options[["funnelPlotAsymmetryTests"]] && is.null(funnelAsymetryTests[["metaRegressionTable"]])) { + + metaRegressionTable <- createJaspTable(gettext("Meta-Regression Test for Funnel Plot Asymmetry")) + metaRegressionTable$position <- 1 + metaRegressionTable$dependOn("funnelPlotAsymmetryTestsMetaRegression") + funnelAsymetryTests[["metaRegressionTable"]] <- metaRegressionTable + + if (options[["split"]] != "") + metaRegressionTable$addColumnInfo(name = "split", title = "", type = "string") + metaRegressionTable$addColumnInfo(name = "k", title = gettext("Estimates"), type = "integer") + metaRegressionTable$addColumnInfo(name = "z", title = gettext("z"), type = "number", overtitle = gettext("Asymmetry Test")) + metaRegressionTable$addColumnInfo(name = "p", title = gettext("p"), type = "pvalue", overtitle = gettext("Asymmetry Test")) + metaRegressionTable$addColumnInfo(name = "est", title = gettext("Estimate"), type = "number", overtitle = gettext("Limit Estimate")) + metaRegressionTable$addColumnInfo(name = "lCI", title = gettext("Lower 95% CI"), type = "number", overtitle = gettext("Limit Estimate")) + metaRegressionTable$addColumnInfo(name = "uCI", title = gettext("Upper 95% CI"), type = "number", overtitle = gettext("Limit Estimate")) + + if (.fpReady(options)) { + if (options[["split"]] == "") { + + fit <- jaspResults[["fitContainer"]]$object + fitTest <- try(metafor::regtest(fit)) + + if (jaspBase::isTryError(fitTest)) { + metaRegressionTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + } else { + fitSummary <- data.frame( + k = fit$k, + z = fitTest$zval, + p = fitTest$pval, + est = fitTest$est, + lCI = fitTest$ci.lb, + uCI = fitTest$ci.ub + ) + } + + } else { + + fits <- jaspResults[["fitContainer"]]$object + fitSummary <- do.call(rbind, lapply(fits, function(fit) { + + fitTest <- try(metafor::regtest(fit)) + if (jaspBase::isTryError(fitTest)) { + metaRegressionTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + return(data.frame(k = NA, z = NA, p = NA, est = NA, lCI = NA, uCI = NA)) + } + return(data.frame( + k = fit$k, + z = fitTest$zval, + p = fitTest$pval, + est = fitTest$est, + lCI = fitTest$ci.lb, + uCI = fitTest$ci.ub + )) + })) + fitSummary <- data.frame(split = names(fits), fitSummary) + + } + + metaRegressionTable$setData(fitSummary) + } + } + + # weighted regression + if (options[["funnelPlotAsymmetryTestsWeightedRegression"]] && is.null(funnelAsymetryTests[["weightedRegressionTable"]])) { + + weightedRegressionTable <- createJaspTable(gettext("Weighted Regression Test for Funnel Plot Asymmetry")) + weightedRegressionTable$position <- 2 + weightedRegressionTable$dependOn("funnelPlotAsymmetryTestsWeightedRegression") + funnelAsymetryTests[["weightedRegressionTable"]] <- weightedRegressionTable + + if (options[["split"]] != "") + weightedRegressionTable$addColumnInfo(name = "split", title = "", type = "string") + weightedRegressionTable$addColumnInfo(name = "k", title = gettext("Estimates"), type = "integer") + weightedRegressionTable$addColumnInfo(name = "t", title = gettext("t"), type = "number", overtitle = gettext("Asymmetry Test")) + weightedRegressionTable$addColumnInfo(name = "df", title = gettext("df"), type = "integer", overtitle = gettext("Asymmetry Test")) + weightedRegressionTable$addColumnInfo(name = "p", title = gettext("p"), type = "pvalue", overtitle = gettext("Asymmetry Test")) + weightedRegressionTable$addColumnInfo(name = "est", title = gettext("Estimate"), type = "number", overtitle = gettext("Limit Estimate")) + weightedRegressionTable$addColumnInfo(name = "lCI", title = gettext("Lower 95% CI"), type = "number", overtitle = gettext("Limit Estimate")) + weightedRegressionTable$addColumnInfo(name = "uCI", title = gettext("Upper 95% CI"), type = "number", overtitle = gettext("Limit Estimate")) + + if (.fpReady(options)) { + if (options[["split"]] == "") { + + fit <- jaspResults[["fitContainer"]]$object + fitTest <- try(metafor::regtest(fit, model = "lm")) + + if (jaspBase::isTryError(fitTest)) { + weightedRegressionTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + } else { + fitSummary <- data.frame( + k = fit$k, + t = fitTest$zval, + df = fitTest$dfs, + p = fitTest$pval, + est = fitTest$est, + lCI = fitTest$ci.lb, + uCI = fitTest$ci.ub + ) + } + + } else { + + fits <- jaspResults[["fitContainer"]]$object + fitSummary <- do.call(rbind, lapply(fits, function(fit) { + + fitTest <- try(metafor::regtest(fit, model = "lm")) + if (jaspBase::isTryError(fitTest)) { + weightedRegressionTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + return(data.frame(k = NA, t = NA, df = NA, p = NA, est = NA, lCI = NA, uCI = NA)) + } + return(data.frame( + k = fit$k, + t = fitTest$zval, + df = fitTest$dfs, + p = fitTest$pval, + est = fitTest$est, + lCI = fitTest$ci.lb, + uCI = fitTest$ci.ub + )) + })) + fitSummary <- data.frame(split = names(fits), fitSummary) + + } + + weightedRegressionTable$setData(fitSummary) + } + } + + # rank correlation + if (options[["funnelPlotAsymmetryTestsRankCorrelation"]] && is.null(funnelAsymetryTests[["rankCorrelationTable"]])) { + + rankCorrelationTable <- createJaspTable(gettext("Rank Correlation Test for Funnel Plot Asymmetry")) + rankCorrelationTable$position <- 3 + rankCorrelationTable$dependOn("funnelPlotAsymmetryTestsRankCorrelation") + funnelAsymetryTests[["rankCorrelationTable"]] <- rankCorrelationTable + + if (options[["split"]] != "") + rankCorrelationTable$addColumnInfo(name = "split", title = "", type = "string") + rankCorrelationTable$addColumnInfo(name = "k", title = gettext("Estimates"), type = "integer") + rankCorrelationTable$addColumnInfo(name = "tau", title = gettext("\U1D70F"), type = "number") + rankCorrelationTable$addColumnInfo(name = "p", title = gettext("p"), type = "pvalue") + + if (.fpReady(options)) { + + if (options[["split"]] == "") { + + fit <- jaspResults[["fitContainer"]]$object + fitTest <- try(metafor::ranktest(fit)) + + if (jaspBase::isTryError(fitTest)) { + rankCorrelationTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + } else { + fitSummary <- data.frame( + k = fit$k, + tau = fitTest$tau, + p = fitTest$pval + ) + } + } else { + + fits <- jaspResults[["fitContainer"]]$object + fitSummary <- do.call(rbind, lapply(fits, function(fit) { + + fitTest <- try(metafor::ranktest(fit)) + if (jaspBase::isTryError(fitTest)) { + rankCorrelationTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + return(data.frame(k = NA, tau = NA, p = NA)) + } + return(data.frame( + k = fit$k, + tau = fitTest$tau, + p = fitTest$pval + )) + })) + fitSummary <- data.frame(split = names(fits), fitSummary) + + } + + rankCorrelationTable$setData(fitSummary) + } + } + + return() +} + +# compute power enhancement contours (lifted from zcurve) +.power_to_z <- function(power, alpha = .05, a = stats::qnorm(alpha/2,lower.tail = FALSE), two.sided = TRUE, nleqslv_control = list(xtol = 1e-15, maxit = 300, stepmax = .5)){ + if(a < 0)stop("a must be >= 0") + if(is.null(a) & is.null(alpha))stop("Either 'alpha' or 'a' must be provided") + if(is.null(alpha) & !is.null(a))alpha <- stats::pnorm(a, lower.tail = FALSE)*2 + if(alpha < 0 | alpha > 1)stop("alpha must be >= 0 & <= 1") + if(!all(sapply(power, function(x)x >= alpha & x <= 1)))stop("power must be >= alpha & <= 1") + sapply(power, function(pow)nleqslv::nleqslv(.5, .solve_power_to_z, power = pow, a = a, two.sided = two.sided, control = nleqslv_control)$x) +} +.solve_power_to_z <- function(x, power, a, two.sided){ + y = numeric(1) + y = .z_to_power(z = x, a = a, two.sided = two.sided) - power + y +} +.z_to_power <- function(z, alpha = .05, a = stats::qnorm(alpha/2,lower.tail = FALSE), two.sided = TRUE){ + if(!all(sapply(z, function(x)x >= 0)))stop("z must be >= 0") + if(a < 0)stop("a must be >= 0") + if(is.null(a) & is.null(alpha))stop("Either 'alpha' or 'a' must be provided") + if(is.null(alpha) & !is.null(a))alpha <- stats::pnorm(a, lower.tail = FALSE)*2 + if(alpha < 0 | alpha > 1)stop("alpha must be >= 0 & <= 1") + if(two.sided){ + return(1 - stats::pnorm(a, z, 1) + stats::pnorm(-a, z, 1)) + }else{ + return(1 - stats::pnorm(a, z, 1)) + } +} + +# get the color scale +.getPowerEnhancementColors <- function(n) scales::gradient_n_pal(RColorBrewer::brewer.pal(n = 11, name = "RdYlGn"))(seq(0, 1, length.out = n)) diff --git a/R/robustbayesianmetaanalysis.R b/R/robustbayesianmetaanalysis.R index 9b4266df..81485e24 100644 --- a/R/robustbayesianmetaanalysis.R +++ b/R/robustbayesianmetaanalysis.R @@ -120,7 +120,7 @@ RobustBayesianMetaAnalysis <- function(jaspResults, dataset, options, state = NU args = .robmaMapOptionsToPriors(optionsPrior, parameter) )) } -.robmaCleanOptionsToPriors <- function(x) { +.robmaCleanOptionsToPriors <- function(x, message = gettext("The priors for publication bias were set incorrectly.")) { x <- trimws(x, which = "both") x <- trimws(x, which = "both", whitespace = "c") @@ -134,7 +134,7 @@ RobustBayesianMetaAnalysis <- function(jaspResults, dataset, options, state = NU x <- x[x != ""] if (anyNA(as.numeric(x))) - .quitAnalysis(gettext("The priors for publication bias were set incorrectly.")) + .quitAnalysis(message) return(as.numeric(x)) } .robmaEvalOptionsToPriors <- function(x) { diff --git a/inst/help/FunnelPlot.md b/inst/help/FunnelPlot.md new file mode 100644 index 00000000..392adf85 --- /dev/null +++ b/inst/help/FunnelPlot.md @@ -0,0 +1,3 @@ +### References +--- +- Kossmeier, M., Tran, U. S., & Voracek, M. (2020). Power-enhanced funnel plots for meta-analysis. Zeitschrift fΓΌr Psychologie, 228(1). \ No newline at end of file diff --git a/inst/qml/FunnelPlot.qml b/inst/qml/FunnelPlot.qml index 41b77299..4bc7bc0f 100644 --- a/inst/qml/FunnelPlot.qml +++ b/inst/qml/FunnelPlot.qml @@ -51,13 +51,20 @@ Form AssignedVariablesList { - name: "studyLabels" - id: studyLabels - title: qsTr("Study Labels") + name: "studyLabel" + id: studyLabel + title: qsTr("Study Label") singleVariable: true allowedColumns: ["nominal"] } + AssignedVariablesList + { + name: "split" + title: qsTr("Split") + singleVariable: true + allowedColumns: ["nominal"] + } } CheckBox @@ -145,6 +152,7 @@ Form DropDown { name: "method" + id: method label: qsTr("Method") startValue: "restrictedML" values: [ @@ -169,6 +177,7 @@ Form { name: "funnelUnderH1IncludeHeterogeneity" label: qsTr("Include heterogeneity") + enabled: method.value != "fixedEffects" && method.value != "equalEffects" } CheckBox @@ -217,6 +226,21 @@ Form { label: qsTr("Dotted"), value: "dotted" } ] } + + CheckBox + { + name: "funnelUnderH1PowerEnhancement" + enabled: funnelUnderH1.checked + label: qsTr("Power enhancement") + + TextField + { + label: qsTr("Breaks") + name: "funnelUnderH1PowerEnhancementBreaks" + value: "(0.15, 0.30, 0.50, 0.70, 0.90)" + fieldWidth: 200 * preferencesModel.uiScale + } + } } @@ -228,7 +252,7 @@ Form { label: qsTr("Label") name: "estimatesMappingLabel" - enabled: studyLabels.count > 0 + enabled: studyLabel.count > 0 values: { if (funnelUnderH0.checked && funnelUnderH1.checked) { [ @@ -261,6 +285,7 @@ Form DropDown { name: "estimatesMappingColor" + id: estimatesMappingColor label: qsTr("Color") addEmptyValue: true } @@ -268,9 +293,26 @@ Form DropDown { name: "estimatesMappingShape" + id: estimatesMappingShape label: qsTr("Shape") addEmptyValue: true } + + DropDown + { + name: "estimatesLegendPosition" + enabled: estimatesMappingColor.checked || estimatesMappingShape.checked + label: qsTr("Legend position") + startValue: "right" + values: + [ + { label: qsTr("None"), value: "none"}, + { label: qsTr("Bottom"), value: "bottom"}, + { label: qsTr("Right"), value: "right"}, + { label: qsTr("Top"), value: "top"}, + { label: qsTr("Left"), value: "left"} + ] + } } @@ -286,31 +328,33 @@ Form CheckBox { - name: "powerEnhancement" - id: powerEnhancement - label: qsTr("Power enhancement") + name: "invertColors" + label: qsTr("Invert colors") + } + } - CheckBox - { - name: "powerEnhancementSecondaryAxis" - label: qsTr("Secondary y-axis") - } + CheckBox + { + name: "funnelPlotAsymmetryTests" + label: qsTr("Funnel plot asymmetry tests") - TextField - { - label: qsTr("Breaks") - name: "powerEnhancementBreaks" - value: "(0.15, 0.30, 0.50, 0.70, 0.90)" - fieldWidth: 120 * preferencesModel.uiScale - } + CheckBox + { + name: "funnelPlotAsymmetryTestsMetaRegression" + label: qsTr("Meta-regression") + checked: true } CheckBox { - name: "invertColors" - label: qsTr("Invert colors") - enabled: !powerEnhancement.checked + name: "funnelPlotAsymmetryTestsWeightedRegression" + label: qsTr("Weighted regression") } - } + CheckBox + { + name: "funnelPlotAsymmetryTestsRankCorrelation" + label: qsTr("Rank correlation") + } + } } diff --git a/jaspMetaAnalysis.Rproj b/jaspMetaAnalysis.Rproj index 497f8bfc..0b4df82b 100644 --- a/jaspMetaAnalysis.Rproj +++ b/jaspMetaAnalysis.Rproj @@ -17,4 +17,5 @@ StripTrailingWhitespace: Yes BuildType: Package PackageUseDevtools: Yes +PackageCleanBeforeInstall: No PackageInstallArgs: --no-multiarch --with-keep.source From bc6f5578ed51b5928dc300ddd5998cbcb072d0fd Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 11 Oct 2024 17:25:32 +0200 Subject: [PATCH 064/127] remove debugging info --- R/classicalmetaanalysis.R | 6 ------ R/classicalmetaanalysiscommon.R | 2 +- R/classicalmetaanalysismultilevelmultivariate.R | 7 ------- R/effectsizecomputation.R | 2 -- R/funnnelplot.R | 9 --------- 5 files changed, 1 insertion(+), 25 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 9e882c5d..48824806 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -25,15 +25,9 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { .maCheckErrors(dataset, options) } - saveRDS(options, file = "C:/JASP/options.RDS") - saveRDS(dataset, file = "C:/JASP/dataset.RDS") - .ClassicalMetaAnalysisCommon(jaspResults, dataset, options) return() - options <- readRDS(file = "C:/JASP/options.RDS") - dataset <- readRDS(file = "C:/JASP/dataset.RDS") - return() } .maDependencies <- c( diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index d7d5bbfa..a7ad8591 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -256,7 +256,7 @@ fitClustered = fitClustered, fitPermutation = fitPermutation ) - saveRDS(fit, file = "C:/JASP/fit.RDS") + return() } .maFitAddPermutationPValues <- function(fit, fitPerumation, options) { diff --git a/R/classicalmetaanalysismultilevelmultivariate.R b/R/classicalmetaanalysismultilevelmultivariate.R index 8383e9c6..04cd109b 100644 --- a/R/classicalmetaanalysismultilevelmultivariate.R +++ b/R/classicalmetaanalysismultilevelmultivariate.R @@ -19,22 +19,15 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = NULL, options, ...) { options[["module"]] <- "metaAnalysisMultilevelMultivariate" - saveRDS(options, file = "C:/JASP/options.RDS") if (.maReady(options)) { dataset <- .mammReadData(dataset, options) .mammCheckErrors(dataset, options) } - saveRDS(options, file = "C:/JASP/options.RDS") - saveRDS(dataset, file = "C:/JASP/dataset.RDS") - .ClassicalMetaAnalysisCommon(jaspResults, dataset, options) return() - options <- readRDS(file = "C:/JASP/options.RDS") - dataset <- readRDS(file = "C:/JASP/dataset.RDS") - return() } .mammReadData <- function(dataset, options) { diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index 90181e93..f63c939e 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -5,8 +5,6 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { options <- .HOTFIX_flatten_options(options) dataset <- .escReadDataset(dataset, options) - saveRDS(options, file = "C:/JASP/options.RDS") - saveRDS(dataset, file = "C:/JASP/dataset.RDS") dataOutput <- .escComputeEffectSizes(dataset, options) .escComputeSummaryTable(jaspResults, dataset, options, dataOutput) diff --git a/R/funnnelplot.R b/R/funnnelplot.R index 23eb3753..1e6f9930 100644 --- a/R/funnnelplot.R +++ b/R/funnnelplot.R @@ -17,14 +17,6 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { - saveRDS(options, file = "C:/JASP/options.RDS") - saveRDS(dataset, file = "C:/JASP/dataset.RDS") - - if(FALSE){ - options <- readRDS(file = "C:/JASP/options.RDS") - dataset <- readRDS(file = "C:/JASP/dataset.RDS") - } - if (.fpReady(options)) .fpH1Fits(jaspResults, dataset, options) @@ -75,7 +67,6 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { }) names(fits) <- splitLevels fitContainer$object <- fits - saveRDS(fits, file = "C:/JASP/fits.RDS") } return() From 7c1dd2f5eb74f6f02330e9c0518c7f1702304b69 Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 11 Oct 2024 17:37:04 +0200 Subject: [PATCH 065/127] clean up --- gibson2002.csv | 16 - mccurdy2020.csv | 1654 ----------------------------------------------- 2 files changed, 1670 deletions(-) delete mode 100644 gibson2002.csv delete mode 100644 mccurdy2020.csv diff --git a/gibson2002.csv b/gibson2002.csv deleted file mode 100644 index bab03b37..00000000 --- a/gibson2002.csv +++ /dev/null @@ -1,16 +0,0 @@ -"author","year","n1i","m1i","sd1i","n2i","m2i","sd2i","ai","bi","ci","di","type" -"Cote",1997,50,2.2,12.73,54,5.2,12.5,NA,NA,NA,NA,1 -"Ghosh",1998,140,17.6,24.2,136,34.1,38.8,NA,NA,NA,NA,1 -"Hayward",1996,23,0.38,0.56,19,0.23,0.29,NA,NA,NA,NA,1 -"Heard",1999,97,2.09,5.93,94,2.66,4.95,34,63,36,58,1 -"Ignacio-Garcia",1995,35,4.92,6.05,35,20,26.34,24,11,29,6,1 -"Knoell",1998,45,0.85,4.75,55,2.31,9.16,NA,NA,NA,NA,1 -"Lahdensuo",1996,56,2.8,9,59,4.8,7.2,13,43,25,34,1 -"Sommaruga",1995,20,24.1,11.8,20,31.8,17.9,NA,NA,NA,NA,1 -"Zeiger",1991,128,1.4,3.3,143,2.3,7.6,NA,NA,NA,NA,1 -"Garret",1994,119,6.23,12.2,100,5.71,8.57,58,42,57,33,2 -"Neri",1996,32,2.1,8,33,5.1,14,7,25,13,20,3 -"Hilton",1986,86,0.73,1.48,100,0.47,1.2,NA,NA,NA,NA,4 -"Gallefoss",1999,25,8,32,24,26,70,NA,NA,NA,NA,5 -"Yoon",1993,28,NA,NA,28,NA,NA,5,23,4,24,1 -"Brewin",1995,12,NA,NA,33,NA,NA,0,12,16,17,3 diff --git a/mccurdy2020.csv b/mccurdy2020.csv deleted file mode 100644 index 4421b0c4..00000000 --- a/mccurdy2020.csv +++ /dev/null @@ -1,1654 +0,0 @@ -article,experiment,sample,id,pairing,yi,vi,sei,ni,stimuli,condition,gen_difficulty,manip_type,present_style,word_status,memory_test,memory_type,gen_constraint,learning_type,stimuli_relation,gen_mode,gen_task,attention,pacing,filler_task,age_grp,retention_delay -12,1,1,1,1,0.879,0.000684371,0.026160483,12,20,generate,NA,between,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,word stem,full,NA,no,younger,immediate -12,1,2,2,1,0.713,0.001403919,0.037468903,12,20,read,NA,between,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,word stem,full,NA,no,younger,immediate -12,1,1,3,2,0.906,0.000579847,0.024080011,12,20,generate,NA,between,pure,words,recognition,item,high,intentional,category,verbal/speaking,word stem,full,NA,no,younger,immediate -12,1,2,4,2,0.684,0.001509474,0.038851945,12,20,read,NA,between,pure,words,recognition,item,NA,intentional,category,verbal/speaking,word stem,full,NA,no,younger,immediate -12,1,1,5,3,0.842,0.000840009,0.028982912,12,20,generate,NA,between,pure,words,recognition,item,high,intentional,antonym,verbal/speaking,word stem,full,NA,no,younger,immediate -12,1,2,6,3,0.753,0.001237872,0.0351834,12,20,read,NA,between,pure,words,recognition,item,NA,intentional,antonym,verbal/speaking,word stem,full,NA,no,younger,immediate -12,1,1,7,4,0.893,0.000629087,0.025081608,12,20,generate,NA,between,pure,words,recognition,item,high,intentional,synonym,verbal/speaking,word stem,full,NA,no,younger,immediate -12,1,2,8,4,0.697,0.001464062,0.038263057,12,20,read,NA,between,pure,words,recognition,item,NA,intentional,synonym,verbal/speaking,word stem,full,NA,no,younger,immediate -12,1,1,9,5,0.733,0.001323238,0.036376334,12,20,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,NA,no,younger,immediate -12,1,2,10,5,0.643,0.001627976,0.040348188,12,20,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,NA,no,younger,immediate -12,2,1,11,6,0.838,0.001123505,0.033518731,12,10,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,no,younger,immediate -12,2,1,12,6,0.652,0.002103557,0.04586455,12,10,read,NA,within,pure,words,recognition,item,NA,NA,semantic,verbal/speaking,word stem,full,timed,no,younger,immediate -12,2,1,13,7,0.872,0.000933945,0.030560518,12,10,generate,NA,within,pure,words,recognition,item,high,NA,category,verbal/speaking,word stem,full,timed,no,younger,immediate -12,2,1,14,7,0.665,0.002056253,0.045345927,12,10,read,NA,within,pure,words,recognition,item,NA,NA,category,verbal/speaking,word stem,full,timed,no,younger,immediate -12,2,1,15,8,0.878,0.000901948,0.030032451,12,10,generate,NA,within,pure,words,recognition,item,high,NA,antonym,verbal/speaking,word stem,full,timed,no,younger,immediate -12,2,1,16,8,0.699,0.001908686,0.043688506,12,10,read,NA,within,pure,words,recognition,item,NA,NA,antonym,verbal/speaking,word stem,full,timed,no,younger,immediate -12,2,1,17,9,0.871,0.000939326,0.030648422,12,10,generate,NA,within,pure,words,recognition,item,high,NA,synonym,verbal/speaking,word stem,full,timed,no,younger,immediate -12,2,1,18,9,0.677,0.002007876,0.044809329,12,10,read,NA,within,pure,words,recognition,item,NA,NA,synonym,verbal/speaking,word stem,full,timed,no,younger,immediate -12,2,1,19,10,0.741,0.001689593,0.041104661,12,10,generate,NA,within,pure,words,recognition,item,high,NA,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -12,2,1,20,10,0.548,0.002251225,0.047447077,12,10,read,NA,within,pure,words,recognition,item,NA,NA,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -12,3,1,21,11,0.521,0.001520901,0.038998726,12,33,generate,NA,within,pure,words,recognition,cue word,high,NA,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -12,3,1,22,11,0.492,0.001473094,0.038380911,12,33,read,NA,within,pure,words,recognition,cue word,NA,NA,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -12,3,2,23,12,0.711,0.001269138,0.03562497,12,33,generate,NA,within,pure,words,recognition,item,high,NA,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -12,3,2,24,12,0.533,0.001534039,0.039166814,12,33,read,NA,within,pure,words,recognition,item,NA,NA,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -13,1,1,25,13,0.354,0.001468008,0.038314596,20,8,generate,NA,within,pure,words,free recall,item,medium,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,immediate -13,1,1,26,13,0.151,0.000446315,0.021126157,20,8,read,NA,within,pure,words,free recall,item,NA,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,immediate -13,1,1,27,14,0.361,0.001508593,0.038840615,20,8,generate,NA,within,pure,words,free recall,item,medium,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,immediate -13,1,1,28,14,0.21,0.000683171,0.026137539,20,8,read,NA,within,pure,words,free recall,item,NA,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,immediate -13,2,1,29,15,0.302,0.000830958,0.028826335,20,16,generate,NA,between,pure,words,free recall,item,medium,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,immediate -13,2,2,30,15,0.162,0.000346409,0.01861207,20,16,read,NA,between,pure,words,free recall,item,NA,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,immediate -13,2,1,31,16,0.368,0.001104954,0.033240842,20,16,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,immediate -13,2,2,32,16,0.287,0.00077002,0.027749236,20,16,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,immediate -13,3a,1,33,17,0.861,0.000982008,0.031337014,20,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,immediate -13,3a,1,34,17,0.512,0.002172154,0.046606376,20,8,read,NA,within,pure,words,cued recall,item,NA,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,immediate -13,3a,1,35,18,0.928,0.000649249,0.025480365,20,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,immediate -13,3a,1,36,18,0.893,0.000814419,0.028538028,20,8,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,immediate -13,3b,1,37,19,0.819,0.001219328,0.034918877,20,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,long -13,3b,1,38,19,0.346,0.00142136,0.03770093,20,8,read,NA,within,pure,words,cued recall,item,NA,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,long -13,3b,1,39,20,0.906,0.000750673,0.027398404,20,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,long -13,3b,1,40,20,0.727,0.001745132,0.041774781,20,8,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,long -13,4,1,41,21,0.783,0.001429751,0.037812043,20,8,generate,NA,within,pure,words,recognition,item,medium,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,long -13,4,1,42,21,0.542,0.00221937,0.047110194,20,8,read,NA,within,pure,words,recognition,item,NA,incidental,rhyme,verbal/speaking,cue only,full,self-paced,no,younger,long -13,4,1,43,22,0.785,0.001418065,0.037657204,20,8,generate,NA,within,pure,words,recognition,item,medium,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,long -13,4,1,44,22,0.684,0.001954172,0.044206013,20,8,read,NA,within,pure,words,recognition,item,NA,incidental,semantic,verbal/speaking,sentence completion,full,self-paced,no,younger,long -17,1,1,45,23,0.41,0.000700411,0.026465276,48,18,generate,NA,within,pure,words,free recall,item,NA,incidental,NA,writing/typing,NA,full,timed,no,younger,immediate -17,1,1,46,23,0.31,0.000476643,0.021832163,48,18,read,NA,within,pure,words,free recall,item,NA,incidental,NA,writing/typing,NA,full,timed,no,younger,immediate -17,1,2,47,24,0.33,0.000522567,0.022859718,48,18,generate,NA,within,pure,words,free recall,item,NA,incidental,NA,covert/thinking,NA,full,timed,no,younger,immediate -17,1,2,48,24,0.2,0.000251327,0.015853281,48,18,read,NA,within,pure,words,free recall,item,NA,incidental,NA,covert/thinking,NA,full,timed,no,younger,immediate -17,1,1,49,25,0.99,0.000161657,0.012714444,48,18,generate,NA,within,pure,words,cued recall,item,NA,incidental,category,NA,NA,full,timed,no,younger,immediate -17,1,1,50,25,0.96,0.000203578,0.01426807,48,18,read,NA,within,pure,words,cued recall,item,NA,incidental,category,NA,NA,full,timed,no,younger,immediate -17,1,2,51,26,0.97,0.000188872,0.013743053,48,18,generate,NA,within,pure,words,cued recall,item,NA,incidental,antonym,NA,NA,full,timed,no,younger,immediate -17,1,2,52,26,0.83,0.000454924,0.021328956,48,18,read,NA,within,pure,words,cued recall,item,NA,incidental,antonym,NA,NA,full,timed,no,younger,immediate -17,1,1,53,27,0.98,0.000174899,0.013224947,48,18,generate,NA,within,pure,words,cued recall,item,NA,incidental,NA,writing/typing,NA,full,timed,no,younger,immediate -17,1,1,54,27,0.9,0.000306909,0.017518809,48,18,read,NA,within,pure,words,cued recall,item,NA,incidental,NA,writing/typing,NA,full,timed,no,younger,immediate -17,1,2,55,28,0.98,0.000174899,0.013224947,48,18,generate,NA,within,pure,words,cued recall,item,NA,incidental,NA,covert/thinking,NA,full,timed,no,younger,immediate -17,1,2,56,28,0.89,0.000326491,0.018069065,48,18,read,NA,within,pure,words,cued recall,item,NA,incidental,NA,covert/thinking,NA,full,timed,no,younger,immediate -17,1,1,57,29,0.96,0.000324357,0.018009925,24,18,generate,NA,within,pure,words,recognition,source,NA,incidental,category,writing/typing,NA,full,timed,no,younger,immediate -17,1,1,58,29,0.92,0.000429669,0.02072847,24,18,read,NA,within,pure,words,recognition,source,NA,incidental,category,writing/typing,NA,full,timed,no,younger,immediate -17,1,2,59,30,0.95,0.000348958,0.018680421,24,18,generate,NA,within,pure,words,recognition,source,NA,incidental,category,covert/thinking,NA,full,timed,no,younger,immediate -17,1,2,60,30,0.81,0.000797515,0.028240307,24,18,read,NA,within,pure,words,recognition,source,NA,incidental,category,covert/thinking,NA,full,timed,no,younger,immediate -17,1,3,61,31,0.76,0.000980054,0.031305811,24,18,generate,NA,within,pure,words,recognition,source,NA,incidental,antonym,writing/typing,NA,full,timed,no,younger,immediate -17,1,3,62,31,0.8,0.0008342,0.028882519,24,18,read,NA,within,pure,words,recognition,source,NA,incidental,antonym,writing/typing,NA,full,timed,no,younger,immediate -17,1,4,63,32,0.64,0.001327373,0.03643313,24,18,generate,NA,within,pure,words,recognition,source,NA,incidental,antonym,covert/thinking,NA,full,timed,no,younger,immediate -17,1,4,64,32,0.71,0.001149205,0.033899922,24,18,read,NA,within,pure,words,recognition,source,NA,incidental,antonym,covert/thinking,NA,full,timed,no,younger,immediate -22,1,1,65,33,0.207,0.000384235,0.019601923,40,10,generate,NA,within,pure,words,free recall,item,high,intentional,synonym,verbal/speaking,word stem,full,timed,no,younger,immediate -22,1,1,66,33,0.138,0.00023114,0.015203299,40,10,read,NA,within,pure,words,free recall,item,NA,intentional,synonym,verbal/speaking,word stem,full,timed,no,younger,immediate -22,1,1,67,34,0.227,0.00043785,0.020924862,40,10,generate,NA,within,pure,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -22,1,1,68,34,0.125,0.000207945,0.014420305,40,10,read,NA,within,pure,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -24,1,1,69,35,0.23,0.000504167,0.022453656,24,16,generate,low,within,mixed,words,free recall,item,high,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,immediate -24,1,1,70,35,0.27,0.0009375,0.030618622,24,16,generate,high,within,mixed,words,free recall,item,medium,intentional,antonym,verbal/speaking,word stem,full,timed,no,younger,immediate -24,1,1,71,35,0.09,0.000266667,0.016329932,24,16,read,low,within,mixed,words,free recall,item,NA,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,immediate -24,2,1,72,36,0.319,0.000894478,0.029907826,36,8,generate,low,within,mixed,words,free recall,item,high,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,immediate -24,2,1,73,36,0.332,0.000948317,0.030794759,36,8,generate,high,within,mixed,words,free recall,item,medium,intentional,antonym,verbal/speaking,word stem,full,timed,no,younger,immediate -24,2,1,74,36,0.092,0.000193395,0.013906648,36,8,read,low,within,mixed,words,free recall,item,NA,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,immediate -24,2,1,75,37,0.772,0.001057614,0.032520982,36,8,generate,low,within,mixed,words,recognition,item,high,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,immediate -24,2,1,76,37,0.694,0.001351844,0.036767435,36,8,generate,high,within,mixed,words,recognition,item,medium,intentional,antonym,verbal/speaking,word stem,full,timed,no,younger,immediate -24,2,1,77,37,0.348,0.001014625,0.031853183,36,8,read,low,within,mixed,words,recognition,item,NA,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,immediate -24,2,2,78,38,0.111,0.000228145,0.01510448,36,8,generate,low,within,mixed,words,free recall,item,high,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,long -24,2,2,79,38,0.123,0.000252361,0.015885884,36,8,generate,high,within,mixed,words,free recall,item,medium,intentional,antonym,verbal/speaking,word stem,full,timed,no,younger,long -24,2,2,80,38,0.022,9.92358083701705e-05,0.009961717,36,8,read,low,within,mixed,words,free recall,item,NA,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,long -24,2,2,81,39,0.61,0.001549902,0.039368801,36,8,generate,low,within,mixed,words,recognition,item,high,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,long -24,2,2,82,39,0.437,0.001353682,0.036792423,36,8,generate,high,within,mixed,words,recognition,item,medium,intentional,antonym,verbal/speaking,word stem,full,timed,no,younger,long -24,2,2,83,39,0.13,0.000267324,0.016350041,36,8,read,low,within,mixed,words,recognition,item,NA,intentional,antonym,verbal/speaking,word fragment,full,timed,no,younger,long -33,1,1,84,40,0.28,0.000620475,0.024909341,16,75,generate,NA,within,mixed,non-words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -33,1,1,85,40,0.26,0.000555432,0.023567603,16,75,read,NA,within,mixed,non-words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -33,1,2,86,41,0.253,0.00053337,0.023094797,16,75,generate,NA,within,mixed,non-words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -33,1,2,87,41,0.253,0.00053337,0.023094797,16,75,read,NA,within,mixed,non-words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -33,3,1,88,42,0.645,0.001341584,0.036627646,30,12,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -33,3,1,89,43,0.783,0.000912802,0.030212611,30,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -33,3,1,90,44,0.798,0.000856744,0.029270193,30,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -33,3,1,91,45,0.727,0.001114152,0.033378921,30,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -33,3,1,92,42,0.719,0.001140844,0.03377638,30,12,read,NA,within,mixed,non-words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -33,3,1,93,43,0.764,0.00098313,0.031354904,30,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -33,3,1,94,44,0.623,0.001380205,0.037151116,30,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -33,3,1,95,45,0.525,0.001402665,0.037452167,30,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -34,1,1,96,46,0.86,0.000625,0.025,16,30,generate,NA,within,mixed,words,NA,item,low,incidental,NA,writing/typing,word fragment,full,timed,yes,younger,short -34,1,1,97,46,0.59,0.00225625,0.0475,16,30,read,NA,within,mixed,words,NA,item,NA,incidental,NA,writing/typing,word fragment,full,timed,yes,younger,short -34,1,1,98,47,0.76,0.0016,0.04,16,30,generate,NA,within,mixed,words,recognition,item,low,incidental,NA,writing/typing,word fragment,full,timed,yes,younger,short -34,1,1,99,47,0.6,0.003025,0.055,16,30,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,word fragment,full,timed,yes,younger,short -34,4,1,100,48,0.78,0.000672222,0.025927249,18,64,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,writing/typing,word fragment,full,timed,no,younger,long -34,4,1,101,48,0.59,0.0018,0.042426407,18,32,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,writing/typing,word fragment,full,timed,no,younger,long -34,5,1,102,49,0.83,0.000731785,0.027051532,15,48,generate,NA,within,mixed,words,NA,item,low,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,short -34,5,1,103,49,0.59,0.001404168,0.037472223,15,48,read,NA,within,mixed,words,NA,item,NA,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,short -34,5,1,104,50,0.69,0.00122041,0.034934366,15,48,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,short -34,5,1,105,50,0.59,0.001404168,0.037472223,15,48,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,short -34,5,2,106,51,0.81,0.000805174,0.028375596,15,48,generate,NA,within,mixed,words,NA,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -34,5,2,107,51,0.6,0.001396346,0.037367714,15,48,read,NA,within,mixed,words,NA,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -34,5,2,108,52,0.78,0.000916305,0.030270538,15,48,generate,NA,within,mixed,words,recognition,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -34,5,2,109,52,0.63,0.001357776,0.036848014,15,48,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -39,1,1,110,53,0.86,0.000377067,0.019418203,42,32,generate,NA,within,pure,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,1,1,111,53,0.77,0.000574818,0.023975373,42,32,read,NA,within,pure,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,1,2,112,54,0.72,0.000680379,0.026084077,42,32,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,1,2,113,54,0.7,0.000718352,0.026802086,42,32,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,1,3,114,55,0.68,0.000752775,0.027436748,42,32,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,1,3,115,55,0.67,0.000768436,0.027720672,42,32,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,1,4,116,56,0.82,0.00046339,0.021526502,42,32,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,1,4,117,56,0.74,0.000639597,0.025290257,42,32,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,2,1,118,57,0.88,0.000504532,0.022461791,48,8,generate,NA,within,pure,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,2,1,119,57,0.74,0.000959464,0.030975224,48,8,read,NA,within,pure,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,2,1,120,58,0.74,0.000959464,0.030975224,48,8,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,2,1,121,58,0.69,0.001104157,0.033228862,48,8,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,2,1,122,59,0.76,0.000895213,0.029920107,48,8,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,2,1,123,59,0.73,0.000990509,0.031472352,48,8,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,2,1,124,60,0.84,0.000629411,0.025088055,48,8,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,2,1,125,60,0.73,0.000990509,0.031472352,48,8,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,3,1,126,61,0.86,0.00056564,0.023783197,48,8,generate,NA,within,pure,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,3,1,127,61,0.81,0.000728476,0.026990293,48,8,read,NA,within,pure,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,3,1,128,62,0.73,0.000990509,0.031472352,48,8,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,3,1,129,62,0.74,0.000959464,0.030975224,48,8,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,3,1,130,63,0.74,0.000959464,0.030975224,48,8,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,3,1,131,63,0.71,0.001049721,0.032399393,48,8,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,3,1,132,64,0.9,0.000446662,0.021134377,48,8,generate,NA,within,pure,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -39,3,1,133,64,0.79,0.000795542,0.028205359,48,8,read,NA,within,pure,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -46,3,1,134,65,0.389,0.000779074,0.027911896,32,30,generate,NA,within,pure,words,free recall,item,high,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -46,3,1,135,65,0.373,0.000737174,0.02715095,32,30,read,NA,within,pure,words,free recall,item,NA,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -46,3,1,136,66,0.398,0.000801987,0.02831937,32,30,generate,NA,within,pure,words,free recall,item,high,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -46,3,1,137,66,0.373,0.000737174,0.02715095,32,30,read,NA,within,pure,words,free recall,item,NA,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -46,3,2,138,67,0.425,0.00086691,0.029443333,32,30,generate,NA,within,mixed,words,free recall,item,high,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -46,3,2,139,67,0.243,0.000393731,0.019842658,32,30,read,NA,within,mixed,words,free recall,item,NA,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -46,3,2,140,68,0.449,0.000918416,0.030305378,32,30,generate,NA,within,mixed,words,free recall,item,high,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -46,3,2,141,68,0.24,0.000386624,0.019662765,32,30,read,NA,within,mixed,words,free recall,item,NA,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -46,4,1,142,69,0.376,0.001059633,0.032552008,16,30,generate,NA,within,mixed,words,free recall,item,high,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -46,4,1,143,69,0.379,0.001070885,0.032724374,16,30,read,NA,within,mixed,words,free recall,item,NA,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -46,4,1,144,70,0.359,0.000994894,0.031541948,16,30,generate,NA,within,mixed,words,free recall,item,high,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -46,4,1,145,70,0.344,0.000936838,0.030607812,16,30,read,NA,within,mixed,words,free recall,item,NA,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -52,1,1,146,71,0.376,0.00120125,0.034659054,20,20,generate,NA,within,mixed,words,recognition,source,low,incidental,category,covert/thinking,sentence completion,full,timed,no,younger,immediate -52,1,1,147,71,0.565,0.00114005,0.033764626,20,20,read,NA,within,mixed,words,recognition,source,NA,incidental,category,NA,sentence completion,full,timed,no,younger,immediate -52,1,2,148,72,0.295,0.0014792,0.038460369,20,20,generate,NA,within,mixed,words,recognition,source,low,incidental,category,covert/thinking,sentence completion,full,timed,no,older,immediate -52,1,2,149,72,0.527,0.00108045,0.032870199,20,20,read,NA,within,mixed,words,recognition,source,NA,incidental,category,NA,sentence completion,full,timed,no,older,immediate -54,1a,1,150,73,0.624,0.00171891,0.041459742,12,18,generate,NA,within,mixed,words,free recall,item,medium,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate -54,1a,1,151,73,0.383,0.001300461,0.036061903,12,18,read,NA,within,mixed,words,free recall,item,NA,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate -54,1a,2,152,74,0.708,0.001466549,0.038295543,12,18,generate,NA,within,mixed,words,free recall,item,medium,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate -54,1a,2,153,74,0.622,0.00172264,0.041504698,12,18,read,NA,within,mixed,words,free recall,item,NA,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate -54,1b,1,154,75,0.635,0.001696264,0.04118573,12,18,generate,NA,within,mixed,words,free recall,item,medium,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate -54,1b,1,155,75,0.376,0.001269135,0.035624927,12,18,read,NA,within,mixed,words,free recall,item,NA,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate -54,1b,2,156,76,0.73,0.001376381,0.037099613,12,18,generate,NA,within,mixed,words,free recall,item,medium,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate -54,1b,2,157,76,0.614,0.001736337,0.041669375,12,18,read,NA,within,mixed,words,free recall,item,NA,incidental,category,verbal/speaking,word fragment,full,self-paced,yes,younger,immediate -54,2,1,158,77,0.694,0.001519779,0.038984346,12,18,generate,NA,within,mixed,words,free recall,item,medium,intentional,category,verbal/speaking,word fragment,full,timed,yes,younger,immediate -54,2,1,159,77,0.351,0.001154598,0.033979379,12,18,read,NA,within,mixed,words,free recall,item,NA,intentional,category,verbal/speaking,word fragment,full,timed,yes,younger,immediate -54,2,2,160,78,0.632,0.001702794,0.041264924,12,18,generate,NA,within,mixed,words,free recall,item,medium,incidental,category,verbal/speaking,word fragment,full,timed,yes,younger,immediate -54,2,2,161,78,0.314,0.000982413,0.031343461,12,18,read,NA,within,mixed,words,free recall,item,NA,incidental,category,verbal/speaking,word fragment,full,timed,yes,younger,immediate -54,2,3,162,79,0.621,0.001724459,0.04152661,12,18,generate,NA,within,mixed,words,free recall,item,medium,incidental,category,verbal/speaking,word fragment,full,timed,yes,younger,immediate -54,2,3,163,79,0.621,0.001724459,0.04152661,12,18,read,NA,within,mixed,words,free recall,item,NA,incidental,category,verbal/speaking,word fragment,full,timed,yes,younger,immediate -58,1,1,164,80,0.66,0.001529652,0.039110761,18,16,generate,NA,within,mixed,words,recognition,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,long -58,1,1,165,80,0.51,0.001617195,0.040214363,18,16,read,NA,within,mixed,words,recognition,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,long -58,2,1,166,81,0.76,0.0011659,0.034145274,18,16,generate,NA,within,mixed,words,recognition,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,long -58,2,1,167,81,0.59,0.001654547,0.04067612,18,16,read,NA,within,mixed,words,recognition,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,long -62,1,1,168,82,0.63,0.001124619,0.033535342,40,12,generate,NA,within,mixed,non-words,recognition,item,medium,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,short -62,1,1,169,82,0.63,0.001124619,0.033535342,40,12,read,NA,within,mixed,non-words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,short -62,1,1,170,83,0.87,0.000489524,0.022125189,40,12,generate,NA,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,short -62,1,1,171,83,0.86,0.000517836,0.022756018,40,12,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,short -62,1,1,172,84,0.97,0.000251645,0.015863321,40,12,generate,NA,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,short -62,1,1,173,84,0.93,0.000335859,0.018326458,40,12,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,short -62,2,1,174,85,0.43,0.001199709,0.034636823,30,12,generate,NA,within,mixed,non-words,recognition,item,medium,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,long -62,2,1,175,85,0.47,0.001308026,0.036166635,30,12,read,NA,within,mixed,non-words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,long -62,2,1,176,86,0.77,0.000961057,0.031000925,30,12,generate,NA,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,long -62,2,1,177,86,0.79,0.000886665,0.029776916,30,12,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,long -62,2,1,178,87,0.9,0.000497823,0.02231195,30,12,generate,NA,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,long -62,2,1,179,87,0.74,0.001069363,0.032701113,30,12,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,long -63,1,1,180,88,0.55,0.001524736,0.039047867,12,36,generate,NA,between,pure,words,free recall,item,medium,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -63,1,2,181,88,0.41,0.001219032,0.034914637,12,36,read,NA,between,pure,words,free recall,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -63,1,3,182,89,0.27,0.000674815,0.025977202,12,36,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -63,1,4,183,89,0.31,0.000829575,0.028802346,12,36,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -63,1,1,184,90,0.89,0.000568242,0.023837834,12,36,generate,NA,between,pure,words,recognition,item,medium,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -63,1,2,185,90,0.67,0.00137855,0.037128825,12,36,read,NA,between,pure,words,recognition,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -63,1,3,186,91,0.8,0.000911253,0.030186967,12,36,generate,NA,between,pure,words,recognition,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -63,1,4,187,91,0.7,0.001288701,0.035898479,12,36,read,NA,between,pure,words,recognition,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -63,2,1,188,92,0.57,0.001438277,0.037924625,16,36,generate,NA,between,pure,words,free recall,item,medium,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -63,2,2,189,92,0.43,0.00121191,0.034812495,16,36,read,NA,between,pure,words,free recall,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -63,2,3,190,93,0.44,0.001241873,0.035240217,16,36,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -63,2,4,191,93,0.3,0.000743803,0.027272745,16,36,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -63,2,1,192,94,0.63,0.001383069,0.037189632,16,36,generate,NA,between,pure,words,cued recall,item,medium,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -63,2,2,193,94,0.53,0.00142195,0.03770875,16,36,read,NA,between,pure,words,cued recall,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -63,2,3,194,95,0.74,0.001080238,0.032866968,16,36,generate,NA,between,pure,words,cued recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -63,2,4,195,95,0.6,0.001422357,0.037714149,16,36,read,NA,between,pure,words,cued recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -63,2,1,196,96,0.88,0.00056804,0.023833596,16,36,generate,NA,between,pure,words,recognition,item,medium,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -63,2,2,197,96,0.72,0.001149116,0.033898608,16,36,read,NA,between,pure,words,recognition,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -63,2,3,198,97,0.92,0.000441877,0.021020866,16,36,generate,NA,between,pure,words,recognition,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -63,2,4,199,97,0.71,0.001181855,0.034378115,16,36,read,NA,between,pure,words,recognition,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -63,3,1,200,98,0.56,0.001465906,0.038287157,15,36,generate,NA,between,pure,words,free recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,yes,younger,short -63,3,2,201,98,0.54,0.001482593,0.038504453,14,36,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,yes,younger,short -63,3,3,202,99,0.46,0.001363539,0.036926135,13,36,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -63,3,4,203,99,0.43,0.001274356,0.035698124,13,36,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -63,3,1,204,100,0.89,0.000545272,0.023351051,15,36,generate,NA,between,pure,words,recognition,item,medium,intentional,category,writing/typing,word fragment,full,timed,yes,younger,short -63,3,2,205,100,0.87,0.000624149,0.024982981,14,36,read,NA,between,pure,words,recognition,item,NA,intentional,category,writing/typing,word fragment,full,timed,yes,younger,short -63,3,3,206,101,0.89,0.000562538,0.023717887,13,36,generate,NA,between,pure,words,recognition,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -63,3,4,207,101,0.82,0.000822963,0.028687328,13,36,read,NA,between,pure,words,recognition,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -64,1,1,208,102,0.609,0.00178975,0.042305432,29,8,generate,NA,within,mixed,words,free recall,item,medium,incidental,NA,covert/thinking,word stem,full,timed,yes,younger,immediate -64,1,1,209,102,0.446,0.001594827,0.039935287,29,8,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,covert/thinking,word stem,full,timed,yes,younger,immediate -76,1,1,210,103,0.872,0.000508776,0.022556073,34,14,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,1,2,211,103,0.899,0.000415919,0.020394093,36,14,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,1,3,212,103,0.961,0.00025713,0.016035263,39,14,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,1,1,213,104,0.976,0.000252693,0.015896322,34,14,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,1,2,214,104,0.974,0.000246712,0.015707055,36,14,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,1,3,215,104,0.989,0.000207344,0.014399456,39,14,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,1,4,216,105,0.287,0.000583411,0.024153912,35,14,generate,high,between,pure,words,free recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,1,5,217,105,0.367,0.000758823,0.02754675,40,14,generate,low,between,pure,words,free recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,1,6,218,105,0.377,0.000816431,0.028573261,38,14,read,low,between,pure,words,free recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,1,4,219,106,0.447,0.001057565,0.032520222,35,14,generate,high,between,pure,words,free recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,1,5,220,106,0.527,0.00108196,0.032893155,40,14,generate,low,between,pure,words,free recall,item,medium,intentional,NA,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,1,6,221,106,0.547,0.001134615,0.033684043,38,14,read,low,between,pure,words,free recall,item,NA,intentional,NA,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,2,1,222,107,0.365,0.000644351,0.025384075,38,28,generate,NA,between,pure,words,free recall,NA,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,2,2,223,107,0.453,0.000803636,0.028348473,40,28,read,NA,between,pure,words,free recall,NA,NA,intentional,semantic,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,2,3,224,108,0.33,0.000569199,0.023857898,37,28,generate,NA,between,pure,words,free recall,NA,medium,intentional,semantic,writing/typing,word fragment,full,self-paced,no,younger,immediate -76,2,4,225,108,0.349,0.00059416,0.02437539,39,28,read,NA,between,pure,words,free recall,NA,NA,intentional,semantic,writing/typing,word fragment,full,self-paced,no,younger,immediate -76,3,1,226,109,0.439,0.00083957,0.028975329,36,28,generate,high,between,pure,words,free recall,NA,medium,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,3,2,227,109,0.498,0.000899468,0.029991124,38,28,generate,low,between,pure,words,free recall,NA,medium,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,3,3,228,109,0.504,0.000857531,0.029283622,41,28,read,low,between,pure,words,free recall,NA,NA,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,3,4,229,110,0.346,0.000659233,0.025675525,33,28,generate,high,between,pure,words,free recall,NA,medium,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,3,5,230,110,0.353,0.000603786,0.024572049,39,28,generate,low,between,pure,words,free recall,NA,medium,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,3,6,231,110,0.439,0.000778869,0.027908216,40,28,read,low,between,pure,words,free recall,NA,NA,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,4,1,232,111,0.239,0.00055354,0.023527421,16,28,generate,high,between,pure,words,free recall,NA,medium,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate -76,4,2,233,111,0.42,0.00123218,0.035102416,16,28,read,high,between,pure,words,free recall,NA,NA,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate -76,5,1,234,112,0.988,0.000175554,0.013249669,38,28,generate,NA,between,pure,words,recognition,item,medium,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate -76,5,2,235,112,0.934,0.000252613,0.015893809,40,28,read,NA,between,pure,words,recognition,item,NA,intentional,category,covert/thinking,word fragment,full,self-paced,no,younger,immediate -78,1,1,236,113,0.87,0.00072,0.026832816,20,12,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,writing/typing,word fragment,full,timed,no,younger,immediate -78,1,1,237,113,0.78,0.00128,0.035777088,20,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,word fragment,full,timed,no,younger,immediate -78,1,2,238,114,0.71,0.001805,0.042485292,20,12,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,writing/typing,word fragment,full,timed,no,older,immediate -78,1,2,239,114,0.52,0.002205,0.046957428,20,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,word fragment,full,timed,no,older,immediate -78,1,1,240,115,0.79,0.00098,0.031304952,20,12,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,writing/typing,word fragment,full,timed,no,younger,immediate -78,1,1,241,115,0.92,0.001125,0.03354102,20,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,writing/typing,word fragment,full,timed,no,younger,immediate -78,1,2,242,116,0.66,0.00338,0.058137767,20,12,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,writing/typing,word fragment,full,timed,no,older,immediate -78,1,2,243,116,0.64,0.00578,0.076026311,20,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,writing/typing,word fragment,full,timed,no,older,immediate -78,2,1,244,117,0.95,0.000125,0.01118034,20,14,generate,low,within,mixed,words,recognition,item,medium,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -78,2,1,245,117,0.8,0.00098,0.031304952,20,14,read,low,within,mixed,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -78,2,1,246,118,0.97,0.00018,0.013416408,20,14,generate,high,within,mixed,words,recognition,item,medium,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -78,2,1,247,118,0.89,0.00072,0.026832816,20,14,read,high,within,mixed,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -78,2,2,248,119,0.93,0.000405,0.020124612,20,14,generate,low,within,mixed,words,recognition,item,medium,intentional,category,writing/typing,word stem,full,timed,no,older,immediate -78,2,2,249,119,0.66,0.002205,0.046957428,20,14,read,low,within,mixed,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,no,older,immediate -78,2,2,250,120,0.94,5e-04,0.02236068,20,14,generate,high,within,mixed,words,recognition,item,medium,intentional,category,writing/typing,word stem,full,timed,no,older,immediate -78,2,2,251,120,0.73,0.001805,0.042485292,20,14,read,high,within,mixed,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,no,older,immediate -78,2,1,252,121,0.8,0.001445,0.038013156,20,14,generate,low,within,mixed,words,recognition,source,medium,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -78,2,1,253,121,0.9,0.00098,0.031304952,20,14,read,low,within,mixed,words,recognition,source,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -78,2,1,254,122,0.93,5e-04,0.02236068,20,14,generate,high,within,mixed,words,recognition,source,medium,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -78,2,1,255,122,0.93,0.000405,0.020124612,20,14,read,high,within,mixed,words,recognition,source,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -78,2,2,256,123,0.82,0.00128,0.035777088,20,14,generate,low,within,mixed,words,recognition,source,medium,intentional,category,writing/typing,word stem,full,timed,no,older,immediate -78,2,2,257,123,0.71,0.004205,0.064845971,20,14,read,low,within,mixed,words,recognition,source,NA,intentional,category,writing/typing,word stem,full,timed,no,older,immediate -78,2,2,258,124,0.88,0.000845,0.029068884,20,14,generate,high,within,mixed,words,recognition,source,medium,intentional,category,writing/typing,word stem,full,timed,no,older,immediate -78,2,2,259,124,0.68,0.003645,0.060373835,20,14,read,high,within,mixed,words,recognition,source,NA,intentional,category,writing/typing,word stem,full,timed,no,older,immediate -78,2,1,260,125,0.85,0.00072,0.026832816,20,14,generate,low,within,mixed,words,cued recall,item,medium,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -78,2,1,261,125,0.57,0.002205,0.046957428,20,14,read,low,within,mixed,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -78,2,1,262,126,0.81,0.00072,0.026832816,20,14,generate,high,within,mixed,words,cued recall,item,medium,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -78,2,1,263,126,0.57,0.002205,0.046957428,20,14,read,high,within,mixed,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -78,2,2,264,127,0.73,0.00128,0.035777088,20,14,generate,low,within,mixed,words,cued recall,item,medium,intentional,category,writing/typing,word stem,full,timed,no,older,immediate -78,2,2,265,127,0.42,0.002,0.04472136,20,14,read,low,within,mixed,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,older,immediate -78,2,2,266,128,0.6,0.00288,0.053665631,20,14,generate,high,within,mixed,words,cued recall,item,medium,intentional,category,writing/typing,word stem,full,timed,no,older,immediate -78,2,2,267,128,0.36,0.00288,0.053665631,20,14,read,high,within,mixed,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,older,immediate -80,1,1,268,129,0.24,0.000506556,0.022506797,32,12,generate,NA,within,mixed,words,free recall,item,high,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short -80,1,1,269,129,0.089,0.000162839,0.012760848,32,12,read,NA,within,mixed,words,free recall,item,NA,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short -80,1,1,270,130,0.06,0.000124693,0.01116661,32,12,generate,NA,within,mixed,words,free recall,cue word,high,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short -80,1,1,271,130,0.026,8.93751632063962e-05,0.009453844,32,12,read,NA,within,mixed,words,free recall,cue word,NA,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short -80,1,2,272,131,0.365,0.001333666,0.03651939,16,12,generate,NA,within,mixed,words,cued recall,item,high,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short -80,1,2,273,131,0.151,0.000388622,0.019713494,16,12,read,NA,within,mixed,words,cued recall,item,NA,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short -80,1,3,274,132,0.177,0.000472604,0.021739468,16,12,generate,NA,within,mixed,words,cued recall,cue word,high,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short -80,1,3,275,132,0.094,0.00024209,0.015559251,16,12,read,NA,within,mixed,words,cued recall,cue word,NA,incidental,antonym,writing/typing,word fragment,full,timed,yes,younger,short -80,2,1,276,135,0.903,0.000533331,0.023093955,22,15,generate,NA,between,mixed,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short -80,2,2,277,135,0.736,0.001182752,0.034391161,22,15,read,NA,between,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short -80,2,1,278,136,0.779,0.001012852,0.031825341,22,15,generate,NA,between,pure,words,cued recall,cue word,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short -80,2,2,279,136,0.676,0.00138579,0.037226207,22,15,read,NA,between,pure,words,cued recall,cue word,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short -80,2,2,280,139,0.885,0.000595939,0.024411867,22,15,generate,NA,between,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short -80,2,1,281,139,0.755,0.001109156,0.033303994,22,15,read,NA,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short -80,2,2,282,140,0.803,0.000914972,0.030248506,22,15,generate,NA,between,pure,words,cued recall,cue word,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short -80,2,1,283,140,0.745,0.00114827,0.03388613,22,15,read,NA,between,pure,words,cued recall,cue word,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,short -85,1,1,284,143,0.28,0.000959444,0.030974896,34,6,generate,NA,between,pure,words,free recall,item,low,intentional,NA,covert/thinking,word fragment,full,timed,yes,younger,short -85,1,2,285,143,0.24,0.000763087,0.027624034,34,6,read,NA,between,pure,words,free recall,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,yes,younger,short -85,1,3,286,144,0.22,0.000672921,0.025940723,34,6,generate,NA,between,pure,words,free recall,item,low,intentional,NA,covert/thinking,word fragment,full,timed,yes,younger,short -85,1,4,287,144,0.15,0.00040848,0.02021089,34,6,read,NA,between,pure,words,free recall,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,yes,younger,short -86,1,1,288,145,0.34,0.000894034,0.029900405,16,36,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -86,1,2,289,145,0.25,0.000566578,0.023802903,16,36,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -86,1,1,290,146,0.66,0.001322355,0.036364196,16,36,generate,NA,between,pure,words,cued recall,cue word,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -86,1,2,291,146,0.46,0.001296723,0.03601004,16,36,read,NA,between,pure,words,cued recall,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -86,2,1,292,147,0.7,0.001288701,0.035898479,12,36,generate,NA,between,pure,words,recognition,cue word,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -86,2,2,293,147,0.68,0.001350455,0.03674854,12,36,read,NA,between,pure,words,recognition,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -86,2,3,294,148,0.61,0.001324051,0.036387506,19,36,generate,NA,between,pure,words,cued recall,cue word,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -86,2,4,295,148,0.45,0.001294645,0.035981182,15,36,read,NA,between,pure,words,cued recall,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -86,3,1,296,149,0.73,0.000684057,0.026154476,39,36,generate,NA,between,pure,words,recognition,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -86,3,2,297,149,0.64,0.00092176,0.030360498,34,36,read,NA,between,pure,words,recognition,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -86,3,1,298,150,0.55,0.000880513,0.02967344,39,36,generate,NA,between,pure,words,cued recall,cue word,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -86,3,2,299,150,0.42,0.000797089,0.02823277,34,36,read,NA,between,pure,words,cued recall,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -89,1,1,300,151,0.38,0.001107694,0.033282044,12,36,generate,NA,between,pure,words,free recall,item,low,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -89,1,2,301,151,0.29,0.000743477,0.02726678,13,36,read,NA,between,pure,words,free recall,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -89,1,3,302,152,0.4,0.001182945,0.034393969,12,36,generate,NA,between,pure,words,free recall,item,low,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -89,1,4,303,152,0.31,0.000829575,0.028802346,12,36,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -89,1,1,304,153,0.81,0.00087118,0.02951575,12,36,generate,NA,between,pure,words,recognition,item,low,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -89,1,2,305,153,0.63,0.001454334,0.038135736,13,36,read,NA,between,pure,words,recognition,item,NA,incidental,category,writing/typing,word fragment,full,timed,no,younger,immediate -89,1,3,306,154,0.75,0.001109372,0.033307242,12,36,generate,NA,between,pure,words,recognition,item,low,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -89,1,4,307,154,0.71,0.001255354,0.035430976,12,36,read,NA,between,pure,words,recognition,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -89,2,1,308,155,0.22,0.000403998,0.020099694,20,64,generate,NA,between,pure,words,free recall,item,medium,incidental,compound words,writing/typing,word fragment,full,timed,no,younger,immediate -89,2,2,309,155,0.2,0.000353599,0.018804221,20,64,read,NA,between,pure,words,free recall,item,NA,incidental,compound words,writing/typing,word fragment,full,timed,no,younger,immediate -89,2,1,310,156,0.22,0.000403998,0.020099694,20,64,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -89,2,2,311,156,0.18,0.000307174,0.017526377,20,64,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -89,3,1,312,157,0.24,0.000418121,0.020448016,24,64,generate,NA,between,pure,words,free recall,item,medium,incidental,compound words,writing/typing,word fragment,full,timed,no,younger,immediate -89,3,2,313,157,0.17,0.000260563,0.016141963,24,64,read,NA,between,pure,words,free recall,item,NA,incidental,compound words,writing/typing,word fragment,full,timed,no,younger,immediate -89,3,1,314,158,0.19,0.00030107,0.017351383,24,64,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -89,3,2,315,158,0.16,0.00024172,0.015547357,24,64,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -89,3,1,316,159,0.69,0.000974197,0.031212136,24,64,generate,NA,between,pure,words,free recall,item,medium,incidental,compound words,writing/typing,word fragment,full,timed,no,younger,immediate -89,3,2,317,159,0.59,0.001120883,0.033479586,24,64,read,NA,between,pure,words,free recall,item,NA,incidental,compound words,writing/typing,word fragment,full,timed,no,younger,immediate -89,3,1,318,160,0.73,0.000873926,0.029562232,24,64,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -89,3,2,319,160,0.57,0.001127115,0.033572535,24,64,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -93,1a,1,320,161,0.84,0.000806667,0.028401878,15,72,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1a,2,321,161,0.71,0.00096,0.030983867,15,72,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1a,3,322,162,0.57,0.00096,0.030983867,15,72,generate,NA,between,pure,words,cued recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1a,4,323,162,0.54,0.00294,0.054221767,15,72,read,NA,between,pure,words,cued recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1a,5,324,163,0.24,0.000806667,0.028401878,15,72,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1a,6,325,163,0.16,0.000326667,0.018073922,15,72,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1b,1,326,164,0.88,0.000672222,0.025927249,18,72,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1b,2,327,164,0.79,0.000555556,0.023570226,18,72,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1b,3,328,165,0.56,0.001088889,0.032998316,18,72,generate,NA,between,pure,words,cued recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1b,4,329,165,0.44,0.001605556,0.040069384,18,72,read,NA,between,pure,words,cued recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1b,5,330,166,0.36,0.001605556,0.040069384,18,72,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1b,6,331,166,0.32,0.002005556,0.044783429,18,72,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1c,1,332,167,0.89,0.000864286,0.029398737,14,72,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1c,2,333,167,0.93,0.000178571,0.013363062,14,72,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1c,3,334,168,0.64,0.001028571,0.032071349,14,72,generate,NA,between,pure,words,cued recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1c,4,335,168,0.51,0.001207143,0.034743961,14,72,read,NA,between,pure,words,cued recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1c,5,336,169,0.38,0.001828571,0.042761799,14,72,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,1c,6,337,169,0.48,0.001607143,0.040089186,14,72,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,2,1,338,170,0.62,0.001207143,0.034743961,14,72,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,2,2,339,170,0.63,0.000864286,0.029398737,14,72,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,2,1,340,171,0.71,0.001028571,0.032071349,14,72,generate,NA,between,pure,words,cued recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -93,2,2,341,171,0.6,0.000864286,0.029398737,14,72,read,NA,between,pure,words,cued recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -102,1,1,342,172,0.5,0.000901766,0.030029417,32,72,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -102,1,1,343,172,0.59,0.000933073,0.030546239,32,72,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -102,1,1,344,173,0.75,0.000681328,0.026102261,32,72,generate,NA,within,pure,words,recognition,item,low,incidental,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -102,1,1,345,173,0.66,0.000862639,0.029370713,32,72,read,NA,within,pure,words,recognition,item,NA,incidental,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -104,1,1,346,174,0.801,0.000443391,0.02105686,44,75,generate,NA,between,pure,words,recognition,item,low,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate -104,1,2,347,174,0.856,0.000349874,0.01870491,42,75,read,NA,between,pure,words,recognition,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate -104,1,3,348,175,0.769,0.000514699,0.022686985,43,75,generate,NA,between,pure,words,recognition,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -104,1,4,349,175,0.712,0.000589976,0.024289413,46,75,read,NA,between,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -104,1,1,350,176,0.879,0.000395701,0.019892224,44,15,generate,NA,between,pure,words,recognition,item,low,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate -104,1,2,351,176,0.897,0.00036738,0.019167153,42,15,read,NA,between,pure,words,recognition,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate -104,1,3,352,177,0.842,0.000494127,0.022228965,43,15,generate,NA,between,pure,words,recognition,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -104,1,4,353,177,0.782,0.000619935,0.024898493,46,15,read,NA,between,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -104,1,1,354,178,0.84,0.000428729,0.020705771,44,24,generate,NA,between,pure,words,recognition,item,low,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate -104,1,2,355,178,0.876,0.000364253,0.019085406,42,24,read,NA,between,pure,words,recognition,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate -104,1,3,356,179,0.806,0.000514107,0.022673929,43,24,generate,NA,between,pure,words,recognition,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -104,1,4,357,179,0.747,0.000617292,0.024845356,46,24,read,NA,between,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -104,2,1,358,180,0.582,0.001312243,0.036224899,23,25,generate,NA,between,pure,words,cued recall,item,medium,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate -104,2,2,359,180,0.613,0.001287843,0.035886529,23,25,read,NA,between,pure,words,cued recall,item,NA,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate -104,2,3,360,181,0.556,0.001345099,0.036675587,22,25,generate,NA,between,pure,words,cued recall,item,medium,intentional,category,verbal/speaking,word fragment,full,timed,no,younger,immediate -104,2,4,361,181,0.421,0.001107624,0.033280979,22,25,read,NA,between,pure,words,cued recall,item,NA,intentional,category,verbal/speaking,word fragment,full,timed,no,younger,immediate -104,2,5,362,182,0.502,0.001296652,0.036009055,22,25,generate,NA,between,pure,words,cued recall,item,medium,intentional,category,NA,word fragment,full,timed,no,younger,immediate -104,2,6,363,182,0.577,0.001314002,0.036249166,23,25,read,NA,between,pure,words,cued recall,item,NA,intentional,category,NA,word fragment,full,timed,no,younger,immediate -104,3,1,364,183,0.84,0.000556823,0.023597096,23,84,generate,NA,between,pure,words,recognition,item,low,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate -104,3,2,365,183,0.87,0.000473048,0.021749662,23,84,read,NA,between,pure,words,recognition,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate -104,3,3,366,184,0.85,0.000540588,0.02325055,22,84,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate -104,3,3,367,184,0.83,0.000599282,0.024480228,22,84,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,covert/thinking,word fragment,full,timed,no,younger,immediate -104,4,1,368,185,0.62,0.001122292,0.033500633,24,50,generate,NA,between,pure,words,cued recall,item,medium,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate -104,4,2,369,185,0.64,0.001095349,0.033096055,24,50,read,NA,between,pure,words,cued recall,item,NA,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate -104,4,3,370,186,0.57,0.001154079,0.033971731,24,50,generate,NA,within,mixed,words,cued recall,item,medium,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate -104,4,3,371,186,0.54,0.001147462,0.033874213,24,50,read,NA,within,mixed,words,cued recall,item,NA,intentional,category,covert/thinking,word fragment,full,timed,no,younger,immediate -112,1,1,372,187,0.8,0.000622414,0.024948222,58,8,generate,NA,between,pure,words,free recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,yes,younger,immediate -112,1,2,373,187,0.75,0.000760345,0.027574351,58,8,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,yes,younger,immediate -112,1,3,374,188,0.94,0.000248276,0.015756772,58,8,generate,NA,between,pure,words,free recall,item,medium,intentional,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate -112,1,4,375,188,0.92,0.000291379,0.017069836,58,8,read,NA,between,pure,words,free recall,item,NA,intentional,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate -112,1,1,376,189,0.6,0.000387931,0.019695965,58,32,generate,NA,between,pure,words,free recall,cue word,medium,incidental,category,writing/typing,word fragment,full,timed,yes,younger,immediate -112,1,2,377,189,0.65,0.000441379,0.021009029,58,32,read,NA,between,pure,words,free recall,cue word,NA,incidental,category,writing/typing,word fragment,full,timed,yes,younger,immediate -112,1,3,378,190,0.65,0.000337931,0.018382901,58,32,generate,NA,between,pure,words,free recall,cue word,medium,incidental,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate -112,1,4,379,190,0.66,0.000337931,0.018382901,58,32,read,NA,between,pure,words,free recall,cue word,NA,incidental,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate -112,2,1,380,191,0.35,0.000576,0.024,25,36,generate,NA,between,pure,words,free recall,item,low,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,immediate -112,2,2,381,191,0.36,0.000784,0.028,25,36,read,NA,between,pure,words,free recall,item,NA,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,immediate -112,2,3,382,192,0.4,0.0016,0.04,25,6,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,immediate -112,2,3,383,192,0.34,0.000676,0.026,25,30,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,immediate -112,2,4,384,193,0.37,0.000784,0.028,25,30,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,immediate -112,2,4,385,193,0.29,0.001444,0.038,25,6,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,word fragment,full,timed,yes,younger,immediate -114,1,1,386,194,0.44,0.001171852,0.034232326,24,20,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -114,1,1,387,194,0.3,0.000701865,0.026492728,24,20,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -114,1,1,388,195,0.54,0.001349402,0.036734208,24,20,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -114,1,1,389,195,0.52,0.001331693,0.036492364,24,20,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -114,2,1,390,196,0.5,0.001275201,0.035709957,25,20,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -114,2,1,391,196,0.39,0.000995092,0.031545081,25,20,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -114,2,1,392,197,0.56,0.001326755,0.036424646,25,20,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -114,2,1,393,197,0.5,0.001275201,0.035709957,25,20,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -115,1a,1,394,198,0.43,0.00035,0.018708287,14,48,generate,NA,between,pure,words,recognition,item,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,long -115,1a,2,395,198,0.32,0.000457143,0.021380899,14,48,read,NA,between,pure,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,long -115,1a,3,396,199,0.49,0.0014,0.037416574,14,48,generate,NA,between,pure,words,recognition,item,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,long -115,1a,4,397,199,0.42,0.001028571,0.032071349,14,48,read,NA,between,pure,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,long -115,1b,1,398,200,0.93,0.00030625,0.0175,16,48,generate,NA,between,pure,words,cued recall,item,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -115,1b,2,399,200,0.79,0.001225,0.035,16,48,read,NA,between,pure,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -115,1b,3,400,201,0.97,5.625e-05,0.0075,16,48,generate,NA,between,pure,words,cued recall,item,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -115,1b,4,401,201,0.75,0.00105625,0.0325,16,48,read,NA,between,pure,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -115,1c,1,402,202,0.36,9e-04,0.03,16,48,generate,NA,between,pure,words,free recall,item,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -115,1c,2,403,202,0.33,0.000625,0.025,16,48,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -115,1c,3,404,203,0.37,9e-04,0.03,16,48,generate,NA,between,pure,words,free recall,item,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -115,1c,4,405,203,0.49,0.00140625,0.0375,16,48,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -115,2,1,406,204,0.35,0.000426667,0.020655911,15,48,generate,NA,between,pure,words,free recall,item,high,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -115,2,2,407,204,0.45,0.00096,0.030983867,15,48,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -115,2,3,408,205,0.34,0.000666667,0.025819889,15,48,generate,NA,between,pure,words,free recall,item,high,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -115,2,4,409,205,0.34,0.000426667,0.020655911,15,48,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -115,2,1,410,206,0.88,0.000426667,0.020655911,15,48,generate,NA,between,pure,words,cued recall,item,high,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -115,2,2,411,206,0.78,0.001306667,0.036147845,15,48,read,NA,between,pure,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -115,2,3,412,207,0.87,0.000426667,0.020655911,15,48,generate,NA,between,pure,words,cued recall,item,high,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -115,2,4,413,207,0.69,0.001926667,0.043893811,15,48,read,NA,between,pure,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -115,3,1,414,208,0.35,0.000918121,0.030300516,12,72,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -115,3,2,415,208,0.47,0.001302023,0.036083552,12,72,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -115,3,1,416,209,0.63,0.001362862,0.036916962,12,72,generate,NA,between,pure,words,cued recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -115,3,2,417,209,0.51,0.001377609,0.037116156,12,72,read,NA,between,pure,words,cued recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -115,4,1,418,210,0.46,0.001294871,0.035984315,14,48,generate,NA,between,pure,words,free recall,item,high,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -115,4,2,419,210,0.39,0.001077151,0.032819984,14,48,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -115,4,1,420,211,0.97,0.000309034,0.017579354,14,48,generate,NA,between,pure,words,cued recall,item,high,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -115,4,2,421,211,0.83,0.000744352,0.027282822,14,48,read,NA,between,pure,words,cued recall,item,NA,intentional,category,writing/typing,word stem,full,timed,no,younger,immediate -116,1,1,422,212,0.58,0.000729573,0.027010605,46,64,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,1,1,423,212,0.68,0.000646102,0.025418531,46,64,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,1,1,424,213,0.63,0.000702856,0.026511438,46,64,generate,NA,within,mixed,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,1,1,425,213,0.63,0.000702856,0.026511438,46,64,read,NA,within,mixed,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,2,1,426,214,0.55,0.001124911,0.033539694,24,64,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,2,1,427,214,0.62,0.001096072,0.033106972,24,64,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,2,1,428,215,0.58,0.001125049,0.033541752,24,64,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,2,1,429,215,0.52,0.001105946,0.033255769,24,64,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,2,1,430,216,0.45,0.000995394,0.031549869,24,64,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,2,1,431,216,0.52,0.001105946,0.033255769,24,64,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,2,1,432,217,0.5,0.001083274,0.032913134,24,64,generate,NA,within,mixed,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,2,1,433,217,0.5,0.001083274,0.032913134,24,64,read,NA,within,mixed,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,3,1,434,218,0.32,0.000407271,0.020180944,96,8,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,3,1,435,218,0.44,0.00061791,0.024857792,96,8,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,3,1,436,219,0.33,0.000837135,0.028933279,96,4,generate,NA,within,mixed,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -116,3,1,437,219,0.32,0.000800255,0.028288781,96,4,read,NA,within,mixed,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -118,2,1,438,220,0.49,0.001200156,0.034643261,22,35,generate,NA,within,pure,words,cued recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long -118,2,1,439,220,0.48,0.001182234,0.034383629,22,35,read,NA,within,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long -118,3,1,440,221,0.66,0.001273416,0.03568495,18,35,generate,NA,within,pure,words,cued recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long -118,3,1,441,221,0.64,0.001314565,0.036256924,18,35,read,NA,within,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long -118,4,1,442,222,0.62,0.001029925,0.032092451,30,35,generate,NA,within,mixed,words,cued recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long -118,4,1,443,222,0.63,0.001018442,0.031913037,30,35,read,NA,within,mixed,words,cued recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long -118,5,1,444,223,0.34,0.000521741,0.022841661,42,35,generate,NA,within,mixed,words,cued recall,item,low,intentional,unrelated,verbal/speaking,anagram,full,timed,yes,younger,short -118,5,1,445,223,0.34,0.000521741,0.022841661,42,35,read,NA,within,mixed,words,cued recall,item,NA,intentional,unrelated,verbal/speaking,anagram,full,timed,yes,younger,short -118,5,2,446,224,0.72,0.000616057,0.024820494,47,35,generate,NA,within,mixed,words,cued recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,short -118,5,2,447,224,0.75,0.000559928,0.023662802,47,35,read,NA,within,mixed,words,cued recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,short -118,6,1,448,225,0.84,0.00053308,0.023088531,29,35,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long -118,6,1,449,225,0.81,0.000616984,0.02483916,29,35,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long -118,7,1,450,226,0.63,0.001162389,0.034093832,24,35,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long -118,7,1,451,226,0.54,0.001201859,0.034667839,24,35,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,long -119,1,1,452,227,0.942,0.00028802,0.01697114,32,24,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,word stem,full,timed,no,younger,immediate -119,1,1,453,227,0.795,0.000664609,0.025780004,32,24,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,word stem,full,timed,no,younger,immediate -124,1a,1,454,228,0.75,0.001180039,0.034351697,24,12,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -124,1a,1,455,228,0.83,0.00084221,0.029020857,24,12,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -124,1a,1,456,229,0.67,0.001466363,0.038293118,24,12,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -124,1a,1,457,229,0.74,0.001220507,0.034935762,24,12,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -124,1a,1,458,230,0.49,0.001541397,0.039260623,24,12,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1a,1,459,230,0.49,0.001541397,0.039260623,24,12,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1a,1,460,231,0.58,0.00162206,0.040274809,24,12,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1a,1,461,231,0.63,0.001562661,0.039530513,24,12,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1a,1,462,232,0.47,0.001492903,0.038638102,24,12,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1a,1,463,232,0.39,0.001218761,0.03491076,24,12,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1a,1,464,233,0.52,0.001594518,0.039931418,24,12,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1a,1,465,233,0.73,0.001259998,0.035496453,24,12,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1b,2,466,234,0.7,0.001370791,0.03702419,24,12,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -124,1b,2,467,234,0.76,0.001138775,0.033745736,24,12,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -124,1b,2,468,235,0.6,0.001607051,0.040088046,24,12,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -124,1b,2,469,235,0.7,0.001370791,0.03702419,24,12,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -124,1b,2,470,236,0.59,0.001616053,0.040200164,24,12,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1b,2,471,236,0.64,0.001542343,0.03927267,24,12,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1b,2,472,237,0.59,0.001616053,0.040200164,24,12,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1b,2,473,237,0.64,0.001542343,0.03927267,24,12,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1b,2,474,238,0.58,0.00162206,0.040274809,24,12,generate,NA,within,pure,words,free recall,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1b,2,475,238,0.61,0.001595105,0.03993877,24,12,read,NA,within,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1b,2,476,239,0.56,0.001624972,0.040310946,24,12,generate,NA,within,pure,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -124,1b,2,477,239,0.72,0.001298329,0.036032338,24,12,read,NA,within,pure,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,short -126,1,1,478,240,0.385,0.000533556,0.023098822,18,20,generate,NA,between,pure,words,free recall,item,low,incidental,semantic,writing/typing,cue only,full,timed,yes,younger,immediate -126,1,2,479,240,0.448,0.001088889,0.032998316,18,20,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word stem,full,timed,yes,younger,immediate -126,1,3,480,240,0.41,0.0011045,0.033234019,18,20,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word stem,full,timed,yes,younger,immediate -126,1,1,481,241,0.638,0.0019845,0.044547727,18,20,generate,NA,between,pure,words,free recall,item,low,incidental,unrelated,writing/typing,cue only,full,timed,yes,younger,immediate -126,1,2,482,241,0.464,0.001120222,0.033469721,18,20,generate,NA,between,pure,words,free recall,item,medium,incidental,unrelated,writing/typing,word stem,full,timed,yes,younger,immediate -126,1,3,483,241,0.384,0.0008405,0.028991378,18,20,read,NA,between,pure,words,free recall,item,NA,incidental,unrelated,writing/typing,word stem,full,timed,yes,younger,immediate -126,2,1,484,242,0.95,0.0001681,0.012965338,10,20,generate,NA,between,pure,words,cued recall,item,low,incidental,semantic,writing/typing,cue only,full,timed,yes,younger,immediate -126,2,2,485,242,0.795,0.001369513,0.037006925,20,20,read,NA,between,pure,words,cued recall,item,NA,incidental,semantic,writing/typing,cue only,full,timed,yes,younger,immediate -126,2,1,486,243,0.335,0.004389025,0.066249717,10,20,generate,NA,between,pure,words,cued recall,item,low,incidental,unrelated,writing/typing,cue only,full,timed,yes,younger,immediate -126,2,2,487,243,0.3275,0.00496125,0.070436141,20,20,read,NA,between,pure,words,cued recall,item,NA,incidental,unrelated,writing/typing,cue only,full,timed,yes,younger,immediate -126,4,1,488,244,0.258,0.000320601,0.017905337,51,24,generate,NA,between,pure,words,free recall,item,medium,incidental,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -126,4,2,489,244,0.252,0.000309602,0.017595512,51,24,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -126,4,1,490,245,0.348,0.000499108,0.022340726,51,24,generate,NA,between,pure,words,free recall,item,medium,incidental,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate -126,4,2,491,245,0.22,0.000254092,0.015940276,51,24,read,NA,between,pure,words,free recall,item,NA,incidental,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate -126,4,1,492,246,0.393,0.000588258,0.024254022,51,24,generate,NA,between,pure,words,free recall,item,medium,incidental,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate -126,4,2,493,246,0.364,0.000531449,0.023053172,51,24,read,NA,between,pure,words,free recall,item,NA,incidental,unrelated,writing/typing,word fragment,full,timed,yes,younger,immediate -126,5,1,494,247,0.305,0.000602534,0.024546564,30,24,generate,NA,between,pure,words,free recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate -126,5,2,495,247,0.268,0.000486224,0.022050492,31,24,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate -126,5,1,496,248,0.348,0.000730455,0.027026931,30,24,generate,NA,between,pure,words,free recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate -126,5,2,497,248,0.292,0.000552833,0.023512404,31,24,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate -126,5,1,498,249,0.445,0.000992885,0.031510082,30,24,generate,NA,between,pure,words,free recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate -126,5,2,499,249,0.301,0.000578487,0.024051755,31,24,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate -129,1,1,500,250,0.33,0.000799986,0.028284021,20,32,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -129,1,1,501,250,0.19,0.000358941,0.018945736,20,32,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -129,2,1,502,251,0.22,0.000207843,0.014416777,64,26,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -129,2,2,503,251,0.23,0.000221538,0.014884159,64,26,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -129,2,3,504,252,0.25,0.000315271,0.017755875,48,26,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -129,2,3,505,252,0.17,0.000185017,0.01360209,48,26,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -129,3,1,506,253,0.3,0.001007577,0.031742351,20,10,generate,NA,within,mixed,words,free recall,item,low,incidental,NA,verbal/speaking,word fragment,divided,timed,no,younger,immediate -129,3,1,507,253,0.17,0.000450409,0.021222852,20,10,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,verbal/speaking,word fragment,divided,timed,no,younger,immediate -129,4,1,508,254,0.08,0.000157136,0.012535395,19,26,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate -129,4,2,509,254,0.06,0.000130497,0.011423529,19,26,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate -129,4,3,510,255,0.12,0.000237529,0.015411965,16,26,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate -129,4,3,511,255,0.04,0.000114691,0.010709403,16,26,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate -139,1,1,512,256,0.33,0.00056,0.023664319,35,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word stem,full,timed,yes,younger,immediate -139,1,1,513,256,0.29,0.001031429,0.032115862,35,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word stem,full,timed,yes,younger,immediate -139,1,1,514,256,0.29,0.001785714,0.042257713,35,8,generate,NA,within,pure,words,cued recall,item,medium,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -139,1,1,515,256,0.07,0.000285714,0.016903085,35,8,read,NA,within,pure,words,cued recall,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -140,1,1,516,257,0.88,0.000429187,0.020716833,30,30,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -140,1,1,517,257,0.74,0.000816182,0.028568894,30,30,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -140,1,1,518,258,0.68,0.000960607,0.030993658,30,30,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -140,1,1,519,258,0.8,0.000648193,0.025459638,30,30,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -147,1,1,520,259,0.59,0.001540386,0.039247749,37,8,generate,NA,within,mixed,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -147,1,1,521,259,0.331,0.000926208,0.030433673,37,8,read,NA,within,mixed,words,cued recall,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -147,1,2,522,260,0.24,0.000609246,0.0246829,34,8,generate,NA,within,mixed,words,free recall,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -147,1,2,523,260,0.07,0.000164722,0.012834422,34,8,read,NA,within,mixed,words,free recall,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -147,2,1,524,261,0.6,0.001435949,0.037893911,24,16,generate,NA,between,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -147,2,2,525,261,0.38,0.001052805,0.032446963,24,16,read,NA,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -147,2,3,526,262,0.241,0.000541941,0.023279623,24,16,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -147,2,4,527,262,0.168,0.000330722,0.018185752,24,16,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -150,1,1,528,263,0.38,0.000943433,0.03071535,30,15,generate,NA,within,mixed,words,recognition,item,high,incidental,NA,covert/thinking,anagram,full,timed,yes,younger,short -150,1,1,529,263,0.28,0.000606897,0.024635287,30,15,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,covert/thinking,anagram,full,timed,yes,younger,short -150,1,2,530,264,0.5,0.001250564,0.035363312,30,15,generate,NA,within,mixed,words,cued recall,item,high,incidental,NA,covert/thinking,anagram,full,timed,yes,younger,short -150,1,2,531,264,0.38,0.000943433,0.03071535,30,15,read,NA,within,mixed,words,cued recall,item,NA,incidental,NA,covert/thinking,anagram,full,timed,yes,younger,short -155,1,1,532,265,0.23,0.000463336,0.021525252,19,40,generate,NA,between,pure,words,free recall,item,medium,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,1,2,533,265,0.33,0.000791078,0.028126113,19,40,read,NA,between,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,1,1,534,266,0.04,0.000100017,0.010000873,19,40,generate,NA,between,pure,words,NA,order,medium,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,1,2,535,266,0.1,0.000174623,0.013214512,19,40,read,NA,between,pure,words,NA,order,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,2a,1,536,267,0.52,0.000623077,0.024961509,52,32,generate,NA,between,pure,words,free recall,item,medium,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,2a,2,537,267,0.63,0.000492308,0.022188008,52,32,read,NA,between,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,2a,3,538,268,0.44,0.000432692,0.020801257,52,32,generate,NA,between,pure,words,free recall,item,medium,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,2a,4,539,268,0.45,0.000555769,0.023574758,52,32,read,NA,between,pure,words,free recall,item,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,2b,1,540,269,0.1,0.00032,0.017888544,20,32,generate,NA,between,pure,words,NA,order,medium,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,2b,2,541,269,0.21,0.000605,0.024596748,20,32,read,NA,between,pure,words,NA,order,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,2b,3,542,270,0.11,0.00018,0.013416408,20,32,generate,NA,between,pure,words,NA,order,medium,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,2b,4,543,270,0.21,0.00072,0.026832816,20,32,read,NA,between,pure,words,NA,order,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,3a,1,544,271,0.3,0.000272222,0.016499158,18,32,generate,NA,between,pure,words,free recall,item,medium,incidental,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,3a,2,545,271,0.2,0.000555556,0.023570226,18,32,read,NA,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,3b,1,546,272,0.05,0.000138889,0.011785113,18,32,generate,NA,between,pure,words,NA,order,medium,incidental,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -155,3b,2,547,272,0.11,0.000272222,0.016499158,18,32,read,NA,between,pure,words,NA,order,NA,incidental,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -160,1,1,548,273,0.72,0.001271102,0.035652523,20,16,generate,NA,between,pure,words,cued recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,yes,younger,immediate -160,1,2,549,273,0.78,0.001032459,0.032131895,20,16,read,NA,between,pure,words,cued recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,yes,younger,immediate -160,1,3,550,274,0.37,0.001113116,0.0333634,20,16,generate,NA,between,pure,words,free recall,item,medium,intentional,category,writing/typing,word fragment,full,timed,yes,younger,immediate -160,1,4,551,274,0.26,0.000664271,0.025773457,20,16,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,yes,younger,immediate -160,2,1,552,275,0.79,0.000990765,0.031476413,20,16,generate,NA,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -160,2,2,553,275,0.69,0.001375112,0.037082505,20,16,read,NA,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -160,2,3,554,276,0.31,0.000863914,0.029392412,20,16,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -160,2,4,555,276,0.3,0.000822763,0.028683838,20,16,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -162,1,1,556,277,0.63,5e-04,0.02236068,20,20,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -162,1,1,557,277,0.07,0.000125,0.01118034,20,20,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -162,1,2,558,278,0.4,0.000605,0.024596748,20,20,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,older,immediate -162,1,2,559,278,0.06,8e-05,0.008944272,20,20,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,older,immediate -175,1,1,560,279,0.66,0.000898016,0.02996692,40,20,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,self-paced,no,younger,immediate -175,1,1,561,279,0.44,0.000843361,0.029040674,40,20,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,self-paced,no,younger,immediate -175,1,2,562,280,0.6,0.000965928,0.031079386,40,20,generate,NA,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,self-paced,no,younger,immediate -175,1,2,563,280,0.34,0.000607142,0.024640255,40,20,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,self-paced,no,younger,immediate -175,2,1,564,281,0.61,0.000958748,0.030963656,40,20,generate,low,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,self-paced,no,younger,immediate -175,2,1,565,281,0.34,0.000607142,0.024640255,40,20,read,low,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,self-paced,no,younger,immediate -175,2,2,566,282,0.66,0.000898016,0.02996692,40,20,generate,high,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,self-paced,no,younger,immediate -175,2,2,567,282,0.34,0.000607142,0.024640255,40,20,read,high,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,self-paced,no,younger,immediate -182,1,1,568,283,0.89,0.000516835,0.022734015,21,24,generate,NA,within,mixed,words,recognition,item,medium,incidental,semantic,covert/thinking,word stem,full,self-paced,yes,younger,long -182,1,1,569,283,0.5,0.001335468,0.03654406,21,24,read,NA,within,mixed,words,recognition,item,NA,incidental,semantic,covert/thinking,word stem,full,self-paced,yes,younger,long -182,1,1,570,284,0.72,0.001110157,0.033319023,21,24,generate,NA,within,mixed,words,recognition,source,medium,incidental,semantic,covert/thinking,word stem,full,self-paced,yes,younger,long -182,1,1,571,284,0.39,0.001042121,0.032281903,21,24,read,NA,within,mixed,words,recognition,source,NA,incidental,semantic,covert/thinking,word stem,full,self-paced,yes,younger,long -186,1,1,572,285,0.59,0.001445988,0.038026154,19,24,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -186,1,2,573,285,0.61,0.001395385,0.037354856,20,24,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -186,1,3,574,286,0.59,0.001445988,0.038026154,19,24,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -186,1,4,575,286,0.44,0.001227448,0.035034952,20,24,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -186,1,5,576,287,0.54,0.001445693,0.038022265,19,24,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -186,1,6,577,287,0.41,0.001211998,0.034813769,17,24,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -186,2,1,578,288,0.44,0.001227448,0.035034952,20,24,generate,NA,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -186,2,2,579,288,0.46,0.001281661,0.035800291,20,24,read,NA,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -186,2,3,580,289,0.52,0.00142672,0.037771942,19,24,generate,NA,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -186,2,4,581,289,0.63,0.001367004,0.036973012,20,24,read,NA,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -186,2,5,582,290,0.51,0.001381795,0.037172509,20,24,generate,NA,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -186,2,6,583,290,0.41,0.001211998,0.034813769,17,24,read,NA,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,immediate -197,1,1,584,291,0.619,0.00136953,0.037007161,48,7,generate,NA,within,mixed,numbers,free recall,item,low,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate -197,1,1,585,291,0.31,0.000763958,0.027639799,48,7,read,NA,within,mixed,numbers,free recall,item,NA,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate -197,2,1,586,292,0.615,0.002509957,0.050099476,18,7,generate,NA,between,pure,numbers,free recall,item,low,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate -197,2,2,587,292,0.361,0.001737426,0.041682448,18,7,read,NA,between,pure,numbers,free recall,item,NA,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate -229,1,1,588,382,0.265,0.000400849,0.020021224,33,60,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,cue only,full,self-paced,no,younger,immediate -229,1,2,589,382,0.181,0.000233792,0.015290257,33,60,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,cue only,full,self-paced,no,younger,immediate -229,1,1,590,383,0.364,0.000638499,0.025268536,33,60,generate,NA,between,pure,words,free recall,item,medium,intentional,unrelated,writing/typing,cue only,full,self-paced,no,younger,immediate -229,1,2,591,383,0.201,0.000269025,0.01640199,33,60,read,NA,between,pure,words,free recall,item,NA,intentional,unrelated,writing/typing,cue only,full,self-paced,no,younger,immediate -231,1,1,592,293,0.594,0.001927248,0.043900436,16,12,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,writing/typing,NA,full,self-paced,yes,younger,immediate -231,1,1,593,293,0.427,0.001623698,0.040295133,16,12,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,covert/thinking,NA,full,self-paced,yes,younger,immediate -231,1,1,594,294,0.582,0.001937156,0.044013129,16,12,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,NA,full,self-paced,yes,younger,immediate -231,1,1,595,294,0.765,0.00133585,0.036549281,16,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,covert/thinking,NA,full,self-paced,yes,younger,immediate -231,2,1,596,295,0.554,0.001778816,0.042176008,20,12,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,verbal/speaking,NA,full,self-paced,yes,younger,immediate -231,2,1,597,295,0.221,0.000586249,0.024212584,20,12,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,covert/thinking,NA,full,self-paced,yes,younger,immediate -231,2,1,598,296,0.479,0.001660996,0.04075532,20,12,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,NA,full,self-paced,yes,younger,immediate -231,2,1,599,296,0.603,0.001757235,0.041919384,20,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,covert/thinking,NA,full,self-paced,yes,younger,immediate -231,3,1,600,297,0.471,0.001256703,0.035450008,32,12,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,verbal/speaking,NA,full,self-paced,yes,younger,immediate -231,3,1,601,297,0.294,0.000685172,0.026175799,32,12,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,covert/thinking,NA,full,self-paced,yes,younger,immediate -231,3,1,602,298,0.474,0.001263276,0.035542599,32,12,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,NA,full,self-paced,yes,younger,immediate -231,3,1,603,298,0.537,0.001355637,0.03681898,32,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,covert/thinking,NA,full,self-paced,yes,younger,immediate -232,1,1,604,384,0.812180451,0.000481732,0.021948402,40,40,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -232,1,2,605,384,0.795338346,0.000519434,0.022791097,40,40,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -232,1,1,606,385,0.533082707,0.000967534,0.031105205,40,20,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,divided,timed,no,younger,immediate -232,1,2,607,385,0.475338346,0.000905672,0.030094387,40,20,read,high,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,divided,timed,no,younger,immediate -232,1,3,608,386,0.586015038,0.000850044,0.029155513,40,40,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,older,immediate -232,1,4,609,386,0.545112782,0.000850269,0.02915938,40,40,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,older,immediate -232,1,3,610,387,0.381503759,0.000711891,0.026681289,40,20,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,divided,timed,no,older,immediate -232,1,4,611,387,0.294887218,0.000492314,0.022188151,40,20,read,high,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,divided,timed,no,older,immediate -234,1,1,612,388,0.73,0.000730751,0.027032402,34,45,generate,NA,within,mixed,words,free recall,item,low,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -234,1,1,613,388,0.67,0.000850434,0.029162207,34,45,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -234,1,2,614,389,0.69,0.000814595,0.028541112,34,45,generate,NA,within,mixed,words,free recall,item,low,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -234,1,2,615,389,0.68,0.000833103,0.028863519,34,45,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -234,1,1,616,390,0.93,0.000270655,0.016451592,34,45,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -234,1,1,617,390,0.93,0.000270655,0.016451592,34,45,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -234,1,2,618,391,0.88,0.00037222,0.019293002,34,45,generate,NA,within,mixed,words,recognition,source,low,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -234,1,2,619,391,0.88,0.00037222,0.019293002,34,45,read,NA,within,mixed,words,recognition,source,NA,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -234,3,1,620,392,0.69,0.000884532,0.029741089,30,45,generate,NA,within,mixed,words,free recall,item,low,incidental,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -234,3,1,621,392,0.64,0.000971297,0.031165642,30,45,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -234,3,1,622,393,0.69,0.000884532,0.029741089,30,45,generate,NA,within,mixed,words,recognition,source,low,incidental,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -234,3,1,623,393,0.84,0.000504216,0.022454759,30,45,read,NA,within,mixed,words,recognition,source,NA,incidental,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -237,1,1,624,394,0.288,0.000990125,0.031466252,32,8,generate,NA,between,mixed,words,free recall,item,medium,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,2,625,394,0.224,8e-04,0.028284271,32,8,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,1,626,395,0.316,0.001152,0.033941125,32,8,generate,NA,between,mixed,words,free recall,item,high,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,2,627,395,0.276,0.000595125,0.024395184,32,8,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,1,628,396,0.306,0.000820125,0.028637825,32,8,generate,NA,between,mixed,words,free recall,item,medium,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,2,629,396,0.281,0.000913781,0.030228815,32,8,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,1,630,397,0.466,0.000780125,0.027930718,32,8,generate,NA,between,mixed,words,free recall,item,high,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,2,631,397,0.417,0.000968,0.031112698,32,8,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,1,632,398,0.906,0.000575696,0.023993675,32,8,generate,NA,between,mixed,words,recognition,cue word,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,2,633,398,0.76,0.001198531,0.034619804,32,8,read,NA,between,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,1,634,399,0.854,0.000782571,0.027974465,32,8,generate,NA,between,mixed,words,recognition,cue word,high,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,2,635,399,0.75,0.001241961,0.035241461,32,8,read,NA,between,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,1,636,400,0.781,0.001105439,0.033248145,32,8,generate,NA,between,mixed,words,recognition,cue word,medium,incidental,antonym,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,2,637,400,0.708,0.00141299,0.037589757,32,8,read,NA,between,mixed,words,recognition,cue word,NA,incidental,antonym,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,1,638,401,0.76,0.001198531,0.034619804,32,8,generate,NA,between,mixed,words,recognition,cue word,high,incidental,antonym,writing/typing,word fragment,full,timed,no,younger,immediate -237,1,2,639,401,0.729,0.001330208,0.036472014,32,8,read,NA,between,mixed,words,recognition,cue word,NA,incidental,antonym,writing/typing,word fragment,full,timed,no,younger,immediate -237,2,1,640,402,0.481,0.000656364,0.025619595,55,8,generate,NA,within,mixed,words,free recall,item,medium,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate -237,2,1,641,402,0.389,0.000698473,0.026428635,55,8,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate -237,2,1,642,403,0.464,0.000741891,0.027237674,55,8,generate,NA,within,mixed,words,free recall,item,high,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate -237,2,1,643,403,0.442,0.000727273,0.026967994,55,8,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,no,younger,immediate -237,2,1,644,404,0.838,0.000571267,0.023901193,55,8,generate,NA,within,mixed,words,recognition,cue word,medium,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -237,2,1,645,404,0.709,0.000945571,0.030750134,55,8,read,NA,within,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -237,2,1,646,405,0.739,0.000864756,0.029406732,55,8,generate,NA,within,mixed,words,recognition,cue word,high,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -237,2,1,647,405,0.539,0.001140488,0.033771116,55,8,read,NA,within,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -237,3,1,648,406,0.464,0.000880074,0.029666042,54,10,generate,NA,between,mixed,words,free recall,item,medium,incidental,NA,writing/typing,word stem,full,timed,no,younger,immediate -237,3,2,649,406,0.357,0.000785852,0.028033049,54,10,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word stem,full,timed,no,younger,immediate -237,3,1,650,407,0.471,0.000633796,0.025175311,54,10,generate,NA,between,mixed,words,free recall,item,high,incidental,NA,writing/typing,word stem,full,timed,no,younger,immediate -237,3,2,651,407,0.355,0.000785852,0.028033049,54,10,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word stem,full,timed,no,younger,immediate -237,3,1,652,408,0.57,0.000492019,0.02218149,54,10,generate,NA,between,mixed,words,free recall,item,high,incidental,NA,writing/typing,word stem,full,timed,no,younger,immediate -237,3,2,653,408,0.397,0.000528907,0.022997987,54,10,read,NA,between,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word stem,full,timed,no,younger,immediate -237,3,1,654,409,0.974,0.00021234,0.014571887,54,10,generate,NA,between,mixed,words,recognition,cue word,medium,incidental,semantic,writing/typing,word stem,full,timed,no,younger,immediate -237,3,2,655,409,0.88,0.000401826,0.020045595,54,10,read,NA,between,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word stem,full,timed,no,younger,immediate -237,3,1,656,410,0.918,0.000316755,0.01779761,54,10,generate,NA,between,mixed,words,recognition,cue word,high,incidental,semantic,writing/typing,word stem,full,timed,no,younger,immediate -237,3,2,657,410,0.768,0.000692025,0.026306376,54,10,read,NA,between,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word stem,full,timed,no,younger,immediate -237,3,1,658,411,0.926,0.000300244,0.017327547,54,10,generate,NA,between,mixed,words,recognition,cue word,high,incidental,semantic,writing/typing,word stem,full,timed,no,younger,immediate -237,3,2,659,411,0.773,0.000678831,0.02605438,54,10,read,NA,between,mixed,words,recognition,cue word,NA,incidental,semantic,writing/typing,word stem,full,timed,no,younger,immediate -237,5,1,660,412,0.39,0.0007225,0.02687936,40,8,generate,NA,within,mixed,words,free recall,item,high,incidental,NA,writing/typing,word stem,full,timed,yes,younger,immediate -237,5,1,661,412,0.22,0.0005625,0.023717082,40,8,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word stem,full,timed,yes,younger,immediate -237,5,1,662,413,0.39,0.0011025,0.033203915,40,8,generate,NA,within,mixed,words,free recall,item,high,incidental,NA,writing/typing,word stem,full,timed,yes,younger,immediate -237,5,1,663,413,0.26,0.0009025,0.030041638,40,8,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,word stem,full,timed,yes,younger,immediate -263,3,1,664,414,0.79,0.000428868,0.020709133,54,36,generate,NA,within,mixed,words,NA,order,low,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -263,3,1,665,414,0.75,0.000500087,0.022362622,54,36,read,NA,within,mixed,words,NA,order,NA,intentional,NA,verbal/speaking,word fragment,full,timed,no,younger,immediate -269,1,1,666,415,0.22,0.000309152,0.017582725,34,44,generate,NA,between,pure,words,free recall,item,high,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate -269,1,2,667,415,0.21,0.000278334,0.01668334,36,44,read,NA,between,pure,words,free recall,item,NA,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate -269,2,1,668,416,0.26,0.000402603,0.020064975,40,21,generate,NA,within,pure,words,free recall,item,high,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate -269,2,1,669,416,0.18,0.00023984,0.015486753,40,21,read,NA,within,pure,words,free recall,item,NA,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate -269,3,1,670,417,0.29,0.000474019,0.021771982,40,21,generate,NA,within,mixed,words,free recall,item,high,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate -269,3,1,671,417,0.15,0.000191479,0.013837608,40,21,read,NA,within,mixed,words,free recall,item,NA,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate -269,4,1,672,418,0.42,0.00076635,0.027683036,36,36,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -269,4,2,673,418,0.34,0.000580407,0.024091639,36,36,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -271,1,1,674,419,0.9585,0.000112667,0.010614456,24,20,generate,NA,within,pure,words,recognition,item,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate -271,1,1,675,419,0.692,0.001204167,0.034701105,24,20,read,NA,within,pure,words,recognition,item,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate -271,1,2,676,420,0.846,0.001107042,0.033272236,24,20,generate,NA,within,pure,words,recognition,item,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate -271,1,2,677,420,0.681,0.001768167,0.042049574,24,20,read,NA,within,pure,words,recognition,item,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate -271,1,1,678,421,0.811,0.000737042,0.027148511,24,20,generate,NA,within,pure,words,recognition,source,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate -271,1,1,679,421,0.61,0.001584375,0.039804208,24,20,read,NA,within,pure,words,recognition,source,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate -271,1,2,680,422,0.578,0.002752042,0.052459905,24,20,generate,NA,within,pure,words,recognition,source,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate -271,1,2,681,422,0.527,0.002860167,0.053480526,24,20,read,NA,within,pure,words,recognition,source,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate -271,2,1,682,423,0.924,0.000330042,0.018167049,24,20,generate,NA,within,pure,words,recognition,item,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate -271,2,1,683,423,0.685,0.0012615,0.035517601,24,20,read,NA,within,pure,words,recognition,item,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate -271,2,2,684,424,0.795,0.001134375,0.033680484,24,20,generate,NA,within,pure,words,recognition,item,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate -271,2,2,685,424,0.594,0.001820042,0.042661946,24,20,read,NA,within,pure,words,recognition,item,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate -271,2,1,686,425,0.803,0.000651042,0.025515518,24,20,generate,NA,within,pure,words,recognition,source,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate -271,2,1,687,425,0.594,0.002562667,0.050622788,24,20,read,NA,within,pure,words,recognition,source,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,younger,immediate -271,2,2,688,426,0.489,0.001908167,0.043682567,24,20,generate,NA,within,pure,words,recognition,source,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate -271,2,2,689,426,0.36,0.0024,0.048989795,24,20,read,NA,within,pure,words,recognition,source,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,yes,older,immediate -275,1,1,690,299,0.88,0.000590123,0.024292449,32,10,generate,low,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,691,299,0.59,0.001485929,0.038547745,32,10,read,low,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,692,300,0.86,0.000661598,0.025721551,32,10,generate,high,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,693,300,0.69,0.001291471,0.035937047,32,10,read,high,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,694,301,0.91,0.00049018,0.022140019,32,10,generate,low,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,695,301,0.58,0.001491452,0.038619322,32,10,read,low,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,696,302,0.86,0.000661598,0.025721551,32,10,generate,high,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,697,302,0.63,0.001436836,0.037905621,32,10,read,high,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,698,303,0.74,0.001122232,0.033499735,32,10,generate,low,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,699,303,0.68,0.001320814,0.036343,32,10,read,low,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,700,304,0.73,0.001158543,0.03403738,32,10,generate,high,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,701,304,0.7,0.001260415,0.035502319,32,10,read,high,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,702,305,0.85,0.000698551,0.026430122,32,10,generate,low,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,703,305,0.75,0.001085022,0.032939678,32,10,read,low,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,704,306,0.82,0.000813061,0.028514226,32,10,generate,high,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,1,1,705,306,0.73,0.001158543,0.03403738,32,10,read,high,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,short -275,2a,1,706,307,0.93,0.000509634,0.022575075,16,15,generate,NA,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2a,1,707,307,0.75,0.00128866,0.035897908,16,15,read,NA,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2a,1,708,308,0.94,0.000475486,0.021805649,16,15,generate,NA,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2a,1,709,308,0.8,0.001058522,0.032534936,16,15,read,NA,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2a,1,710,309,0.87,0.000742806,0.027254465,16,15,generate,NA,within,mixed,words,recognition,location,medium,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2a,1,711,309,0.81,0.001011972,0.031811511,16,15,read,NA,within,mixed,words,recognition,location,NA,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2a,1,712,310,0.88,0.000700878,0.026474093,16,15,generate,NA,within,mixed,words,recognition,location,medium,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2a,1,713,310,0.77,0.001197861,0.034610134,16,15,read,NA,within,mixed,words,recognition,location,NA,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2b,1,714,311,0.86,0.000785767,0.028031539,16,15,generate,NA,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2b,1,715,311,0.71,0.001458234,0.038186828,16,15,read,NA,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2b,1,716,312,0.89,0.000660077,0.025691961,16,15,generate,NA,within,mixed,words,recognition,item,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2b,1,717,312,0.75,0.00128866,0.035897908,16,15,read,NA,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2b,1,718,313,0.75,0.00128866,0.035897908,16,15,generate,NA,within,mixed,words,recognition,font color,medium,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2b,1,719,313,0.67,0.001601339,0.040016737,16,15,read,NA,within,mixed,words,recognition,font color,NA,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2b,1,720,314,0.7,0.00149697,0.038690694,16,15,generate,NA,within,mixed,words,recognition,font color,medium,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate -275,2b,1,721,314,0.65,0.001659297,0.040734471,16,15,read,NA,within,mixed,words,recognition,font color,NA,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate -281,1,1,722,427,0.88,0.000424383,0.02060055,30,32,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,verbal/speaking,cue only,full,timed,yes,younger,long -281,1,1,723,427,0.68,0.000949853,0.030819691,30,32,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,cue only,full,timed,yes,younger,long -281,1,1,724,428,0.76,0.000753,0.027440851,30,32,generate,NA,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,cue only,full,timed,yes,younger,long -281,1,1,725,428,0.56,0.001074492,0.03277945,30,32,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,verbal/speaking,cue only,full,timed,yes,younger,long -286,1,1,726,429,0.27,0.000444585,0.021085192,36,24,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -286,1,2,727,429,0.28,0.000469456,0.021666928,36,24,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -286,1,1,728,430,0.18,0.000250348,0.015822396,36,24,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -286,1,2,729,430,0.17,0.00023268,0.01525386,36,24,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -286,2,1,730,431,0.24,0.000402316,0.020057808,28,40,generate,NA,between,pure,words,free recall,item,high,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate -286,2,2,731,431,0.23,0.000378154,0.019446193,28,40,read,NA,between,pure,words,free recall,item,NA,intentional,category,writing/typing,word fragment,full,timed,no,younger,immediate -286,3,1,732,432,0.28,0.000549484,0.023441074,24,42,generate,NA,between,pure,words,free recall,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -286,3,2,733,432,0.27,0.000520374,0.022811704,24,42,read,NA,between,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -286,3,3,734,433,0.12,0.000183644,0.013551529,24,42,generate,NA,between,pure,non-words,free recall,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -286,3,4,735,433,0.13,0.00019945,0.014122682,24,42,read,NA,between,pure,non-words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -286,4,1,736,434,0.36,0.000902866,0.030047727,24,21,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -286,4,1,737,434,0.24,0.000497033,0.022294227,24,21,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -286,4,2,738,435,0.12,0.000208858,0.014451934,24,21,generate,NA,within,mixed,non-words,free recall,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -286,4,2,739,435,0.11,0.000191946,0.013854467,24,21,read,NA,within,mixed,non-words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -286,5,1,740,436,0.21,0.000292376,0.017099008,33,48,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -286,5,2,741,436,0.22,0.000312226,0.01766991,33,48,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,no,younger,immediate -291,1a,1,742,437,0.38,0.000984895,0.031383038,28,15,generate,NA,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -291,1a,1,743,437,0.27,0.000600005,0.024494995,28,15,read,NA,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -291,1b,1,744,438,0.43,0.00125135,0.035374422,24,15,generate,NA,within,mixed,words,cued recall,item,low,incidental,NA,writing/typing,word fragment,full,timed,yes,younger,immediate -291,1b,1,745,438,0.33,0.000884118,0.029734123,24,15,read,NA,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,word fragment,full,timed,yes,younger,immediate -291,2,1,746,439,0.39,0.001113797,0.033373591,24,15,generate,NA,within,mixed,words,cued recall,item,medium,incidental,semantic,writing/typing,word stem,full,timed,yes,younger,immediate -291,2,1,747,439,0.22,0.00048582,0.022041316,24,15,read,NA,within,mixed,words,cued recall,item,NA,incidental,semantic,writing/typing,word stem,full,timed,yes,younger,immediate -291,3,1,748,440,0.29,0.000698833,0.026435441,20,24,generate,NA,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -291,3,1,749,440,0.21,0.000435477,0.020868097,20,24,read,NA,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -291,3,2,750,441,0.4,0.001100749,0.033177541,20,24,generate,NA,within,pure,words,cued recall,item,medium,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -291,3,2,751,441,0.28,0.000663053,0.025749811,20,24,read,NA,within,pure,words,cued recall,item,NA,incidental,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -293,1,1,752,807,0.74,0.000818819,0.028615022,32,24,generate,NA,within,pure,words,recognition,item,high,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -293,1,1,753,807,0.66,0.001002344,0.03165982,32,24,read,NA,within,pure,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -293,1,1,754,808,0.65,0.001019366,0.031927507,32,24,generate,NA,within,pure,non-words,recognition,item,high,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -293,1,1,755,808,0.67,0.00098376,0.03136495,32,24,read,NA,within,pure,non-words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -293,2,1,756,809,0.587,0.000810867,0.028475718,48,24,generate,NA,within,pure,words,free recall,item,high,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -293,2,1,757,809,0.642,0.000770675,0.027761029,48,24,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -293,2,1,758,810,0.266,0.000351759,0.018755228,48,24,generate,NA,within,pure,non-words,free recall,item,high,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -293,2,1,759,810,0.333,0.000491201,0.022163049,48,24,read,NA,within,pure,non-words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,no,younger,immediate -293,3,1,760,811,0.82,0.000520415,0.022812607,48,14,generate,low,within,pure,words,recognition,item,high,intentional,compound words,writing/typing,letter transposition,full,timed,no,younger,immediate -293,3,1,761,811,0.71,0.000785876,0.028033487,48,14,read,low,within,pure,words,recognition,item,NA,intentional,compound words,writing/typing,letter transposition,full,timed,no,younger,immediate -293,3,1,762,812,0.65,0.000894234,0.029903748,48,14,generate,high,within,pure,non-words,recognition,item,high,intentional,compound words,writing/typing,letter transposition,full,timed,no,younger,immediate -293,3,1,763,812,0.64,0.000907716,0.03012832,48,14,read,high,within,pure,non-words,recognition,item,NA,intentional,compound words,writing/typing,letter transposition,full,timed,no,younger,immediate -308,1,1,764,442,0.082,0.000182118,0.013495117,28,10,generate,NA,within,NA,non-words,free recall,item,medium,NA,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -308,1,1,765,442,0.132,0.000279881,0.016729634,28,10,read,NA,within,NA,non-words,free recall,item,NA,NA,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -308,1,1,766,443,0.704,0.001357972,0.036850677,28,10,generate,NA,within,NA,non-words,recognition,item,medium,NA,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -308,1,1,767,443,0.707,0.001347296,0.036705529,28,10,read,NA,within,NA,non-words,recognition,item,NA,NA,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -308,2,1,768,444,0.071,0.000224982,0.014999389,9,10,generate,NA,within,NA,non-words,free recall,item,medium,NA,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -308,2,1,769,444,0.136,0.000395008,0.019874804,9,10,read,NA,within,NA,non-words,free recall,item,NA,NA,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -308,2,1,770,445,0.656,0.002057555,0.045360282,9,10,generate,NA,within,NA,non-words,recognition,item,medium,NA,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -308,2,1,771,445,0.778,0.001453848,0.038129361,9,10,read,NA,within,NA,non-words,recognition,item,NA,NA,NA,verbal/speaking,letter transposition,full,timed,yes,younger,immediate -344,1,1,772,446,0.85,0.000520227,0.022808489,32,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,1,1,773,446,0.64,0.001056131,0.032498172,32,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,1,1,774,447,0.58,0.001110718,0.033327443,32,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,1,1,775,447,0.66,0.001023072,0.031985494,32,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,2,1,776,448,0.81,0.000634547,0.025190214,32,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,2,1,777,448,0.51,0.001081623,0.03288804,32,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,2,1,778,449,0.64,0.001056131,0.032498172,32,22,generate,NA,within,mixed,words,recognition,location,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,2,1,779,449,0.62,0.00108211,0.032895441,32,22,read,NA,within,mixed,words,recognition,location,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,3,1,780,450,0.84,0.000577055,0.024021974,24,44,generate,NA,between,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,3,2,781,450,0.77,0.000790563,0.028116954,24,44,read,NA,between,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,3,1,782,451,0.59,0.001164736,0.03412823,24,44,generate,NA,between,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,3,2,783,451,0.69,0.001012312,0.031816849,24,44,read,NA,between,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,4,1,784,452,0.81,0.000634547,0.025190214,32,22,generate,NA,between,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,4,2,785,452,0.74,0.000835752,0.028909376,32,22,read,NA,between,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,4,1,786,453,0.66,0.001023072,0.031985494,32,22,generate,NA,between,mixed,words,recognition,location,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,4,2,787,453,0.65,0.001040445,0.032255935,32,22,read,NA,between,mixed,words,recognition,location,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,5,1,788,454,0.76,0.000779785,0.027924628,32,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,5,1,789,454,0.6,0.001100441,0.033172896,32,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,5,1,790,455,0.61,0.001092261,0.03304937,32,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,5,1,791,455,0.68,0.00098364,0.031363037,32,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,6,1,792,456,0.83,0.000493933,0.022224614,40,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,6,1,793,456,0.61,0.000935486,0.030585718,40,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,6,1,794,457,0.63,0.000916459,0.030273069,40,22,generate,NA,within,mixed,words,recognition,background color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,6,1,795,457,0.61,0.000935486,0.030585718,40,22,read,NA,within,mixed,words,recognition,background color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,7,1,796,458,0.77,0.000751107,0.027406327,32,22,generate,NA,within,mixed,words,recognition,cue word,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,7,1,797,458,0.64,0.001056131,0.032498172,32,22,read,NA,within,mixed,words,recognition,cue word,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,7,1,798,459,0.62,0.00108211,0.032895441,32,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,7,1,799,459,0.63,0.001070045,0.032711537,32,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,8,1,800,460,0.84,0.000409505,0.020236238,48,22,generate,NA,within,mixed,words,recognition,cue word,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,8,1,801,460,0.52,0.000815537,0.028557604,48,22,read,NA,within,mixed,words,recognition,cue word,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,8,1,802,461,0.53,0.000821712,0.028665514,48,22,generate,NA,within,mixed,words,recognition,font color,high,incidental,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,8,1,803,461,0.56,0.000831113,0.02882903,48,22,read,NA,within,mixed,words,recognition,font color,NA,incidental,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,9,1,804,462,0.86,0.000368015,0.019183729,48,22,generate,NA,within,mixed,words,recognition,cue word,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,9,1,805,462,0.6,0.000821947,0.028669619,48,22,read,NA,within,mixed,words,recognition,cue word,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,9,1,806,463,0.56,0.000831113,0.02882903,48,22,generate,NA,within,mixed,words,recognition,font color,high,incidental,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,9,1,807,463,0.63,0.000799243,0.02827089,48,22,read,NA,within,mixed,words,recognition,font color,NA,incidental,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -344,10a,1,808,464,0.89,0.000354267,0.018821994,32,60,generate,NA,within,mixed,words,recognition,cue word,high,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -344,10a,1,809,464,0.67,0.000859449,0.02931636,32,60,read,NA,within,mixed,words,recognition,cue word,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -344,10a,1,810,465,0.623,0.000923289,0.030385673,32,60,generate,NA,within,mixed,words,recognition,font color,high,incidental,category,writing/typing,word stem,full,timed,yes,younger,immediate -344,10a,1,811,465,0.7,0.000803433,0.028344898,32,60,read,NA,within,mixed,words,recognition,font color,NA,incidental,category,writing/typing,word stem,full,timed,yes,younger,immediate -344,10b,1,812,466,0.92,0.000239161,0.015464839,48,30,generate,NA,within,mixed,words,recognition,item,high,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -344,10b,1,813,466,0.72,0.000621947,0.024938863,48,30,read,NA,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -344,10b,1,814,467,0.598,0.000770812,0.027763504,48,30,generate,NA,within,mixed,words,recognition,font color,high,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate -344,10b,1,815,467,0.66,0.000715711,0.026752772,48,30,read,NA,within,mixed,words,recognition,font color,NA,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate -344,11,1,816,468,0.95,0.000182458,0.013507697,52,30,generate,NA,within,mixed,words,recognition,item,high,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -344,11,1,817,468,0.76,0.000512436,0.02263704,52,30,read,NA,within,mixed,words,recognition,item,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -344,11,1,818,469,0.622,0.000709622,0.026638733,52,30,generate,NA,within,mixed,words,recognition,location,high,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate -344,11,1,819,469,0.63,0.00070318,0.026517537,52,30,read,NA,within,mixed,words,recognition,location,NA,incidental,category,covert/thinking,word stem,full,timed,yes,younger,immediate -345,1,1,820,470,0.37,0.001,0.031622777,10,10,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -345,1,1,821,470,0.26,0.00081,0.028460499,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -345,1,2,822,471,0.58,0.00025,0.015811388,10,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,yes,younger,immediate -345,1,2,823,471,0.36,0.00064,0.025298221,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,timed,yes,younger,immediate -345,1,3,824,472,0.14,0.00064,0.025298221,10,10,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate -345,1,3,825,472,0.16,0.00025,0.015811388,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate -345,1,4,826,473,0.43,0.00049,0.022135944,10,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate -345,1,4,827,473,0.25,0.001,0.031622777,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate -345,1,5,828,474,0.13,0.00064,0.025298221,10,10,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate -345,1,5,829,474,0.14,0.00016,0.012649111,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate -345,1,6,830,475,0.35,0.00049,0.022135944,10,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate -345,1,6,831,475,0.15,9e-05,0.009486833,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate -345,2,1,832,476,0.37,0.000555556,0.023570226,18,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -345,2,1,833,476,0.16,5e-05,0.007071068,18,10,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -345,2,1,834,477,0.48,0.000555556,0.023570226,18,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,yes,younger,immediate -345,2,1,835,477,0.29,0.00045,0.021213203,18,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,timed,yes,younger,immediate -345,2,2,836,478,0.15,0.000405,0.020124612,20,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,older,immediate -345,2,2,837,478,0.12,0.000125,0.01118034,20,10,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,older,immediate -345,2,2,838,479,0.39,0.000245,0.015652476,20,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate -345,2,2,839,479,0.13,0.00018,0.013416408,20,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate -345,2,3,840,480,0.11,5e-05,0.007071068,18,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,older,immediate -345,2,3,841,480,0.09,8.88888888888889e-05,0.00942809,18,10,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,older,immediate -345,2,3,842,481,0.27,0.000355556,0.018856181,18,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate -345,2,3,843,481,0.09,8.88888888888889e-05,0.00942809,18,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,timed,yes,older,immediate -345,3,1,844,482,0.51,0.001422222,0.037712362,18,10,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,anagram,full,timed,yes,younger,immediate -345,3,1,845,482,0.37,0.000938889,0.030641294,18,10,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,anagram,full,timed,yes,younger,immediate -345,3,1,846,483,0.53,0.001088889,0.032998316,18,10,generate,NA,within,mixed,words,cued recall,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -345,3,1,847,483,0.32,0.00045,0.021213203,18,10,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -345,3,2,848,484,0.38,0.000355556,0.018856181,18,10,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,anagram,full,timed,yes,older,immediate -345,3,2,849,484,0.26,0.000672222,0.025927249,18,10,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,anagram,full,timed,yes,older,immediate -345,3,2,850,485,0.25,2e-04,0.014142136,18,10,generate,NA,within,mixed,words,cued recall,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate -345,3,2,851,485,0.25,0.000272222,0.016499158,18,10,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate -345,4,1,852,486,0.42,0.00045,0.021213203,18,10,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,anagram,divided,timed,yes,younger,immediate -345,4,1,853,486,0.21,0.000672222,0.025927249,18,10,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,anagram,divided,timed,yes,younger,immediate -345,4,1,854,487,0.23,2.22222222222222e-05,0.004714045,18,10,generate,NA,within,mixed,words,cued recall,item,medium,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate -345,4,1,855,487,0.19,0.000138889,0.011785113,18,10,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate -345,5,1,856,488,0.16,9e-05,0.009486833,10,10,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate -345,5,1,857,488,0.155,9e-05,0.009486833,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,younger,immediate -345,5,2,858,489,0.41,0.00081,0.028460499,10,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,divided,timed,yes,younger,immediate -345,5,2,859,489,0.18,0.00025,0.015811388,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,divided,timed,yes,younger,immediate -345,5,3,860,490,0.1,0.00016,0.012649111,10,10,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,older,immediate -345,5,3,861,490,0.09,9e-05,0.009486833,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,older,immediate -345,5,4,862,491,0.39,0.00064,0.025298221,10,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,divided,timed,yes,older,immediate -345,5,4,863,491,0.11,0.00016,0.012649111,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,divided,timed,yes,older,immediate -345,5,5,864,492,0.09,0.00016,0.012649111,10,10,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,older,immediate -345,5,5,865,492,0.07,4e-05,0.006324555,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,divided,timed,yes,older,immediate -345,5,6,866,493,0.33,0.00081,0.028460499,10,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,semantic,verbal/speaking,word stem,divided,timed,yes,older,immediate -345,5,6,867,493,0.06,9e-05,0.009486833,10,10,read,NA,within,mixed,words,free recall,item,NA,intentional,semantic,verbal/speaking,word stem,divided,timed,no,older,immediate -346,1,1,868,315,0.61,0.00075,0.027386128,30,12,generate,NA,within,mixed,words,free recall,item,medium,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate -346,1,1,869,315,0.38,0.000853333,0.02921187,30,12,read,NA,within,mixed,words,free recall,item,NA,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate -346,1,1,870,316,0.73,0.00108,0.032863353,30,12,generate,NA,within,mixed,words,recognition,source,medium,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate -346,1,1,871,316,0.53,0.002083333,0.045643546,30,12,read,NA,within,mixed,words,recognition,source,NA,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate -346,2,1,872,317,0.65,0.00035,0.018708287,56,12,generate,NA,within,mixed,words,free recall,item,medium,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate -346,2,1,873,317,0.31,0.00035,0.018708287,56,12,read,NA,within,mixed,words,free recall,item,NA,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate -346,2,1,874,318,0.81,0.00035,0.018708287,56,12,generate,NA,within,mixed,words,recognition,source,medium,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate -346,2,1,875,318,0.54,0.001301786,0.036080268,56,12,read,NA,within,mixed,words,recognition,source,NA,intentional,definitions,verbal/speaking,NA,full,timed,no,younger,immediate -362,1,1,876,494,0.93,0.000113636,0.010660036,22,50,generate,NA,within,mixed,words,recognition,item,medium,intentional,semantic,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -362,1,1,877,494,0.83,0.000222727,0.01492405,22,50,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -362,1,1,878,495,0.78,0.000290909,0.017056057,22,50,generate,NA,within,mixed,words,recognition,source,medium,intentional,semantic,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -362,1,1,879,495,0.68,0.000654545,0.025584086,22,50,read,NA,within,mixed,words,recognition,source,NA,intentional,semantic,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -404,1,1,880,496,0.89,0.000640743,0.025312903,12,20,generate,NA,between,pure,words,recognition,item,low,intentional,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -404,1,2,881,496,0.74,0.001293814,0.03596962,12,20,read,NA,between,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -404,2,1,882,497,0.86,0.000718094,0.026797272,16,20,generate,NA,between,pure,words,recognition,item,low,intentional,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -404,2,2,883,497,0.7,0.001368045,0.036987089,16,20,read,NA,between,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -434,1,1,884,498,0.84,0.000596783,0.024429147,28,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -434,1,1,885,498,0.51,0.001177362,0.034312712,28,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -434,1,1,886,499,0.59,0.001204555,0.034706704,28,22,generate,NA,within,mixed,words,recognition,font type,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -434,1,1,887,499,0.7,0.001021744,0.031964736,28,22,read,NA,within,mixed,words,recognition,font type,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -434,2a,1,888,500,0.73,0.001005977,0.031717142,24,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2a,1,889,500,0.57,0.001297424,0.036019772,24,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2a,1,890,501,0.6,0.001283063,0.035819867,24,24,generate,NA,within,mixed,words,recognition,font color,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2a,1,891,501,0.7,0.001094433,0.033082221,24,24,read,NA,within,mixed,words,recognition,font color,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2b,1,892,502,0.79,0.000739021,0.027184936,28,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2b,1,893,502,0.64,0.001126322,0.033560726,28,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2b,1,894,503,0.61,0.001164853,0.034129946,28,24,generate,NA,within,mixed,words,recognition,font type,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2b,1,895,503,0.7,0.001001044,0.031639273,28,24,read,NA,within,mixed,words,recognition,font type,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2c,1,896,504,0.83,0.000483926,0.021998324,40,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2c,1,897,504,0.7,0.000787644,0.028064993,40,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2c,1,898,505,0.62,0.000908015,0.030133291,40,24,generate,NA,within,mixed,words,recognition,location,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2c,1,899,505,0.63,0.000897891,0.02996483,40,24,read,NA,within,mixed,words,recognition,location,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2d,1,900,506,0.84,0.000584692,0.024180411,28,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2d,1,901,506,0.68,0.001049013,0.032388478,28,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2d,1,902,507,0.67,0.001070837,0.032723643,28,24,generate,NA,within,mixed,words,recognition,background color,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,2d,1,903,507,0.66,0.001091066,0.033031286,28,24,read,NA,within,mixed,words,recognition,background color,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,4a,1,904,508,0.71,0.000937107,0.030612211,32,20,generate,NA,within,mixed,non-words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,4a,1,905,508,0.72,0.000911148,0.03018523,32,20,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,4a,1,906,509,0.55,0.001138198,0.033737189,32,20,generate,NA,within,mixed,non-words,recognition,font color,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,4a,1,907,509,0.63,0.001096652,0.033115744,32,20,read,NA,within,mixed,non-words,recognition,font color,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,4b,1,908,510,0.62,0.001064931,0.032633287,34,20,generate,NA,within,mixed,non-words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,4b,1,909,510,0.66,0.001006831,0.031730592,34,20,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,4b,1,910,511,0.53,0.001082661,0.03290382,34,20,generate,NA,within,mixed,non-words,recognition,font type,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,4b,1,911,511,0.63,0.001053058,0.032450849,34,20,read,NA,within,mixed,non-words,recognition,font type,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,5,1,912,512,0.63,0.000939247,0.030647143,40,20,generate,NA,within,mixed,non-words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,5,1,913,512,0.66,0.000898016,0.02996692,40,20,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,5,1,914,513,0.62,0.000949838,0.030819441,40,20,generate,NA,within,mixed,non-words,recognition,location,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,5,1,915,513,0.6,0.000965928,0.031079386,40,20,read,NA,within,mixed,non-words,recognition,location,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -434,6a,1,916,514,0.86,0.000478397,0.021872289,32,25,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -434,6a,1,917,514,0.71,0.000887814,0.0297962,32,25,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -434,6a,1,918,515,0.64,0.001025457,0.032022753,32,25,generate,NA,within,mixed,words,recognition,font color,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -434,6a,1,919,515,0.62,0.001050681,0.03241421,32,25,read,NA,within,mixed,words,recognition,font color,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -434,6b,1,920,516,0.85,0.000488546,0.022103082,40,16,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -434,6b,1,921,516,0.68,0.000923738,0.03039306,40,16,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -434,6b,1,922,517,0.67,0.000942955,0.030707577,40,16,generate,NA,within,mixed,words,recognition,font color,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -434,6b,1,923,517,0.66,0.000960769,0.030996267,40,16,read,NA,within,mixed,words,recognition,font color,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -434,6b,1,924,518,0.81,0.000595904,0.024411146,40,16,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -434,6b,1,925,518,0.8,0.000623315,0.02496628,40,16,read,NA,within,mixed,non-words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -434,6b,1,926,519,0.57,0.001044993,0.032326352,40,16,generate,NA,within,mixed,non-words,recognition,font color,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -434,6b,1,927,519,0.58,0.001043078,0.032296712,40,16,read,NA,within,mixed,non-words,recognition,font color,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -442,1,1,928,319,0.91,0.000784,0.028,16,30,generate,NA,within,mixed,words,recognition,item,medium,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -442,1,1,929,319,0.73,0.002950662,0.05432,16,30,read,NA,within,mixed,words,recognition,item,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -442,1,1,930,320,0.65,0.001385794,0.037226255,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -442,1,1,931,320,0.6,0.001465704,0.038284511,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -442,1,1,932,321,0.59,0.001473914,0.038391584,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -442,1,1,933,321,0.59,0.001473914,0.038391584,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -442,1,1,934,322,0.66,0.001362654,0.036914142,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -442,1,1,935,322,0.57,0.001482109,0.03849817,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -442,1,1,936,323,0.6,0.001465704,0.038284511,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -442,1,1,937,323,0.56,0.001482048,0.038497383,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,writing/typing,word stem,full,timed,yes,younger,immediate -442,1,1,938,324,0.76,0.001038614,0.032227537,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -442,1,1,939,324,0.61,0.001454808,0.03814195,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -442,1,1,940,325,0.81,0.000845168,0.029071776,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -442,1,1,941,325,0.79,0.000922978,0.030380548,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -442,1,1,942,326,0.79,0.000922978,0.030380548,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -442,1,1,943,326,0.69,0.001281029,0.035791462,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -442,1,1,944,327,0.81,0.000845168,0.029071776,16,30,generate,NA,within,mixed,words,recognition,location,medium,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -442,1,1,945,327,0.69,0.001281029,0.035791462,16,30,read,NA,within,mixed,words,recognition,location,NA,intentional,category,covert/thinking,word stem,full,timed,yes,younger,immediate -448,1,1,946,520,0.8,0.001162137,0.034090131,20,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -448,1,1,947,520,0.55,0.001944523,0.044096742,20,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -448,1,1,948,521,0.9,0.000681224,0.026100262,20,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -448,1,1,949,521,0.57,0.001948333,0.04413992,20,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -448,1,1,950,522,0.8,0.001162137,0.034090131,20,10,generate,low,within,mixed,words,recognition,source,low,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -448,1,1,951,522,0.84,0.000959942,0.030982925,20,10,read,low,within,mixed,words,recognition,source,NA,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -448,1,1,952,523,0.84,0.000959942,0.030982925,20,10,generate,high,within,mixed,words,recognition,source,low,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -448,1,1,953,523,0.8,0.001162137,0.034090131,20,10,read,high,within,mixed,words,recognition,source,NA,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -448,1,2,954,524,0.85,0.000910868,0.030180587,20,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,2,955,524,0.72,0.001556626,0.039454096,20,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,2,956,525,0.85,0.000910868,0.030180587,20,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,2,957,525,0.73,0.001510669,0.038867323,20,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,2,958,526,0.73,0.001510669,0.038867323,20,10,generate,low,within,mixed,words,recognition,source,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,2,959,526,0.72,0.001556626,0.039454096,20,10,read,low,within,mixed,words,recognition,source,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,2,960,527,0.77,0.001315116,0.036264526,20,10,generate,high,within,mixed,words,recognition,source,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,2,961,527,0.84,0.000959942,0.030982925,20,10,read,high,within,mixed,words,recognition,source,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,3,962,528,0.86,0.000862683,0.029371469,20,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,3,963,528,0.85,0.000910868,0.030180587,20,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,3,964,529,0.88,0.000769484,0.027739576,20,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,3,965,529,0.88,0.000769484,0.027739576,20,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,3,966,530,0.68,0.001722259,0.041500113,20,10,generate,low,within,mixed,words,recognition,source,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,3,967,530,0.71,0.001600975,0.040012188,20,10,read,low,within,mixed,words,recognition,source,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,3,968,531,0.84,0.000959942,0.030982925,20,10,generate,high,within,mixed,words,recognition,source,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,1,3,969,531,0.81,0.001111031,0.033332126,20,10,read,high,within,mixed,words,recognition,source,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,2,1,970,532,0.84,0.000959942,0.030982925,20,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -448,2,1,971,532,0.45,0.00172064,0.041480594,20,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -448,2,1,972,533,0.91,0.000639165,0.025281713,20,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -448,2,1,973,533,0.51,0.001893818,0.043518023,20,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,self-paced,yes,younger,immediate -448,2,2,974,534,0.79,0.001213317,0.034832693,20,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,2,2,975,534,0.78,0.001264376,0.035558069,20,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,2,2,976,535,0.88,0.000769484,0.027739576,20,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,2,2,977,535,0.67,0.001758089,0.041929568,20,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,2,3,978,536,0.82,0.001060181,0.032560427,20,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,2,3,979,536,0.85,0.000910868,0.030180587,20,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,2,3,980,537,0.86,0.000862683,0.029371469,20,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -448,2,3,981,537,0.86,0.000862683,0.029371469,20,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -449,1,1,982,538,0.3714,0.00026825,0.016378329,29,20,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -449,1,1,983,538,0.2103,0.000482582,0.021967759,29,20,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -449,1,2,984,539,0.2192,0.000292497,0.017102541,29,20,generate,NA,within,mixed,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate -449,1,2,985,539,0.1508,0.000113217,0.010640343,29,20,read,NA,within,mixed,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,older,immediate -465,1,1,986,328,0.83,0.0004,0.02,32,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate -465,1,1,987,328,0.61,0.0009,0.03,32,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate -465,1,1,988,329,0.81,0.0009,0.03,32,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate -465,1,1,989,329,0.62,0.0004,0.02,32,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate -465,1,1,990,330,0.87,0.0016,0.04,32,10,generate,high,within,mixed,words,recognition,source,low,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate -465,1,1,991,330,0.7,0.0009,0.03,32,10,read,high,within,mixed,words,recognition,source,NA,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate -465,1,1,992,331,0.8,0.0025,0.05,32,10,generate,low,within,mixed,words,recognition,source,low,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate -465,1,1,993,331,0.65,0.0025,0.05,32,10,read,low,within,mixed,words,recognition,source,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate -465,2,1,994,332,0.84,0.0004,0.02,70,10,generate,high,within,mixed,words,recognition,item,low,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate -465,2,1,995,332,0.54,0.0004,0.02,70,10,read,high,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate -465,2,1,996,333,0.65,0.0004,0.02,70,10,generate,low,within,mixed,words,recognition,item,low,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate -465,2,1,997,333,0.46,0.0009,0.03,70,10,read,low,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate -465,2,1,998,334,0.49,0.0016,0.04,70,10,generate,high,within,mixed,words,recognition,NA,low,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate -465,2,1,999,334,0.52,0.0009,0.03,70,10,read,high,within,mixed,words,recognition,NA,NA,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate -465,2,1,1000,335,0.8,0.0004,0.02,70,10,generate,low,within,mixed,words,recognition,NA,low,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate -465,2,1,1001,335,0.72,0.0009,0.03,70,10,read,low,within,mixed,words,recognition,NA,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate -465,3,1,1002,336,0.74,0.0004,0.02,14,20,generate,high,between,mixed,words,recognition,item,low,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate -465,3,2,1003,336,0.78,0.0004,0.02,14,20,read,high,between,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate -465,3,1,1004,337,0.65,0.0004,0.02,14,20,generate,low,between,mixed,words,recognition,item,low,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate -465,3,2,1005,337,0.46,0.0009,0.03,14,20,read,low,between,mixed,words,recognition,item,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate -465,3,1,1006,338,0.44,0.0049,0.07,14,20,generate,high,between,mixed,words,recognition,NA,low,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate -465,3,2,1007,338,0.55,0.0025,0.05,14,20,read,high,between,mixed,words,recognition,NA,NA,incidental,NA,writing/typing,anagram,full,self-paced,yes,younger,immediate -465,3,1,1008,339,0.67,0.0025,0.05,14,20,generate,NA,between,mixed,words,recognition,NA,low,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate -465,3,2,1009,339,0.66,0.0025,0.05,14,20,read,NA,between,mixed,words,recognition,NA,NA,incidental,NA,writing/typing,letter transposition,full,self-paced,yes,younger,immediate -501,1,1,1010,540,0.83,0.000202397,0.014226622,120,20,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -501,1,1,1011,540,0.5,0.000375333,0.01937352,120,20,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -501,1,1,1012,541,0.54,0.000388284,0.019704934,120,20,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -501,1,1,1013,541,0.58,0.000389807,0.019743542,120,20,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -501,1,1,1014,542,0.67,0.000352391,0.018772076,120,20,generate,NA,within,mixed,words,recognition,source,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -501,1,1,1015,542,0.71,0.000320899,0.017913655,120,20,read,NA,within,mixed,words,recognition,source,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -515,1,1,1016,543,0.81,0.000290909,0.017056057,22,40,generate,low,within,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -515,1,1,1017,543,0.68,0.000454545,0.021320072,22,40,read,low,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -515,1,2,1018,544,0.8,0.000368182,0.019188064,22,40,generate,high,within,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -515,1,2,1019,544,0.53,0.000368182,0.019188064,22,40,read,high,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -515,1,3,1020,545,0.69,0.000890909,0.0298481,22,40,generate,low,within,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -515,1,3,1021,545,0.53,0.000654545,0.025584086,22,40,read,low,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -515,1,4,1022,546,0.43,0.000890909,0.0298481,22,40,generate,high,within,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -515,1,4,1023,546,0.38,0.000768182,0.027716093,22,40,read,high,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -544,1a,1,1024,547,0.8,0.00088582,0.029762722,24,15,generate,NA,within,mixed,words,recognition,item,medium,incidental,antonym,verbal/speaking,cue only,full,self-paced,yes,younger,immediate -544,1a,1,1025,547,0.7,0.001252733,0.035393964,24,15,read,NA,within,mixed,words,recognition,item,NA,incidental,antonym,verbal/speaking,cue only,full,self-paced,yes,younger,immediate -553,3,1,1026,548,0.31,0.00094219,0.030695113,16,16,generate,NA,within,pure,words,free recall,item,low,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -553,3,1,1027,548,0.2,0.000496802,0.022289054,16,16,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -553,3,2,1028,549,0.29,0.000852967,0.029205594,16,16,generate,NA,within,pure,words,free recall,item,low,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -553,3,2,1029,549,0.16,0.000372111,0.019290175,16,16,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -553,4,1,1030,550,0.57,0.001843018,0.042930385,12,16,generate,NA,within,pure,words,free recall,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -553,4,1,1031,550,0.56,0.001842943,0.042929507,12,16,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -553,4,2,1032,551,0.54,0.001832452,0.04280715,12,16,generate,NA,within,pure,words,free recall,item,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -553,4,2,1033,551,0.56,0.001842943,0.042929507,12,16,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -553,5,1,1034,552,0.3,0.00089731,0.029955135,16,16,generate,NA,within,pure,words,free recall,item,low,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -553,5,1,1035,552,0.28,0.000809295,0.028448117,16,16,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -553,5,2,1036,553,0.27,0.000766421,0.027684313,16,16,generate,NA,within,pure,words,free recall,item,low,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -553,5,2,1037,553,0.24,0.000643667,0.025370602,16,16,read,NA,within,pure,words,free recall,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -553,6,1,1038,554,0.89,0.000645381,0.025404355,16,16,generate,NA,within,pure,words,recognition,item,low,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -553,6,1,1039,554,0.75,0.00125997,0.035496052,16,16,read,NA,within,pure,words,recognition,item,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,short -690,1,1,1040,575,0.62,0.001225935,0.03501336,36,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,1,1,1041,575,0.26,0.00052636,0.022942536,36,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,1,1,1042,576,0.65,0.001178733,0.034332681,36,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,1,1,1043,576,0.29,0.000619729,0.024894349,36,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,1,1,1044,577,0.67,0.001137561,0.033727745,36,12,generate,NA,within,mixed,words,recognition,source,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,1,1,1045,577,0.76,0.000883428,0.02972251,36,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,1,1,1046,578,0.79,0.000785069,0.028019087,36,12,generate,NA,within,mixed,words,recognition,source,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,1,1,1047,578,0.63,0.001212266,0.034817616,36,12,read,NA,within,mixed,words,recognition,source,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,2,1,1048,579,0.64,0.001269798,0.03563422,33,12,generate,NA,between,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,2,2,1049,579,0.49,0.001269019,0.035623288,33,12,read,NA,between,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,2,1,1050,580,0.67,0.001207244,0.034745419,33,12,generate,NA,between,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,2,2,1051,580,0.25,0.000527029,0.022957116,33,12,read,NA,between,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,2,1,1052,581,0.6,0.001323072,0.036374055,33,12,generate,NA,between,mixed,words,recognition,font color,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,2,2,1053,581,0.51,0.001300447,0.03606171,33,12,read,NA,between,mixed,words,recognition,font color,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,2,1,1054,582,0.49,0.001269019,0.035623288,33,12,generate,NA,between,mixed,words,recognition,font color,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -690,2,2,1055,582,0.63,0.001286526,0.035868175,33,12,read,NA,between,mixed,words,recognition,font color,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -691,1,1,1056,340,0.83,0.000686322,0.026197747,24,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -691,1,1,1057,340,0.6,0.001309596,0.036188335,24,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -691,1,1,1058,341,0.8,0.000789888,0.028104944,24,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate -691,1,1,1059,341,0.65,0.001238197,0.035188021,24,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate -691,1,1,1060,342,0.59,0.001316931,0.036289546,24,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -691,1,1,1061,342,0.66,0.001217521,0.034892997,24,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -691,1,1,1062,343,0.53,0.001309221,0.036183154,24,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate -691,1,1,1063,343,0.62,0.00128778,0.035885658,24,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate -691,2,1,1064,344,0.81,0.000634547,0.025190214,32,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate -691,2,1,1065,344,0.52,0.001091859,0.033043287,32,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate -691,2,1,1066,345,0.63,0.001070045,0.032711537,32,22,generate,NA,within,mixed,words,recognition,font type,high,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate -691,2,1,1067,345,0.73,0.000862794,0.029373349,32,22,read,NA,within,mixed,words,recognition,font type,NA,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate -691,3,1,1068,346,0.82,0.00072059,0.026843809,24,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -691,3,1,1069,346,0.65,0.001238197,0.035188021,24,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -691,3,1,1070,347,0.85,0.000619104,0.024881796,24,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate -691,3,1,1071,347,0.75,0.000961621,0.03101001,24,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate -691,3,1,1072,348,0.57,0.001324254,0.036390296,24,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -691,3,1,1073,348,0.64,0.001256864,0.035452278,24,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -691,3,1,1074,349,0.65,0.001238197,0.035188021,24,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate -691,3,1,1075,349,0.74,0.000994599,0.031537258,24,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,covert/thinking,word stem,full,timed,yes,younger,immediate -691,4,1,1076,350,0.7,0.001001044,0.031639273,28,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,covert/thinking,word stem,full,timed,yes,younger,immediate -691,4,1,1077,350,0.59,0.001180151,0.034353322,28,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,covert/thinking,word stem,full,timed,yes,younger,immediate -691,4,1,1078,351,0.65,0.001109594,0.033310569,28,24,generate,NA,within,mixed,words,recognition,font color,high,intentional,rhyme,covert/thinking,word stem,full,timed,yes,younger,immediate -691,4,1,1079,351,0.74,0.000891297,0.029854592,28,24,read,NA,within,mixed,words,recognition,font color,NA,intentional,rhyme,covert/thinking,word stem,full,timed,yes,younger,immediate -691,5,1,1080,352,0.82,0.000605505,0.024607015,32,22,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -691,5,1,1081,352,0.52,0.001091859,0.033043287,32,22,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -691,5,1,1082,353,0.55,0.001110582,0.033325398,32,22,generate,NA,within,mixed,words,recognition,font color,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -691,5,1,1083,353,0.63,0.001070045,0.032711537,32,22,read,NA,within,mixed,words,recognition,font color,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -691,6,1,1084,354,0.85,0.00057042,0.023883466,32,16,generate,NA,within,mixed,words,recognition,item,medium,intentional,antonym,writing/typing,letter transposition,full,timed,yes,younger,immediate -691,6,1,1085,354,0.66,0.00112178,0.033492988,32,16,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,letter transposition,full,timed,yes,younger,immediate -691,6,1,1086,355,0.8,0.000727774,0.026977291,32,16,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,antonym,writing/typing,letter transposition,full,timed,yes,younger,immediate -691,6,1,1087,355,0.82,0.000663926,0.025766757,32,16,read,NA,within,mixed,non-words,recognition,item,NA,intentional,antonym,writing/typing,letter transposition,full,timed,yes,younger,immediate -691,6,1,1088,356,0.63,0.001173285,0.03425325,32,16,generate,NA,within,mixed,words,recognition,location,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -691,6,1,1089,356,0.53,0.001206269,0.03473138,32,16,read,NA,within,mixed,words,recognition,location,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -691,6,1,1090,357,0.59,0.001213373,0.034833503,32,16,generate,NA,within,mixed,non-words,recognition,location,medium,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -691,6,1,1091,357,0.52,0.001197204,0.034600635,32,16,read,NA,within,mixed,non-words,recognition,location,NA,intentional,NA,writing/typing,letter transposition,full,timed,yes,younger,immediate -702,1,1,1092,555,0.66,0.00045,0.021213203,18,40,generate,NA,within,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,self-paced,yes,younger,immediate -702,1,1,1093,555,0.58,0.001088889,0.032998316,18,40,read,NA,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,self-paced,yes,younger,immediate -702,1,2,1094,556,0.5,0.001422222,0.037712362,18,40,generate,NA,within,pure,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word stem,full,self-paced,yes,older,immediate -702,1,2,1095,556,0.36,0.000672222,0.025927249,18,40,read,NA,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word stem,full,self-paced,yes,older,immediate -738,1,1,1096,557,0.95,0.000223391,0.014946275,36,50,generate,NA,within,mixed,words,recognition,source,low,intentional,semantic,writing/typing,cue only,full,self-paced,yes,younger,immediate -738,1,1,1097,557,0.72,0.000677676,0.026032208,36,100,generate,NA,within,mixed,words,recognition,source,medium,intentional,semantic,covert/thinking,word fragment,full,self-paced,yes,younger,immediate -738,1,1,1098,557,0.61,0.000878808,0.029644701,36,50,read,NA,within,mixed,words,recognition,source,NA,intentional,semantic,covert/thinking,word fragment,full,self-paced,yes,younger,immediate -745,1,1,1099,558,0.162,0.000423647,0.020582676,26,8,generate,NA,within,mixed,words,free recall,item,medium,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,immediate -745,1,1,1100,558,0.038,0.000143588,0.011982803,26,8,read,NA,within,mixed,words,free recall,item,NA,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,immediate -745,1,1,1101,559,0.806,0.001129918,0.033614254,26,8,generate,NA,within,mixed,words,recognition,item,medium,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,immediate -745,1,1,1102,559,0.457,0.001743695,0.041757575,26,8,read,NA,within,mixed,words,recognition,item,NA,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,immediate -745,2a,1,1103,560,0.262,0.000753134,0.027443283,30,8,generate,NA,within,mixed,words,free recall,item,medium,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,immediate -745,2a,1,1104,560,0.071,0.000180532,0.013436221,30,8,read,NA,within,mixed,words,free recall,item,NA,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,immediate -745,2b,1,1105,561,0.614,0.001139126,0.033750943,54,8,generate,NA,within,mixed,words,recognition,item,medium,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,long -745,2b,1,1106,561,0.355,0.000769632,0.027742244,54,8,read,NA,within,mixed,words,recognition,item,NA,intentional,definitions,verbal/speaking,word stem,full,self-paced,no,younger,long -762,1,1,1107,562,0.59,0.000795738,0.02820882,52,20,generate,low,between,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -762,1,1,1108,562,0.755,0.00057093,0.023894148,52,20,generate,high,between,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -762,1,2,1109,562,0.445,0.000773362,0.027809381,38,40,read,low,between,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -762,1,1,1110,563,0.63,0.000984615,0.031378582,26,20,generate,low,between,pure,words,recognition,font color,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -762,1,1,1111,563,0.54,0.000753846,0.027456259,26,20,generate,high,between,pure,words,recognition,font color,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -762,1,2,1112,563,0.67,0.001184211,0.03441236,19,40,read,low,between,pure,words,recognition,font color,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -762,1,3,1113,564,0.57,0.000753846,0.027456259,26,20,generate,low,between,pure,words,recognition,background color,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -762,1,3,1114,564,0.49,0.00065,0.025495098,26,20,generate,high,between,pure,words,recognition,background color,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -762,1,4,1115,564,0.56,0.000889474,0.029824045,19,40,read,low,between,pure,words,recognition,background color,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -762,1a,1,1116,565,0.73,0.000946038,0.030757731,32,16,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -762,1a,1,1117,565,0.62,0.001186515,0.034445821,32,16,read,NA,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -762,1a,1,1118,566,0.63,0.0015125,0.038890873,32,16,generate,NA,within,pure,words,recognition,background color,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -762,1a,1,1119,566,0.62,8e-04,0.028284271,32,16,read,NA,within,pure,words,recognition,background color,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -762,2,1,1120,567,0.76,0.00090916,0.030152286,26,20,generate,low,within,pure,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,2,1,1121,567,0.61,0.00127348,0.035685848,26,20,read,low,within,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,2,2,1122,568,0.73,0.001005941,0.031716576,26,20,generate,high,within,pure,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,2,2,1123,568,0.61,0.00127348,0.035685848,26,20,read,high,within,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,2,1,1124,569,0.61,0.001246154,0.035300904,26,20,generate,low,within,pure,words,recognition,font color,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,2,1,1125,569,0.7,0.001538462,0.039223227,26,20,read,low,within,pure,words,recognition,font color,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,2,2,1126,570,0.53,0.000984615,0.031378582,26,20,generate,high,within,pure,words,recognition,font color,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,2,2,1127,570,0.67,0.000753846,0.027456259,26,20,read,high,within,pure,words,recognition,font color,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,3,1,1128,571,0.73,0.000962516,0.031024448,28,20,generate,low,within,pure,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,3,1,1129,571,0.54,0.001234255,0.035131971,28,20,read,low,within,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,3,2,1130,572,0.78,0.000805592,0.028382955,28,20,generate,high,within,pure,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,3,2,1131,572,0.54,0.001234255,0.035131971,28,20,read,high,within,pure,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,3,1,1132,573,0.81,0.000432143,0.020788046,28,20,generate,low,within,pure,words,recognition,location,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,3,1,1133,573,0.74,0.000603571,0.024567691,28,20,read,low,within,pure,words,recognition,location,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,3,2,1134,574,0.75,0.000514286,0.022677868,28,20,generate,high,within,pure,words,recognition,location,medium,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -762,3,2,1135,574,0.7,0.000803571,0.028347335,28,20,read,high,within,pure,words,recognition,location,NA,intentional,NA,verbal/speaking,anagram,full,timed,no,younger,immediate -767,1,1,1136,583,0.273,0.00040277,0.02006913,49,16,generate,NA,between,pure,words,cued recall,item,medium,intentional,antonym,verbal/speaking,cue only,full,timed,no,younger,immediate -767,1,2,1137,583,0.381,0.000506671,0.022509346,67,16,read,NA,between,pure,words,cued recall,item,NA,intentional,antonym,verbal/speaking,cue only,full,timed,no,younger,immediate -781,1,1,1138,584,0.84,0.000253125,0.015909903,32,46,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -781,1,1,1139,584,0.52,0.000528125,0.02298097,32,46,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,self-paced,no,younger,immediate -797,1,1,1140,585,0.87,0.000483064,0.021978726,24,50,generate,NA,within,mixed,words,recognition,item,medium,intentional,synonym,covert/thinking,word fragment,full,timed,yes,younger,immediate -797,1,1,1141,585,0.65,0.001079081,0.032849362,24,50,read,NA,within,mixed,words,recognition,item,NA,intentional,synonym,covert/thinking,word fragment,full,timed,yes,younger,immediate -816,1.1a,1,1142,586,0.92,0.000286867,0.016937158,40,24,generate,NA,within,mixed,words,recognition,item,high,intentional,synonym,verbal/speaking,word fragment,full,timed,yes,younger,immediate -816,1.1a,1,1143,586,0.67,0.000842559,0.029026862,40,24,read,NA,within,mixed,words,recognition,item,NA,intentional,synonym,verbal/speaking,word fragment,full,timed,yes,younger,immediate -816,1.1b,1,1144,587,0.86,0.000406047,0.020150617,41,24,generate,NA,within,mixed,words,recognition,item,high,intentional,synonym,verbal/speaking,word fragment,full,timed,yes,younger,long -816,1.1b,1,1145,587,0.56,0.000917003,0.030282055,41,24,read,NA,within,mixed,words,recognition,item,NA,intentional,synonym,verbal/speaking,word fragment,full,timed,yes,younger,long -816,1.2a,1,1146,588,0.88,0.000561063,0.023686759,22,20,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word fragment,full,timed,yes,younger,immediate -816,1.2a,1,1147,588,0.6,0.001404885,0.037481795,22,20,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word fragment,full,timed,yes,younger,immediate -816,1.2b,1,1148,589,0.85,0.000634498,0.025189253,24,20,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word fragment,divided,timed,yes,younger,immediate -816,1.2b,1,1149,589,0.53,0.001341776,0.036630258,24,20,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word fragment,divided,timed,yes,younger,immediate -816,1.3a,1,1150,590,0.69,0.000713254,0.026706819,50,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,1.3a,1,1151,590,0.57,0.000825212,0.028726506,50,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,1.3a,1,1152,591,0.59,0.000820649,0.028646974,50,20,generate,NA,within,mixed,words,recognition,font color,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,1.3a,1,1153,591,0.68,0.000729459,0.027008505,50,20,read,NA,within,mixed,words,recognition,font color,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,1.3b,1,1154,592,0.71,0.000699949,0.026456551,48,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,1.3b,1,1155,592,0.6,0.000842386,0.02902388,48,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,1.3b,1,1156,593,0.73,0.000660467,0.025699552,48,20,generate,NA,within,mixed,words,recognition,location,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,1.3b,1,1157,593,0.68,0.000752975,0.027440385,48,20,read,NA,within,mixed,words,recognition,location,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,1.3c,1,1158,594,0.72,0.000752927,0.027439512,42,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,1.3c,1,1159,594,0.6,0.000931961,0.030528034,42,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,1.3c,1,1160,595,0.52,0.000924693,0.030408758,42,20,generate,NA,within,mixed,words,recognition,background color,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,1.3c,1,1161,595,0.55,0.000940549,0.030668376,42,20,read,NA,within,mixed,words,recognition,background color,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.1,1,1162,596,0.69,0.000713254,0.026706819,50,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.1,1,1163,596,0.57,0.000825212,0.028726506,50,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.1,2,1164,597,0.61,0.000849793,0.029151209,47,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.1,2,1165,597,0.49,0.00082118,0.028656231,47,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.1,1,1166,598,0.59,0.000820649,0.028646974,50,20,generate,NA,within,mixed,words,recognition,font color,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.1,1,1167,598,0.68,0.000729459,0.027008505,50,20,read,NA,within,mixed,words,recognition,font color,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.1,2,1168,599,0.52,0.00084948,0.029145843,47,20,generate,NA,within,mixed,words,recognition,font color,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.1,2,1169,599,0.61,0.000849793,0.029151209,47,20,read,NA,within,mixed,words,recognition,font color,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.2,1,1170,600,0.71,0.000699949,0.026456551,48,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.2,1,1171,600,0.6,0.000842386,0.02902388,48,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.2,2,1172,601,0.58,0.001093086,0.033061846,34,20,generate,NA,within,mixed,words,recognition,item,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.2,2,1173,601,0.46,0.000987315,0.031421564,34,20,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.2,1,1174,602,0.73,0.000660467,0.025699552,48,20,generate,NA,within,mixed,words,recognition,location,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.2,1,1175,602,0.68,0.000752975,0.027440385,48,20,read,NA,within,mixed,words,recognition,location,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.2,2,1176,603,0.66,0.001006831,0.031730592,34,20,generate,NA,within,mixed,words,recognition,location,low,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,2.2,2,1177,603,0.75,0.000795213,0.028199526,34,20,read,NA,within,mixed,words,recognition,location,NA,intentional,semantic,writing/typing,sentence completion,full,timed,yes,younger,immediate -816,3,1,1178,604,0.87,0.000483064,0.021978726,24,50,generate,NA,within,mixed,words,recognition,item,medium,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,immediate -816,3,1,1179,604,0.65,0.001079081,0.032849362,24,50,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,immediate -831,1,1,1180,605,0.25,0.000648718,0.025469942,12,24,generate,NA,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -831,1,1,1181,605,0.18,0.000409608,0.020238766,12,24,read,NA,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -831,2,1,1182,606,0.39,0.001456375,0.038162482,16,12,generate,low,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -831,2,1,1183,606,0.24,0.000720365,0.026839611,16,12,read,low,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -831,2,1,1184,607,0.18,0.000483001,0.021977278,16,12,generate,high,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -831,2,1,1185,607,0.16,0.00041645,0.020407115,16,12,read,high,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -831,3,1,1186,608,0.43,0.001737994,0.041689251,12,12,generate,low,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -831,3,1,1187,608,0.26,0.000861205,0.02934629,12,12,read,low,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -831,3,1,1188,609,0.22,0.000674753,0.025975999,12,12,generate,high,within,mixed,words,cued recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -831,3,1,1189,609,0.12,0.00032153,0.017931261,12,12,read,high,within,mixed,words,cued recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -854,1,1,1190,610,0.58,0.001301614,0.036077888,62,6,generate,low,within,mixed,words,recognition,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -854,1,1,1191,610,0.2,0.000373366,0.019322682,62,6,read,low,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -854,1,1,1192,611,0.76,0.000913804,0.03022919,62,6,generate,high,within,mixed,words,recognition,item,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -854,1,1,1193,611,0.67,0.001176675,0.034302703,62,6,read,high,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -854,1,1,1194,612,0.79,0.000812064,0.028496729,62,6,generate,low,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -854,1,1,1195,612,0.21,0.000399463,0.019986562,62,6,read,low,within,mixed,words,recognition,source,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -854,1,1,1196,613,0.68,0.001152695,0.033951364,62,6,generate,high,within,mixed,words,recognition,source,low,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -854,1,1,1197,613,0.39,0.000977989,0.031272811,62,6,read,high,within,mixed,words,recognition,source,NA,intentional,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -861,1a,1,1198,614,0.7,0.001120325,0.033471251,28,16,generate,NA,within,mixed,words,recognition,item,medium,intentional,synonym,verbal/speaking,word fragment,full,timed,yes,younger,immediate -861,1a,1,1199,614,0.56,0.001328063,0.036442602,28,16,read,NA,within,mixed,words,recognition,item,NA,intentional,synonym,verbal/speaking,word fragment,full,timed,yes,younger,immediate -861,1b,1,1200,615,0.69,0.001255023,0.035426298,24,16,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -861,1b,1,1201,615,0.74,0.00109056,0.033023626,24,16,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -861,2a,1,1202,616,0.69,0.000845585,0.029078948,30,72,generate,NA,between,mixed,words,recognition,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -861,2a,2,1203,616,0.66,0.000899465,0.029991074,30,72,read,NA,between,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -905,2,1,1204,617,0.56,0.001100865,0.033179279,28,36,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -905,2,2,1205,617,0.72,0.000879575,0.029657626,28,36,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -905,2,3,1206,618,0.38,0.000798228,0.028252928,28,36,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,long -905,2,4,1207,618,0.31,0.000597809,0.024450139,28,36,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,long -905,2,3,1208,619,0.86,0.000289286,0.017008401,28,36,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,long -905,2,4,1209,619,0.73,0.001157143,0.034016803,28,36,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,yes,younger,long -982,1,1,1210,620,0.85,0.000520373,0.022811678,31,24,generate,NA,within,mixed,words,recognition,item,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -982,1,1,1211,620,0.61,0.001092566,0.033053991,31,24,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -982,1,1,1212,621,0.77,0.000751317,0.02741016,31,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -982,1,1,1213,621,0.58,0.001111029,0.033332103,31,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -982,1,1,1214,622,0.62,0.001082413,0.03290004,31,24,generate,NA,within,mixed,words,recognition,source,high,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -982,1,1,1215,622,0.65,0.001040736,0.032260445,31,24,read,NA,within,mixed,words,recognition,source,NA,intentional,antonym,writing/typing,word stem,full,timed,yes,younger,immediate -982,1,1,1216,623,0.65,0.001040736,0.032260445,31,24,generate,NA,within,mixed,words,recognition,source,high,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -982,1,1,1217,623,0.59,0.001106915,0.033270326,31,24,read,NA,within,mixed,words,recognition,source,NA,intentional,rhyme,writing/typing,word stem,full,timed,yes,younger,immediate -999,1,1,1218,358,0.9,0.000290909,0.017056057,22,12,generate,low,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -999,1,1,1219,358,0.81,0.00055,0.023452079,22,12,generate,low,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,1,1,1220,358,0.64,0.0022,0.046904158,22,12,read,low,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,1,1,1221,359,0.92,0.00055,0.023452079,22,12,generate,high,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -999,1,1,1222,359,0.71,0.001313636,0.036244122,22,12,generate,high,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,1,1,1223,359,0.55,0.002840909,0.053300179,22,12,read,high,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,1,1,1224,361,0.89,0.000768182,0.027716093,22,12,generate,low,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -999,1,1,1225,361,0.68,0.002404545,0.049036165,22,12,generate,low,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,1,1,1226,361,0.75,0.002840909,0.053300179,22,12,read,low,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,1,1,1227,362,0.89,0.001022727,0.031980107,22,12,generate,high,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -999,1,1,1228,362,0.67,0.002404545,0.049036165,22,12,generate,high,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,1,1,1229,362,0.76,0.003822727,0.061828208,22,12,read,high,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,1,1,1230,364,0.9,0.00055,0.023452079,22,12,generate,low,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -999,1,1,1231,364,0.83,0.001472727,0.038376129,22,12,generate,low,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,1,1,1232,364,0.62,0.002618182,0.051168172,22,12,read,low,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,1,1,1233,365,0.87,0.001313636,0.036244122,22,12,generate,high,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -999,1,1,1234,365,0.57,0.003313636,0.057564193,22,12,generate,high,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,1,1,1235,365,0.3,0.002840909,0.053300179,22,12,read,high,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,2,1,1236,366,0.84,0.0018375,0.04286607,24,24,generate,NA,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -999,2,1,1237,366,0.86,0.00135,0.036742346,24,24,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,2,1,1238,366,0.62,0.0024,0.048989795,24,24,read,NA,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,2,1,1239,367,0.8,0.001666667,0.040824829,24,24,generate,NA,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -999,2,1,1240,367,0.68,0.002016667,0.044907312,24,24,generate,NA,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,2,1,1241,367,0.63,0.0024,0.048989795,24,24,read,NA,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,2,1,1242,368,0.95,0.00015,0.012247449,24,24,generate,NA,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -999,2,1,1243,368,0.91,0.000416667,0.020412415,24,24,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,2,1,1244,368,0.81,0.001066667,0.032659863,24,24,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,3,1,1245,369,0.8,0.002016667,0.044907312,24,24,generate,NA,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -999,3,1,1246,369,0.84,0.000704167,0.026536139,24,24,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,3,1,1247,369,0.6,0.001066667,0.032659863,24,24,read,NA,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,3,1,1248,370,0.79,0.001066667,0.032659863,24,24,generate,NA,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -999,3,1,1249,370,0.66,0.001066667,0.032659863,24,24,generate,NA,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,3,1,1250,370,0.71,0.001666667,0.040824829,24,24,read,NA,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,3,1,1251,371,0.92,0.000266667,0.016329932,24,24,generate,NA,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -999,3,1,1252,371,0.88,0.000416667,0.020412415,24,24,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -999,3,1,1253,371,0.75,0.00135,0.036742346,24,24,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1152,1,1,1254,624,0.82,0.00125,0.035355339,32,12,generate,NA,within,pure,words,recognition,item,medium,intentional,definitions,covert/thinking,word fragment,full,timed,yes,younger,immediate -1152,1,1,1255,624,0.55,0.0018,0.042426407,32,12,read,NA,within,pure,words,recognition,item,NA,intentional,definitions,covert/thinking,word fragment,full,timed,yes,younger,immediate -1152,1,2,1256,625,0.74,0.00125,0.035355339,32,12,generate,NA,within,pure,words,recognition,item,medium,intentional,definitions,covert/thinking,word fragment,full,timed,yes,older,immediate -1152,1,2,1257,625,0.49,0.0021125,0.045961941,32,12,read,NA,within,pure,words,recognition,item,NA,intentional,definitions,covert/thinking,word fragment,full,timed,yes,older,immediate -1152,2b,1,1258,626,0.87,0.000672222,0.025927249,18,12,generate,NA,within,pure,words,recognition,item,medium,intentional,definitions,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1152,2b,1,1259,626,0.61,0.0018,0.042426407,18,12,read,NA,within,pure,words,recognition,item,NA,intentional,definitions,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1152,2b,2,1260,627,0.86,8e-04,0.028284271,18,12,generate,NA,within,pure,words,recognition,item,medium,intentional,definitions,verbal/speaking,word fragment,full,timed,yes,older,immediate -1152,2b,2,1261,627,0.63,0.002222222,0.047140452,18,12,read,NA,within,pure,words,recognition,item,NA,intentional,definitions,verbal/speaking,word fragment,full,timed,yes,older,immediate -1444,1,1,1262,628,0.82,0.000527206,0.022960957,38,24,generate,low,between,pure,words,cued recall,item,high,incidental,NA,verbal/speaking,word stem,full,self-paced,no,younger,long -1444,1,2,1263,628,0.97,0.000305881,0.017489453,20,24,generate,high,between,pure,words,cued recall,item,medium,incidental,NA,verbal/speaking,word stem,full,self-paced,no,younger,long -1444,1,3,1264,628,0.65,0.00132919,0.036458057,20,24,read,low,between,pure,words,cued recall,item,NA,incidental,NA,verbal/speaking,word stem,full,self-paced,no,younger,long -1445,1,1,1265,629,0.68,0.002698288,0.051945052,24,5,generate,NA,within,pure,numbers,free recall,item,low,intentional,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1445,1,1,1266,629,0.38,0.002213238,0.047045067,24,5,read,NA,within,pure,numbers,free recall,item,NA,intentional,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1445,2,1,1267,630,0.55,0.00364047,0.060336307,16,5,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1445,2,1,1268,630,0.42,0.002993738,0.054715064,16,5,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1445,2,2,1269,631,0.49,0.003459857,0.058820548,16,5,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long -1445,2,2,1270,631,0.24,0.001353136,0.036785003,16,5,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long -1445,2,3,1271,632,0.4,0.002824408,0.053145158,16,5,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long -1445,2,3,1272,632,0.1,0.000479347,0.021893984,16,5,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long -1445,2,1,1273,633,0.81,0.002080034,0.045607392,16,5,generate,NA,within,pure,numbers,recognition,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1445,2,1,1274,633,0.81,0.002080034,0.045607392,16,5,read,NA,within,pure,numbers,recognition,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1445,2,2,1275,634,0.75,0.002648745,0.05146596,16,5,generate,NA,within,pure,numbers,recognition,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long -1445,2,2,1276,634,0.61,0.003580413,0.059836553,16,5,read,NA,within,pure,numbers,recognition,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long -1445,2,3,1277,635,0.69,0.003152726,0.05614914,16,5,generate,NA,within,pure,numbers,recognition,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long -1445,2,3,1278,635,0.52,0.003579095,0.059825539,16,5,read,NA,within,pure,numbers,recognition,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,long -1447,1,1,1279,636,0.4,0.001052282,0.032438892,20,30,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -1447,1,1,1280,636,0.26,0.000567411,0.023820399,20,30,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -1447,2,1,1281,637,0.32,0.000773401,0.027810082,20,30,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -1447,2,1,1282,637,0.26,0.000567411,0.023820399,20,30,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -1447,3,1,1283,638,0.37,0.001138463,0.033741112,20,15,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -1447,3,1,1284,638,0.28,0.000758957,0.027549175,20,15,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -1447,3,2,1285,639,0.68,0.001438378,0.037925957,20,15,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -1447,3,2,1286,639,0.65,0.001521445,0.039005699,20,15,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,no,younger,immediate -1448,4,1,1287,640,0.355,0.001093039,0.033061142,11,24,generate,NA,within,mixed,words,free recall,item,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,1,1288,640,0.21,0.000506664,0.022509202,11,24,read,NA,within,mixed,words,free recall,item,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,2,1289,641,0.316,0.000923976,0.03039697,11,24,generate,NA,within,mixed,words,free recall,item,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,2,1290,641,0.228,0.000569485,0.023863877,11,24,read,NA,within,mixed,words,free recall,item,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,3,1291,642,0.581,0.001650448,0.0406257,11,24,generate,NA,within,pure,words,free recall,item,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,3,1292,642,0.172,0.000388052,0.019699027,11,24,read,NA,within,pure,words,free recall,item,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,4,1293,643,0.453,0.001470038,0.03834108,11,24,generate,NA,within,pure,words,free recall,item,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,4,1294,643,0.267,0.000718476,0.026804404,11,24,read,NA,within,pure,words,free recall,item,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,1,1295,644,0.331,0.000988995,0.031448291,11,24,generate,NA,within,mixed,words,free recall,cue word,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,1,1296,644,0.191,0.000444913,0.021092962,11,24,read,NA,within,mixed,words,free recall,cue word,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,2,1297,645,0.313,0.000911033,0.030183317,11,24,generate,NA,within,mixed,words,free recall,cue word,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,2,1298,645,0.254,0.00066703,0.025826926,11,24,read,NA,within,mixed,words,free recall,cue word,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,3,1299,646,0.53,0.001635177,0.040437316,11,24,generate,NA,within,pure,words,free recall,cue word,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,3,1300,646,0.204,0.000486646,0.022060053,11,24,read,NA,within,pure,words,free recall,cue word,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,4,1301,647,0.412,0.001327412,0.036433664,11,24,generate,NA,within,pure,words,free recall,cue word,high,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1448,4,4,1302,647,0.235,0.00059499,0.024392426,11,24,read,NA,within,pure,words,free recall,cue word,NA,intentional,synonym,writing/typing,word fragment,full,self-paced,no,younger,immediate -1449,1,1,1303,648,0.56,0.001624972,0.040310946,24,12,generate,NA,within,mixed,words,NA,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1449,1,1,1304,648,0.44,0.001403131,0.037458394,24,12,read,NA,within,mixed,words,NA,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1450,1,1,1305,649,0.9,0.000568186,0.02383665,24,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1450,1,1,1306,649,0.79,0.001011987,0.031811738,24,12,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1450,2,1,1307,650,0.88,0.000641801,0.025333789,24,12,generate,high,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1450,2,1,1308,650,0.79,0.001011987,0.031811738,24,12,read,high,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1450,2,1,1309,651,0.81,0.000926673,0.030441311,24,12,generate,low,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1450,2,1,1310,651,0.56,0.001624972,0.040310946,24,12,read,low,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1450,3,1,1311,652,0.77,0.001096894,0.033119391,24,12,generate,high,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,long -1450,3,1,1312,652,0.66,0.001494064,0.038653121,24,12,read,high,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,long -1450,3,1,1313,653,0.67,0.001466363,0.038293118,24,12,generate,low,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,long -1450,3,1,1314,653,0.54,0.001615723,0.040196053,24,12,read,low,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,long -1450,4,1,1315,654,0.328,0.001050658,0.032413856,20,12,generate,high,within,mixed,words,free recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -1450,4,1,1316,654,0.228,0.000613069,0.024760231,20,12,read,high,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -1450,4,2,1317,655,0.407,0.001408287,0.037527147,20,12,generate,low,within,mixed,words,free recall,item,medium,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -1450,4,2,1318,655,0.274,0.000803978,0.028354499,20,12,read,low,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,anagram,full,timed,yes,younger,immediate -1451,1,1,1319,656,0.77,0.001252073,0.035384649,20,11,generate,low,between,pure,words,cued recall,item,low,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1451,1,2,1320,656,0.695,0.00158425,0.039802639,20,11,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1451,1,1,1321,657,0.909,0.000612468,0.024748082,20,11,generate,high,between,pure,words,cued recall,item,low,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1451,1,2,1322,657,0.709,0.00152836,0.039094244,20,11,read,high,between,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1451,2,1,1323,658,0.527,0.001830093,0.042779592,20,11,generate,low,between,pure,words,cued recall,cue word,low,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1451,2,2,1324,658,0.5,0.001782785,0.042223043,20,11,read,low,between,pure,words,cued recall,cue word,NA,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1451,2,1,1325,659,0.682,0.001632594,0.040405369,20,11,generate,high,between,pure,words,cued recall,cue word,low,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1451,2,2,1326,659,0.523,0.00182458,0.042715102,20,11,read,high,between,pure,words,cued recall,cue word,NA,intentional,semantic,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1452,1,1,1327,660,0.645625,0.001734968,0.041652946,12,16,generate,low,within,pure,words,cued recall,item,high,intentional,semantic,verbal/speaking,sentence completion,full,timed,yes,younger,immediate -1452,1,1,1328,660,0.28125,0.00086538,0.029417341,12,16,read,low,within,pure,words,cued recall,item,NA,intentional,semantic,verbal/speaking,sentence completion,full,timed,yes,younger,immediate -1452,1,2,1329,661,0.208125,0.000557554,0.023612591,12,16,generate,high,within,pure,words,cued recall,item,high,intentional,unrelated,verbal/speaking,sentence completion,full,timed,yes,younger,immediate -1452,1,2,1330,661,0.265625,0.000794458,0.028186138,12,16,read,high,within,pure,words,cued recall,item,NA,intentional,unrelated,verbal/speaking,sentence completion,full,timed,yes,younger,immediate -1453,1,1,1331,662,0.58,0.001969231,0.044376016,13,10,generate,NA,within,mixed,words,recognition,item,high,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -1453,1,1,1332,662,0.35,0.001730769,0.041602515,13,10,read,NA,within,mixed,words,recognition,item,NA,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -1453,1,1,1333,663,0.37,0.003076923,0.05547002,13,10,generate,NA,within,mixed,non-words,recognition,item,high,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -1453,1,1,1334,663,0.33,0.003076923,0.05547002,13,10,read,NA,within,mixed,non-words,recognition,item,NA,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -1453,2,1,1335,664,0.69,0.002406667,0.049057789,15,10,generate,NA,between,pure,words,recognition,item,high,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -1453,2,2,1336,664,0.4,0.003526667,0.059385745,15,10,read,NA,between,pure,words,recognition,item,NA,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -1453,2,1,1337,665,0.3,0.003226667,0.056803756,15,10,generate,NA,between,pure,non-words,recognition,item,high,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -1453,2,2,1338,665,0.28,0.000806667,0.028401878,15,10,read,NA,between,pure,non-words,recognition,item,NA,incidental,rhyme,verbal/speaking,word stem,full,timed,yes,younger,immediate -1454,1,1,1339,666,0.35,0.001262154,0.035526808,20,10,generate,low,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,letter transposition,divided,timed,yes,younger,short -1454,1,2,1340,666,0.23,0.000679359,0.026064518,20,10,read,low,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,letter transposition,divided,timed,yes,younger,short -1454,1,1,1341,667,0.34,0.001211085,0.034800647,20,10,generate,high,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,letter transposition,divided,timed,yes,younger,short -1454,1,2,1342,667,0.27,0.000860604,0.029336045,20,10,read,high,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,letter transposition,divided,timed,yes,younger,short -1454,1,1,1343,668,0.36,0.001312912,0.036234126,20,10,generate,low,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,sentence completion,divided,timed,yes,younger,short -1454,1,2,1344,668,0.29,0.000957784,0.03094809,20,10,read,low,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,sentence completion,divided,timed,yes,younger,short -1454,1,1,1345,669,0.53,0.001926215,0.043888665,20,10,generate,high,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,sentence completion,divided,timed,yes,younger,short -1454,1,2,1346,669,0.4,0.001508631,0.038841096,20,10,read,high,between,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,sentence completion,divided,timed,yes,younger,short -1455,1,1,1347,670,0.39,0.001252182,0.035386187,20,14,generate,low,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,1,2,1348,670,0.3,0.000863431,0.029384201,20,14,read,low,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,1,1,1349,671,0.47,0.001533842,0.039164289,20,14,generate,high,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,1,2,1350,671,0.41,0.001332242,0.036499887,20,14,read,high,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,1,3,1351,672,0.9,0.000583767,0.024161265,20,14,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,1,4,1352,672,0.82,0.00090851,0.030141502,20,14,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,1,3,1353,673,0.85,0.000780558,0.027938461,20,14,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,1,4,1354,673,0.5,0.001604659,0.040058201,20,14,read,high,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,2,1,1355,674,0.27,0.000484403,0.022009153,40,14,generate,low,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,2,2,1356,674,0.31,0.000595494,0.024402753,40,14,read,low,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,2,1,1357,675,0.53,0.001084197,0.032927151,40,14,generate,high,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,2,2,1358,675,0.38,0.000795137,0.028198172,40,14,read,high,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,2,3,1359,676,0.71,0.001052149,0.032436844,32,14,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,long -1455,2,4,1360,676,0.48,0.001196388,0.034588846,32,14,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,long -1455,2,3,1361,677,0.48,0.001196388,0.034588846,32,14,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,long -1455,2,4,1362,677,0.29,0.000629449,0.025088815,32,14,read,high,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,long -1455,3,1,1363,678,0.36,0.000463475,0.021528466,72,14,generate,low,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,3,2,1364,678,0.47,0.000631861,0.025136844,72,14,read,low,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,3,1,1365,679,0.51,0.000668542,0.025856185,72,14,generate,high,between,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,3,2,1366,679,0.44,0.000593866,0.024369359,72,14,read,high,between,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,3,3,1367,680,0.96,0.000145756,0.012072947,80,14,generate,low,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,3,4,1368,680,0.84,0.000309642,0.017596658,80,14,read,low,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,3,3,1369,681,0.86,0.00027827,0.016681436,80,14,generate,high,between,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,3,4,1370,681,0.63,0.000604338,0.024583284,80,14,read,high,between,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,4,1,1371,682,0.41,0.001332242,0.036499887,20,14,generate,NA,within,pure,words,free recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,4,1,1372,682,0.13,0.000282665,0.016812636,20,14,read,NA,within,pure,words,free recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,4,2,1373,683,0.86,0.000739266,0.027189452,20,14,generate,NA,within,pure,words,cued recall,item,medium,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1455,4,2,1374,683,0.48,0.001560016,0.039497043,20,14,read,NA,within,pure,words,cued recall,item,NA,intentional,semantic,writing/typing,word fragment,full,timed,yes,younger,short -1456,1,1,1375,684,0.569,0.001862143,0.043152551,18,12,generate,NA,within,mixed,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -1456,1,1,1376,684,0.268,0.000813378,0.028519783,18,12,read,NA,within,mixed,words,cued recall,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -1456,2,1,1377,685,0.592,0.002024243,0.04499159,18,10,generate,low,within,mixed,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -1456,2,1,1378,685,0.273,0.000914973,0.030248519,18,10,read,low,within,mixed,words,cued recall,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -1456,2,1,1379,686,0.523,0.002004125,0.044767456,18,10,generate,high,within,mixed,words,cued recall,item,medium,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -1456,2,1,1380,686,0.24,0.000755831,0.027492386,18,10,read,high,within,mixed,words,cued recall,item,NA,incidental,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -1457,2R,1,1381,687,0.75,0.00128866,0.035897908,16,15,generate,NA,within,mixed,words,recognition,item,medium,incidental,antonym,verbal/speaking,cue only,full,timed,no,younger,immediate -1457,2R,1,1382,687,0.654,0.001648529,0.040602084,16,15,read,NA,within,mixed,words,recognition,item,NA,incidental,antonym,verbal/speaking,cue only,full,timed,no,younger,immediate -1457,2R,1,1383,688,0.73,0.001375979,0.037094191,16,15,generate,NA,within,mixed,words,recognition,source,medium,incidental,antonym,verbal/speaking,cue only,full,timed,no,younger,immediate -1457,2R,1,1384,688,0.71,0.001458234,0.038186828,16,15,read,NA,within,mixed,words,recognition,source,NA,incidental,antonym,verbal/speaking,cue only,full,timed,no,younger,immediate -1458,2,1,1385,689,0.41,0.001082951,0.032908215,24,20,generate,NA,within,mixed,words,cued recall,item,medium,intentional,NA,verbal/speaking,word stem,full,timed,yes,younger,immediate -1458,2,1,1386,689,0.22,0.000443979,0.021070807,24,20,read,NA,within,mixed,words,cued recall,item,NA,intentional,NA,verbal/speaking,word stem,full,timed,yes,younger,immediate -1459,1,1,1387,690,0.837,0.001356694,0.036833333,36,10,generate,NA,within,mixed,words,recognition,item,medium,intentional,antonym,verbal/speaking,word fragment,full,self-paced,yes,younger,short -1459,1,1,1388,690,0.608,0.001521,0.039,36,10,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,verbal/speaking,word fragment,full,self-paced,yes,younger,short -1459,1,2,1389,691,0.778,0.001212121,0.034815531,33,10,generate,NA,within,mixed,words,recognition,item,medium,intentional,antonym,verbal/speaking,word fragment,full,self-paced,yes,younger,short -1459,1,2,1390,691,0.554,0.001893939,0.043519414,33,10,read,NA,within,mixed,words,recognition,item,NA,intentional,antonym,verbal/speaking,word fragment,full,self-paced,yes,younger,short -1460,1,1,1391,692,0.77,0.001046496,0.032349586,16,24,generate,low,between,pure,words,cued recall,item,low,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1460,1,2,1392,692,0.69,0.001340032,0.036606451,16,24,read,low,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1460,1,3,1393,693,0.78,0.00100612,0.031719395,16,24,generate,high,between,pure,words,cued recall,item,low,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1460,1,4,1394,693,0.66,0.001425417,0.037754695,16,24,read,high,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1460,1,5,1395,694,0.76,0.001086452,0.032961373,16,24,generate,NA,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1460,1,6,1396,694,0.7,0.001307808,0.036163626,16,24,read,NA,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1460,2,1,1397,695,0.84,0.000932768,0.030541258,11,15,generate,low,between,pure,words,cued recall,item,low,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1460,2,2,1398,695,0.69,0.00163633,0.040451571,11,15,read,low,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1460,2,3,1399,696,0.83,0.00098118,0.031323796,11,15,generate,high,between,pure,words,cued recall,item,low,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1460,2,4,1400,696,0.65,0.001770152,0.042073176,11,15,read,high,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,immediate -1460,2,1,1401,697,0.5,0.001819543,0.042656099,11,15,generate,low,between,pure,words,cued recall,item,low,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,long -1460,2,2,1402,697,0.26,0.000790457,0.028115059,11,15,read,low,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,long -1460,2,3,1403,698,0.4,0.001465926,0.038287409,11,15,generate,high,between,pure,words,cued recall,item,low,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,long -1460,2,4,1404,698,0.28,0.000883022,0.029715691,11,15,read,high,between,pure,words,cued recall,item,NA,intentional,NA,verbal/speaking,sentence completion,full,timed,no,younger,long -1461,1,1,1405,699,0.36,0.001459436,0.038202564,15,10,generate,NA,within,mixed,words,free recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,1,1,1406,699,0.18,0.000538694,0.023209777,15,10,read,NA,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,3,1,1407,700,0.319,0.001263348,0.035543611,20,8,generate,low,within,mixed,words,free recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,3,1,1408,700,0.1,0.000293072,0.017119344,20,8,read,low,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,3,1,1409,701,0.175,0.000534898,0.023127861,20,8,generate,high,within,mixed,words,free recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,3,1,1410,701,0.138,0.000402801,0.020069909,20,8,read,high,within,mixed,words,free recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,3,1,1411,702,0.85,0.001042616,0.032289568,20,8,generate,low,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,3,1,1412,702,0.638,0.002122517,0.046070787,20,8,read,low,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,3,1,1413,703,0.763,0.001545645,0.039314695,20,8,generate,high,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,3,1,1414,703,0.6,0.002205455,0.046962273,20,8,read,high,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,4,1,1415,704,0.3,0.000953535,0.03087936,10,16,generate,low,between,pure,words,free recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,4,2,1416,704,0.231,0.00064697,0.025435608,10,16,read,low,between,pure,words,free recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,4,1,1417,705,0.113,0.00027098,0.016461477,10,16,generate,high,between,pure,words,free recall,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,4,2,1418,705,0.119,0.000285031,0.016882862,10,16,read,high,between,pure,words,free recall,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,4,1,1419,706,0.85,0.000862013,0.029360057,10,16,generate,low,between,pure,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,4,2,1420,706,0.706,0.001531423,0.039133398,10,16,read,low,between,pure,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,4,1,1421,707,0.75,0.001338918,0.036591235,10,16,generate,high,between,pure,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1461,4,2,1422,707,0.65,0.001724011,0.041521211,10,16,read,high,between,pure,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,yes,younger,immediate -1463,1,1,1423,708,0.454,0.002048,0.045254834,8,25,generate,NA,between,pure,words,free recall,item,low,incidental,semantic,verbal/speaking,cue only,full,timed,no,younger,immediate -1463,1,2,1424,708,0.3,0.002850125,0.053386562,8,25,read,NA,between,pure,words,free recall,item,NA,incidental,semantic,verbal/speaking,cue only,full,timed,no,younger,immediate -1464,1,1,1425,709,0.35,0.003333333,0.057735027,12,8,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate -1464,1,1,1426,709,0.21,0.0027,0.051961524,12,8,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate -1464,1,1,1427,710,0.21,0.004408333,0.066395281,12,8,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate -1464,1,1,1428,710,0.08,0.0012,0.034641016,12,8,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate -1464,1,1,1429,711,0.13,0.001408333,0.037527767,12,8,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate -1464,1,1,1430,711,0.08,0.0012,0.034641016,12,8,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate -1464,1,1,1431,712,0.1,0.004408333,0.066395281,12,8,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate -1464,1,1,1432,712,0.1,0.003333333,0.057735027,12,8,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate -1464,2,1,1433,713,0.48,0.001225,0.035,16,6,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate -1464,2,1,1434,713,0.25,0.0025,0.05,16,6,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate -1464,2,1,1435,714,0.29,0.0025,0.05,16,6,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate -1464,2,1,1436,714,0.19,0.001225,0.035,16,6,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate -1464,2,1,1437,715,0.59,0.0025,0.05,16,6,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate -1464,2,1,1438,715,0.31,0.004225,0.065,16,6,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate -1464,2,1,1439,716,0.48,0.00180625,0.0425,16,6,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate -1464,2,1,1440,716,0.31,0.001225,0.035,16,6,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,verbal/speaking,word fragment,full,timed,no,younger,immediate -1465,2,1,1441,717,0.039,0.000140489,0.011852791,12,15,generate,NA,within,mixed,non-words,free recall,item,high,intentional,NA,verbal/speaking,letter transposition,full,timed,no,younger,immediate -1465,2,1,1442,717,0.085,0.000216866,0.014726385,12,15,read,NA,within,mixed,non-words,free recall,item,NA,intentional,NA,verbal/speaking,letter transposition,full,timed,no,younger,immediate -1466,1,1,1443,718,0.42,0.001743964,0.04176079,16,10,generate,NA,within,mixed,words,free recall,item,high,intentional,NA,verbal/speaking,word stem,full,timed,no,younger,immediate -1466,1,1,1444,718,0.25,0.000837044,0.028931716,16,10,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,word stem,full,timed,no,younger,immediate -1466,1,2,1445,719,0.2,0.000608397,0.024665701,16,10,generate,NA,within,mixed,words,free recall,item,high,intentional,NA,verbal/speaking,word stem,full,timed,no,older,immediate -1466,1,2,1446,719,0.18,0.000528519,0.02298954,16,10,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,verbal/speaking,word stem,full,timed,no,older,immediate -1466,1,3,1447,720,0.4,0.001255778,0.035436955,16,20,generate,NA,within,mixed,words,recognition,item,high,intentional,NA,verbal/speaking,word stem,full,timed,no,younger,long -1466,1,3,1448,720,0.36,0.001092862,0.033058467,16,20,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word stem,full,timed,no,younger,long -1466,1,4,1449,721,0.32,0.000922965,0.030380342,16,20,generate,NA,within,mixed,words,recognition,item,high,intentional,NA,verbal/speaking,word stem,full,timed,no,older,long -1466,1,4,1450,721,0.29,0.000797256,0.028235713,16,20,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,verbal/speaking,word stem,full,timed,no,older,long -1467,1,1,1451,722,0.75,0.002349724,0.048473948,12,6,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1467,1,1,1452,722,0.36,0.002180503,0.046695855,12,6,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1467,1,2,1453,723,0.28,0.001509259,0.038849182,12,6,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1467,1,2,1454,723,0.22,0.001058542,0.032535246,12,6,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1467,2,1,1455,724,0.66,0.005768464,0.075950402,24,3,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1467,2,1,1456,724,0.38,0.004549148,0.067447371,24,3,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1467,2,1,1457,725,0.49,0.005951212,0.077144096,24,3,generate,NA,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1467,2,1,1458,725,0.17,0.001450438,0.038084617,24,3,read,NA,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1467,3,1,1459,726,0.46,0.002917352,0.054012513,12,6,generate,NA,within,pure,numbers,free recall,item,low,intentional,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1467,3,1,1460,726,0.2,0.000926488,0.030438272,12,6,read,NA,within,pure,numbers,free recall,item,NA,intentional,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1468,1,1,1461,727,0.762,0.002250965,0.047444336,12,6,generate,low,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate -1468,1,1,1462,727,0.307,0.001731896,0.04161606,12,6,read,low,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate -1468,1,2,1463,728,0.505,0.003128302,0.055931226,12,6,generate,high,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate -1468,1,2,1464,728,0.266,0.001397785,0.037386959,12,6,read,high,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate -1468,2,1,1465,729,0.456,0.00228002,0.047749556,24,6,generate,low,within,pure,numbers,free recall,cue word,low,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate -1468,2,1,1466,729,0.229,0.000883343,0.02972108,24,6,read,low,within,pure,numbers,free recall,cue word,NA,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate -1468,2,2,1467,730,0.468,0.002333607,0.048307425,24,6,generate,high,within,pure,numbers,free recall,cue word,low,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate -1468,2,2,1468,730,0.167,0.000576338,0.024007048,24,6,read,high,within,pure,numbers,free recall,cue word,NA,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate -1468,2,1,1469,731,0.656,0.002360238,0.048582281,24,6,generate,low,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate -1468,2,1,1470,731,0.328,0.001504314,0.038785486,24,6,read,low,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate -1468,2,2,1471,732,0.342,0.001598055,0.039975678,24,6,generate,high,within,pure,numbers,free recall,item,low,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate -1468,2,2,1472,732,0.18,0.000634099,0.025181316,24,6,read,high,within,pure,numbers,free recall,item,NA,incidental,NA,verbal/speaking,calculation,full,self-paced,yes,younger,immediate -1468,3,1,1473,733,0.613,0.002734694,0.052294298,20,6,generate,low,within,pure,numbers,free recall,item,low,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate -1468,3,1,1474,733,0.387,0.0020742,0.045543381,20,6,read,low,within,pure,numbers,free recall,item,NA,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate -1468,3,2,1475,734,0.275,0.001268165,0.0356113,20,6,generate,high,within,pure,numbers,free recall,item,low,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate -1468,3,2,1476,734,0.297,0.001423022,0.037722959,20,6,read,high,within,pure,numbers,free recall,item,NA,incidental,NA,writing/typing,calculation,full,self-paced,yes,younger,immediate -1469,1,1,1477,735,0.39,0.000738108,0.027168148,32,44,generate,NA,between,pure,words,free recall,item,high,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate -1469,1,2,1478,735,0.32,0.00056009,0.023666215,32,44,read,NA,between,pure,words,free recall,item,NA,intentional,antonym,writing/typing,word stem,full,timed,no,younger,immediate -1469,2a,1,1479,736,0.34,0.000568094,0.02383472,36,42,generate,NA,between,pure,words,free recall,item,high,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate -1469,2a,2,1480,736,0.41,0.000729254,0.027004707,36,42,read,NA,between,pure,words,free recall,item,NA,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate -1469,2b,1,1481,737,0.86,0.00062333,0.024966585,16,42,generate,NA,between,pure,words,recognition,item,high,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate -1469,2b,2,1482,737,0.74,0.001057321,0.032516467,16,42,read,NA,between,pure,words,recognition,item,NA,intentional,rhyme,writing/typing,word fragment,full,timed,no,younger,immediate -1470,1,1,1483,738,0.6,0.000965928,0.031079386,40,20,generate,NA,within,mixed,words,recognition,item,low,incidental,NA,writing/typing,anagram,full,timed,no,younger,immediate -1470,1,1,1484,738,0.34,0.000607142,0.024640255,40,20,read,NA,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,no,younger,immediate -1470,1,2,1485,739,0.66,0.000898016,0.02996692,40,20,generate,NA,within,mixed,words,recognition,item,low,intentional,NA,writing/typing,anagram,full,timed,no,younger,immediate -1470,1,2,1486,739,0.44,0.000843361,0.029040674,40,20,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,no,younger,immediate -1470,2,1,1487,740,0.61,0.000958748,0.030963656,40,20,generate,low,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,timed,no,younger,immediate -1470,2,1,1488,740,0.34,0.000607142,0.024640255,40,20,read,low,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,no,younger,immediate -1470,2,2,1489,741,0.66,0.000898016,0.02996692,40,20,generate,high,within,mixed,words,recognition,item,medium,incidental,NA,writing/typing,anagram,full,timed,no,younger,immediate -1470,2,2,1490,741,0.34,0.000607142,0.024640255,40,20,read,high,within,mixed,words,recognition,item,NA,incidental,NA,writing/typing,anagram,full,timed,no,younger,immediate -1471,1,1,1491,742,0.18,0.002025,0.045,16,12,generate,NA,within,mixed,words,recognition,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1471,1,1,1492,742,0.05,0.00075625,0.0275,16,12,read,NA,within,mixed,words,recognition,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1471,2,1,1493,743,0.242,0.000660083,0.025692087,12,50,generate,NA,between,pure,words,free recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1471,2,2,1494,743,0.2,0.000752083,0.027424138,12,50,read,NA,between,pure,words,free recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1472,1,1,1495,744,0.358,0.004056,0.063686733,24,5,generate,low,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,1,1,1496,744,0.3,0.002904,0.053888774,24,5,read,low,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,1,1,1497,745,0.634,0.0018375,0.04286607,24,5,generate,high,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,1,1,1498,745,0.342,0.001666667,0.040824829,24,5,read,high,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,2,1,1499,746,0.382,0.001711125,0.041365747,32,5,generate,low,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,2,1,1500,746,0.368,0.001953125,0.044194174,32,5,read,low,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,2,1,1501,747,0.588,0.002080125,0.045608387,32,5,generate,high,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,2,1,1502,747,0.318,0.001682,0.041012193,32,5,read,high,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,2,2,1503,748,0.506,0.001922,0.04384062,32,5,generate,low,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,2,2,1504,748,0.306,0.002415125,0.049143921,32,5,read,low,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,2,2,1505,749,0.532,0.001891125,0.043487067,32,5,generate,high,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,2,2,1506,749,0.306,8e-04,0.028284271,32,5,read,high,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,3,1,1507,750,0.378,0.000945852,0.030754705,54,5,generate,low,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,3,1,1508,750,0.204,0.000654519,0.02558356,54,5,read,low,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,3,1,1509,751,0.526,0.001014,0.031843367,54,5,generate,high,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,3,1,1510,751,0.24,0.000962667,0.03102687,54,5,read,high,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,self-paced,no,younger,immediate -1472,4,1,1511,752,0.6,0.002242667,0.047356802,24,5,generate,low,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,timed,yes,younger,immediate -1472,4,1,1512,752,0.558,0.0024,0.048989795,24,5,read,low,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,timed,yes,younger,immediate -1472,4,1,1513,753,0.806,0.001380167,0.037150594,24,5,generate,high,within,mixed,numbers,free recall,item,low,intentional,NA,writing/typing,calculation,full,timed,yes,younger,immediate -1472,4,1,1514,753,0.546,0.00375,0.061237244,24,5,read,high,within,mixed,numbers,free recall,item,NA,intentional,NA,writing/typing,calculation,full,timed,yes,younger,immediate -1473,1,1,1515,754,0.632,0.000578338,0.024048662,23,15,generate,NA,within,pure,numbers,free recall,item,low,intentional,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1473,1,1,1516,754,0.406,0.000772947,0.027801922,23,15,read,NA,within,pure,numbers,free recall,item,NA,intentional,NA,verbal/speaking,calculation,full,timed,yes,younger,immediate -1473,1,1,1517,755,0.408666667,0.000429005,0.020712432,23,15,generate,NA,within,pure,words,free recall,item,high,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -1473,1,1,1518,755,0.234666667,0.00050713,0.022519557,23,15,read,NA,within,pure,words,free recall,item,NA,intentional,antonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -1473,1,2,1519,756,0.378666667,0.00059883,0.024471012,19,15,generate,NA,within,pure,numbers,free recall,item,low,intentional,NA,verbal/speaking,calculation,full,timed,yes,older,immediate -1473,1,2,1520,756,0.326,0.001163251,0.034106473,19,15,read,NA,within,pure,numbers,free recall,item,NA,intentional,NA,verbal/speaking,calculation,full,timed,yes,older,immediate -1473,1,2,1521,757,0.228,0.000629146,0.025082787,19,15,generate,NA,within,pure,words,free recall,item,high,intentional,antonym,verbal/speaking,word stem,full,timed,yes,older,immediate -1473,1,2,1522,757,0.102,0.000505474,0.022482742,19,15,read,NA,within,pure,words,free recall,item,NA,intentional,antonym,verbal/speaking,word stem,full,timed,yes,older,immediate -1474,1,1,1523,758,0.84,9e-04,0.03,16,14,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -1474,1,1,1524,758,0.67,0.00225625,0.0475,16,14,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -1474,1,1,1525,759,0.36,0.00140625,0.0375,16,14,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -1474,1,1,1526,759,0.35,0.00140625,0.0375,16,14,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,verbal/speaking,word fragment,full,timed,no,younger,immediate -1474,2,1,1527,760,0.742,0.00161428,0.040178109,18,9,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word stem,full,timed,no,younger,immediate -1474,2,1,1528,760,0.56,0.002163457,0.046512973,18,9,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word stem,full,timed,no,younger,immediate -1474,2,1,1529,761,0.48,0.002021541,0.044961545,18,9,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word stem,full,timed,no,younger,immediate -1474,2,1,1530,761,0.361,0.001463545,0.038256302,18,9,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word stem,full,timed,no,younger,immediate -1474,2,1,1531,762,0.285,0.001036239,0.032190664,18,9,generate,NA,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word stem,full,timed,no,younger,immediate -1474,2,1,1532,762,0.243,0.000817355,0.028589414,18,9,read,NA,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word stem,full,timed,no,younger,immediate -1474,2,2,1533,763,0.412,0.001736396,0.04167008,18,9,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,covert/thinking,word stem,full,timed,no,younger,immediate -1474,2,2,1534,763,0.244,0.000822301,0.028675799,18,9,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,covert/thinking,word stem,full,timed,no,younger,immediate -1474,2,2,1535,764,0.335,0.001316446,0.036282866,18,9,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,covert/thinking,word stem,full,timed,no,younger,immediate -1474,2,2,1536,764,0.236,0.000783139,0.027984615,18,9,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,covert/thinking,word stem,full,timed,no,younger,immediate -1474,2,2,1537,765,0.236,0.000783139,0.027984615,18,9,generate,NA,within,mixed,words,cued recall,item,high,intentional,rhyme,covert/thinking,word stem,full,timed,no,younger,immediate -1474,2,2,1538,765,0.231,0.000759152,0.027552712,18,9,read,NA,within,mixed,words,cued recall,item,NA,intentional,rhyme,covert/thinking,word stem,full,timed,no,younger,immediate -1474,3,1,1539,766,0.47,0.000782551,0.027974116,48,20,generate,high,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short -1474,3,1,1540,766,0.45,0.000752267,0.027427479,48,20,read,high,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short -1474,3,1,1541,767,0.46,0.000767979,0.02771244,48,20,generate,high,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short -1474,3,1,1542,767,0.35,0.000551816,0.023490762,48,20,read,high,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short -1474,3,2,1543,768,0.72,0.000680559,0.026087534,48,20,generate,low,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short -1474,3,2,1544,768,0.64,0.000808467,0.028433545,48,20,read,low,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short -1474,3,2,1545,769,0.57,0.000851814,0.029185858,48,20,generate,low,within,mixed,words,cued recall,item,medium,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short -1474,3,2,1546,769,0.53,0.000842144,0.029019725,48,20,read,low,within,mixed,words,cued recall,item,NA,intentional,semantic,covert/thinking,word fragment,full,timed,yes,younger,short -1475,1,1,1547,770,0.7,0.001434854,0.037879461,22,12,generate,NA,within,mixed,words,recognition,item,low,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate -1475,1,1,1548,770,0.7,0.001434854,0.037879461,22,12,read,NA,within,mixed,words,recognition,item,NA,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate -1475,1,2,1549,771,0.78,0.001103859,0.033224368,22,12,generate,NA,within,mixed,words,recognition,item,low,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate -1475,1,2,1550,771,0.69,0.001470208,0.038343297,22,12,read,NA,within,mixed,words,recognition,item,NA,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate -1475,1,1,1551,772,0.75,0.001235187,0.035145232,22,12,generate,NA,within,mixed,words,recognition,item,low,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate -1475,1,1,1552,772,0.73,0.001318883,0.036316433,22,12,read,NA,within,mixed,words,recognition,item,NA,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate -1475,1,2,1553,773,0.74,0.001277547,0.035742789,22,12,generate,NA,within,mixed,words,recognition,item,low,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate -1475,1,2,1554,773,0.72,0.001359006,0.036864696,22,12,read,NA,within,mixed,words,recognition,item,NA,incidental,definitions,covert/thinking,sentence completion,full,timed,no,younger,immediate -1476,1,1,1555,774,0.81875,0.0009498,0.030818832,16,16,generate,NA,within,pure,words,free recall,item,low,incidental,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1476,1,1,1556,774,0.5,0.001667622,0.04083653,16,16,read,NA,within,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1476,2,1,1557,775,0.800625,0.001032107,0.032126428,16,16,generate,NA,within,pure,words,free recall,item,low,incidental,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1476,2,1,1558,775,0.65625,0.001605723,0.040071478,16,16,read,NA,within,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1476,3,1,1559,776,0.71875,0.001391292,0.037300022,16,16,generate,NA,within,pure,words,free recall,item,low,incidental,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1476,3,1,1560,776,0.6375,0.001652502,0.040650976,16,16,read,NA,within,pure,words,free recall,item,NA,incidental,NA,verbal/speaking,word fragment,full,timed,yes,younger,immediate -1477,1,1,1561,777,0.143,0.000280269,0.016741237,14,36,generate,NA,within,mixed,words,free recall,item,high,incidental,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -1477,1,1,1562,777,0.028,9.95887803248024e-05,0.009979418,14,36,read,NA,within,mixed,words,free recall,item,NA,incidental,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -1477,2,1,1563,778,0.333,0.001171356,0.034225076,16,12,generate,NA,within,mixed,words,free recall,item,high,incidental,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -1477,2,1,1564,778,0.078,0.000209663,0.014479752,16,12,read,NA,within,mixed,words,free recall,item,NA,incidental,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -1477,2,2,1565,779,0.37,0.001358625,0.036859528,16,12,generate,NA,within,mixed,words,free recall,item,high,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -1477,2,2,1566,779,0.287,0.000939855,0.03065706,16,12,read,NA,within,mixed,words,free recall,item,NA,intentional,synonym,verbal/speaking,word stem,full,timed,yes,younger,immediate -1478,1,1,1567,780,0.75,0.001161895,0.034086574,48,6,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,1,1,1568,780,0.74,0.001201741,0.034666131,48,6,read,NA,within,mixed,non-words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,1,1,1569,781,0.88,0.000631932,0.025138265,48,6,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,1,1,1570,781,0.62,0.001555983,0.039445945,48,6,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,1,1,1571,782,0.83,0.00082926,0.028796877,48,6,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,1,1,1572,782,0.66,0.001471091,0.0383548,48,6,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,2,1,1573,783,0.19,0.000427399,0.020673642,48,6,generate,NA,within,mixed,non-words,free recall,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,2,1,1574,783,0.17,0.000369895,0.019232655,48,6,read,NA,within,mixed,non-words,free recall,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,2,1,1575,784,0.48,0.001495032,0.038665647,48,6,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,2,1,1576,784,0.34,0.000994593,0.031537176,48,6,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,2,1,1577,785,0.48,0.001495032,0.038665647,48,6,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,2,1,1578,785,0.43,0.001348223,0.036718157,48,6,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,3,1,1579,786,0.72,0.001784568,0.042244152,30,6,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,3,1,1580,786,0.78,0.001449524,0.038072611,30,6,read,NA,within,mixed,non-words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,3,1,1581,787,0.8,0.001332313,0.036500866,30,6,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,3,1,1582,787,0.6,0.00220891,0.046999047,30,6,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,3,1,1583,788,0.81,0.001273723,0.035689257,30,6,generate,NA,within,mixed,words,recognition,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,3,1,1584,788,0.63,0.002147896,0.046345398,30,6,read,NA,within,mixed,words,recognition,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,4,1,1585,789,0.2,0.00063954,0.025289133,30,6,generate,NA,within,mixed,non-words,free recall,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,4,1,1586,789,0.18,0.000555573,0.023570606,30,6,read,NA,within,mixed,non-words,free recall,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,4,1,1587,790,0.28,0.001041818,0.032277198,30,6,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,4,1,1588,790,0.3,0.00115512,0.033987059,30,6,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,4,1,1589,791,0.4,0.001729545,0.041587803,30,6,generate,NA,within,mixed,words,free recall,item,medium,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1478,4,1,1590,791,0.4,0.001729545,0.041587803,30,6,read,NA,within,mixed,words,free recall,item,NA,intentional,NA,writing/typing,anagram,full,timed,yes,younger,short -1479,1,1,1591,372,0.79,0.001024,0.032,25,24,generate,NA,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -1479,1,1,1592,372,0.85,0.000484,0.022,25,24,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1479,1,1,1593,372,0.52,0.001024,0.032,25,24,read,NA,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1479,1,1,1594,373,0.83,0.001156,0.034,25,24,generate,NA,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -1479,1,1,1595,373,0.69,0.001024,0.032,25,24,generate,NA,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1479,1,1,1596,373,0.57,0.001296,0.036,25,24,read,NA,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1479,1,1,1597,374,0.44,0.001444,0.038,25,24,generate,NA,within,pure,words,recognition,font color,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -1479,1,1,1598,374,0.39,0.001156,0.034,25,24,generate,NA,within,pure,words,recognition,font color,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1479,1,1,1599,374,0.34,0.001764,0.042,25,24,read,NA,within,pure,words,recognition,font color,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1479,1,1,1600,375,0.89,0.000256,0.016,25,24,generate,NA,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -1479,1,1,1601,375,0.84,0.000576,0.024,25,24,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1479,1,1,1602,375,0.69,0.001444,0.038,25,24,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1480,1,1,1603,376,0.84,0.00055,0.023452079,22,24,generate,NA,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -1480,1,1,1604,376,0.91,0.000454545,0.021320072,22,24,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1480,1,1,1605,376,0.59,0.002004545,0.04477215,22,24,read,NA,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1480,1,2,1606,377,0.76,0.001024,0.032,25,24,generate,NA,within,pure,words,recognition,item,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,older,immediate -1480,1,2,1607,377,0.82,9e-04,0.03,25,24,generate,NA,within,pure,words,recognition,item,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,older,immediate -1480,1,2,1608,377,0.57,0.001024,0.032,25,24,read,NA,within,pure,words,recognition,item,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,older,immediate -1480,1,1,1609,378,0.85,0.000454545,0.021320072,22,24,generate,NA,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -1480,1,1,1610,378,0.74,0.001163636,0.034112115,22,24,generate,NA,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1480,1,1,1611,378,0.72,0.001163636,0.034112115,22,24,read,NA,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1480,1,2,1612,379,0.69,0.002704,0.052,25,24,generate,NA,within,pure,words,recognition,source,low,intentional,semantic,verbal/speaking,cue only,full,self-paced,no,older,immediate -1480,1,2,1613,379,0.7,0.001296,0.036,25,24,generate,NA,within,pure,words,recognition,source,medium,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,older,immediate -1480,1,2,1614,379,0.51,0.0025,0.05,25,24,read,NA,within,pure,words,recognition,source,NA,intentional,semantic,verbal/speaking,anagram,full,self-paced,no,older,immediate -1480,1,1,1615,380,0.96,0.000163636,0.012792043,22,24,generate,NA,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,younger,immediate -1480,1,1,1616,380,0.93,0.000222727,0.01492405,22,24,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1480,1,1,1617,380,0.8,0.001022727,0.031980107,22,24,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,younger,immediate -1480,1,2,1618,381,0.88,0.001024,0.032,25,24,generate,NA,within,pure,words,cued recall,item,low,incidental,semantic,verbal/speaking,cue only,full,self-paced,no,older,immediate -1480,1,2,1619,381,0.87,0.000676,0.026,25,24,generate,NA,within,pure,words,cued recall,item,medium,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,older,immediate -1480,1,2,1620,381,0.79,0.001444,0.038,25,24,read,NA,within,pure,words,cued recall,item,NA,incidental,semantic,verbal/speaking,anagram,full,self-paced,no,older,immediate -1482,1,1,1621,792,0.563,0.002878755,0.053654033,40,4,generate,NA,within,mixed,words,free recall,item,high,intentional,category,verbal/speaking,word stem,full,timed,yes,younger,immediate -1482,1,1,1622,792,0.54,0.00286177,0.053495514,40,4,generate,NA,within,mixed,words,free recall,item,high,intentional,category,verbal/speaking,word stem,full,timed,yes,younger,immediate -1482,1,1,1623,792,0.49,0.002730123,0.052250582,40,4,generate,NA,within,mixed,words,free recall,item,high,intentional,category,verbal/speaking,word stem,full,timed,yes,younger,immediate -1482,1,1,1624,792,0.407,0.002276525,0.047712943,40,4,generate,NA,within,mixed,words,free recall,item,high,intentional,category,verbal/speaking,word stem,full,timed,yes,younger,immediate -1482,1,1,1625,792,0.395,0.00219392,0.046839303,40,4,read,NA,within,mixed,words,free recall,item,NA,intentional,category,verbal/speaking,word stem,full,timed,yes,younger,immediate -1483,1,1,1626,793,0.279,0.000824952,0.028721981,24,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate -1483,1,1,1627,793,0.213,0.00055567,0.023572662,24,10,read,NA,within,mixed,words,free recall,item,NA,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate -1483,1,1,1628,794,0.308,0.000956343,0.030924789,24,10,generate,NA,within,mixed,words,free recall,item,medium,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate -1483,1,1,1629,794,0.192,0.000481696,0.021947566,24,10,read,NA,within,mixed,words,free recall,item,NA,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate -1483,1,1,1630,795,0.958,0.000418542,0.02045831,24,10,generate,NA,within,mixed,words,recognition,item,medium,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate -1483,1,1,1631,795,0.896,0.00063745,0.025247762,24,10,read,NA,within,mixed,words,recognition,item,NA,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate -1483,1,1,1632,796,0.962,0.000406328,0.020157581,24,10,generate,NA,within,mixed,words,recognition,item,medium,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate -1483,1,1,1633,796,0.904,0.00060622,0.024621534,24,10,read,NA,within,mixed,words,recognition,item,NA,intentional,unrelated,verbal/speaking,cue only,full,timed,no,younger,immediate -1483,2,1,1634,797,0.789,0.000780402,0.02793568,32,15,generate,NA,within,mixed,words,recognition,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,2,1,1635,797,0.715,0.001011355,0.031801812,32,15,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,2,1,1636,798,0.702,0.001047312,0.032362196,32,15,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,2,1,1637,798,0.669,0.001128256,0.033589525,32,15,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,2,1,1638,799,0.759,0.000877682,0.029625697,32,15,generate,NA,within,mixed,words,recognition,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,2,1,1639,799,0.683,0.001095909,0.033104519,32,15,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,2,1,1640,800,0.696,0.001063198,0.032606721,32,15,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,2,1,1641,800,0.644,0.001177595,0.034316107,32,15,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,3,1,1642,801,0.67,0.001170738,0.034216045,24,24,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,3,1,1643,801,0.623,0.001257701,0.035464074,24,24,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,3,1,1644,802,0.693,0.00111346,0.033368553,24,24,generate,NA,within,mixed,non-words,recognition,item,medium,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,3,1,1645,802,0.623,0.001257701,0.035464074,24,24,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,4,1,1646,803,0.843,0.000528861,0.022996989,32,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,4,1,1647,803,0.716,0.00088107,0.029682827,32,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,4,1,1648,804,0.699,0.000921961,0.030363815,32,24,generate,NA,within,mixed,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,4,1,1649,804,0.64,0.001034734,0.032167277,32,24,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,4,2,1650,805,0.784,0.000696084,0.026383402,32,24,generate,NA,within,mixed,words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,4,2,1651,805,0.705,0.000907879,0.030131024,32,24,read,NA,within,mixed,words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,4,2,1652,806,0.642,0.001031797,0.032121589,32,24,generate,NA,within,mixed,non-words,recognition,item,high,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate -1483,4,2,1653,806,0.643,0.001030302,0.032098318,32,24,read,NA,within,mixed,non-words,recognition,item,NA,intentional,rhyme,verbal/speaking,word stem,full,timed,no,younger,immediate From c725a425220254a25d6bd9ecee13fe3daff1d247 Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 11 Oct 2024 22:49:05 +0200 Subject: [PATCH 066/127] fixes & cleanup --- R/funnnelplot.R | 241 +++++++++++++++++++++++------------------------- 1 file changed, 117 insertions(+), 124 deletions(-) diff --git a/R/funnnelplot.R b/R/funnnelplot.R index 1e6f9930..e8e9310a 100644 --- a/R/funnnelplot.R +++ b/R/funnnelplot.R @@ -159,22 +159,15 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { # y-axis plotting range (based on the common data set to make them common across figures) yTicks <- jaspGraphs::getPrettyAxisBreaks(range(c(0, dataset[[options[["effectSizeStandardError"]]]]))) + # a sequence of points must be used if tau is included in the confidence bands (PI is a nonlinear function of se) + ySeqH0 <- if (options[["funnelUnderH0ParametersFixedTau"]] == 0) range(yTicks) else seq(from = min(yTicks), to = max(yTicks), length.out = 100) + ySeqH1 <- if (!options[["funnelUnderH1IncludeHeterogeneity"]]) range(yTicks) else seq(from = min(yTicks), to = max(yTicks), length.out = 100) ### specify zero-centered funnels if (options[["funnelUnderH0"]]) { - dfsFunnel0 <- list() adjustFunnel0Mean <- options[["funnelUnderH0ParametersFixedMu"]] adjustFunnel0Heterogeneity <- options[["funnelUnderH0ParametersFixedTau"]] - for (i in seq_along(funnelLevels)) { - dfsFunnel0[[i]] <- data.frame( - x = c(-max(yTicks), 0, 0, max(yTicks)) * qnorm(funnelLevels[i], lower.tail = FALSE), - y = c(max(yTicks), 0, 0, max(yTicks)), - p = 2*funnelLevels[i], - lvl = 1-2*funnelLevels[i] - ) - dfsFunnel0[[i]]$x[1:2] <- dfsFunnel0[[i]]$x[1:2] + adjustFunnel0Mean - 1.96 * adjustFunnel0Heterogeneity - dfsFunnel0[[i]]$x[3:4] <- dfsFunnel0[[i]]$x[3:4] + adjustFunnel0Mean + 1.96 * adjustFunnel0Heterogeneity - } + dfsFunnel0 <- .fpComputeFunnelDf(ySeqH0, adjustFunnel0Mean, adjustFunnel0Heterogeneity, funnelLevels) } ### specify meta-analysis centered funnels @@ -196,17 +189,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { adjustFunnel1Heterogeneity <- if(options[["funnelUnderH1IncludeHeterogeneity"]]) sqrt(fit$tau2) else 0 } - dfsFunnel1 <- list() - for (i in seq_along(funnelLevels)) { - dfsFunnel1[[i]] <- data.frame( - x = c(-max(yTicks), 0, 0, max(yTicks)) * qnorm(funnelLevels[i], lower.tail = FALSE), - y = c(max(yTicks), 0, 0, max(yTicks)), - p = (1-funnelLevels[i]/100), - lvl = funnelLevels[i] - ) - dfsFunnel1[[i]]$x[1:2] <- dfsFunnel1[[i]]$x[1:2] + adjustFunnel1Mean - 1.96 * adjustFunnel1Heterogeneity - dfsFunnel1[[i]]$x[3:4] <- dfsFunnel1[[i]]$x[3:4] + adjustFunnel1Mean + 1.96 * adjustFunnel1Heterogeneity - } + dfsFunnel1 <- .fpComputeFunnelDf(ySeqH1, adjustFunnel1Mean, adjustFunnel1Heterogeneity, funnelLevels) # get maximum x value across all funnels in case of a split if (options[["split"]] == "" || options[["funnelUnderH1Parameters"]] == "fixed") { @@ -214,16 +197,14 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { } else { dfsFunnel1XMax <- list() for (i in seq_along(jaspResults[["fitContainer"]]$object)) { - + # extract each fit tempFit <- jaspResults[["fitContainer"]]$object[[i]] tempAdjustFunnel1Mean <- tempFit$b[1] tempAdjustFunnel1Heterogeneity <- if(options[["funnelUnderH1IncludeHeterogeneity"]]) sqrt(tempFit$tau2) else 0 - tempFitX <- c(-max(yTicks), 0, 0, max(yTicks)) * qnorm(funnelLevels[i], lower.tail = FALSE) - tempFitX[1:2] <- tempFitX[1:2] + tempAdjustFunnel1Mean - 1.96 * tempAdjustFunnel1Heterogeneity - tempFitX[3:4] <- tempFitX[3:4] + tempAdjustFunnel1Mean + 1.96 * tempAdjustFunnel1Heterogeneity - - dfsFunnel1XMax[[i]] <- range(tempFitX) + # compute the maximum funnel width + tempFitX <- .fpComputeFunnelDf(max(ySeqH1), tempAdjustFunnel1Mean, tempAdjustFunnel1Heterogeneity, max(funnelLevels)) + dfsFunnel1XMax[[i]] <- range(tempFitX[[1]]) } dfsFunnel1XRange <- range(unlist(dfsFunnel1XMax)) } @@ -277,6 +258,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { dfLabels <- dfPlot + # exclusion of data points outside the funnel (if requested) and alignment with the appropriate funnel if (options[["estimatesMappingLabel"]] == "outsideH0") { dfLabels$position <- ifelse(dfLabels$x < adjustFunnel0Mean, "right", "left") dfLabels$nudge_x <- ifelse(dfLabels$x < adjustFunnel0Mean, -0.05, 0.05) @@ -433,7 +415,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { jaspResults[["funnelParametersTable"]] <- funnelParametersTable if (options[["split"]] != "") - funnelParametersTable$addColumnInfo(name = "split", title = "", type = "string") + funnelParametersTable$addColumnInfo(name = "split", title = options[["split"]], type = "string") funnelParametersTable$addColumnInfo(name = "k", title = gettext("Estimates"), type = "integer") funnelParametersTable$addColumnInfo(name = "mu", title = gettext("\U03BC"), type = "number") if (!.maGetMethodOptions(options) %in% c("EE", "FE")) @@ -510,7 +492,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { funnelAsymetryTests[["metaRegressionTable"]] <- metaRegressionTable if (options[["split"]] != "") - metaRegressionTable$addColumnInfo(name = "split", title = "", type = "string") + metaRegressionTable$addColumnInfo(name = "split", title = options[["split"]], type = "string") metaRegressionTable$addColumnInfo(name = "k", title = gettext("Estimates"), type = "integer") metaRegressionTable$addColumnInfo(name = "z", title = gettext("z"), type = "number", overtitle = gettext("Asymmetry Test")) metaRegressionTable$addColumnInfo(name = "p", title = gettext("p"), type = "pvalue", overtitle = gettext("Asymmetry Test")) @@ -521,46 +503,33 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { if (.fpReady(options)) { if (options[["split"]] == "") { - fit <- jaspResults[["fitContainer"]]$object - fitTest <- try(metafor::regtest(fit)) + fit <- jaspResults[["fitContainer"]]$object + fitTest <- try(metafor::regtest(fit)) + fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "metaRegression") - if (jaspBase::isTryError(fitTest)) { + if (jaspBase::isTryError(fitTest)) metaRegressionTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) - } else { - fitSummary <- data.frame( - k = fit$k, - z = fitTest$zval, - p = fitTest$pval, - est = fitTest$est, - lCI = fitTest$ci.lb, - uCI = fitTest$ci.ub - ) - } + + metaRegressionTable$setData(fitSummary) } else { - fits <- jaspResults[["fitContainer"]]$object - fitSummary <- do.call(rbind, lapply(fits, function(fit) { - - fitTest <- try(metafor::regtest(fit)) - if (jaspBase::isTryError(fitTest)) { - metaRegressionTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) - return(data.frame(k = NA, z = NA, p = NA, est = NA, lCI = NA, uCI = NA)) - } - return(data.frame( - k = fit$k, - z = fitTest$zval, - p = fitTest$pval, - est = fitTest$est, - lCI = fitTest$ci.lb, - uCI = fitTest$ci.ub - )) + fits <- jaspResults[["fitContainer"]]$object + fitSummaries <- do.call(rbind, lapply(seq_along(fits), function(i) { + + fitTest <- try(metafor::regtest(fits[[i]])) + fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "metaRegression") + fitSummary$split <- names(fits)[i] + + if (jaspBase::isTryError(fitTest)) + metaRegressionTable$addFootnote(fitTest, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + + return(fitSummary) })) - fitSummary <- data.frame(split = names(fits), fitSummary) - } + metaRegressionTable$setData(fitSummaries) - metaRegressionTable$setData(fitSummary) + } } } @@ -573,7 +542,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { funnelAsymetryTests[["weightedRegressionTable"]] <- weightedRegressionTable if (options[["split"]] != "") - weightedRegressionTable$addColumnInfo(name = "split", title = "", type = "string") + weightedRegressionTable$addColumnInfo(name = "split", title = options[["split"]], type = "string") weightedRegressionTable$addColumnInfo(name = "k", title = gettext("Estimates"), type = "integer") weightedRegressionTable$addColumnInfo(name = "t", title = gettext("t"), type = "number", overtitle = gettext("Asymmetry Test")) weightedRegressionTable$addColumnInfo(name = "df", title = gettext("df"), type = "integer", overtitle = gettext("Asymmetry Test")) @@ -585,48 +554,33 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { if (.fpReady(options)) { if (options[["split"]] == "") { - fit <- jaspResults[["fitContainer"]]$object - fitTest <- try(metafor::regtest(fit, model = "lm")) - - if (jaspBase::isTryError(fitTest)) { - weightedRegressionTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) - } else { - fitSummary <- data.frame( - k = fit$k, - t = fitTest$zval, - df = fitTest$dfs, - p = fitTest$pval, - est = fitTest$est, - lCI = fitTest$ci.lb, - uCI = fitTest$ci.ub - ) - } + fit <- jaspResults[["fitContainer"]]$object + fitTest <- try(metafor::regtest(fit, model = "lm")) + fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "weightedRegression") + + if (jaspBase::isTryError(fitTest)) + weightedRegressionTable$addFootnote(fitTest, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + + weightedRegressionTable$setData(fitSummary) } else { - fits <- jaspResults[["fitContainer"]]$object - fitSummary <- do.call(rbind, lapply(fits, function(fit) { - - fitTest <- try(metafor::regtest(fit, model = "lm")) - if (jaspBase::isTryError(fitTest)) { - weightedRegressionTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) - return(data.frame(k = NA, t = NA, df = NA, p = NA, est = NA, lCI = NA, uCI = NA)) - } - return(data.frame( - k = fit$k, - t = fitTest$zval, - df = fitTest$dfs, - p = fitTest$pval, - est = fitTest$est, - lCI = fitTest$ci.lb, - uCI = fitTest$ci.ub - )) + fits <- jaspResults[["fitContainer"]]$object + fitSummaries <- do.call(rbind, lapply(seq_along(fits), function(i) { + + fitTest <- try(metafor::regtest(fits[[i]], model = "lm")) + fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "weightedRegression") + fitSummary$split <- names(fits)[i] + + if (jaspBase::isTryError(fitTest)) + weightedRegressionTable$addFootnote(fitTest, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + + return(fitSummary) })) - fitSummary <- data.frame(split = names(fits), fitSummary) - } + weightedRegressionTable$setData(fitSummaries) - weightedRegressionTable$setData(fitSummary) + } } } @@ -639,7 +593,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { funnelAsymetryTests[["rankCorrelationTable"]] <- rankCorrelationTable if (options[["split"]] != "") - rankCorrelationTable$addColumnInfo(name = "split", title = "", type = "string") + rankCorrelationTable$addColumnInfo(name = "split", title = options[["split"]], type = "string") rankCorrelationTable$addColumnInfo(name = "k", title = gettext("Estimates"), type = "integer") rankCorrelationTable$addColumnInfo(name = "tau", title = gettext("\U1D70F"), type = "number") rankCorrelationTable$addColumnInfo(name = "p", title = gettext("p"), type = "pvalue") @@ -648,45 +602,84 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { if (options[["split"]] == "") { - fit <- jaspResults[["fitContainer"]]$object - fitTest <- try(metafor::ranktest(fit)) + fit <- jaspResults[["fitContainer"]]$object + fitTest <- try(metafor::ranktest(fit)) + fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "rankCorrelation") - if (jaspBase::isTryError(fitTest)) { + if (jaspBase::isTryError(fitTest)) rankCorrelationTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) - } else { - fitSummary <- data.frame( - k = fit$k, - tau = fitTest$tau, - p = fitTest$pval - ) - } + else + fitSummary$k <- fit$k + + rankCorrelationTable$setData(fitSummary) + } else { - fits <- jaspResults[["fitContainer"]]$object - fitSummary <- do.call(rbind, lapply(fits, function(fit) { + fits <- jaspResults[["fitContainer"]]$object + fitSummaries <- do.call(rbind, lapply(seq_along(fits), function(i) { + + fitTest <- try(metafor::ranktest(fits[[i]])) + fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "rankCorrelation") + fitSummary$split <- names(fits)[i] - fitTest <- try(metafor::ranktest(fit)) - if (jaspBase::isTryError(fitTest)) { + if (jaspBase::isTryError(fitTest)) rankCorrelationTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) - return(data.frame(k = NA, tau = NA, p = NA)) - } - return(data.frame( - k = fit$k, - tau = fitTest$tau, - p = fitTest$pval - )) + else + fitSummary$k <- fits[[i]]$k + + return(fitSummary) })) - fitSummary <- data.frame(split = names(fits), fitSummary) - } + rankCorrelationTable$setData(fitSummaries) - rankCorrelationTable$setData(fitSummary) + } } } return() } +.fpComputeFunnelDf <- function(seSeq, mean, heterogeneity, funnelLevels) { + dfs <- list() + for (i in seq_along(funnelLevels)) { + tempZ <- qnorm(funnelLevels[i], lower.tail = FALSE) + dfs[[i]] <- data.frame( + x = c(rev(mean - tempZ * sqrt(heterogeneity^2 + seSeq^2)), mean + tempZ * sqrt(heterogeneity^2 + seSeq^2)), + y = c(rev(seSeq), seSeq), + p = 2*funnelLevels[i], + lvl = 1-2*funnelLevels[i] + ) + } + return(dfs) +} +.dpExtractAsymmetryTest <- function(fitTest, testType) { + if (testType == "metaRegression") { + return(data.frame( + k = if (jaspBase::isTryError(fitTest)) NA else fitTest$fit$k, # nobs will be fixed in the next release + z = if (jaspBase::isTryError(fitTest)) NA else fitTest$zval, + p = if (jaspBase::isTryError(fitTest)) NA else fitTest$pval, + est = if (jaspBase::isTryError(fitTest)) NA else fitTest$est, + lCI = if (jaspBase::isTryError(fitTest)) NA else fitTest$ci.lb, + uCI = if (jaspBase::isTryError(fitTest)) NA else fitTest$ci.ub + )) + } else if (testType == "weightedRegression") { + return(data.frame( + k = if (jaspBase::isTryError(fitTest)) NA else nobs(fitTest$fit), + t = if (jaspBase::isTryError(fitTest)) NA else fitTest$zval, + df = if (jaspBase::isTryError(fitTest)) NA else fitTest$dfs, + p = if (jaspBase::isTryError(fitTest)) NA else fitTest$pval, + est = if (jaspBase::isTryError(fitTest)) NA else fitTest$est, + lCI = if (jaspBase::isTryError(fitTest)) NA else fitTest$ci.lb, + uCI = if (jaspBase::isTryError(fitTest)) NA else fitTest$ci.ub + )) + } else if (testType == "rankCorrelation") { + return(data.frame( + tau = if (jaspBase::isTryError(fitTest)) NA else fitTest$tau, + p = if (jaspBase::isTryError(fitTest)) NA else fitTest$pval + )) + } +} + # compute power enhancement contours (lifted from zcurve) .power_to_z <- function(power, alpha = .05, a = stats::qnorm(alpha/2,lower.tail = FALSE), two.sided = TRUE, nleqslv_control = list(xtol = 1e-15, maxit = 300, stepmax = .5)){ if(a < 0)stop("a must be >= 0") From 3b07faad8a70da98b167248e174f6201bf3854e3 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 13 Oct 2024 13:10:12 +0200 Subject: [PATCH 067/127] Update funnnelplot.R --- R/funnnelplot.R | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/R/funnnelplot.R b/R/funnnelplot.R index e8e9310a..42193232 100644 --- a/R/funnnelplot.R +++ b/R/funnnelplot.R @@ -259,27 +259,24 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { dfLabels <- dfPlot # exclusion of data points outside the funnel (if requested) and alignment with the appropriate funnel - if (options[["estimatesMappingLabel"]] == "outsideH0") { - dfLabels$position <- ifelse(dfLabels$x < adjustFunnel0Mean, "right", "left") - dfLabels$nudge_x <- ifelse(dfLabels$x < adjustFunnel0Mean, -0.05, 0.05) - tempDiff <- abs(dfLabels$x - adjustFunnel0Mean) - tempDiff[tempDiff < 1.96 * adjustFunnel0Heterogeneity] <- 0 + if (options[["estimatesMappingLabel"]] %in% c("outsideH0", "outsideH1")) { + # get the appropriate funnel parameters + tempAdjustMean <- if (options[["estimatesMappingLabel"]] == "outsideH0") adjustFunnel0Mean else adjustFunnel1Mean + tempAdjustHeterogeneity <- if (options[["estimatesMappingLabel"]] == "outsideH0") adjustFunnel0Heterogeneity else adjustFunnel1Heterogeneity + # exclusion of data points outside the funnel + tempDiff <- abs(dfLabels$x - tempAdjustMean) + tempDiff[tempDiff < 1.96 * tempAdjustHeterogeneity] <- 0 tempZ <- tempDiff / dfLabels$y dfLabels <- dfLabels[tempZ > max(qnorm(funnelLevels, lower.tail = FALSE)),] - } else if (options[["estimatesMappingLabel"]] == "outsideH1") { - dfLabels$position <- ifelse(dfLabels$x < adjustFunnel1Mean, "right", "left") - dfLabels$nudge_x <- ifelse(dfLabels$x < adjustFunnel1Mean, -0.05, 0.05) - tempDiff <- abs(dfLabels$x - adjustFunnel1Mean) - tempDiff[tempDiff < 1.96 * adjustFunnel1Heterogeneity] <- 0 - tempZ <- tempDiff / dfLabels$y - dfLabels <- dfLabels[tempZ > max(qnorm(funnelLevels, lower.tail = FALSE)),] - } else if (options[["estimatesMappingLabel"]] == "all") { - dfLabels$position <- ifelse(dfLabels$x < 0, "right", "left") - dfLabels$nudge_x <- ifelse(dfLabels$x < 0, -0.05, 0.05) + } else { + # use H1 -> H0 -> mean to align the if the funnels are present + tempAdjustMean <- if (options[["funnelUnderH1"]]) adjustFunnel1Mean else if (options[["funnelUnderH0"]]) adjustFunnel0Mean else 0 } + # specify the position of the labels + dfLabels$position <- ifelse(dfLabels$x < tempAdjustMean, "right", "left") + dfLabels$nudge_x <- ifelse(dfLabels$x < tempAdjustMean, -0.05, 0.05) } - ### specify "background" for the funnel plot dfBackground <- data.frame( x = c(min(xTicks), max(xTicks), max(xTicks), min(xTicks)), From d415e70bc9d8de59d02abbc054431ef12dd3cfc1 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 21 Oct 2024 17:06:20 +0200 Subject: [PATCH 068/127] fixes --- R/classicalmetaanalysis.R | 4 ++-- R/classicalmetaanalysismultilevelmultivariate.R | 4 ++-- R/funnnelplot.R | 6 +++++- inst/Description.qml | 15 ++++++++------- inst/qml/ClassicalMetaAnalysis.qml | 1 + .../qml_components/ClassicalMetaAnalysisModel.qml | 4 ++-- run.R | 3 +++ 7 files changed, 23 insertions(+), 14 deletions(-) create mode 100644 run.R diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 48824806..818e5092 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -131,8 +131,8 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { } .maReadData <- function(dataset, options) { - if (!is.null(dataset)) - return(dataset) +# if (!is.null(dataset)) +# return(dataset) # model data predictorsNominal <- options[["predictors"]][options[["predictors.types"]] == "nominal"] diff --git a/R/classicalmetaanalysismultilevelmultivariate.R b/R/classicalmetaanalysismultilevelmultivariate.R index 04cd109b..5484e9c8 100644 --- a/R/classicalmetaanalysismultilevelmultivariate.R +++ b/R/classicalmetaanalysismultilevelmultivariate.R @@ -32,8 +32,8 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N .mammReadData <- function(dataset, options) { - if (!is.null(dataset)) - return(dataset) +# if (!is.null(dataset)) +# return(dataset) # model data predictorsNominal <- options[["predictors"]][options[["predictors.types"]] == "nominal"] diff --git a/R/funnnelplot.R b/R/funnnelplot.R index 42193232..454fc96c 100644 --- a/R/funnnelplot.R +++ b/R/funnnelplot.R @@ -14,6 +14,10 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # +# TODO: +# - simulatanous mapping overrides one of them +# - funnel plot asymmetry tests fail with split +# - check that sequence se sequence is generated with fixed mu and tau under null FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { @@ -263,7 +267,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { # get the appropriate funnel parameters tempAdjustMean <- if (options[["estimatesMappingLabel"]] == "outsideH0") adjustFunnel0Mean else adjustFunnel1Mean tempAdjustHeterogeneity <- if (options[["estimatesMappingLabel"]] == "outsideH0") adjustFunnel0Heterogeneity else adjustFunnel1Heterogeneity - # exclusion of data points outside the funnel + # exclusion of data points outside the funnel tempDiff <- abs(dfLabels$x - tempAdjustMean) tempDiff[tempDiff < 1.96 * tempAdjustHeterogeneity] <- 0 tempZ <- tempDiff / dfLabels$y diff --git a/inst/Description.qml b/inst/Description.qml index 590bbe67..3fb4cb72 100644 --- a/inst/Description.qml +++ b/inst/Description.qml @@ -18,8 +18,8 @@ Description GroupTitle { - title: qsTr("Miscellaneous") - icon: "meta-analysis.svg" + title: qsTr("Miscellaneous") + icon: "meta-analysis.svg" } Analysis @@ -27,7 +27,7 @@ Description menu: qsTr("Effect Size Computation") title: qsTr("Effect Size Computation") func: "EffectSizeComputation" - requiresData: false + requiresData: true } Analysis @@ -35,12 +35,13 @@ Description menu: qsTr("Funnel Plot") title: qsTr("Funnel Plot") func: "FunnelPlot" + requiresData: true } GroupTitle { - title: qsTr("Classical") - icon: "meta-analysis.svg" + title: qsTr("Classical") + icon: "meta-analysis.svg" } Analysis @@ -90,8 +91,8 @@ Description GroupTitle { - title: qsTr("Bayesian") - icon: "meta-analysis-bayesian.svg" + title: qsTr("Bayesian") + icon: "meta-analysis-bayesian.svg" } Analysis diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index f465d365..77930d35 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -97,6 +97,7 @@ Form id: predictors title: qsTr("Predictors") allowedColumns: ["nominal", "scale"] + allowTypeChange: true } AssignedVariablesList diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml b/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml index b1cb6378..afaf93f5 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml @@ -31,7 +31,7 @@ Section property alias effectSizeModelTermsCount: effectSizeModelTerms.count property alias heterogeneityModelTermsCount: heterogeneityModelTerms.count property alias heterogeneityModelLinkValue: heterogeneityModelLink.value - + Group { @@ -109,4 +109,4 @@ Section values: ["log", "identity"] } } -} \ No newline at end of file +} diff --git a/run.R b/run.R new file mode 100644 index 00000000..eb57494e --- /dev/null +++ b/run.R @@ -0,0 +1,3 @@ +renv::activate() +renv::restore() +renv::install('.') From f056795978769ed1c744386ebc98dccd191fa1be Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 21 Oct 2024 17:06:32 +0200 Subject: [PATCH 069/127] remove outdated files --- R/emmeans.rma.R | 210 ---------- R/multilevelmetaanalysis.R | 813 ------------------------------------- R/quick.influence.R | 59 --- 3 files changed, 1082 deletions(-) delete mode 100644 R/emmeans.rma.R delete mode 100644 R/multilevelmetaanalysis.R delete mode 100644 R/quick.influence.R diff --git a/R/emmeans.rma.R b/R/emmeans.rma.R deleted file mode 100644 index b37718a8..00000000 --- a/R/emmeans.rma.R +++ /dev/null @@ -1,210 +0,0 @@ -emmeans.rma <- function(object, formula, data, conf.level = .95, contrasts = NULL, ...) { - if (is.null(object$call) || is.null(object$call$yi) || !inherits(object$call$yi, "formula")) - stop("Currently this only works with rma and rma.mv objects that have specified 'yi' as a formula.") - - mdlformula = object$call$yi - mdlformula[[2]] = NULL # remove dependent - - # build a new data matrix - used_terms = all.vars(mdlformula) - if(!(all.vars(formula) %in% used_terms)) stop("Formula is refering to factors that are not in the model.") - factor_levels = lapply(data[, used_terms, drop=FALSE], function(x) if (!is.numeric(x)) levels(factor(x)) ) # extract factor levels - .grid = expand.grid(Filter(Negate(is.null), factor_levels)) - if(nrow(.grid) == 0) stop("There are no predictors in the model that correspond to factors in '", deparse(substitute(data)), "'. Factor levels: ", paste(capture.output(str(factor_levels)), collapse = ", "), ". Data names: ", paste(names(data), collapse = ", "), "; Used Terms: ",paste(used_terms, collapse=", "), "; Data set head: ", paste(capture.output(head(data)), collapse="\n")) - covariate_means = colMeans(data[, names(Filter(is.null, factor_levels)), drop = FALSE], na.rm = TRUE) - newdata = do.call(transform, c(list(.grid), as.list(covariate_means))) - - b = coef(object) - Vb = vcov(object) - - # compute transformation matrix: - # - M: design matrix conforming the model for obtain cell means for all factors crossed (fixing covariates to their sample averages; should this be within cell averages?) - # - K: matrix with dummies for picking out the means to combine - # - K.M = (K'K)^-1 K'M is the transformation matrix for the model's regression coefficients to yield the marginal means - M = do.call(model.matrix, list(mdlformula, newdata)) - match.colnames = max.col(-adist(names(b), colnames(M))) - M = M[, match.colnames] - factors = all.vars(formula) - Kmf = model.frame(paste("~ 0 + ", factors, collapse = ":"), unique(.grid[, factors, drop = FALSE])) - K = model.matrix(Kmf, newdata, constrasts = sapply(factors, function(...) 'contr.Treatment',simplify = F)) - K.M = MASS::ginv(K) %*% M - - # if contrast matrix is specified, a hypothesis test on these contrasts are given - if(!missing(contrasts) && is.matrix(contrasts)) { - if (is.null(rownames(contrasts))) rownames(contrasts) = paste(deparse(substitute(contrasts)), "[", 1:nrow(contrasts), ", ]", sep="") - K.M = contrasts %*% K.M - } - - # compute marginal means requested, plus their standard errors - emmeans = K.M %*% b - se = diag(K.M %*% Vb %*% t(K.M))^0.5 - - # build return structure - if (!missing(contrasts)) { - ret = data.frame(Contrast=rownames(K.M), Estimate = emmeans, SE = se, df = df.residual(object)) - t = emmeans / se - pval = pt(-abs(t), ret$df, lower.tail = TRUE) - comparisons = if (is.null(rownames(contrasts))) ret$Contrast else rownames(contrasts) - ret = transform(ret, Contrast = comparisons, `t value` = t, `P(>|t|)` = pval, check.names=FALSE) - } else { - ret = transform(Kmf, emmean = emmeans, SE = se, df = df.residual(object)) - p = (1-conf.level) / 2 - ret = transform(ret, lower.CL = emmean + qt(p, df) * SE, upper.CL = emmean - qt(p, df) * SE) - } - rownames(ret) = NULL - structure(ret, collapsed = setdiff(colnames(.grid), all.vars(formula)), conf.level = conf.level, - covariate_means = covariate_means, class = c("emmeans.rma","data.frame")) -} - -print.emmeans.rma <- function(x, ...) { - print(structure(x, class = "data.frame"), ...) - if (length(attr(x, "collapsed")) > 0 ) { - cat("\n\nMeans are averaged over the levels of: ") - cat(attr(x, "collapsed"), sep = ", ") - } - if (length(attr(x,"covariate_means")) > 0) { - cat("\nThe following means for the covariates were used:\n") - print(attr(x,"covariate_means"), ...) - } - cat("\nConfidence level used:", attr(x,"conf.level"), "\n") - invisible(x) -} - - -emmeans_contrasts.rma <- function(x, ..., contrasts) { - C = contrasts - if (!is.matrix(C)) stop("Argument 'contrasts' should be a matrix.") - if (!all(abs(rowSums(C)) < .Machine$double.eps)^.5) stop("Invalid contrasts: Rows in", deparse(substitute(contrasts)), "do not add to 0.") - emmeans.rma(x, ..., contrasts = C) -} - -contr.all_deviations <- function(n) { - # n is either a factor, or a number (of levels) - # Deviation contrasts for all levels are computed - fact <- NA - if (is.factor(n)) { - fact <- n - n <- nlevels(n) - } - C <- diag(n) - 1/n - rownames(C) = colnames(C) = if (is.factor(fact)) levels(fact) else 1:n - C -} - -contr.all_pairs <- function(n) { - # n is either a factor, or a number of levels - # Contrasts for all possible pairwise comparisons are computed - fact = NA - if (is.factor(n)) { - fact = n - n = nlevels(n) - } - if (length(n) > 1) {n = n[1]; warning("Only using first element of", deparse(substitute(n)),".")} - if (n < 2) stop(deparse(substitute(n)), "is smaller than 2.") - N = n-1 - C = sapply(1:n, function(i) cbind(-1, diag(N))[,(0:N+i) %% n + 1, drop=FALSE]) - C = C[!duplicated(abs(C)),, drop = FALSE] - colnames(C) = if (is.factor(fact)) levels(fact) else 1:n - rownames(C) = apply(C, 1, function(x) {i <- which(x!=0); nms <- colnames(C)[i[order(x[i], decreasing=TRUE)]]; paste(nms, collapse = " - ")}) - C -} - -addSignifStars <- function(x, ..., column = "P(>|t|)", stars = c(' ***'=.001, ' **'=.01, ' *'=.05, ' .'=.1) ) { - X = transform(x, ` ` = c(names(stars),'')[findInterval(get(column), c(0, stars, 1))], check.names = FALSE, stringsAsFactors=FALSE) - attributes(X) <- attributes(x) - names(X) = ifelse(is.na(names(X)), ' ', names(X)) - X -} - -# (function(conf.level = .95){ -# formula = ~ colour -# data = carData::Arrests -# fit = lm(checks ~ colour*sex+employed, data = data) -# mf = if(is.data.frame(model.frame(fit))) model.frame(fit) else data[, all.vars(mdlformula)] -# -# mdlformula = fit$call$formula -# mdlformula[[2]] = NULL # remove response variable -# -# b = coef(fit) -# Vb = vcov(fit) -# -# tmp = expand.grid(Filter(Negate(is.null), lapply(mf, levels))) -# #browser() -# M = do.call(model.matrix, list(mdlformula, tmp)) #, contrasts = list(wool='contr.Treatment', tension='contr.Treatment'))) -# Kmf = model.frame(paste("~ 0 + ",all.vars(formula), collapse = ":"), unique(tmp[, all.vars(formula), drop = FALSE])) -# K = model.matrix(Kmf, tmp, contrasts = as.list(setNames(rep("contr.Treatment", length(all.vars(formula))), all.vars(formula)))) -# K.M = ginv(K) %*% M -# em = K.M %*% b -# se = diag(K.M %*% Vb %*% t(K.M))^.5 -# ret = transform(Kmf, emmean = em, SE = se, df = df.residual(fit)) -# structure(transform(ret, lower.CL = emmean - qt(.025, df)*se, upper.CL = emmean - qt(0.5-conf.level/2, df)*se), -# collapsed = setdiff(all.vars(mdlformula), all.vars(formula)), conf.level = conf.level) -# })() # for testing the correctness - - -### -### NIET AAN BEGINNEN!!!! (gebruik gewoon package emmeans!) -### -# -# emmeans <- function(object, ...) UseMethod("emmeans") -# -# emmeans.default <- function(object, conditioning, contrasts = NULL) { -# require(tidyverse) -# conditioning = if (is_formula(conditioning)) all.vars(conditioning[-2]) else as.character(conditioning) -# -# method = match.arg(method) -# -# mf = model.frame(object) -# used_terms = names(mf) -# -# factor_levels = Filter(Negate(is.null), lapply(mf, levels)) # extract factor levels -# covariate_names = names(Filter(is.null, lapply(mf, levels))) -# .grid = expand.grid(factor_levels) -# covariate_means = colMeans(mf[covariate_names], na.rm = TRUE) -# newdata = do.call(transform, c(list(.grid), as.list(covariate_means))) -# -# piv = object$qr$pivot[1:object$rank] -# b = coef(object)[piv] -# Vb = vcov(object)[piv,piv] -# -# # compute transformation matrix: -# # - M: design matrix conforming the model for obtain cell means for all factors crossed (fixing covariates to their sample averages; should this be within cell averages?) -# # - K: matrix with dummies for picking out the means to combine -# # - K.M = (K'K)^-1 K'M is the transformation matrix for the model's regression coefficients to yield the marginal means -# # M = do.call(model.matrix, list(mdlformula, newdata)) -# M = model.matrix(terms(object), newdata)[, object$qr$pivot[1:object$rank], drop = FALSE] -# match.colnames = max.col(-adist(names(b), colnames(M))) -# M = M[, match.colnames] -# factors = all.vars(formula) -# Kmf = model.frame(paste("~ 0 + ", factors, collapse = ":"), unique(.grid[, factors, drop = FALSE])) -# K = model.matrix(Kmf, newdata, constrasts = sapply(factors, function(...) 'contr.Treatment',simplify = F)) -# K.M = MASS::ginv(K) %*% M -# -# # if contrast matrix is specified, a hypothesis test on these contrasts are given -# if(!missing(contrasts) && is.matrix(contrasts)) { -# K.M = contrasts %*% K.M -# } -# -# # compute marginal means requested, plus their standard errors -# emmeans = K.M %*% b -# se = diag(K.M %*% Vb %*% t(K.M))^0.5 -# -# # build return structure -# if (!missing(contrasts)) { -# ret = data.frame(Contrast=rownames(K.M), Estimate = emmeans, SE = se, df = df.residual(object)) -# t = emmeans / se -# pval = pt(-abs(t), ret$df, lower.tail = TRUE) -# comparisons = if (is.null(rownames(contrasts))) ret$Contrast else rownames(contrasts) -# ret = transform(ret, Contrast = comparisons, `t value` = t, `P(>|t|)` = pval, check.names=FALSE) -# } else { -# ret = transform(Kmf, emmean = emmeans, SE = se, df = df.residual(object)) -# p = (1-conf.level) / 2 -# ret = transform(ret, lower.CL = emmean + qt(p, df) * SE, upper.CL = emmean - qt(p, df) * SE) -# } -# rownames(ret) = NULL -# structure(ret, collapsed = setdiff(colnames(.grid), all.vars(formula)), conf.level = conf.level, -# covariate_means = covariate_means, class = c("emmeans.rma","data.frame")) -# } -# -# -# diff --git a/R/multilevelmetaanalysis.R b/R/multilevelmetaanalysis.R deleted file mode 100644 index 928c8c0c..00000000 --- a/R/multilevelmetaanalysis.R +++ /dev/null @@ -1,813 +0,0 @@ -# -# Copyright (C) 2013-2018 University of Amsterdam -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - - - - -MultilevelMetaAnalysis <- function(jaspResults, options, dataset, state=NULL) { - #options(contrasts = list(unordered = "contr.Treatment", ordered = "contr.poly")) - options = Filter(function(x) !all(x=="" | is.na(x)), options) # only keep set components - do.call(multi_meta_analysis, c(list(jaspResults=jaspResults, dataset=dataset, state=state, debug=FALSE), options)) - - return() -} - -multi_meta_analysis <- - function(jaspResults, dataset, state, debug=FALSE, - ES_name, # effect size variable (continuous) - SE_name, # standard error of effect size (continuous, strictly positive) - inner_grouping = "1", # factor that distinguishes outcomes in a multivariate model - outer_grouping = NA, # factors that specify hierarchy of otherwise independent samples - fixed_predictor_terms = "1", # nested list with predictor terms (including potential interaction terms) - labels_variable, - method = c("REML", "ML"), - inner_cov_struct = c("CS", "HCS", "ID", "DIAG", "AR", "HAR"), - anova_table = TRUE, - intercept = TRUE, - coeftest_type = c('z', 't'), - add_robust_qtest = TRUE, - FE_coef_table = TRUE, - fit_measures_table = TRUE, - varComp_params_table = TRUE, - FE_vcov_table = FALSE, - funnelPlotAsymmetry = FALSE, - ranktest_table = FALSE, - regtest_table = FALSE, - diagnostics_table = FALSE, - failsafe_n_table = FALSE, - funnel_plot = FALSE, - forest_plot = TRUE, - residual_dependent_plot = FALSE, - profile_plot = FALSE, - emmeans_table = FALSE, - ... - ) - { - ### Help functions #### - # unfortunately, inside JASP the requirement to use namespaces causes - # dplyr- and other operators not to exist... Hence, it is/they are define here - `%>%` <- dplyr::`%>%` - # `cout` makes html output and debug easier - cout <- function(...) paste(capture.output(...), collapse = "\n") - - ### Restore Previous State? #### - res <- if (!is.null(jaspResults[['res']])) jaspResults[['res']]$object else NULL - #jaspResults[['bla']] <- createJaspHtml(cout(res), "pre", title='Stored object', position=1) - - - ### Default jaspResults #### - - jaspResults$title = "Multivariate/Multilevel Meta-Analysis" - - if (anova_table && is.null(res)) { - jaspResults[['anova_table']] = createJaspTable( title = "Analysis of Variance Table", position = 20, - data.frame(rowname=c("Test of Residual Heterogeneity","Omnibus test of Effects"), - Q=".", df=".", p=".") %>% tibble::column_to_rownames("rowname") - ) - jaspResults[['anova_table']]$dependOnOptions("anova_table") - } - - - ### Verify and standardize input #### - - if (missing(ES_name) || missing(SE_name)) { - return() - } - ES_name = head(ES_name, 1) - SE_name = head(SE_name, 1) - - if (!missing(inner_grouping)) - inner_grouping = as.character(substitute(inner_grouping)) - - if (!missing(labels_variable)) - labels_variable = as.character(substitute(labels_variable)) - - - ### Verify and standardize input #### - - if (missing(ES_name) || missing(SE_name)) { - return() - } - ES_name = head(ES_name, 1) - SE_name = head(SE_name, 1) - - if (!missing(inner_grouping)) - inner_grouping = as.character(substitute(inner_grouping)) - - if (!missing(labels_variable)) - labels_variable = as.character(substitute(labels_variable)) - - - ### Extract data to data frame #### - - if (is.null(dataset)) { - #dataset <- .readDataSetToEnd(columns.as.numeric=variables) - #dataset.factors <- .readDataSetToEnd(columns=variables) - - - dataset_pred = dataset_ESSE = dataset_grouping = dataset_labels = NULL - - if (!missing(fixed_predictor_terms)) - dataset_pred <- .readDataSetToEnd(columns = unique(unlist(fixed_predictor_terms))) - - if (!missing(ES_name) && !missing(SE_name)) - dataset_ESSE = .readDataSetToEnd(columns.as.numeric = c(ES_name, SE_name)) - - if (!missing(outer_grouping)) { - - if (!missing(inner_grouping)) - dataset_grouping = .readDataSetToEnd(columns.as.factor = c(inner_grouping, outer_grouping)) - else - dataset_grouping = .readDataSetToEnd(columns.as.factor = outer_grouping) - - } - - if (!missing(labels_variable)) - dataset_labels = .readDataSetToEnd(columns.as.factor = labels_variable) - - #if (debug) jaspResults[['ES data']] = createJaspTable("Debug: ES/V Data", dataset_ESSE) - #if (debug) jaspResults[['pred data']] = createJaspTable("Debug: Predictors Data", dataset_pred) - #if (debug) jaspResults[['group data']] = createJaspTable("Debug: Grouping Data", dataset_grouping) - #if (debug) jaspResults[['label data']] = createJaspTable("Debug: Label Data", dataset_labels) - - args = c(list(dataset_ESSE), list(dataset_pred), list(dataset_grouping), list(dataset_labels)) - dataset = do.call(cbind, Filter(Negate(is.null), args)) - - } - - if (debug) jaspResults[['raw data']] = createJaspTable("Debug: Raw Data", dataset) - - ### Check data #### - - #.hasErrors(data = dataset, type = c("observations", "infinity")) - dataErrors <- - c( - verify_that(dataset[ES_name], is.numeric, is.finite, not.constant), - verify_that(dataset[SE_name], is.numeric, is.finite, is.positive) - ) - - - - if (length(dataErrors) > 0) { - - message = '

Conditions not met:
  • bla

' - message = gsub("bla", dataErrors %>% paste(names(.), ., collapse="\n
  • "), message) - jaspResults[["error_message"]] <- createJaspHtml(message, - elementType = "div",title = "Data problems", position = 5) - return() - - } - - - ### Build model #### - - if (is.null(res)) { - - # construct model formulas - - fixed_formula = as.formula(paste(ES_name, "~", paste(lapply(lapply(fixed_predictor_terms,unlist), paste, collapse = ":"), collapse = " + "))) # e.g.: ES ~ x1 + x2 + x2:x3 - random_formula = as.formula(paste(" ~ ", inner_grouping, " | ", paste(outer_grouping, collapse = "/"))) # e.g.: ~ test_type | district / school - - if (debug) jaspResults[['predictor_terms']] = createJaspHtml(paste(capture.output(fixed_predictor_terms), collapse="\n"), "pre", title="Predictor terms") - - # construct fitting call - - call = quote(metafor::rma.mv(yi = yi ~ 1, V = vi, data = dataset)) - - call$yi = fixed_formula - call$V = as.name(SE_name) - - if (! missing(outer_grouping)) call$random = random_formula - if (! missing(labels_variable)) call$slab = as.name(labels_variable) - if (! missing(method)) call$method = method[1] - if (! missing(inner_cov_struct)) call$struct = inner_cov_struct[1] - if (! missing(intercept)) call$intercept = intercept - if (! missing(coeftest_type)) call$test = coeftest_type[1] - - # do call fitting call - - res <- try(eval(call)) - - #jaspResults[['output']] = createJaspHtml(paste(c(capture.output(print(call)), capture.output(res)), collapse = "\n"), "pre", title = "Elementary output", position=10) - - if (inherits(res, "try-error")) return() - - # store the result as a state - jaspResults[['res']] <- - createJaspState(object = res, title = "Meta-analysis fit object", dependencies = - c("ES_name","SE_name","fixed_predictor_terms","outer_grouping","inner_cov_struct", "method", - "intercept","coeftest_type","labels_variable") - ) - - - if (debug) jaspResults[['call']] = createJaspHtml(paste(capture.output(call), collapse = "\n"), "pre", title="Debug: Call") - if (debug) jaspResults[['vars']] = createJaspHtml(paste(capture.output({cat("labels: ", labels_variable)}), collapse = "\n"), "pre", title="Debug: Call") - - } - - - - ### Set Output Title #### - jaspResults$title <- capture.output(summary(res))[2] - - - - ### Prepare Q-tests table output #### - - if (anova_table) { - - jaspResults[['anova_table']] <- - createJaspTable( title = "Analysis of Variance Table", position = 20, - (function(object, add_robust = FALSE, ...){ - - # Omnibus - qstat <- unlist(object[c('QE','QM')]) - df <- c(object$k - object$p, object$m) - pval <- unlist(object[c('QEp','QMp')]) - name <- c("Test of Residual Heterogeneity","Omnibus test of Fixed Effects") - qtable <- data.frame(` ` = name, `Q` = qstat, `df` = df, `p`= pval, check.names = FALSE) - rownames(qtable) = name - qtable <- qtable[1, , drop=FALSE] - - if (add_robust && !is.null(object$mf.g)) { - rob = metafor::robust(object, object$mf.g$outer) - - qstat <- unlist(rob[c('QE','QM')]) - df <- c(rob$k - rob$p, rob$m) - pval <- unlist(rob[c('QEp','QMp')]) - name <- c("Robust Test of Residual Heterogeneity","Robust Omnibus test of Fixed Effects") - qtabler <- data.frame(` ` = name, `Q` = qstat, `df` = df, `p`= pval, check.names = FALSE) - rownames(qtabler) = name - qtable <- rbind(qtable, qtabler[-1,, drop = FALSE]) - } - - - cleanUpColNames <- . %>% - stringr::str_replace_all("Pr\\(.+","p") %>% - stringr::str_replace_all("Chisq value", "Q") %>% - stringr::str_replace_all("Df","df") - - anova_df = ANOVA.rma(res, data=dataset) - heading = attr(anova_df,"heading") - anova_df = anova_df %>% tibble::rownames_to_column() %>% dplyr::rename(` `=rowname) - colnames(anova_df) = colnames(anova_df) %>% cleanUpColNames - - structure(rbind(anova_df[,c(1,3,2,4)], qtable), heading = heading) - - })(res, add_robust = FALSE) -> anova_df - ) - - jaspResults[['anova_table']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResults[['anova_table']]$dependOnOptions("anova_table") - - jaspResults[['anova_table']]$setColTypes(list(` ` = "string", `Q` = "number", `df` = "number", `p` = "number")) - jaspResults[['anova_table']]$setColFormats(list(` ` = "", `Q` = "sf:4", `df` = "sf:2", `p` = "dp:4")) - jaspResults[['anova_table']]$addFootnote(message = attr(anova_df,"heading")[2], symbol = "", colNames="Q") - - } - - ### Prepare Coefficients Table Output #### - - if (FE_coef_table && is.null(jaspResults[['coef']])) { - - jaspResults[['coef']] = createJaspTable("Fixed Effects Coefficients", position = 30, - (function(object, ...){ - test = if (exists('test')) test else 'z' - coefdf = coef(summary(object)) - colnames(coefdf) = c('Estimate', 'Standard Error', test, 'p', 'Lower Bound', 'Upper Bound') - rownames(coefdf) = gsub("intrcpt", "(Intercept)", rownames(coefdf)) - coefdf %>% tibble::rownames_to_column() %>% dplyr::rename(` ` = rowname) - })(res)) - - jaspResults[['coef']]$setColFormats(c("", "sf:5", "sf:5", "sf:5", "dp:5","sf:5","sf:5")) - jaspResults[['coef']]$setColTypes(c("string", rep("number", 6))) - - jaspResults[['coef']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResults[['coef']]$dependOnOptions("FE_coef_table") - - # Add footnotes to the analysis result - - jaspResults[['coef']]$addFootnote(message = "Wald test.", colNames=if (exists('test')) test else 'z') - - # Add citation reference list - - jaspResults[['coef']]$addCitation("Viechtbauer, W. (2010). Conducting meta-analyses in R with the metafor package. Journal of - Statistical Software, 36(3), 1-48. URL: http://www.jstatsoft.org/v36/i03/") - - - } - - - - ### Prepare Model fit table output #### - - #jaspResults[['fitmeasures']] <- NULL - if (fit_measures_table && is.null(jaspResults[['fitmeasures']])) { - clearUpNames <- . %>% - gsub("logLik","log Likelihood", .) %>% - gsub(":","", .) - - jaspResults[['fitmeasures']] <- - createJaspTable("Fit measures", position = 40, - (function(object, ...) { - fitdf = metafor::fitstats(res) %>% as.data.frame - rownames(fitdf) = rownames(fitdf) %>% clearUpNames - fitdf %>% tibble::rownames_to_column() %>% dplyr::rename(` `=rowname) - })(res) - ) - - jaspResults[['fitmeasures']]$setColFormats(c("", "sf:5")) - jaspResults[['fitmeasures']]$setColTypes(c("string", "number")) - - jaspResults[['fitmeasures']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResults[['fitmeasures']]$dependOnOptions("fit_measures_table") - - } - - - - ### Prepare Residuals Variance Components Parameters #### - - if (debug) jaspResults[['extract']] <- createJaspHtml(title="myRMAprint(res)", text = paste(capture.output(myRMAprint(res)), collapse="\n"), elementType = "pre") - - #jaspResults[['variance_components']] <- NULL - if (varComp_params_table && is.null(jaspResults[['variance_components']])) { - - jaspResults[['variance_components']] <- - (function(varComp){ - - vcTableNamesCleanUp <- . %>% - gsub("tau", "τ", .) %>% - gsub("sigma", "σ", .) %>% - gsub("rho", "ρ", .) %>% - gsub("phi", "φ", .) %>% - gsub("gamma", "γ", .) %>% - gsub("\\^(\\d+)", "\\1", .) %>% - gsub("estim", "Estimate", .) %>% - gsub("sqrt", "√ Estimate", .) %>% - gsub("k.lvl|nlvls", "Number of levels", .) %>% - gsub("fixed", "Fixed", .) %>% - gsub("level", "Level",.) %>% - gsub("X(.+)", "\\1", .) %>% - gsub("\\.(\\S+)", "\\1", .) %>% - gsub("factor", "Factor", .) - - vctmp = varComp - tmp = createJaspContainer(gettext("Variance Components")) - tmp[['structure']] = createJaspHtml(text = - paste("
      ", - paste("
    • ", - c( - vctmp$structure$grouping, - paste("Inner covariance structure:", paste(vctmp$structure$inner.cov.struct, collapse = ", ")) - ), - collapse = "
    • "), - " -
    "), - title="Covariance Model") - for (nm in names(vctmp)[-1]) { - print(nm) - tmpTable = vctmp[[nm]] %>% dplyr::select(-dplyr::matches("^X$")) - names(tmpTable) = names(tmpTable) %>% vcTableNamesCleanUp - rownames(tmpTable) = rownames(tmpTable) %>% vcTableNamesCleanUp - tmpTable = tmpTable %>% tibble::rownames_to_column() %>% dplyr::rename(` `=rowname) - tmp[[nm]] = createJaspTable(nm, data = tmpTable) - tmp[[nm]]$setColFormats(c("", rep("sf:5", ncol(tmpTable)))) - tmp[[nm]]$setColTypes(c("string", rep("number", ncol(tmpTable)), `Number of Levels`="integer", Level="string")) - } - tmp - })(extractRMAVarComp(res)) - - - jaspResults[['variance_components']]$position = 50 - - jaspResults[['variance_components']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResults[['variance_components']]$dependOnOptions("varComp_params_table") - - - } - - - - ### Prepare Coefficient Covariance Matrix #### - - #jaspResults[['FixedEffectsParameterCovariance']] <- NULL - if (FE_vcov_table && is.null(jaspResults[['FixedEffectsParameterCovariance']])) { - - jaspResults[['FixedEffectsParameterCovariance']] <- - createJaspTable("Fixed Effects Estimates Covariance Matrix", position= 60, - (function(object, ...){ - - vcovTableNamesCleanUp <- . %>% - stringr::str_replace_all("intrcpt", "Intercept") %>% - stringr::str_replace_all("\\[", " [") - - V = vcov(object) - rownames(V) = rownames(V) %>% vcovTableNamesCleanUp - colnames(V) = colnames(V) %>% vcovTableNamesCleanUp - - V %>% as.data.frame() %>% tibble::rownames_to_column() %>% dplyr::rename(` `=rowname) - })(res) -> vcov_df - ) #%>% jasp_as_html() - - jaspResults[['FixedEffectsParameterCovariance']]$setColFormats(c("", rep("sf:5", nrow(vcov_df)))) - jaspResults[['FixedEffectsParameterCovariance']]$setColTypes(c("string", rep("number", nrow(vcov_df)))) - - jaspResults[['FixedEffectsParameterCovariance']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResults[['FixedEffectsParameterCovariance']]$dependOnOptions("FE_vcov_table") - - } - - - ### Prepare Tests for Funnel plot asymmetry #### - - #jaspResults[['funnel_asymmetry_test']] <- NULL - if (funnelPlotAsymmetry && is.null(jaspResults[['funnel_asymmetry_test']])) { - - - jaspResults[['funnel_asymmetry_test']] <- - createJaspTable("Tests for Funnel Plot Asymmetry", position=70, - (function(object, ...) { - - df = data.frame('Statistic' = numeric(), 'p' = numeric()) - - if (ranktest_table) { - # Prepare Kendall's Rank Correlation Test for testing Funnel plot asymmetry - kendall = metafor::ranktest(object) - df = rbind(df, data.frame('Statistic' = kendall$tau, 'p' = kendall$p)) - rownames(df)[1] = "Kendall's tau" - } - - if (regtest_table && FALSE) { - # Prepare Egger's test for Funnel plot asymmetry ('test for publication bias') - egger = purrr::safely(metafor::regtest)(res) - df = rbind(df, data.frame('Statistic' = NA, 'p' = NA)) - rownames(df)[2] = "Egger's regression test (z)" - } - - df %>% tibble::rownames_to_column() %>% dplyr::rename(` `=rowname) - })(res) - ) #%>% jasp_as_html() - - jaspResults[['funnel_asymmetry_test']]$setColFormats(c("", "sf:5", "dp:5")) - jaspResults[['funnel_asymmetry_test']]$setColTypes(c("string", "number", "number")) - - jaspResults[['funnel_asymmetry_test']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResults[['funnel_asymmetry_test']]$dependOnOptions("funnelPlotAsymmetry") - - if (regtest_table) - jaspResults[['funnel_asymmetry_test']]$addFootnote(message = "Egger's test is not yet implemented.", symbol = "(!)", colNames="") - - - } - - - - - ### Prepare Casewise diagnostics table #### - - # jaspResults[['diagnostics']] <- NULL - if (diagnostics_table && is.null(jaspResults[['diagnostics']])) { - - jaspResults[['diagnostics']] <- - createJaspTable("Case Wise Influence Diagnostics", position = 80, - (function(object, ...) { - - #source("~/Desktop/Arnoud Multilevel Meta-analysis/quick.influence.R") - - qiTableNamesCleanUp <- . %>% - stringr::str_to_title() %>% - stringr::str_replace_all(".+pval", "p") %>% - stringr::str_replace("Hatvalues","Hat Values") %>% - paste(., Reduce(paste0, purrr::rep_along(., " "), accumulate = TRUE), sep="") # add increasing number of spaces to fool createJaspTable - - qi = quick.influence(object) - colnames(qi) = colnames(quick.influence(res)) %>% qiTableNamesCleanUp - rownames(qi) = paste(rownames(qi), ifelse(rowSums(qi[,c(2,4,6)] < .05) > 0, "*", "")) - - qi %>% tibble::rownames_to_column() %>% dplyr::rename(` `=rowname) - })(res) - ) #%>% jasp_as_html() - - jaspResults[['diagnostics']]$setColFormats(c("", "sf:5", "dp:5", "sf:5", "dp:5", "sf:5", "dp:5")) - jaspResults[['diagnostics']]$setColTypes(c("string", "number", "number", "number", "number", "number", "number")) - jaspResults[['diagnostics']]$dependOnOptions("diagnostics_table") - - jaspResults[['diagnostics']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResults[['diagnostics']]$dependOnOptions("diagnostics_table") - - # Markup influential cases in a footnote - - jaspResults[['diagnostics']]$addFootnote(message = "Potentially influential.", symbol = "*", colNames="") - - } - - ### Prepare Fail-safe N diagnostics table #### - - #jaspResults[['fsn']] <- NULL - if (failsafe_n_table) { - - jaspResults[['fsn']] <- - createJaspTable("Fail-safe N", position = 90, - (function(object, ...) { - # we want to call fsn(yi = yi, vi = vi, data = data) with the right arguments: - rmacall= object$call - call = quote(metafor::fsn(yi = yi ~ 1, vi = vi, data = dataset)) - call$yi = as.name(all.vars(rmacall$yi)[1]) # deals with both single variable names as well as formulas - call$vi = as.name(all.vars(rmacall$V)[1]) # deals with both single variable names as well as formulas - FSN = eval(call) - df = data.frame(`Fail-safe N` = FSN$fsnum, `Target Significance Level` = FSN$alph, p=FSN$p, check.names = FALSE) - row.names(df) = paste(FSN$type, "method") - df - })(res) - ) #%>% jasp_as_html() - - jaspResults[['fsn']]$setColFormats(c("", "", "sf:2", "sf:5")) - jaspResults[['fsn']]$setColTypes(c("integer", "number", "number")) - - jaspResults[['fsn']]$addFootnote(message = "Fail-safe-N procedures are controversial.") - jaspResults[['fsn']]$addFootnote(message = "Rosenthal's method.") - - jaspResults[['fsn']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResults[['fsn']]$dependOnOptions("failsafe_n_table") - - } - - - - - ### Prepare Plot Output #### - - if (is.null(jaspResults[['plots']])) { - jaspResults[['plots']] <- createJaspContainer(gettext("Plots"), position = 100) - jaspResults[['plots']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResults[['plots']]$dependOnOptions(c("forest_plot","funnel_plot","residual_dependent_plot","profile_plot")) - } - jaspResultsPlots <- jaspResults[['plots']] - - # plot forest plot - - if (forest_plot && is.null(jaspResultsPlots[['forest_plot']])) { - jaspResultsPlots[['forest_plot']] <- - createJaspPlot(function() metafor::forest(res), title = "Forest plot", height=16*nrow(dataset), width=500) - - jaspResultsPlots[['forest_plot']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResultsPlots[['forest_plot']]$dependOnOptions("forest_plot") - } - - # plot funnel plot - - if (funnel_plot && is.null(jaspResultsPlots[['plot_funnel']])) { - jaspResultsPlots[['plot_funnel']] <- - createJaspPlot(function() metafor::funnel(res), title = "Funnel plot", aspectRatio = 1 ) - - jaspResultsPlots[['plot_funnel']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResultsPlots[['plot_funnel']]$dependOnOptions("funnel_plot") - } - - # plot residuals vs dependent diagnostic plot - - #jaspResultsPlots[['plot_residual_dependent']] <- NULL - if (residual_dependent_plot && is.null(jaspResultsPlots[['plot_residual_dependent']] )) { - - jaspResultsPlots[['plot_residual_dependent']] <- - createJaspPlot(title = "Fitted vs Dependent and Residual vs Dependent", plot = - data.frame(Dependent = res$yi, Fitted = fitted(res), Residual = residuals(res)) %>% - tidyr::gather(what, value, -Dependent) %>% - ggplot2::ggplot(ggplot2::aes(x = Dependent, y = value)) + ggplot2::geom_point(alpha=.5) + ggplot2::geom_smooth() + - ggplot2::labs(title = "") + ggplot2::facet_wrap(~what, scales="free") - ) - - jaspResultsPlots[['plot_residual_dependent']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResultsPlots[['plot_residual_dependent']]$dependOnOptions("residual_dependent_plot") - - } - - # profile plot: diagnostic plot for tau parameter - - #jaspResultsPlots[['plot_profile']] <- NULL - if (profile_plot && !is.null(jaspResults[['plots']])) { - jaspResultsPlots[['plot_profile']] <- - createJaspPlot(function() profile(res), title = "Profile plot for Random Effects parameters") - - jaspResultsPlots[['plot_profile']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResultsPlots[['plot_profile']]$dependOnOptions("profile_plot") - - } - - - - ### Prepare Fixed Effects EMMEANS #### - - if (debug) jaspResults[['conditionals']] = createJaspHtml(text = paste("\nfactors in model: ", paste(names(Filter(Negate(is.numeric), dataset)), collapse=", "), "\n\nvariable names: ", paste(colnames(dataset), collapse = ", ")), elementType="pre", title = "Debug: Factors in the model") - - #jaspResults[['emmeans']] = NULL - if (emmeans_table) { - - jaspResults[['emmeans']] = createJaspTable("Estimated Marginal Means", position = 45, - data = (function(object, ...){ - cout <- function(...) paste(capture.output(...), collapse = "\n") - cleanUpNames = . %>% - stringr::str_replace("emmean", "Marginal Mean") %>% - stringr::str_replace("SE", "Standard Error") %>% - stringr::str_replace("lower.CL", "Lower Bound") %>% - stringr::str_replace("upper.CL", "Upper Bound") - - conditionals = intersect(all.vars(object$call$yi), names(Filter(Negate(is.numeric), dataset))) # names(dataset %>% dplyr::select_if(is.factor)) - ret = data.frame(` `=c(), `Marginal Means`=c(), `Standard Error`=c(), `Lower Bound`=c(), `Upper Bound`=c(), check.names = FALSE) - if (!is.null(conditionals) && length(conditionals) > 0) { - myformula = as.formula(paste("~1+",paste(conditionals, collapse="+"))) - #jaspResults[['emmeans_formula']] = createJaspHtml(cout({print(myformula); dataset}),"pre",title="EMMEANS formula") - ret = try(emmeans.rma(object, myformula, dataset)) - if (!inherits(ret, "try-error")) - colnames(ret) = colnames(ret) %>% cleanUpNames - else - jaspResults[['emmeans_results']] = createJaspHtml(cout({ret}),"pre",title="EMMEANS results") - } - ret - })(res) - ) - - jaspResults[['emmeans']]$setColFormats(c("", "sf:5", "sf:5", "sf:5", "sf:5", "sf:5")) - jaspResults[['emmeans']]$setColTypes(c("string", "number", "number", "number", "number")) - jaspResults[['emmeans']]$copyDependenciesFromJaspObject(jaspResults[['res']]) - jaspResults[['emmeans']]$dependOnOptions("emmeans_table") - - } - - ### Prepare Fixed Effects Contrasts #### - } - - - - - - -{ # utility functions - verify_that <- function(x, ...) { - funs = list(...) - if (length(funs) > 0) { - - names(funs) = setdiff(all.vars(match.call()), all.vars(match.call()$x)) - tests = rapply(funs, function(fun) sapply(x, fun), classes = "function", how = 'replace') - Filter(length, lapply(tests, function(x) names(x)[!x])) - } - } - not.constant <- function(x) stats::var(as.numeric(x)) > 0 - all.finite <- function(x) all(base::is.finite(x)) - is.positive <- function(x) all(x > 0) - is.negative <- function(x) all(x < 0) - non.positive <- function(x) all(x <= 0) - non.negative <- function(x) all(x >= 0) -} - -{ # Functions for extracting variance components - reinterpret.data.frame <- function(object) { - zz <- textConnection("foo", "w"); on.exit(close(zz)) - write.table(object, sep=",",file = zz) - close(zz) - zz = textConnection(foo,"r") - bok <- read.csv(zz) - bok - } - - # `%>%` <- magrittr::`%>%` - # myRMAprint <- deparse(metafor::print.rma.mv) %>% - # gsub("\\.print\\.out", "metafor:::.print.out", .) %>% - # gsub("invisible\\(\\)", "invisible(list(fit_stats = if(exists('fs')) fs else NA, variance_components= if(!exists('VC')) list() else VC, res_table=res.table))", .) %>% - # gsub("\\.pval\\(", "format(", .) %>% - # gsub("\\.format\\.btt\\(", "I(", .) %>% - # gsub("print\\(vc", "my_counter <- if(!exists('my_counter')){ 1 }else{ my_counter+1}; if(!exists('VC')) VC = list(); VC[[my_counter]] = print(vc", .) %>% - # parse(text = .) %>% - # eval() - - extractRMAVarComp <- function(object, ...) { - text_output = capture.output(outp <- myRMAprint(object, digits=18)) - varComp <- rapply(outp, reinterpret.data.frame, classes = "matrix", how="replace")$variance_components - - struct = list(inner.cov.struct = object$struct, grouping = Filter(function(x) grepl("inner|outer",x), text_output)) - structure(c(list(structure = struct), `Estimates ` = varComp), text_output= text_output) - } -} - - - -{ ##### Help functions to produce anova tables for 'rma.mv' objects and do automatic model selection ##### - - ## Fix a the metafor limitation that you cannot use step() - RMA.mv = function(formula, ...) { - call = rmacall = match.call(); - rmacall[[1]] = as.name("rma.mv"); - rmacall$mods = formula; - rmacall$formula = NULL; - fit = eval(rmacall); - fit$rmacall = fit$call - fit$call = call; - fit$terms = terms(formula); - fit$formula = formula; - class(fit) = c("RMA_mv", class(fit)) - fit - } - extractAIC.RMA_mv = function(object, scale, k = 2, ...) { - class(object) = class(object)[-1] - c(sum(hatvalues(object)), AIC(object)) - } - update.RMA_mv = function(object, formula., ..., evaluate = TRUE) { - update.default(object, formula., ..., evaluate = evaluate) - } - - ANOVA.rma <- function(object, data = object$model) { - formula <- as.formula(object$call[[2]]) - # in stats:::anova.lm 'asgn' is extracted as: - # p1=1:object$rank; object$assign[qr.lm(object)$pivot][p1] - asgn <- attr(model.matrix(formula, data = data), "assign") # coefficient group indicators - eff <- split(1:sum(!object$coef.na), asgn[!object$coef.na]) - names(eff) <- terms(as.formula(object$call[[2]])) %>% labels %>% c("(Intercept)", .) - as_anova_row = function(x) { - if (x$test == 'z') - data.frame(Df=x$m, `Chisq value` = x$QM, `Pr(>X^2)` = x$QMp, check.names = FALSE) - else - data.frame(Df1 = x$m, Df2 = x$dfs, `F value` = x$QM, `Pr(>F)` = x$QMp, check.names = FALSE) - } - lapply(eff, function(btt) anova(object, btt = btt) %>% as_anova_row) %>% - do.call(rbind, .) %>% - structure(heading = c("Analysis of Variance Table\n", paste("Response:", deparse(formula[[2L]]))), - class = c("anova", "data.frame")) - } - - ANOVA <- function(object, ...) UseMethod("ANOVA") - get_rank <- function(object, ...) UseMethod("get_rank") - get_rank.default <- function(object, ...) object$rank - get_rank.rma <- function(object, ...) sum(!object$coef.na) - get_assign <- function(object, ...) UseMethod("get_assign") - get_assign.default <- function(object, ...) {p1=1:object$rank; object$assign[qr.lm(object)$pivot][p1]} - get_assign.rma <- function(object, ...) { - formula <- formula(object) - asgn <- attr(model.matrix(formula, ...), "assign") # coefficient group indicators - asgn[!object$coef.na] - } - terms.rma <- function(object, ...) terms(formula(object)) - formula.rma <- function(object, ...) as.formula(object$call$yi) - - ANOVA.mipo <- function(object, mids.object, ...) { - # ANOVA tables for mice's mipo object returned by pool() - ffit <- mids.object - object1 = ffit$analyses[[1]] - p1 <- 1:get_rank(object1, ...) - asgn <- get_assign(object1, ...) - eff <- split(p1, asgn) - names(eff) <- terms(ffit$analyses[[1]]) %>% labels %>% c("(Intercept)", .) - as_anova_row <- function(i) { - #Df1 = length(i) - #Df2 = mean(object$df[i]) # does this make sense at all??? - #F_value = drop(b %*% Sigma.b.inv %*% b) * Df1 / Df2 - #data.frame(Df1 = Df1, Df2 = Df2, `F value` = F_value, - # `Pr(>F)` = 1-pf(F_value, Df1, Df2), check.names = FALSE) - res <- wald.test(object, i) - data.frame(Df1 = res$parameter['Df1'], Df2 = res$parameter['Df2'], `F value` = res$statistic, - `Pr(>F)` = res$p.value, check.names = FALSE) - } - lapply(eff, as_anova_row) %>% - do.call(rbind, .) %>% - structure(heading = c("Analysis of Variance Table\n", paste("Response:", deparse(formula(object1)[[2]]))), class = c('anova', 'data.frame')) - } - wald.test <- function(object, ...) UseMethod("wald.test") - wald.test.mipo <- function(object, i, useUbar=FALSE) { - Df1 <- length(i) - k <- Df1 - m <- object$m - Qbar <- object$qbar[i] - Q0 <- structure(rep(0,k), .Names = names(Qbar)) - r1 <- (1 + 1/m) * sum(diag(object$b[i,i] %*% solve(object$ubar[i,i]))) / k - V <- if (useUbar) object$ubar[i,i] else object$t[i,i] - w1 <- (1 + r1)^(-1) * t(Q0 -Qbar) %*% solve(V) %*% (Q0 - Qbar) / k - a <- k * m - v1 <- if (a > 4) 4 + (a-4)*(1 + (1-2/a)/r1)^2 else 0.5*a*(1+a/r1)^2 - Df2 <- v1 - structure(list(statistic = c(`F`=w1), parameter = c(`Df1`=Df1,`Df2`=Df2), p.value = 1-pf(w1,Df1,Df2), - estimate = Qbar, null.value = Q0, alternative = "Not all coefficients equal their null value", - method=sprintf("Wald test on coefficients (using the %s variance)", if (useUbar) - "Within" else "Total"), data.name = deparse(substitute(object))), class="htest") - } - - - contr.simple <- function(n, contrasts = TRUE, sparse = FALSE) - { # define a simple contrasts function (compares each level to the reference level) - t(MASS::ginv(contr.sum(n, contrasts, sparse))) - } - -} diff --git a/R/quick.influence.R b/R/quick.influence.R deleted file mode 100644 index d81f423f..00000000 --- a/R/quick.influence.R +++ /dev/null @@ -1,59 +0,0 @@ -quick.rstudent <- function(x, ...) { # the metafor::rstudent is weirdly slow... - # formula's used from Steven's (1995), which disappeared in the newest edition of the book Stevens (2015) - h = hatvalues(x) - n = length(h) - p = sum(h) - df.resid = n - p - 1 - e = resid(x) - sigma = sqrt(sum(e^2) / df.resid) - rstud = e / sqrt(1-h) / sigma - tval = rstud * sqrt((n-p-1) / (n-p-rstud^2)) - structure(rstud, t.value = tval, p.value = 2*pt(-abs(tval), df.resid), df=df.resid) -} - -hat.significance <- function(x, h = if (inherits(x, "numeric")) x else hatvalues(x)) { - nms = if (!is.null(names(h))) names(h) else seq_along(h) - n = length(h) - p = sum(h) - df = n - p - statistic = (n-p) * (h - 1/n) / ((1-h) * (p-1)) # F-values - structure(h, statistic = statistic, df=c(df1 = p-1, df2 = n-p), p.value = pf(statistic, p-1, n-p, lower.tail = FALSE)) -} - -mahalanobis.significance <- function(x) { - require(MASS) - .X = model.matrix(x) - df = qr(.X)$rank - mahdist = mahalanobis(.X,colMeans(.X), MASS::ginv(cov(.X)), inverted = T) - p.mahdist = pchisq(mahdist, df, lower.tail = FALSE) - structure(mahdist, statistic = mahdist, df=df, p.value = p.mahdist) -} - -quick.influence <- function(x, ...) { - rstud = quick.rstudent(x) - p.rstud = attr(rstud, 'p.value') - hat = hat.significance(x) - p.hat = attr(hat, 'p.value') - mahdist = mahalanobis.significance(x) - p.mahdist = attr(mahdist, 'p.value') - structure( - data.frame(#` ` = "|", - studentized = rstud, stud.pval = p.rstud, #` ` = marks[findInterval(p.rstud, cutof)], - hatvalues = hat, hat.pval=p.hat, #` `= marks[findInterval(p.hat, cutof)], - mahalanobis = mahdist, manh.pval = p.mahdist, #` ` = marks[findInterval(p.mahdist, cutof)], - check.names=FALSE), - class = c("quick.influence", "data.frame")) -} - -print.quick.influence <- function(x, ...) { - marks = c('*** \u23B9 ','** \u23B9 ','* \u23B9 ','. \u23B9 ',' \u23B9 ') - cutof = c(0,.001,.01,.05,.1,1) - M = with(x, data.frame(` ` = "\u23B8", - studentized = studentized, `p-value` = stud.pval, ` ` = marks[findInterval(stud.pval, cutof)], - hatvalues = hatvalues, `p-value` = hat.pval, ` ` = marks[findInterval(hat.pval, cutof)], - mahalanobis = mahalanobis, `p-value` = manh.pval, ` ` = marks[findInterval(manh.pval, cutof)], - check.names = FALSE) - ) - rownames(M) = rownames(x) - print(M, ...) -} From 2ce72fe4df373c4d5ec1bd1c0a1c742d8c59a7bd Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 21 Oct 2024 22:23:42 +0200 Subject: [PATCH 070/127] fix funnel plot: simultaneous mapping does not work --- R/funnnelplot.R | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/R/funnnelplot.R b/R/funnnelplot.R index 454fc96c..6d829978 100644 --- a/R/funnnelplot.R +++ b/R/funnnelplot.R @@ -15,12 +15,10 @@ # along with this program. If not, see . # # TODO: -# - simulatanous mapping overrides one of them # - funnel plot asymmetry tests fail with split # - check that sequence se sequence is generated with fixed mu and tau under null FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { - if (.fpReady(options)) .fpH1Fits(jaspResults, dataset, options) @@ -155,7 +153,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { y = dataset[[options[["effectSizeStandardError"]]]] ) if (options[["estimatesMappingShape"]] != "") dfPlot$shape <- dataset[[options[["estimatesMappingShape"]]]] - if (options[["estimatesMappingColor"]] != "") dfPlot$fill <- dataset[[options[["estimatesMappingColor"]]]] + if (options[["estimatesMappingColor"]] != "") dfPlot$color <- dataset[[options[["estimatesMappingColor"]]]] if (options[["studyLabel"]] != "") dfPlot$label <- dataset[[options[["studyLabel"]]]] if (!is.null(splitLevel)) @@ -361,7 +359,8 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { y = as.name("y") ) if (options[["estimatesMappingShape"]] != "") pointAes$shape <- as.name("shape") - if (options[["estimatesMappingColor"]] != "") pointAes$fill <- as.name("fill") + if (options[["estimatesMappingColor"]] != "") pointAes$color <- as.name("color") + if (options[["estimatesMappingColor"]] != "") pointAes$fill <- as.name("color") out <- out + jaspGraphs::geom_point( data = dfPlot, @@ -371,7 +370,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { if (options[["estimatesMappingShape"]] != "") out <- out + ggplot2::labs(shape = options[["estimatesMappingShape"]]) if (options[["estimatesMappingColor"]] != "") - out <- out + ggplot2::labs(fill = options[["estimatesMappingColor"]]) + out <- out + ggplot2::labs(color = options[["estimatesMappingColor"]], fill = options[["estimatesMappingColor"]]) # add labels From 2a6cf2d7375056b7163fd0d2afca02e31fd65148 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 21 Oct 2024 23:03:18 +0200 Subject: [PATCH 071/127] fix funnel plot: error handling --- R/funnnelplot.R | 67 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 19 deletions(-) diff --git a/R/funnnelplot.R b/R/funnnelplot.R index 6d829978..ce4b90ea 100644 --- a/R/funnnelplot.R +++ b/R/funnnelplot.R @@ -105,8 +105,11 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { funnelPlot <- createJaspPlot(width = 550, height = 480) funnelPlotContainer[["funnelPlot"]] <- funnelPlot - out <- .fpMakeFunnelPlot(jaspResults, dataset, options) - funnelPlot$plotObject <- out + fit <- jaspResults[["fitContainer"]]$object + if (options[["funnelUnderH1"]] && options[["funnelUnderH1Parameters"]] == "estimated" && jaspBase::isTryError(fit)) + funnelPlot$setError(gettextf("The H\U2081 model failed with the following message: %1$s.", fit)) + else + funnelPlot$plotObject <- .fpMakeFunnelPlot(jaspResults, dataset, options) } else { @@ -116,8 +119,11 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { funnelPlot <- createJaspPlot(title = paste0(options[["split"]], " = ", splitLevel), width = 550, height = 480) funnelPlotContainer[[splitLevel]] <- funnelPlot - out <- .fpMakeFunnelPlot(jaspResults, dataset, options, splitLevel = splitLevel) - funnelPlot$plotObject <- out + fit <- jaspResults[["fitContainer"]]$object[[splitLevel]] + if (options[["funnelUnderH1"]] && options[["funnelUnderH1Parameters"]] == "estimated" && jaspBase::isTryError(fit)) + funnelPlot$setError(gettextf("The H\U2081 model failed with the following message: %1$s.", fit)) + else + funnelPlot$plotObject <- .fpMakeFunnelPlot(jaspResults, dataset, options, splitLevel = splitLevel) } @@ -201,6 +207,8 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { for (i in seq_along(jaspResults[["fitContainer"]]$object)) { # extract each fit tempFit <- jaspResults[["fitContainer"]]$object[[i]] + if (jaspBase::isTryError(tempFit)) + next tempAdjustFunnel1Mean <- tempFit$b[1] tempAdjustFunnel1Heterogeneity <- if(options[["funnelUnderH1IncludeHeterogeneity"]]) sqrt(tempFit$tau2) else 0 @@ -507,8 +515,10 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitTest <- try(metafor::regtest(fit)) fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "metaRegression") - if (jaspBase::isTryError(fitTest)) - metaRegressionTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + if (jaspBase::isTryError(fit)) + metaRegressionTable$addFootnote(fit, symbol = .fpAssymetryTestErrorMessage()) + else if (jaspBase::isTryError(fitTest)) + metaRegressionTable$addFootnote(fit, symbol = .fpAssymetryTestErrorMessage()) metaRegressionTable$setData(fitSummary) @@ -521,8 +531,10 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "metaRegression") fitSummary$split <- names(fits)[i] - if (jaspBase::isTryError(fitTest)) - metaRegressionTable$addFootnote(fitTest, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + if (jaspBase::isTryError(fits[[i]])) + metaRegressionTable$addFootnote(fits[[i]], symbol = .fpAssymetryTestErrorMessage(names(fits)[i])) + else if (jaspBase::isTryError(fitTest)) + metaRegressionTable$addFootnote(fitTest, symbol = .fpAssymetryTestErrorMessage(names(fits)[i])) return(fitSummary) })) @@ -558,8 +570,10 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitTest <- try(metafor::regtest(fit, model = "lm")) fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "weightedRegression") - if (jaspBase::isTryError(fitTest)) - weightedRegressionTable$addFootnote(fitTest, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + if (jaspBase::isTryError(fit)) + weightedRegressionTable$addFootnote(fit, symbol = .fpAssymetryTestErrorMessage()) + else if (jaspBase::isTryError(fitTest)) + weightedRegressionTable$addFootnote(fitTest, symbol = .fpAssymetryTestErrorMessage()) weightedRegressionTable$setData(fitSummary) @@ -572,8 +586,10 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "weightedRegression") fitSummary$split <- names(fits)[i] - if (jaspBase::isTryError(fitTest)) - weightedRegressionTable$addFootnote(fitTest, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + if (jaspBase::isTryError(fits[[i]])) + weightedRegressionTable$addFootnote(fits[[i]], symbol = .fpAssymetryTestErrorMessage(names(fits)[i])) + else if (jaspBase::isTryError(fitTest)) + weightedRegressionTable$addFootnote(fitTest, symbol = .fpAssymetryTestErrorMessage(names(fits)[i])) return(fitSummary) })) @@ -606,8 +622,10 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitTest <- try(metafor::ranktest(fit)) fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "rankCorrelation") - if (jaspBase::isTryError(fitTest)) - rankCorrelationTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) + if (jaspBase::isTryError(fit)) + rankCorrelationTable$addFootnote(fit, symbol = .fpAssymetryTestErrorMessage()) + else if (jaspBase::isTryError(fitTest)) + rankCorrelationTable$addFootnote(fit, symbol = .fpAssymetryTestErrorMessage()) else fitSummary$k <- fit$k @@ -622,10 +640,15 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "rankCorrelation") fitSummary$split <- names(fits)[i] - if (jaspBase::isTryError(fitTest)) - rankCorrelationTable$addFootnote(fit, symbol = gettext("The funnel plot assymetry test failed with the following error: ")) - else + if (jaspBase::isTryError(fits[[i]])) { + fitSummary$k <- NA + rankCorrelationTable$addFootnote(fits[[i]], symbol = .fpAssymetryTestErrorMessage(names(fits)[i])) + } else if (jaspBase::isTryError(fitTest)) { + fitSummary$k <- fits[[i]]$k + rankCorrelationTable$addFootnote(fit, symbol = .fpAssymetryTestErrorMessage(names(fits)[i])) + } else { fitSummary$k <- fits[[i]]$k + } return(fitSummary) })) @@ -639,7 +662,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { return() } -.fpComputeFunnelDf <- function(seSeq, mean, heterogeneity, funnelLevels) { +.fpComputeFunnelDf <- function(seSeq, mean, heterogeneity, funnelLevels) { dfs <- list() for (i in seq_along(funnelLevels)) { tempZ <- qnorm(funnelLevels[i], lower.tail = FALSE) @@ -652,7 +675,13 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { } return(dfs) } -.dpExtractAsymmetryTest <- function(fitTest, testType) { +.fpAssymetryTestErrorMessage <- function(level = NULL) { + if (is.null(level)) + return(gettext("The funnel plot assymetry test failed with the following error: ")) + else + return(gettextf("The funnel plot assymetry test at level %1$s failed with the following error: ", level)) +} +.dpExtractAsymmetryTest <- function(fitTest, testType) { if (testType == "metaRegression") { return(data.frame( k = if (jaspBase::isTryError(fitTest)) NA else fitTest$fit$k, # nobs will be fixed in the next release From c06634d0d4312b73dd4e2c2138556fabca5b49eb Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 21 Oct 2024 23:14:11 +0200 Subject: [PATCH 072/127] fix funnel plot: error handling 2 --- R/funnnelplot.R | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/R/funnnelplot.R b/R/funnnelplot.R index ce4b90ea..fb527fa1 100644 --- a/R/funnnelplot.R +++ b/R/funnnelplot.R @@ -14,9 +14,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -# TODO: -# - funnel plot asymmetry tests fail with split -# - check that sequence se sequence is generated with fixed mu and tau under null FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { if (.fpReady(options)) @@ -169,7 +166,9 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { yTicks <- jaspGraphs::getPrettyAxisBreaks(range(c(0, dataset[[options[["effectSizeStandardError"]]]]))) # a sequence of points must be used if tau is included in the confidence bands (PI is a nonlinear function of se) ySeqH0 <- if (options[["funnelUnderH0ParametersFixedTau"]] == 0) range(yTicks) else seq(from = min(yTicks), to = max(yTicks), length.out = 100) - ySeqH1 <- if (!options[["funnelUnderH1IncludeHeterogeneity"]]) range(yTicks) else seq(from = min(yTicks), to = max(yTicks), length.out = 100) + ySeqH1 <- if ((options[["funnelUnderH1Parameters"]] == "estimated" && !options[["funnelUnderH1IncludeHeterogeneity"]]) + || (options[["funnelUnderH1Parameters"]] == "fixed" && options[["funnelUnderH1ParametersFixedTau"]] == 0)) + range(yTicks) else seq(from = min(yTicks), to = max(yTicks), length.out = 100) ### specify zero-centered funnels if (options[["funnelUnderH0"]]) { @@ -455,7 +454,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { if (jaspBase::isTryError(fit)) { funnelParametersTable$addFootnote(fit, symbol = gettext("The funnel plot parameter estimation failed with the following error: ")) - if (!.maGetMethodOptions(options) %in% c("EE", "FE")) + if (.maGetMethodOptions(options) %in% c("EE", "FE")) return(data.frame(k = NA, mu = NA)) else return(data.frame(k = NA, mu = NA, tau = NA)) From 708f1c69fb0a576e7ce30eae187684bf22a3e9b7 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 21 Oct 2024 23:34:07 +0200 Subject: [PATCH 073/127] fix funnel plot:: missing data handling --- inst/qml/FunnelPlot.qml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/inst/qml/FunnelPlot.qml b/inst/qml/FunnelPlot.qml index 4bc7bc0f..cbf9ac86 100644 --- a/inst/qml/FunnelPlot.qml +++ b/inst/qml/FunnelPlot.qml @@ -256,27 +256,27 @@ Form values: { if (funnelUnderH0.checked && funnelUnderH1.checked) { [ - { label: qsTr("None"), value: "none" }, { label: qsTr("All"), value: "all" }, + { label: qsTr("None"), value: "none" }, { label: qsTr("Outside Hβ‚€"), value: "outsideH0" }, { label: qsTr("Outside H₁"), value: "outsideH1" } ] } else if (funnelUnderH0.checked) { [ - { label: qsTr("None"), value: "none" }, { label: qsTr("All"), value: "all" }, + { label: qsTr("None"), value: "none" }, { label: qsTr("Outside Hβ‚€"), value: "outsideH0" } ] } else if (funnelUnderH1.checked) { [ - { label: qsTr("None"), value: "none" }, { label: qsTr("All"), value: "all" }, + { label: qsTr("None"), value: "none" }, { label: qsTr("Outside H₁"), value: "outsideH1" } ] } else { [ - { label: qsTr("None"), value: "none" }, - { label: qsTr("All"), value: "all" } + { label: qsTr("All"), value: "all" }, + { label: qsTr("None"), value: "none" } ] } } From 6ec21a165c330de29e7e8b586c934339e94dd8ac Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 21 Oct 2024 23:34:30 +0200 Subject: [PATCH 074/127] fix funnel plot:: missing data handling --- R/funnnelplot.R | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/R/funnnelplot.R b/R/funnnelplot.R index fb527fa1..2cbf6246 100644 --- a/R/funnnelplot.R +++ b/R/funnnelplot.R @@ -16,8 +16,11 @@ # FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { - if (.fpReady(options)) + + if (.fpReady(options)) { + dataset <- .fpCheckDataset(jaspResults, dataset, options) .fpH1Fits(jaspResults, dataset, options) + } # make the funnel plots .fpPlot(jaspResults, dataset, options) @@ -35,6 +38,38 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { .fpReady <- function(options) { return(options[["effectSize"]] != "" && options[["effectSizeStandardError"]] != "") } +.fpCheckDataset <- function(jaspResults, dataset, options) { + + # omit NAs + dataset <- na.omit(dataset) + + # add a warning message + if (!is.null(attr(dataset, "na.action")) && is.null(jaspResults[["missingDataInformation"]])) { + missingDataInformation <- createJaspHtml(gettext("Missing Data Summary")) + missingDataInformation$position <- 0.1 + missingDataInformation$dependOn(c(.fpDependencies, "estimatesMappingColor", "estimatesMappingShape", "studyLabel")) + missingDataInformation$text <- gettextf("The dataset contains missing values: %1$i missing values were removed from the analysis.", length(attr(dataset, "na.action"))) + jaspResults[["missingDataInformation"]] <- missingDataInformation + } + + .hasErrors( + dataset = dataset, + type = c("infinity", "observations", "variance"), + all.target = c( + options[["effectSize"]], + options[["effectSizeStandardError"]] + ), + observations.amount = "< 2", + exitAnalysisIfErrors = TRUE) + + .hasErrors( + dataset = dataset, + seCheck.target = options[["effectSizeStandardError"]], + custom = .maCheckStandardErrors, + exitAnalysisIfErrors = TRUE) + + return(dataset) +} .fpH1Fits <- function(jaspResults, dataset, options) { From aff0ec4f1720cf654218812414c7bcc9b64beddb Mon Sep 17 00:00:00 2001 From: FBartos Date: Tue, 22 Oct 2024 09:32:53 +0200 Subject: [PATCH 075/127] fix effect size computation: add type (data loading still broken) --- R/effectsizecomputation.R | 14 +++++--- inst/qml/EffectSizeComputation.qml | 54 ++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index f63c939e..5ad256f9 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -1,4 +1,10 @@ +# TODO: +# - fix crash when second column is exported +# - GUI scaling issues +# - add dropdown to specify which subset is selected (i.e., event indicator in survival) +# - add input checks in GUI / R code + EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { # TODO: remove once Bruno fixes flattening and renaming @@ -20,9 +26,9 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { } .escReadDataset <- function(dataset, options) { - if (!is.null(dataset)) { - return(dataset) - } else { + # if (!is.null(dataset)) { + # return(dataset) + # } else { # collect all selected variables selectedVariables <- lapply(seq_along(options[["variables"]]), function(i) { @@ -46,7 +52,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { selectedVariables <- unique(selectedVariables) return(.readDataSetToEnd(columns.as.numeric = selectedVariables)) - } + # } } .escComputeEffectSizes <- function(dataset, options) { diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index 1ca26a83..995a4b62 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -329,6 +329,7 @@ Form name: "group1OutcomePlus" title: qsTr("Group 1/Outcome +") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "binary") || (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) } @@ -338,6 +339,7 @@ Form name: "time1OutcomePlus" title: qsTr("Time 1/Outcome +") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "repeatedMeasures" && measurementValue == "binaryMarginal") } @@ -346,6 +348,7 @@ Form name: "outcomePlusPlus" title: qsTr("Outcome +/+") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "variableAssociation" && measurementValue == "binary") || (designValue == "repeatedMeasures" && measurementValue == "binary") } @@ -355,6 +358,7 @@ Form name: "cronbachsAlpha" title: qsTr("Cronbach's alpha") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "other" && measurementValue == "reliability") } @@ -363,6 +367,7 @@ Form name: "homozygousDominantAlleles" title: qsTr("Homozygous Dominant Alleles") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "other" && measurementValue == "heterozygosity") } @@ -371,6 +376,7 @@ Form name: "group1OutcomeMinus" title: qsTr("Group 1/Outcome -") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "binary") || (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) } @@ -380,6 +386,7 @@ Form name: "time1OutcomeMinus" title: qsTr("Time 1/Outcome -") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "repeatedMeasures" && measurementValue == "binaryMarginal") } @@ -388,6 +395,7 @@ Form name: "outcomePlusMinus" title: qsTr("Outcome +/-") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "variableAssociation" && measurementValue == "binary") || (designValue == "repeatedMeasures" && measurementValue == "binary") } @@ -397,6 +405,7 @@ Form name: "heterozygousAlleles" title: qsTr("Heterozygous Alleles") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "other" && measurementValue == "heterozygosity") } @@ -405,6 +414,7 @@ Form name: "group2OutcomePlus" title: qsTr("Group 2/Outcome +") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "binary") || (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) } @@ -414,6 +424,7 @@ Form name: "time2OutcomePlus" title: qsTr("Time 2/Outcome +") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "repeatedMeasures" && measurementValue == "binaryMarginal") } @@ -422,6 +433,7 @@ Form name: "outcomeMinusPlus" title: qsTr("Outcome -/+") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "variableAssociation" && measurementValue == "binary") || (designValue == "repeatedMeasures" && measurementValue == "binary") } @@ -431,6 +443,7 @@ Form name: "homozygousRecessiveAlleles" title: qsTr("Homozygous Recessive Alleles") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "other" && measurementValue == "heterozygosity") } @@ -439,6 +452,7 @@ Form name: "group2OutcomeMinus" title: qsTr("Group 2/Outcome Minus") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "binary") || (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "PBIT" || effectSizeValue == "OR2DN" || effectSizeValue == "OR2DL")) } @@ -448,6 +462,7 @@ Form name: "time2OutcomeMinus" title: qsTr("Time 2/Outcome -") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "repeatedMeasures" && measurementValue == "binaryMarginal") } @@ -456,6 +471,7 @@ Form name: "outcomeMinusMinus" title: qsTr("Outcome -/-") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "variableAssociation" && measurementValue == "binary") || (designValue == "repeatedMeasures" && measurementValue == "binary") } @@ -465,6 +481,7 @@ Form name: "outcomePlusPlusAndPlusMinus" title: qsTr("Outcome +/+ and +/-") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "variableAssociation" && measurementValue == "binary") } @@ -473,6 +490,7 @@ Form name: "outcomeMinusPlusAndMinusMinus" title: qsTr("Outcome -/+ and -/-") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "variableAssociation" && measurementValue == "binary") } @@ -481,6 +499,7 @@ Form name: "eventsGroup1" title: qsTr("Events Group 1") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "countsPerTime") } @@ -489,6 +508,7 @@ Form name: "events" title: qsTr("Events") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "singleGroup" && (measurementValue == "binary" || measurementValue == "countsPerTime")) } @@ -497,6 +517,7 @@ Form name: "nonEvents" title: qsTr("Non-Events") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "singleGroup" && measurementValue == "binary") } @@ -505,6 +526,7 @@ Form name: "items" title: qsTr("Items") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "other" && measurementValue == "reliability") } @@ -513,6 +535,7 @@ Form name: "predictors" title: qsTr("Predictors") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "other" && measurementValue == "partialCorrelation") || (designValue == "other" && measurementValue == "modelFit") } @@ -522,6 +545,7 @@ Form name: "eventsGroup2" title: qsTr("Events Group 2") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "countsPerTime") } @@ -530,6 +554,7 @@ Form name: "personTimeGroup1" title: qsTr("Person-Time Group 1") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "countsPerTime") } @@ -538,6 +563,7 @@ Form name: "personTime" title: qsTr("Person-Time") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "singleGroup" && measurementValue == "countsPerTime") } @@ -546,6 +572,7 @@ Form name: "personTimeGroup2" title: qsTr("Person-Time Group 2") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "countsPerTime") } @@ -554,6 +581,7 @@ Form name: "meanGroup1" title: qsTr("Mean Group 1") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "quantitative" && (effectSizeValue != "CVR" && effectSizeValue != "VR")) || (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || (designValue == "variableAssociation" && measurementValue == "mixed") @@ -564,6 +592,7 @@ Form name: "meanTime1" title: qsTr("Mean Time 1 (or Group 1)") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "repeatedMeasures" && measurementValue == "quantitative" && (effectSizeValue != "CVRC" && effectSizeValue != "VRC")) } @@ -572,6 +601,7 @@ Form name: "meanGroup2" title: qsTr("Mean Group 2") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "quantitative" && (effectSizeValue != "CVR" && effectSizeValue != "VR")) || (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || (designValue == "variableAssociation" && measurementValue == "mixed") @@ -582,6 +612,7 @@ Form name: "meanTime2" title: qsTr("Mean Time 2 (or Group 2)") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "repeatedMeasures" && measurementValue == "quantitative" && (effectSizeValue != "CVRC" && effectSizeValue != "VRC")) } @@ -590,6 +621,7 @@ Form name: "mean" title: qsTr("Mean") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "singleGroup" && measurementValue == "quantitative" && effectSizeValue != "SDLN") } @@ -598,6 +630,7 @@ Form name: "sdGroup1" title: qsTr("SD Group 1") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "quantitative" && (effectSizeValue != "SMD1" && effectSizeValue != "SMDH1")) || (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || (designValue == "variableAssociation" && measurementValue == "mixed") @@ -608,6 +641,7 @@ Form name: "sdTime1" title: qsTr("SD Time 1 (or Group 1)") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "repeatedMeasures" && measurementValue == "quantitative") } @@ -616,6 +650,7 @@ Form name: "sdGroup2" title: qsTr("SD Group 2") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "quantitative") || (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || (designValue == "variableAssociation" && measurementValue == "mixed") @@ -626,6 +661,7 @@ Form name: "sdTime2" title: qsTr("SD Time 2 (or Group 2)") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "repeatedMeasures" && measurementValue == "quantitative" && effectSizeValue != "SMCR") } @@ -634,6 +670,7 @@ Form name: "sd" title: qsTr("SD") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "singleGroup" && measurementValue == "quantitative") } AssignedVariablesList @@ -641,6 +678,7 @@ Form name: "sampleSizeGroup1" title: qsTr("Sample Size Group 1") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue != "countsPerTime") || (designValue == "variableAssociation" && measurementValue == "mixed") } @@ -650,6 +688,7 @@ Form name: "sampleSizeGroup2" title: qsTr("Sample Size Group 2") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue != "countsPerTime") || (designValue == "variableAssociation" && measurementValue == "mixed") } @@ -659,6 +698,7 @@ Form name: "correlation" title: qsTr("Correlation") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "variableAssociation" && measurementValue == "quantitative") || (designValue == "repeatedMeasures" && measurementValue == "quantitative") || (designValue == "repeatedMeasures" && measurementValue == "binaryMarginal") @@ -669,6 +709,7 @@ Form name: "proportionPlusPlus" title: qsTr("Proportion +/+") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "repeatedMeasures" && measurementValue == "binaryMarginal") } @@ -677,6 +718,7 @@ Form name: "sampleSize" title: qsTr("Sample Size") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "variableAssociation" && measurementValue == "quantitative") || (designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary")) || (designValue == "repeatedMeasures" && measurementValue == "quantitative") || @@ -691,6 +733,7 @@ Form name: "cohensD" title: qsTr("Cohen's d") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "quantitative" && effectSizeValue == "SMD") || (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || (designValue == "variableAssociation" && measurementValue == "mixed") || @@ -702,6 +745,7 @@ Form name: "rSquared" title: qsTr("R-Squared") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "other" && measurementValue == "partialCorrelation" && (effectSizeValue == "SPCOR" || effectSizeValue == "ZSPCOR")) || (designValue == "other" && measurementValue == "modelFit") } @@ -711,6 +755,7 @@ Form name: "tStatistic" title: qsTr("T-Statistic") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "quantitative" && effectSizeValue == "SMD") || (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || (designValue == "variableAssociation" && measurementValue == "quantitative") || @@ -724,6 +769,7 @@ Form name: "fStatistic" title: qsTr("F-Statistic") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "other" && measurementValue == "modelFit") } @@ -732,6 +778,7 @@ Form name: "semipartialCorrelation" title: qsTr("(Semi)Partial Correlation") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "other" && measurementValue == "partialCorrelation") } @@ -740,6 +787,7 @@ Form name: "pValue" title: qsTr("P-Value") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "independentGroups" && measurementValue == "quantitative" && effectSizeValue == "SMD") || (designValue == "independentGroups" && measurementValue == "mixed" && (effectSizeValue == "D2ORN" || effectSizeValue == "D2ORL")) || (designValue == "variableAssociation" && measurementValue == "quantitative") || @@ -755,6 +803,7 @@ Form name: "effectSize" title: qsTr("Effect Size") singleVariable: true + allowedColumns: ["scale"] visible: designValue == "reportedEffectSizes" } @@ -763,6 +812,7 @@ Form name: "standardError" title: qsTr("Standard Error") singleVariable: true + allowedColumns: ["scale"] visible: designValue == "reportedEffectSizes" } @@ -771,6 +821,7 @@ Form name: "samplingVariance" title: qsTr("Sampling Variance") singleVariable: true + allowedColumns: ["scale"] visible: designValue == "reportedEffectSizes" } @@ -779,6 +830,7 @@ Form name: "confidenceInterval" title: qsTr("95% Confidence Interval") singleVariable: true + allowedColumns: ["scale"] visible: designValue == "reportedEffectSizes" } @@ -787,6 +839,7 @@ Form name: "samplingVarianceTypeMixed" title: qsTr("Sampling Variance Type Mixed") singleVariable: true + allowedColumns: ["scale"] visible: (designValue == "variableAssociation" && measurementValue == "binary" && (effectSizeValue == "PHI" || effectSizeValue == "ZPHI") && samplingVarianceType.value == "mixed") || (designValue == "variableAssociation" && measurementValue == "mixed" && (effectSizeValue == "RPB" || effectSizeValue == "ZPB") && samplingVarianceType.value == "mixed") } @@ -796,6 +849,7 @@ Form name: "selected" title: qsTr("Subset") singleVariable: true + allowedColumns: ["nominal"] } } From 09baf3b11f7fba9e3b0a5bd1b329660826eb0d8f Mon Sep 17 00:00:00 2001 From: FBartos Date: Tue, 22 Oct 2024 10:39:58 +0200 Subject: [PATCH 076/127] fix meta-analysis: omnibus test names --- R/classicalmetaanalysiscommon.R | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index a7ad8591..90ea2347 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -37,9 +37,11 @@ # - vs predicted # - vs outcome # - vs covariates +# Advanced +# - change specification of Omnibus moderation tests (do not include bracket and c, show an information message about which coefficients are included in the test in a table note) # Generic # - allow different covariates factoring across all settings -# Power-enhanced funnel plot + # TODO fix QML # - remove selected variables in estimated marginal means when removed from the model components @@ -1666,9 +1668,9 @@ if (.maIsMetaregressionFtest(options)) row$df2 <- fit[["QMdf"]][2] - if (.maIsMetaregressionHeterogeneity(options)) + if (parameter == "effectSize") row$parameter <- gettextf("Effect Size (coef: %1$s)", paste(selCoef, collapse = ",")) - else if (.maIsMetaregressionEffectSize(options)) + else if (parameter == "heterogeneity") row$parameter <- gettextf("Heterogeneity (coef: %1$s)", paste(selCoef, collapse = ",")) return(row) From 5582863c69ae96b5432ea5ad045a277fd25177cc Mon Sep 17 00:00:00 2001 From: FBartos Date: Tue, 22 Oct 2024 11:46:01 +0200 Subject: [PATCH 077/127] fix meta-analysis: forest plot xlab changes with transformation --- R/classicalmetaanalysiscommon.R | 2 +- R/forestplot.R | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 90ea2347..d59121b2 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -1378,7 +1378,7 @@ return(jaspResults[["estimatedMarginalMeansContainer"]]) # create the output container - estimatedMarginalMeansContainer <- createJaspContainer(gettext("Meta-Regression Summary")) + estimatedMarginalMeansContainer <- createJaspContainer(gettext("Estimated Marginal Means Summary")) estimatedMarginalMeansContainer$dependOn(c(.maDependencies, "confidenceIntervals", "confidenceIntervalsLevel")) estimatedMarginalMeansContainer$position <- 4 jaspResults[["estimatedMarginalMeansContainer"]] <- estimatedMarginalMeansContainer diff --git a/R/forestplot.R b/R/forestplot.R index db388991..d282c3a1 100644 --- a/R/forestplot.R +++ b/R/forestplot.R @@ -755,7 +755,11 @@ xlim = xRange, ylim = yRange, expand = FALSE - ) + ggplot2::xlab(options[["forestPlotAuxiliaryEffectLabel"]]) + ggplot2::theme( + ) + ggplot2::xlab( + if (options[["forestPlotAuxiliaryEffectLabel"]] != "Effect Size") options[["forestPlotAuxiliaryEffectLabel"]] + else if (options[["transformEffectSize"]] == "none") gettext("Effect Size") + else .maGetOptionsNameEffectSizeTransformation(options[["transformEffectSize"]]) + ) + ggplot2::theme( axis.line.y = ggplot2::element_blank(), axis.line.x = ggplot2::element_line(color = "black"), axis.text.y = ggplot2::element_blank(), From 444d94015c1b2eb03b006764d51c6f79e5cb268f Mon Sep 17 00:00:00 2001 From: FBartos Date: Tue, 22 Oct 2024 14:52:44 +0200 Subject: [PATCH 078/127] fix funnel.R file name --- R/{funnnelplot.R => funnelplot.R} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename R/{funnnelplot.R => funnelplot.R} (100%) diff --git a/R/funnnelplot.R b/R/funnelplot.R similarity index 100% rename from R/funnnelplot.R rename to R/funnelplot.R From a58af11c9f3cad4453405f0496402d2d78dab8e5 Mon Sep 17 00:00:00 2001 From: FBartos Date: Tue, 22 Oct 2024 22:23:21 +0200 Subject: [PATCH 079/127] fix effect size computation: Step labels --- inst/qml/EffectSizeComputation.qml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index 995a4b62..0bb832a4 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -38,13 +38,14 @@ Form property string designValue: design.value property string measurementValue: measurement.value property string effectSizeValue: effectSize.value - property string designLabel: design.label - property string measurementLabel: measurement.label - property string effectSizeLabel: effectSize.label + property string stepCounterValue: stepCounter.text + property string designLabel: design.currentLabel + property string measurementLabel: measurement.currentLabel Text { - text: qsTr("Step %1").arg((rowIndex + 1)) + text: qsTr("Step %1").arg((rowIndex + 1)) + id: stepCounter } DropDown @@ -284,6 +285,7 @@ Form property var designLabel: effectSizeType.rowAt(rowIndex).designLabel property var measurementLabel: effectSizeType.rowAt(rowIndex).measurementLabel property var effectSizeLabel: effectSizeType.rowAt(rowIndex).effectSizeLabel + property var stepCounterValue: effectSizeType.rowAt(rowIndex).stepCounterValue VariablesForm { @@ -321,7 +323,7 @@ Form AvailableVariablesList { name: "allVars" - title: "" + effectSizeValue + " (" + designValue + "/" + measurementValue + ")" + title: stepCounterValue + ": " + effectSizeValue + " (" + designLabel + "/" + measurementLabel + ")" } AssignedVariablesList From fdc06093edb3ab8585b2e05e32982de754783af4 Mon Sep 17 00:00:00 2001 From: FBartos Date: Tue, 22 Oct 2024 22:51:30 +0200 Subject: [PATCH 080/127] fix effect size computation: remove flattening, subset & data read (variable renaming still broken) --- R/effectsizecomputation.R | 12 ++++++------ inst/qml/EffectSizeComputation.qml | 26 +++++++++++++++++--------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index 5ad256f9..c73bf01b 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -8,9 +8,8 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { # TODO: remove once Bruno fixes flattening and renaming - options <- .HOTFIX_flatten_options(options) - - dataset <- .escReadDataset(dataset, options) + # options <- .HOTFIX_flatten_options(options) + # dataset <- .escReadDataset(dataset, options) dataOutput <- .escComputeEffectSizes(dataset, options) .escComputeSummaryTable(jaspResults, dataset, options, dataOutput) @@ -461,8 +460,8 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { inputs <- .escReportedEffectSizesInput(inputs) } - if (length(variables[["subset"]]) == 1) - inputs[["subset"]] <- dataset[[variables[["subset"]]]] + if (variables[["subset"]] != "") + inputs[["subset"]] <- dataset[[variables[["subset"]]]] == variables[["subsetLevel"]] inputs <- inputs[!sapply(inputs, is.null)] @@ -899,7 +898,8 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { "effectSize", "standardError", "samplingVariance", - "samplingVarianceTypeMixed" + "samplingVarianceTypeMixed", + "subset", "subsetLevel" ) .HOTFIX_flatten_options <- function(options) { diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index 0bb832a4..76bc6ee5 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -294,29 +294,29 @@ Form preferredWidth: parent.width - 6 * jaspTheme.contentMargin preferredHeight: (function() { if ((designValue == "variableAssociation" && measurementValue == "mixed" && samplingVarianceType.value == "mixed")) { - return 11 * 50 * preferencesModel.uiScale + return 12 * 50 * preferencesModel.uiScale } else if (effectSizeValue == "SMD" || effectSizeValue == "D2ORL" || effectSizeValue == "D2ORN" || effectSizeValue == "SMCC" || (designValue == "variableAssociation" && measurementValue == "mixed")) { - return 10 * 50 * preferencesModel.uiScale + return 11 * 50 * preferencesModel.uiScale } else if (effectSizeValue == "CVR" || effectSizeValue == "VR" || effectSizeValue == "CVRC" || effectSizeValue == "VRC" || (designValue == "independentGroups" && measurementValue == "countsPerTime") || (designValue == "repeatedMeasures" && measurementValue == "binary") || (designValue == "variableAssociation" && measurementValue == "quantitative") || (designValue == "reportedEffectSizes")) { - return 5 * 50 * preferencesModel.uiScale + return 6 * 50 * preferencesModel.uiScale } else if (effectSizeValue == "SDLN" || (designValue == "singleGroup" && measurementValue == "countsPerTime")) { - return 3 * 50 * preferencesModel.uiScale + return 4 * 50 * preferencesModel.uiScale } else if (effectSizeValue == "SMD1" || effectSizeValue == "SMCR" || effectSizeValue == "PCOR" || effectSizeValue == "ZPCOR" || (designValue == "other" && measurementValue == "modelFit")) { - return 6 * 50 * preferencesModel.uiScale + return 7 * 50 * preferencesModel.uiScale } else if ((designValue == "independentGroups" && measurementValue == "quantitative") || (designValue == "other" && measurementValue == "partialCorrelation")) { - return 7 * 50 * preferencesModel.uiScale + return 8 * 50 * preferencesModel.uiScale } else if ((designValue == "singleGroup" && (measurementValue == "quantitative" || measurementValue == "binary")) || (designValue == "other" && (measurementValue == "reliability" || measurementValue == "heterozygosity"))) { - return 4 * 50 * preferencesModel.uiScale + return 5 * 50 * preferencesModel.uiScale } else { - return 7 * 50 * preferencesModel.uiScale + return 8 * 50 * preferencesModel.uiScale } })() @@ -848,11 +848,19 @@ Form AssignedVariablesList { - name: "selected" + name: "subset" + id: subset title: qsTr("Subset") singleVariable: true allowedColumns: ["nominal"] } + + DropDown + { + name: "subsetLevel" + label: qsTr("Subset Level") + source: [{name: "subset", use: "levels"}] + } } Group From 538cbb104e1a1d064b342bc2c8eb075445e1bbff Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 23 Oct 2024 11:41:56 +0200 Subject: [PATCH 081/127] fix funnel plot: asymmetry typo --- R/funnelplot.R | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/R/funnelplot.R b/R/funnelplot.R index 2cbf6246..9dbb1d2e 100644 --- a/R/funnelplot.R +++ b/R/funnelplot.R @@ -550,9 +550,9 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "metaRegression") if (jaspBase::isTryError(fit)) - metaRegressionTable$addFootnote(fit, symbol = .fpAssymetryTestErrorMessage()) + metaRegressionTable$addFootnote(fit, symbol = .fpAsymmetryTestErrorMessage()) else if (jaspBase::isTryError(fitTest)) - metaRegressionTable$addFootnote(fit, symbol = .fpAssymetryTestErrorMessage()) + metaRegressionTable$addFootnote(fit, symbol = .fpAsymmetryTestErrorMessage()) metaRegressionTable$setData(fitSummary) @@ -566,9 +566,9 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary$split <- names(fits)[i] if (jaspBase::isTryError(fits[[i]])) - metaRegressionTable$addFootnote(fits[[i]], symbol = .fpAssymetryTestErrorMessage(names(fits)[i])) + metaRegressionTable$addFootnote(fits[[i]], symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) else if (jaspBase::isTryError(fitTest)) - metaRegressionTable$addFootnote(fitTest, symbol = .fpAssymetryTestErrorMessage(names(fits)[i])) + metaRegressionTable$addFootnote(fitTest, symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) return(fitSummary) })) @@ -605,9 +605,9 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "weightedRegression") if (jaspBase::isTryError(fit)) - weightedRegressionTable$addFootnote(fit, symbol = .fpAssymetryTestErrorMessage()) + weightedRegressionTable$addFootnote(fit, symbol = .fpAsymmetryTestErrorMessage()) else if (jaspBase::isTryError(fitTest)) - weightedRegressionTable$addFootnote(fitTest, symbol = .fpAssymetryTestErrorMessage()) + weightedRegressionTable$addFootnote(fitTest, symbol = .fpAsymmetryTestErrorMessage()) weightedRegressionTable$setData(fitSummary) @@ -621,9 +621,9 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary$split <- names(fits)[i] if (jaspBase::isTryError(fits[[i]])) - weightedRegressionTable$addFootnote(fits[[i]], symbol = .fpAssymetryTestErrorMessage(names(fits)[i])) + weightedRegressionTable$addFootnote(fits[[i]], symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) else if (jaspBase::isTryError(fitTest)) - weightedRegressionTable$addFootnote(fitTest, symbol = .fpAssymetryTestErrorMessage(names(fits)[i])) + weightedRegressionTable$addFootnote(fitTest, symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) return(fitSummary) })) @@ -657,9 +657,9 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "rankCorrelation") if (jaspBase::isTryError(fit)) - rankCorrelationTable$addFootnote(fit, symbol = .fpAssymetryTestErrorMessage()) + rankCorrelationTable$addFootnote(fit, symbol = .fpAsymmetryTestErrorMessage()) else if (jaspBase::isTryError(fitTest)) - rankCorrelationTable$addFootnote(fit, symbol = .fpAssymetryTestErrorMessage()) + rankCorrelationTable$addFootnote(fit, symbol = .fpAsymmetryTestErrorMessage()) else fitSummary$k <- fit$k @@ -676,10 +676,10 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { if (jaspBase::isTryError(fits[[i]])) { fitSummary$k <- NA - rankCorrelationTable$addFootnote(fits[[i]], symbol = .fpAssymetryTestErrorMessage(names(fits)[i])) + rankCorrelationTable$addFootnote(fits[[i]], symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) } else if (jaspBase::isTryError(fitTest)) { fitSummary$k <- fits[[i]]$k - rankCorrelationTable$addFootnote(fit, symbol = .fpAssymetryTestErrorMessage(names(fits)[i])) + rankCorrelationTable$addFootnote(fit, symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) } else { fitSummary$k <- fits[[i]]$k } @@ -709,11 +709,11 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { } return(dfs) } -.fpAssymetryTestErrorMessage <- function(level = NULL) { +.fpAsymmetryTestErrorMessage <- function(level = NULL) { if (is.null(level)) - return(gettext("The funnel plot assymetry test failed with the following error: ")) + return(gettext("The funnel plot asymmetry test failed with the following error: ")) else - return(gettextf("The funnel plot assymetry test at level %1$s failed with the following error: ", level)) + return(gettextf("The funnel plot asymmetry test at level %1$s failed with the following error: ", level)) } .dpExtractAsymmetryTest <- function(fitTest, testType) { if (testType == "metaRegression") { From d4c458092a51bce73fd8718dd38ca87dfae828bb Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 23 Oct 2024 11:43:54 +0200 Subject: [PATCH 082/127] fix funnel plot: fitContainer -> fitState --- R/funnelplot.R | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/R/funnelplot.R b/R/funnelplot.R index 9dbb1d2e..f691533b 100644 --- a/R/funnelplot.R +++ b/R/funnelplot.R @@ -73,16 +73,16 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { .fpH1Fits <- function(jaspResults, dataset, options) { - if (!is.null(jaspResults[["fitContainer"]])) + if (!is.null(jaspResults[["fitState"]])) return() - fitContainer <- createJaspState() - fitContainer$dependOn(c(.fpDependencies, "method")) - jaspResults[["fitContainer"]] <- fitContainer + fitState <- createJaspState() + fitState$dependOn(c(.fpDependencies, "method")) + jaspResults[["fitState"]] <- fitState if (options[["split"]] == "") { - fitContainer$object <- try(metafor::rma( + fitState$object <- try(metafor::rma( yi = dataset[[options[["effectSize"]]]], sei = dataset[[options[["effectSizeStandardError"]]]], method = .maGetMethodOptions(options) @@ -100,7 +100,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { )) }) names(fits) <- splitLevels - fitContainer$object <- fits + fitState$object <- fits } return() @@ -137,7 +137,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { funnelPlot <- createJaspPlot(width = 550, height = 480) funnelPlotContainer[["funnelPlot"]] <- funnelPlot - fit <- jaspResults[["fitContainer"]]$object + fit <- jaspResults[["fitState"]]$object if (options[["funnelUnderH1"]] && options[["funnelUnderH1Parameters"]] == "estimated" && jaspBase::isTryError(fit)) funnelPlot$setError(gettextf("The H\U2081 model failed with the following message: %1$s.", fit)) else @@ -151,7 +151,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { funnelPlot <- createJaspPlot(title = paste0(options[["split"]], " = ", splitLevel), width = 550, height = 480) funnelPlotContainer[[splitLevel]] <- funnelPlot - fit <- jaspResults[["fitContainer"]]$object[[splitLevel]] + fit <- jaspResults[["fitState"]]$object[[splitLevel]] if (options[["funnelUnderH1"]] && options[["funnelUnderH1Parameters"]] == "estimated" && jaspBase::isTryError(fit)) funnelPlot$setError(gettextf("The H\U2081 model failed with the following message: %1$s.", fit)) else @@ -222,9 +222,9 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { } else if (options[["funnelUnderH1Parameters"]] == "estimated"){ if (options[["split"]] == "") { - fit <- jaspResults[["fitContainer"]]$object + fit <- jaspResults[["fitState"]]$object } else { - fit <- jaspResults[["fitContainer"]]$object[[splitLevel]] + fit <- jaspResults[["fitState"]]$object[[splitLevel]] } adjustFunnel1Mean <- fit$b[1] @@ -238,9 +238,9 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { dfsFunnel1XRange <- range(sapply(dfsFunnel1, function(x) x$x)) } else { dfsFunnel1XMax <- list() - for (i in seq_along(jaspResults[["fitContainer"]]$object)) { + for (i in seq_along(jaspResults[["fitState"]]$object)) { # extract each fit - tempFit <- jaspResults[["fitContainer"]]$object[[i]] + tempFit <- jaspResults[["fitState"]]$object[[i]] if (jaspBase::isTryError(tempFit)) next tempAdjustFunnel1Mean <- tempFit$b[1] @@ -469,7 +469,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { if (options[["split"]] == "") { - fit <- jaspResults[["fitContainer"]]$object + fit <- jaspResults[["fitState"]]$object if (jaspBase::isTryError(fit)) { fitSummary <- data.frame(k = NA, mu = NA) funnelParametersTable$addFootnote(fit, symbol = gettext("The funnel plot parameter estimation failed with the following error: ")) @@ -484,7 +484,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { } else { - fits <- jaspResults[["fitContainer"]]$object + fits <- jaspResults[["fitState"]]$object fitSummary <- do.call(rbind, lapply(fits, function(fit) { if (jaspBase::isTryError(fit)) { @@ -545,7 +545,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { if (.fpReady(options)) { if (options[["split"]] == "") { - fit <- jaspResults[["fitContainer"]]$object + fit <- jaspResults[["fitState"]]$object fitTest <- try(metafor::regtest(fit)) fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "metaRegression") @@ -558,7 +558,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { } else { - fits <- jaspResults[["fitContainer"]]$object + fits <- jaspResults[["fitState"]]$object fitSummaries <- do.call(rbind, lapply(seq_along(fits), function(i) { fitTest <- try(metafor::regtest(fits[[i]])) @@ -600,7 +600,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { if (.fpReady(options)) { if (options[["split"]] == "") { - fit <- jaspResults[["fitContainer"]]$object + fit <- jaspResults[["fitState"]]$object fitTest <- try(metafor::regtest(fit, model = "lm")) fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "weightedRegression") @@ -613,7 +613,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { } else { - fits <- jaspResults[["fitContainer"]]$object + fits <- jaspResults[["fitState"]]$object fitSummaries <- do.call(rbind, lapply(seq_along(fits), function(i) { fitTest <- try(metafor::regtest(fits[[i]], model = "lm")) @@ -652,7 +652,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { if (options[["split"]] == "") { - fit <- jaspResults[["fitContainer"]]$object + fit <- jaspResults[["fitState"]]$object fitTest <- try(metafor::ranktest(fit)) fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "rankCorrelation") @@ -667,7 +667,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { } else { - fits <- jaspResults[["fitContainer"]]$object + fits <- jaspResults[["fitState"]]$object fitSummaries <- do.call(rbind, lapply(seq_along(fits), function(i) { fitTest <- try(metafor::ranktest(fits[[i]])) From fadaea62f1b3b6cf7ae015b0d08f8dae42bf01f4 Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 23 Oct 2024 11:47:35 +0200 Subject: [PATCH 083/127] fix funnel plot: add spaces --- R/funnelplot.R | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/R/funnelplot.R b/R/funnelplot.R index f691533b..4ca05b19 100644 --- a/R/funnelplot.R +++ b/R/funnelplot.R @@ -172,14 +172,14 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { .quitAnalysis(gettext("Funnel plot prediction intervals must be between 0 and 1.")) if (length(funnelLevels) < 1) .quitAnalysis(gettext("Funnel plot prediction intervals must be specified.")) - funnelLevels <- (1-funnelLevels)/2 + funnelLevels <- (1 - funnelLevels) / 2 funnelLevels <- sort(funnelLevels) # funnel colors - funnelColorsSteps <- 2*length(funnelLevels) + 1 + funnelColorsSteps <- 2 * length(funnelLevels) + 1 funnelColorsSteps <- seq(0, 1, length.out = funnelColorsSteps) funnelColorsSteps <- funnelColorsSteps[-c(1, length(funnelColorsSteps))] - funnelColors <- paste0("grey", round(funnelColorsSteps*100)) + funnelColors <- paste0("grey", round(funnelColorsSteps * 100)) if (options[["invertColors"]]) funnelColors <- rev(funnelColors) @@ -703,8 +703,8 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { dfs[[i]] <- data.frame( x = c(rev(mean - tempZ * sqrt(heterogeneity^2 + seSeq^2)), mean + tempZ * sqrt(heterogeneity^2 + seSeq^2)), y = c(rev(seSeq), seSeq), - p = 2*funnelLevels[i], - lvl = 1-2*funnelLevels[i] + p = 2 * funnelLevels[i], + lvl = 1 - 2 * funnelLevels[i] ) } return(dfs) From 906b63bcd0d1bdc3ccf95999f5cd602c3dfb93e8 Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 23 Oct 2024 13:02:34 +0200 Subject: [PATCH 084/127] fix funnel plot: add column type --- inst/qml/FunnelPlot.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/inst/qml/FunnelPlot.qml b/inst/qml/FunnelPlot.qml index cbf9ac86..9f8a7ed5 100644 --- a/inst/qml/FunnelPlot.qml +++ b/inst/qml/FunnelPlot.qml @@ -288,6 +288,7 @@ Form id: estimatesMappingColor label: qsTr("Color") addEmptyValue: true + allowedColumns: ["nominal"] } DropDown @@ -296,6 +297,7 @@ Form id: estimatesMappingShape label: qsTr("Shape") addEmptyValue: true + allowedColumns: ["nominal"] } DropDown From a8a843e68149ca1e507c7c5520c9af771b03d382 Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 23 Oct 2024 16:06:20 +0200 Subject: [PATCH 085/127] fix funnel plot: error handling --- R/funnelplot.R | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/R/funnelplot.R b/R/funnelplot.R index 4ca05b19..008d51c4 100644 --- a/R/funnelplot.R +++ b/R/funnelplot.R @@ -21,6 +21,8 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { dataset <- .fpCheckDataset(jaspResults, dataset, options) .fpH1Fits(jaspResults, dataset, options) } + saveRDS(options, file = "C:/JASP/options.RDS") + saveRDS(dataset, file = "C:/JASP/dataset.RDS") # make the funnel plots .fpPlot(jaspResults, dataset, options) @@ -139,7 +141,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fit <- jaspResults[["fitState"]]$object if (options[["funnelUnderH1"]] && options[["funnelUnderH1Parameters"]] == "estimated" && jaspBase::isTryError(fit)) - funnelPlot$setError(gettextf("The H\U2081 model failed with the following message: %1$s.", fit)) + funnelPlot$setError(.fpMetaforTranslateErrorMessage(fit)) else funnelPlot$plotObject <- .fpMakeFunnelPlot(jaspResults, dataset, options) @@ -153,7 +155,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fit <- jaspResults[["fitState"]]$object[[splitLevel]] if (options[["funnelUnderH1"]] && options[["funnelUnderH1Parameters"]] == "estimated" && jaspBase::isTryError(fit)) - funnelPlot$setError(gettextf("The H\U2081 model failed with the following message: %1$s.", fit)) + funnelPlot$setError(.fpMetaforTranslateErrorMessage(fit)) else funnelPlot$plotObject <- .fpMakeFunnelPlot(jaspResults, dataset, options, splitLevel = splitLevel) @@ -472,7 +474,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fit <- jaspResults[["fitState"]]$object if (jaspBase::isTryError(fit)) { fitSummary <- data.frame(k = NA, mu = NA) - funnelParametersTable$addFootnote(fit, symbol = gettext("The funnel plot parameter estimation failed with the following error: ")) + funnelParametersTable$addFootnote(.fpMetaforTranslateErrorMessage(fit), symbol = gettext("The funnel plot parameter estimation failed with the following error: ")) } else { fitSummary <- data.frame( k = fit$k, @@ -488,7 +490,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary <- do.call(rbind, lapply(fits, function(fit) { if (jaspBase::isTryError(fit)) { - funnelParametersTable$addFootnote(fit, symbol = gettext("The funnel plot parameter estimation failed with the following error: ")) + funnelParametersTable$addFootnote(.fpMetaforTranslateErrorMessage(fit), symbol = gettext("The funnel plot parameter estimation failed with the following error: ")) if (.maGetMethodOptions(options) %in% c("EE", "FE")) return(data.frame(k = NA, mu = NA)) else @@ -550,9 +552,9 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "metaRegression") if (jaspBase::isTryError(fit)) - metaRegressionTable$addFootnote(fit, symbol = .fpAsymmetryTestErrorMessage()) + metaRegressionTable$addFootnote(.fpMetaforTranslateErrorMessage(fit), symbol = .fpAsymmetryTestErrorMessage()) else if (jaspBase::isTryError(fitTest)) - metaRegressionTable$addFootnote(fit, symbol = .fpAsymmetryTestErrorMessage()) + metaRegressionTable$addFootnote(fitTest, symbol = .fpAsymmetryTestErrorMessage()) metaRegressionTable$setData(fitSummary) @@ -566,7 +568,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary$split <- names(fits)[i] if (jaspBase::isTryError(fits[[i]])) - metaRegressionTable$addFootnote(fits[[i]], symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) + metaRegressionTable$addFootnote(.fpMetaforTranslateErrorMessage(fits[[i]]), symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) else if (jaspBase::isTryError(fitTest)) metaRegressionTable$addFootnote(fitTest, symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) @@ -605,7 +607,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "weightedRegression") if (jaspBase::isTryError(fit)) - weightedRegressionTable$addFootnote(fit, symbol = .fpAsymmetryTestErrorMessage()) + weightedRegressionTable$addFootnote(.fpMetaforTranslateErrorMessage(fit), symbol = .fpAsymmetryTestErrorMessage()) else if (jaspBase::isTryError(fitTest)) weightedRegressionTable$addFootnote(fitTest, symbol = .fpAsymmetryTestErrorMessage()) @@ -621,7 +623,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary$split <- names(fits)[i] if (jaspBase::isTryError(fits[[i]])) - weightedRegressionTable$addFootnote(fits[[i]], symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) + weightedRegressionTable$addFootnote(.fpMetaforTranslateErrorMessage(fits[[i]]), symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) else if (jaspBase::isTryError(fitTest)) weightedRegressionTable$addFootnote(fitTest, symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) @@ -657,9 +659,9 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { fitSummary <- .dpExtractAsymmetryTest(fitTest, testType = "rankCorrelation") if (jaspBase::isTryError(fit)) - rankCorrelationTable$addFootnote(fit, symbol = .fpAsymmetryTestErrorMessage()) + rankCorrelationTable$addFootnote(.fpMetaforTranslateErrorMessage(fit), symbol = .fpAsymmetryTestErrorMessage()) else if (jaspBase::isTryError(fitTest)) - rankCorrelationTable$addFootnote(fit, symbol = .fpAsymmetryTestErrorMessage()) + rankCorrelationTable$addFootnote(fitTest, symbol = .fpAsymmetryTestErrorMessage()) else fitSummary$k <- fit$k @@ -676,10 +678,10 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { if (jaspBase::isTryError(fits[[i]])) { fitSummary$k <- NA - rankCorrelationTable$addFootnote(fits[[i]], symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) + rankCorrelationTable$addFootnote(.fpMetaforTranslateErrorMessage(fits[[i]]), symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) } else if (jaspBase::isTryError(fitTest)) { fitSummary$k <- fits[[i]]$k - rankCorrelationTable$addFootnote(fit, symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) + rankCorrelationTable$addFootnote(fitTest, symbol = .fpAsymmetryTestErrorMessage(names(fits)[i])) } else { fitSummary$k <- fits[[i]]$k } @@ -696,7 +698,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { return() } -.fpComputeFunnelDf <- function(seSeq, mean, heterogeneity, funnelLevels) { +.fpComputeFunnelDf <- function(seSeq, mean, heterogeneity, funnelLevels) { dfs <- list() for (i in seq_along(funnelLevels)) { tempZ <- qnorm(funnelLevels[i], lower.tail = FALSE) @@ -709,13 +711,19 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { } return(dfs) } -.fpAsymmetryTestErrorMessage <- function(level = NULL) { +.fpAsymmetryTestErrorMessage <- function(level = NULL) { if (is.null(level)) return(gettext("The funnel plot asymmetry test failed with the following error: ")) else return(gettextf("The funnel plot asymmetry test at level %1$s failed with the following error: ", level)) } -.dpExtractAsymmetryTest <- function(fitTest, testType) { +.fpMetaforTranslateErrorMessage <- function(fit) { + if (grepl("did not converge", fit)) + return(gettext("The meta-analytic model did not converge. Try modifying the 'Method' option for the 'Funnel under H\U2081' settings.")) + else + return(fit) +} +.dpExtractAsymmetryTest <- function(fitTest, testType) { if (testType == "metaRegression") { return(data.frame( k = if (jaspBase::isTryError(fitTest)) NA else fitTest$fit$k, # nobs will be fixed in the next release From 18f08ee774f91678006e5d19270225e9551d83b0 Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 23 Oct 2024 16:16:04 +0200 Subject: [PATCH 086/127] meta-analysis fix: method option names transformation --- R/classicalmetaanalysiscommon.R | 3 ++- inst/qml/FunnelPlot.qml | 4 +--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index d59121b2..a715ff0b 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -2529,10 +2529,11 @@ "derSimonianLaird" = "DL", "hedges" = "HE", "hunterSchmidt" = "HS", - "hunterSchmidtSSC" = "HSk", + "hunterSchmidtSsc" = "HSk", "sidikJonkman" = "SJ", "empiricalBayes" = "EB", "pauleMandel" = "PM", + "pauleMandelMu" = "PMM", "qeneralizedQStat" = "GENQ", "qeneralizedQStatMu" = "GENQM", NA diff --git a/inst/qml/FunnelPlot.qml b/inst/qml/FunnelPlot.qml index 9f8a7ed5..b5577cca 100644 --- a/inst/qml/FunnelPlot.qml +++ b/inst/qml/FunnelPlot.qml @@ -167,9 +167,7 @@ Form { label: qsTr("Sidik-Jonkman") , value: "sidikJonkman" }, { label: qsTr("Empirical Bayes") , value: "empiricalBayes" }, { label: qsTr("Paule-Mandel") , value: "pauleMandel" }, - { label: qsTr("Paule-Mandel (MU)") , value: "pauleMandelMu" }, - { label: qsTr("Generalized Q-stat") , value: "qeneralizedQStat" }, - { label: qsTr("Generalized Q-stat (MU)"), value: "qeneralizedQStatMu"} + { label: qsTr("Paule-Mandel (MU)") , value: "pauleMandelMu" } ] } From 49f799a6fcf0680e627f5155075619c1a1891076 Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 24 Oct 2024 13:36:11 +0200 Subject: [PATCH 087/127] fix effect size computation: remove old code --- R/effectsizecomputation.R | 82 +++++++++------------------------------ 1 file changed, 18 insertions(+), 64 deletions(-) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index c73bf01b..9f54f29f 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -1,15 +1,24 @@ - -# TODO: -# - fix crash when second column is exported -# - GUI scaling issues -# - add dropdown to specify which subset is selected (i.e., event indicator in survival) -# - add input checks in GUI / R code +# +# Copyright (C) 2013-2018 University of Amsterdam +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { - # TODO: remove once Bruno fixes flattening and renaming - # options <- .HOTFIX_flatten_options(options) - # dataset <- .escReadDataset(dataset, options) + # all input checking is done within the escalc function + # - error messages are cleaned and forwarded to the user dataOutput <- .escComputeEffectSizes(dataset, options) .escComputeSummaryTable(jaspResults, dataset, options, dataOutput) @@ -18,41 +27,6 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { return() } -.escCheckReady <- function(options, type = "readData") { - - - return(TRUE) -} -.escReadDataset <- function(dataset, options) { - - # if (!is.null(dataset)) { - # return(dataset) - # } else { - - # collect all selected variables - selectedVariables <- lapply(seq_along(options[["variables"]]), function(i) { - - # all possible variables - selectedVariables <- options[["variables"]][[i]] - - # extract variable inputs - # TODO: remove once variable inputs are properly flattened - selectedVariables <- c( - unlist(selectedVariables[.escVariableInputs]), - if(length(selectedVariables[["confidenceInterval"]]) != 0) selectedVariables[["confidenceInterval"]][[1]] - ) - - # remove empty variables - selectedVariables <- selectedVariables[!selectedVariables == ""] - - return(selectedVariables) - }) - selectedVariables <- do.call(c, selectedVariables) - selectedVariables <- unique(selectedVariables) - - return(.readDataSetToEnd(columns.as.numeric = selectedVariables)) - # } -} .escComputeEffectSizes <- function(dataset, options) { # proceed with the escal in order @@ -901,23 +875,3 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { "samplingVarianceTypeMixed", "subset", "subsetLevel" ) - -.HOTFIX_flatten_options <- function(options) { - - for(i in seq_along(options[["variables"]])) { - options[["variables"]][[i]][.escVariableInputs] <- lapply(options[["variables"]][[i]][.escVariableInputs], function(x) x[["value"]]) - - to_decode <- .escVariableInputs[sapply(options[["variables"]][[i]][.escVariableInputs], function(x) x != "")] - if(length(to_decode) != 0) { - for(j in seq_along(to_decode)) { - options[["variables"]][[i]][[to_decode[j]]] <- .encodeColNamesLax(options[["variables"]][[i]][[to_decode[j]]]) - } - } - - if(length(options[["variables"]][[i]][["confidenceInterval"]]) != 0) { - options[["variables"]][[i]][["confidenceInterval"]][[1]] <- .encodeColNamesLax(options[["variables"]][["confidenceInterval"]][[1]]) - } - } - - return(options) -} From d4f23a1b5bbdd0614070f68d7d5c0304d91dde3f Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 24 Oct 2024 23:07:15 +0200 Subject: [PATCH 088/127] fix meta-analysis: permutation test code --- R/classicalmetaanalysis.R | 2 +- R/classicalmetaanalysiscommon.R | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 818e5092..3dea256f 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -46,7 +46,7 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "optimizerConvergenceRelativeTolerance", "optimizerConvergenceRelativeToleranceValue", "optimizerStepAdjustment", "optimizerStepAdjustmentValue", # simple ma specific "heterogeneityModelTerms", "heterogeneityModelIncludeIntercept", "heterogeneityModelLink", - "permutationTest", "permutationTestIteration", "permutationTestType", + "permutationTest", "permutationTestIteration", "permutationTestType", "setSeed", "seed", # multilevel/multivariate specific "randomEffects", "randomEffectsSpecification", "computeCovarianceMatrix", "computeCovarianceMatrix" diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index a715ff0b..efa7dad9 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -2299,6 +2299,22 @@ ) } + # add permutation if specified + if (options[["permutationTest"]]) { + + if (options[["setSeed"]]) + fit <- paste0("set.seed(", options[["seed"]], ")\n\n", fit) + + fit <- paste0( + fit, "\n\n", + "fitPermutation <- permutest(\n", + "\tfit,\n", + "\texact = ", options[["permutationTestType"]] == "exact", ",\n", + "\titer = ", options[["permutationTestIteration"]], "\n", + ")\n" + ) + } + return(fit) } .maComputeVifSummary <- function(fit, options, parameter = "effectSize") { From 58fa84c087e7495f61402d7d688ef0acd6bdfa55 Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 25 Oct 2024 09:06:31 +0200 Subject: [PATCH 089/127] fix effect size computation: fix subsetting --- R/effectsizecomputation.R | 14 ++++++++++---- inst/qml/EffectSizeComputation.qml | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index 9f54f29f..cc7a9124 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -57,7 +57,6 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { } - if (inherits(newDataOutput, "try-error")) { errors[[paste0("i",i)]] <- list( step = i, @@ -122,7 +121,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { computeErrors <- attr(dataOutput, "errors") for (i in seq_along(computeErrors)) { - computeSummary$addFootnote(computeErrors[[i]]$error, symbol = gettextf("Error in step %1$i:", computeErrors[[i]]$step)) + computeSummary$addFootnote(computeErrors[[i]]$error, symbol = gettextf("Error in Step %1$i:", computeErrors[[i]]$step)) } return() @@ -434,8 +433,15 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { inputs <- .escReportedEffectSizesInput(inputs) } - if (variables[["subset"]] != "") - inputs[["subset"]] <- dataset[[variables[["subset"]]]] == variables[["subsetLevel"]] + if (variables[["subset"]] != "") { + # subset should not be added to the dataset - escalc returns only the subset rows + # we need the whole data set to facilitate merging across the steps + # therefore, we set all non-subset columns to NAs + for (i in seq_along(inputs)) { + if (length(inputs[[i]]) != 0) + inputs[[i]][dataset[[variables[["subset"]]]] != variables[["subsetLevel"]]] <- NA + } + } inputs <- inputs[!sapply(inputs, is.null)] diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index 76bc6ee5..0ab5904b 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -286,7 +286,7 @@ Form property var measurementLabel: effectSizeType.rowAt(rowIndex).measurementLabel property var effectSizeLabel: effectSizeType.rowAt(rowIndex).effectSizeLabel property var stepCounterValue: effectSizeType.rowAt(rowIndex).stepCounterValue - + VariablesForm { // TODO: dynamically set proper height @@ -859,7 +859,7 @@ Form { name: "subsetLevel" label: qsTr("Subset Level") - source: [{name: "subset", use: "levels"}] + values: subset.levels } } From a7b6e26f3b7642cbe8175a5791e4e6336b7bad58 Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 25 Oct 2024 09:28:21 +0200 Subject: [PATCH 090/127] fix meta-analysis: permutation dispatching code --- R/classicalmetaanalysiscommon.R | 16 ++++++++-------- inst/qml/ClassicalMetaAnalysis.qml | 6 +++++- .../ClassicalMetaAnalysisAdvanced.qml | 4 ++++ 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index efa7dad9..994b2da3 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -231,7 +231,7 @@ # add permutation test if requested (only available for non-clustered fits) - if (options[["permutationTest"]]) { + if (.maIsPermutation(options)) { .setSeedJASP(options) fitPermutation <- try(metafor::permutest( fit, @@ -1629,7 +1629,7 @@ row$df2 <- fit[["QSdf"]][2] } - if (options[["permutationTest"]]) { + if (.maIsPermutation(options)) { if (parameter == "effectSize") row$pval2 <- attr(fit[["QMp"]], "permutation") else if (parameter == "heterogeneity") @@ -2280,7 +2280,7 @@ rmaInput$level <- 100 * options[["confidenceIntervalsLevel"]] ### fit the model - fit <- paste0("fit <- rma(\n\t", paste(names(rmaInput), "=", rmaInput, collapse = ",\n\t"), "\n)") + fit <- paste0("fit <- rma(\n\t", paste(names(rmaInput), "=", rmaInput, collapse = ",\n\t"), "\n)\n") # add clustering if specified if (options[["clustering"]] != "") { @@ -2292,21 +2292,21 @@ ) fit <- paste0( - fit, "\n\n", + fit, "\n", "fit <- robust(\n", "\tfit,\n\t", - paste(names(robustInput), "=", robustInput, collapse = ",\n\t"), "\n)" + paste(names(robustInput), "=", robustInput, collapse = ",\n\t"), "\n)\n" ) } # add permutation if specified - if (options[["permutationTest"]]) { + if (.maIsPermutation(options)) { if (options[["setSeed"]]) - fit <- paste0("set.seed(", options[["seed"]], ")\n\n", fit) + fit <- paste0(fit, "\nset.seed(", options[["seed"]], ")\n") fit <- paste0( - fit, "\n\n", + fit, "\n", "fitPermutation <- permutest(\n", "\tfit,\n", "\texact = ", options[["permutationTestType"]] == "exact", ",\n", diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 77930d35..62e9c1e2 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -106,6 +106,7 @@ Form id: clustering title: qsTr("Clustering") singleVariable: true + enabled: !sectionAdvanced.permutationTestChecked allowedColumns: ["nominal"] } @@ -133,5 +134,8 @@ Form MA.ClassicalMetaAnalysisDiagnostics {} - MA.ClassicalMetaAnalysisAdvanced {} + MA.ClassicalMetaAnalysisAdvanced + { + id: sectionAdvanced + } } diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml index 90ae7e9c..ee1ccb7d 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml @@ -27,6 +27,9 @@ Section property string module: "metaAnalysis" columns: 1 + + property alias permutationTestChecked: permutationTest.checked + Group { columns: 2 @@ -340,6 +343,7 @@ Section { text: qsTr("Permutation test") name: "permutationTest" + id: permutationTest visible: module == "metaAnalysis" enabled: clustering.count == 0 From 96478a3c2d04637135dcad7077e25d72268c98d4 Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 25 Oct 2024 11:48:08 +0200 Subject: [PATCH 091/127] fix meta-analysis: forest plot variable types bugs & clustered heterogeneity --- R/classicalmetaanalysiscommon.R | 6 ++++++ R/forestplot.R | 10 ++++++++-- .../qml_components/ClassicalMetaAnalysisForestPlot.qml | 4 ++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 994b2da3..07136354 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -1567,6 +1567,12 @@ } .maComputePooledHeterogeneityPlot <- function(fit, options) { + # don't use the confint on robust.rma objects (they are not implemented) + # the clustering works only on the fixed effect estimates + # -> we can drop the class and compute confint and get the heterogeneity from the original fit + if (inherits(fit, "robust.rma")) + class(fit) <- class(fit)[!class(fit) %in% "robust.rma"] + if (options[["fixParametersTau2"]]) { confIntHeterogeneity <- list( diff --git a/R/forestplot.R b/R/forestplot.R index d282c3a1..d8b05733 100644 --- a/R/forestplot.R +++ b/R/forestplot.R @@ -46,12 +46,18 @@ # add variables used for either color, shape, order or Left panel information additionalVariables <- c( if (length(options[["forestPlotStudyInformationSelectedVariables"]]) > 0) unlist(options[["forestPlotStudyInformationSelectedVariables"]]), - if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], - if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]] + if (options[["forestPlotStudyInformationOrderBy"]] != "") options[["forestPlotStudyInformationOrderBy"]], + if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], + if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]] ) if (length(additionalVariables) > 0) dfForrest <- cbind(dfForrest, dataset[,additionalVariables,drop=FALSE]) + # TODO: temporal fix for the variable names in the Component list not being properly translated + for (i in seq_along(options[["forestPlotStudyInformationSelectedVariables"]])) { + options[["forestPlotStudyInformationSelectedVariablesSettings"]][[i]][["value"]] <- options[["forestPlotStudyInformationSelectedVariables"]][[i]] + } + # combine left panel information leftPanelStudyInformation <- do.call(rbind.data.frame, options[["forestPlotStudyInformationSelectedVariablesSettings"]]) diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml b/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml index 552c5211..59931f13 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml @@ -350,8 +350,10 @@ Section DropDown { name: "forestPlotMappingColor" + id: forestPlotMappingColor label: qsTr("Color") addEmptyValue: true + allowedColumns: ["nominal"] } DropDown @@ -359,6 +361,7 @@ Section name: "forestPlotMappingShape" label: qsTr("Shape") addEmptyValue: true + allowedColumns: ["nominal"] } } @@ -465,6 +468,7 @@ Section DropDown { name: "forestPlotAuxiliaryPlotColor" + enabled: forestPlotMappingColor.value == "" label: qsTr("Color") values: [ { label: qsTr("Black") , value: "black"}, From a1f3e38eca3b62eddd2d309aa52829f756f1805a Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 25 Oct 2024 11:55:09 +0200 Subject: [PATCH 092/127] fix meta-analysis: data loading & checking --- R/classicalmetaanalysis.R | 54 +++++++++++---------------------------- 1 file changed, 15 insertions(+), 39 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 3dea256f..d6d2afd2 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -21,7 +21,7 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { options[["module"]] <- "metaAnalysis" if (.maReady(options)) { - dataset <- .maReadData(dataset, options) + dataset <- .maCheckData(dataset, options) .maCheckErrors(dataset, options) } @@ -129,44 +129,12 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { return(inputReady && termsEffectSizeReady && termsHeterogeneityReady) } -.maReadData <- function(dataset, options) { - -# if (!is.null(dataset)) -# return(dataset) +.maCheckData <- function(dataset, options) { # model data predictorsNominal <- options[["predictors"]][options[["predictors.types"]] == "nominal"] predictorsScale <- options[["predictors"]][options[["predictors.types"]] == "scale"] - # forest plotting data - additionalVariables <- unique(c( - if (options[["studyLabels"]] != "") options[["studyLabels"]], - if (length(options[["forestPlotStudyInformationSelectedVariables"]]) > 0) unlist(options[["forestPlotStudyInformationSelectedVariables"]]), - if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], - if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]], - if (options[["forestPlotStudyInformationOrderBy"]] != "") options[["forestPlotStudyInformationOrderBy"]] - )) - # remove variables already specified in the model - additionalVariables <- setdiff( - additionalVariables, - c(predictorsNominal, predictorsScale, options[["effectSize"]], options[["effectSizeStandardError"]], options[["clustering"]]) - ) - - - # load data - dataset <- .readDataSetToEnd( - columns.as.factor = c( - if (length(predictorsNominal) > 0) predictorsNominal, - if (options[["clustering"]] != "") options[["clustering"]], - additionalVariables - ), - columns.as.numeric = c( - options[["effectSize"]], - options[["effectSizeStandardError"]], - if (length(predictorsScale) > 0) predictorsScale, - if (options[["fixParametersWeights"]]) options[["fixParametersWeightsVariable"]] - )) - # omit NAs omitOnVariables <- c( options[["effectSize"]], @@ -194,11 +162,19 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { observations.amount = "< 2", exitAnalysisIfErrors = TRUE) - .hasErrors( - dataset = dataset, - type = c("modelInteractions"), - modelInteractions.modelTerms = c(options[["effectSizeModelTerms"]], options[["heterogeneityModelTerms"]]), - exitAnalysisIfErrors = TRUE) + if (length(options[["effectSizeModelTerms"]]) > 0) + .hasErrors( + dataset = dataset, + type = c("modelInteractions"), + modelInteractions.modelTerms = options[["effectSizeModelTerms"]], + exitAnalysisIfErrors = TRUE) + + if (length(options[["heterogeneityModelTerms"]]) > 0) + .hasErrors( + dataset = dataset, + type = c("modelInteractions"), + modelInteractions.modelTerms = options[["heterogeneityModelTerms"]], + exitAnalysisIfErrors = TRUE) .hasErrors( dataset = dataset, From cf58898d56cfb11f6600948d6e140788b3652020 Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 25 Oct 2024 14:21:14 +0200 Subject: [PATCH 093/127] fix meta-analysis: handling diagnostics for clustered/location-scale models --- R/classicalmetaanalysiscommon.R | 88 ++++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 24 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 07136354..68d610d0 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -426,7 +426,7 @@ fit <- .maExtractFit(jaspResults, options) # pooled estimates - pooledEstimatesTable <- createJaspTable(gettext("Pooled Estimates")) + pooledEstimatesTable <- createJaspTable(gettext("Meta-Analytic Estimates")) pooledEstimatesTable$position <- 4 pooledEstimatesTable$dependOn(c("heterogeneityTau", "heterogeneityTau2", "heterogeneityI2", "heterogeneityH2", "confidenceIntervals", "confidenceIntervalsLevel", "predictionIntervals", "transformEffectSize")) @@ -1003,7 +1003,21 @@ if (!is.null(jaspResults[["casewiseDiagnosticsTable"]])) return() - fit <- .maExtractFit(jaspResults, options) + # diagnostics are unavaible for location-scale models + if (.maIsMetaregressionHeterogeneity(options)) { + # fit measures table + casewiseDiagnosticsTable <- createJaspTable(gettext("Casewise Diagnostics Table")) + casewiseDiagnosticsTable$position <- 7 + casewiseDiagnosticsTable$dependOn(c(.maDependencies, "diagnosticsCasewiseDiagnostics", "diagnosticsCasewiseDiagnosticsShowInfluentialOnly", + "diagnosticsCasewiseDiagnosticsIncludePredictors", "diagnosticsCasewiseDiagnosticsDifferenceInCoefficients", + "studyLabels")) + casewiseDiagnosticsTable$setError(gettext("Casewise diagnostics are not available for models that contain meta-regression on heterogeneity.")) + jaspResults[["casewiseDiagnosticsTable"]] <- casewiseDiagnosticsTable + return() + } + + # the fit diagnostics work only for the non-clustered fit + fit <- .maExtractFit(jaspResults, options, nonClustered = TRUE) # stop on error if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) @@ -1024,12 +1038,22 @@ diagnosticsResults$dependOn(.maDependencies) jaspResults[["diagnosticsResults"]] <- diagnosticsResults - # compute the results - influenceResults <- influence(fit) - influenceResultsDfbs <- data.frame(influenceResults$dfbs) - influenceResultsInf <- data.frame(influenceResults$inf) - influenceResultsInf$tau.del <- sqrt(influenceResultsInf$tau2.del) - influenceResultsInf$inf[influenceResultsInf$inf == "*"] <- "Yes" + if (.maIsMultilevelMultivariate(options)) { + # only a subset of diagnostics is available for rma.mv + influenceResultsDfbs <- data.frame(dfbetas(fit)) + influenceResultsInf <- data.frame( + rstudent = rstudent(fit)[["resid"]], + cook.d = cooks.distance(fit), + hat = hatvalues(fit) + ) + } else { + # the complete suite of influence diagnostics is only available for rma.uni + influenceResults <- influence(fit) + influenceResultsDfbs <- data.frame(influenceResults$dfbs) + influenceResultsInf <- data.frame(influenceResults$inf) + influenceResultsInf$tau.del <- sqrt(influenceResultsInf$tau2.del) + influenceResultsInf$inf[influenceResultsInf$inf == "*"] <- "Yes" + } # store the results jaspResults[["diagnosticsResults"]]$object <- list( @@ -1068,14 +1092,18 @@ } casewiseDiagnosticsTable$addColumnInfo(name = "rstudent", title = gettext("Standardized Residual"), type = "number") - casewiseDiagnosticsTable$addColumnInfo(name = "dffits", title = gettext("DFFITS"), type = "number") + if (!.maIsMultilevelMultivariate(options)) + casewiseDiagnosticsTable$addColumnInfo(name = "dffits", title = gettext("DFFITS"), type = "number") casewiseDiagnosticsTable$addColumnInfo(name = "cook.d", title = gettext("Cook's Distance"), type = "number") - casewiseDiagnosticsTable$addColumnInfo(name = "cov.r", title = gettext("Covariance ratio"), type = "number") - casewiseDiagnosticsTable$addColumnInfo(name = "tau.del", title = gettext("\U1D70F"), type = "number", overtitle = gettext("Leave One Out")) - casewiseDiagnosticsTable$addColumnInfo(name = "tau2.del", title = gettext("\U1D70F\U00B2"), type = "number", overtitle = gettext("Leave One Out")) - casewiseDiagnosticsTable$addColumnInfo(name = "QE.del", title = gettext("Q\U2091"), type = "number", overtitle = gettext("Leave One Out")) + if (!.maIsMultilevelMultivariate(options)) { + casewiseDiagnosticsTable$addColumnInfo(name = "cov.r", title = gettext("Covariance ratio"), type = "number") + casewiseDiagnosticsTable$addColumnInfo(name = "tau.del", title = gettext("\U1D70F"), type = "number", overtitle = gettext("Leave One Out")) + casewiseDiagnosticsTable$addColumnInfo(name = "tau2.del",title = gettext("\U1D70F\U00B2"), type = "number", overtitle = gettext("Leave One Out")) + casewiseDiagnosticsTable$addColumnInfo(name = "QE.del", title = gettext("Q\U2091"), type = "number", overtitle = gettext("Leave One Out")) + } casewiseDiagnosticsTable$addColumnInfo(name = "hat", title = gettext("Hat"), type = "number") - casewiseDiagnosticsTable$addColumnInfo(name = "weight", title = gettext("Weight"), type = "number") + if (!.maIsMultilevelMultivariate(options)) + casewiseDiagnosticsTable$addColumnInfo(name = "weight", title = gettext("Weight"), type = "number") if (options[["diagnosticsCasewiseDiagnosticsDifferenceInCoefficients"]]) { for (par in colnames(influenceResultsDfbs)) { @@ -1091,6 +1119,9 @@ casewiseDiagnosticsTable$setData(influenceResultsInf) + if (.maIsClustered(options)) + casewiseDiagnosticsTable$addFootnote(gettext("Diagnostics are based on the non-clustered model.")) + return() } .maCasewiseDiagnosticsExportColumns <- function(jaspResults, dataset, options) { @@ -1098,6 +1129,9 @@ if (!options[["diagnosticsCasewiseDiagnosticsExportToDataset"]]) return() + if (.maIsMetaregressionHeterogeneity(options)) + return() + # extract diagnostics already computed in '.maCasewiseDiagnosticsTable' diagnosticsResults <- jaspResults[["diagnosticsResults"]]$object @@ -1232,6 +1266,15 @@ baujatPlot$position <- 9 jaspResults[["baujatPlot"]] <- baujatPlot + if (.maIsMetaregressionHeterogeneity(options)) { + baujatPlot$setError(gettext("Baujat plot is not available for models that contain meta-regression on heterogeneity.")) + return() + } + if (.maIsClustered(options)) { + baujatPlot$setError(gettext("Baujat plot is not available for models with clustering.")) + return() + } + # extract precomputed baujat data if done before: if (!is.null(jaspResults[["baujatResults"]])) { @@ -1251,14 +1294,8 @@ jaspResults[["baujatResults"]]$object <- dfBaujat } - - # if (.maIsMetaregressionHeterogeneity(options)) { - # baujatPlot$setError(gettext("Baujat plot is not available for models that contain meta-regression on heterogeneity.")) - # return() - # } - if (jaspBase::isTryError(dfBaujat)) { - dfBaujat$setError(dfBaujat) + baujatPlot$setError(dfBaujat) return() } @@ -1332,14 +1369,14 @@ if (!is.null(jaspResults[["fitNoInfluence"]]$object)) { # extract clustered model if specified - if (options[["clustering"]] == "" || nonClustered) { + if (!.maIsClustered(options) || nonClustered) { return(jaspResults[["fitNoInfluence"]]$object[["fit"]]) } else { return(jaspResults[["fitNoInfluence"]]$object[["fitClustered"]]) } } else { # extract clustered model if specified - if (options[["clustering"]] == "" || nonClustered) { + if (!.maIsClustered(options) || nonClustered) { return(jaspResults[["fit"]]$object[["fit"]]) } else { return(jaspResults[["fit"]]$object[["fitClustered"]]) @@ -2521,6 +2558,9 @@ .maIsMetaregressionHeterogeneity <- function(options) { return(length(options[["heterogeneityModelTerms"]]) > 0) } +.maIsClustered <- function(options) { + return(options[["clustering"]] != "") +} .maIsMetaregressionFtest <- function(options) { return(options[["fixedEffectTest"]] %in% c("knha", "t")) } @@ -2528,7 +2568,7 @@ return(options[["module"]] == "metaAnalysisMultilevelMultivariate") } .maIsPermutation <- function(options) { - return(options[["clustering"]] == "" && options[["permutationTest"]]) + return(!.maIsClustered(options) && options[["permutationTest"]]) } .maCheckIsPossibleOptions <- function(options) { From d39b31f80651a290a236e5d5cfb23a9393128fe5 Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 25 Oct 2024 15:21:28 +0200 Subject: [PATCH 094/127] ooops: remove saveRDS --- ...ssicalmetaanalysismultilevelmultivariate.R | 131 +++++++----------- R/funnelplot.R | 2 - 2 files changed, 47 insertions(+), 86 deletions(-) diff --git a/R/classicalmetaanalysismultilevelmultivariate.R b/R/classicalmetaanalysismultilevelmultivariate.R index 5484e9c8..38e9bc06 100644 --- a/R/classicalmetaanalysismultilevelmultivariate.R +++ b/R/classicalmetaanalysismultilevelmultivariate.R @@ -21,7 +21,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N options[["module"]] <- "metaAnalysisMultilevelMultivariate" if (.maReady(options)) { - dataset <- .mammReadData(dataset, options) + dataset <- .mammCheckData(dataset, options) .mammCheckErrors(dataset, options) } @@ -30,63 +30,26 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N return() } -.mammReadData <- function(dataset, options) { - -# if (!is.null(dataset)) -# return(dataset) +.mammCheckData <- function(dataset, options) { # model data predictorsNominal <- options[["predictors"]][options[["predictors.types"]] == "nominal"] predictorsScale <- options[["predictors"]][options[["predictors.types"]] == "scale"] - ### main model variables - asFactors <- c( - if (length(predictorsNominal) > 0) predictorsNominal, - if (options[["clustering"]] != "") options[["clustering"]] - ) - asNumeric <- c( - options[["effectSize"]], - options[["effectSizeStandardError"]], - if (length(predictorsScale) > 0) predictorsScale, - if (options[["fixParametersWeights"]]) options[["fixParametersWeightsVariable"]] - ) - - ### add random effects variables + # random effects variables randomVariables <- .mammExtractRandomVariableNames(options) - # check variable types cross-loading - if (length(randomVariables$nominal) > 0 && any(randomVariables$nominal %in% c(randomVariables$scale, randomVariables$ordinal, asNumeric))) - .quitAnalysis(gettextf("The following variable was specified both as nominal and scale: %1$s", randomVariables$nominal[randomVariables$nominal %in% c(randomVariables$scale, randomVariables$ordinal, asNumeric)])) - if (length(randomVariables$scale) > 0 && any(randomVariables$scale %in% c(randomVariables$nominal, asFactors))) - .quitAnalysis(gettextf("The following variable was specified both as scale and nominal: %1$s", randomVariables$nominal[randomVariables$scale %in% c(randomVariables$nominal, asFactors)])) - - asNumeric <- c(asNumeric, randomVariables$scale, randomVariables$ordinal) - asFactors <- c(asFactors, randomVariables$nominal) - - # forest plotting data - additionalVariables <- unique(c( - if (options[["studyLabels"]] != "") options[["studyLabels"]], - if (length(options[["forestPlotStudyInformationSelectedVariables"]]) > 0) unlist(options[["forestPlotStudyInformationSelectedVariables"]]), - if (options[["forestPlotMappingColor"]] != "") options[["forestPlotMappingColor"]], - if (options[["forestPlotMappingShape"]] != "") options[["forestPlotMappingShape"]], - if (options[["forestPlotStudyInformationOrderBy"]] != "") options[["forestPlotStudyInformationOrderBy"]] - )) - # remove variables already specified in the model - additionalVariables <- setdiff( - additionalVariables, - c(asNumeric, asFactors) - ) - - - # load data - dataset <- .readDataSetToEnd( - columns.as.factor = c(asFactors, additionalVariables), - columns.as.numeric = asNumeric) - # omit NAs - omitOnVariables <- c(asNumeric, asFactors) - anyNaByRows <- apply(dataset[,omitOnVariables], 1, function(x) anyNA(x)) - dataset <- dataset[!anyNaByRows,] + omitOnVariables <- c( + options[["effectSize"]], + options[["effectSizeStandardError"]], + unlist(randomVariables), + if (options[["clustering"]] != "") options[["clustering"]], + if (length(predictorsNominal) > 0) predictorsNominal, + if (length(predictorsScale) > 0) predictorsScale + ) + anyNaByRows <- apply(dataset[,omitOnVariables], 1, function(x) anyNA(x)) + dataset <- dataset[!anyNaByRows,] attr(dataset, "NAs") <- sum(anyNaByRows) # add se^2 for V^2 input @@ -113,7 +76,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N .hasErrors( dataset = dataset, type = c("modelInteractions"), - modelInteractions.modelTerms = c(options[["effectSizeModelTerms"]], options[["heterogeneityModelTerms"]]), + modelInteractions.modelTerms = options[["effectSizeModelTerms"]], exitAnalysisIfErrors = TRUE) .hasErrors( @@ -135,19 +98,20 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N if (tempType == "simple") { - tempValue <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]] + tempValue <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]] if (tempValue != "") { - randomFormulas[[i]] <- as.formula(paste0("~ 1 | ", .encodeColNamesLax(tempValue)), env = parent.frame(1)) + randomFormulas[[i]] <- as.formula(paste0("~ 1 | ", tempValue), env = parent.frame(1)) } } else if (tempType == "nested") { tempValues <- c( - options[["randomEffectsSpecification"]][[i]][["level1"]][["value"]], - options[["randomEffectsSpecification"]][[i]][["level2"]][["value"]], - options[["randomEffectsSpecification"]][[i]][["level3"]][["value"]], - options[["randomEffectsSpecification"]][[i]][["level4"]][["value"]] + options[["randomEffectsSpecification"]][[i]][["level1"]], + options[["randomEffectsSpecification"]][[i]][["level2"]], + options[["randomEffectsSpecification"]][[i]][["level3"]], + options[["randomEffectsSpecification"]][[i]][["level4"]], + options[["randomEffectsSpecification"]][[i]][["level5"]] ) tempValues <- tempValues[tempValues != ""] @@ -157,8 +121,8 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N } else if (tempType == "randomSlopes") { - tempValuesSlopes <- unlist(options[["randomEffectsSpecification"]][[i]][["randomSlopeTerms"]][["value"]]) - tempValueGrouping <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]] + tempValuesSlopes <- unlist(options[["randomEffectsSpecification"]][[i]][["randomSlopeTerms"]]) + tempValueGrouping <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]] if (length(tempValuesSlopes) > 0 && tempValueGrouping != "") { randomFormulas[[i]] <- as.formula(paste0("~ ", paste(sapply(tempValuesSlopes, .encodeColNamesLax), collapse = "+")," | ", .encodeColNamesLax(tempValueGrouping)), env = parent.frame(1)) @@ -169,10 +133,10 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N tempValueInner <- switch( tempType, - "structured" = options[["randomEffectsSpecification"]][[i]][["factorLevels"]][["value"]], - "autoregressive" = options[["randomEffectsSpecification"]][[i]][["time"]][["value"]] + "structured" = options[["randomEffectsSpecification"]][[i]][["factorLevels"]], + "autoregressive" = options[["randomEffectsSpecification"]][[i]][["time"]] ) - tempValueOuter <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]] + tempValueOuter <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]] if (tempValueInner != "" && tempValueOuter != "") { randomFormulas[[i]] <- as.formula(paste0("~ ", .encodeColNamesLax(tempValueInner), " | ", .encodeColNamesLax(tempValueOuter)), env = parent.frame(1)) @@ -182,9 +146,9 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N } else if (tempType == "spatial") { tempValueInner <- paste0("computedSpatialDistance", i) - tempValueOuter <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]] + tempValueOuter <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]] - if (!is.null(unlist(options[["randomEffectsSpecification"]][[i]][["spatialCoordinates"]][["value"]])) && tempValueOuter != "") { + if (!is.null(unlist(options[["randomEffectsSpecification"]][[i]][["spatialCoordinates"]])) && tempValueOuter != "") { randomFormulas[[i]] <- as.formula(paste0("~ ", .encodeColNamesLax(tempValueInner), " | ", .encodeColNamesLax(tempValueOuter)), env = parent.frame(1)) attr(randomFormulas[[i]], "structure") <- .mammGetStructureOptions(options[["randomEffects"]][[i]][["structure"]]) } @@ -226,48 +190,49 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N if (tempType == "simple") { - variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]]) + variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]]) } else if (tempType == "nested") { variablesNominal <- c( variablesNominal, - options[["randomEffectsSpecification"]][[i]][["level1"]][["value"]], - options[["randomEffectsSpecification"]][[i]][["level2"]][["value"]], - options[["randomEffectsSpecification"]][[i]][["level3"]][["value"]], - options[["randomEffectsSpecification"]][[i]][["level4"]][["value"]] + options[["randomEffectsSpecification"]][[i]][["level1"]], + options[["randomEffectsSpecification"]][[i]][["level2"]], + options[["randomEffectsSpecification"]][[i]][["level3"]], + options[["randomEffectsSpecification"]][[i]][["level4"]], + options[["randomEffectsSpecification"]][[i]][["level5"]] ) } else if (tempType == "randomSlopes") { - tempValuesSlopes <- unlist(options[["randomEffectsSpecification"]][[i]][["randomSlopeTerms"]][["value"]]) - tempValuesSlopesTypes <- options[["randomEffectsSpecification"]][[i]][["randomSlopeTerms"]][["types"]] + tempValuesSlopes <- unlist(options[["randomEffectsSpecification"]][[i]][["randomSlopeTerms"]]) + tempValuesSlopesTypes <- options[["randomEffectsSpecification"]][[i]][["randomSlopeTerms.types"]] variablesNominal <- c(variablesNominal, tempValuesSlopes[tempValuesSlopesTypes == "nominal"]) variablesScale <- c(variablesScale, tempValuesSlopes[tempValuesSlopesTypes == "scale"]) - variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]]) + variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]]) } else if (tempType == "structured") { variablesNominal <- c( variablesNominal, - options[["randomEffectsSpecification"]][[i]][["factorLevels"]][["value"]], - options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]] + options[["randomEffectsSpecification"]][[i]][["factorLevels"]], + options[["randomEffectsSpecification"]][[i]][["groupingFactor"]] ) }else if (tempType == "autoregressive") { if (options[["randomEffects"]][[i]][["structure"]] == "continuousTimeAr") { - variablesScale <- c(variablesScale, options[["randomEffectsSpecification"]][[i]][["time"]][["value"]]) + variablesScale <- c(variablesScale, options[["randomEffectsSpecification"]][[i]][["time"]]) } else { - variablesOrdinal <- c(variablesOrdinal, options[["randomEffectsSpecification"]][[i]][["time"]][["value"]]) + variablesOrdinal <- c(variablesOrdinal, options[["randomEffectsSpecification"]][[i]][["time"]]) } - variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]]) + variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]]) } else if (tempType == "spatial") { - variablesScale <- c(variablesScale, unlist(options[["randomEffectsSpecification"]][[i]][["spatialCoordinates"]][["value"]])) - variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]][["value"]]) + variablesScale <- c(variablesScale, unlist(options[["randomEffectsSpecification"]][[i]][["spatialCoordinates"]])) + variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]]) } else if (tempType == "knownCorrelation") { @@ -284,12 +249,10 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N variablesNominal <- variablesNominal[variablesNominal != ""] variablesOrdinal <- variablesOrdinal[variablesOrdinal != ""] - - # TODO: remove variable translation hotfix return(list( - scale = if (length(variablesScale) != 0) sapply(variablesScale, .encodeColNamesLax), - nominal = if (length(variablesNominal) != 0) sapply(variablesNominal, .encodeColNamesLax), - ordinal = if (length(variablesOrdinal) != 0) sapply(variablesOrdinal, .encodeColNamesLax) + scale = if (length(variablesScale) != 0) variablesScale, + nominal = if (length(variablesNominal) != 0) variablesNominal, + ordinal = if (length(variablesOrdinal) != 0) variablesOrdinal )) } .mammRandomEstimatesTable <- function(jaspResults, dataset, options) { diff --git a/R/funnelplot.R b/R/funnelplot.R index 008d51c4..cbf8c510 100644 --- a/R/funnelplot.R +++ b/R/funnelplot.R @@ -21,8 +21,6 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { dataset <- .fpCheckDataset(jaspResults, dataset, options) .fpH1Fits(jaspResults, dataset, options) } - saveRDS(options, file = "C:/JASP/options.RDS") - saveRDS(dataset, file = "C:/JASP/dataset.RDS") # make the funnel plots .fpPlot(jaspResults, dataset, options) From 07284dc957465ae123990e6cf39da2b1c72d0b65 Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 25 Oct 2024 17:06:41 +0200 Subject: [PATCH 095/127] fix multivariate meta-analysis: diagnostics and options parsing --- R/classicalmetaanalysiscommon.R | 6 ++- ...ssicalmetaanalysismultilevelmultivariate.R | 8 ++-- ...icalMetaAnalysisMultilevelMultivariate.qml | 47 ++++++++++++++----- .../ClassicalMetaAnalysisDiagnostics.qml | 1 + 4 files changed, 43 insertions(+), 19 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 68d610d0..8a4c0354 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -173,6 +173,7 @@ # add random effects if (.maIsMultilevelMultivariate(options)) { randomFormulaList <- .mammGetRandomFormulaList(options) + randomFormulaList <- unname(randomFormulaList) # remove names for some metafor post-processing functions if (length(randomFormulaList) != 0) { rmaInput$random <- randomFormulaList rmaInput$struct <- do.call(c, lapply(randomFormulaList, attr, which = "structure")) @@ -1112,7 +1113,8 @@ influenceResultsInf <- cbind(influenceResultsInf, influenceResultsDfbs) } - casewiseDiagnosticsTable$addColumnInfo(name = "inf", title = gettext("Influential"), type = "string") + if (!.maIsMultilevelMultivariate(options)) + casewiseDiagnosticsTable$addColumnInfo(name = "inf", title = gettext("Influential"), type = "string") if (options[["diagnosticsCasewiseDiagnosticsShowInfluentialOnly"]]) influenceResultsInf <- influenceResultsInf[influenceResultsInf$inf == "Yes",,drop=FALSE] @@ -3091,7 +3093,7 @@ messages <- c(messages, gettextf("%1$i influential observations were detected and removed.", attr(dataset, "influentialObservations"))) if (.maIsMultilevelMultivariate(options) && any(attr(fit, "skipped"))) - messages <- c(messages, gettextf("The random component %1$s was not completely specified and was skipped.", paste0(which(attr(fit, "skipped")), collapse = " and "))) + messages <- c(messages, gettextf("The Model Structure %1$s was not completely specified and was skipped.", paste0(which(attr(fit, "skipped")), collapse = " and "))) return(messages) } diff --git a/R/classicalmetaanalysismultilevelmultivariate.R b/R/classicalmetaanalysismultilevelmultivariate.R index 38e9bc06..046e5a9a 100644 --- a/R/classicalmetaanalysismultilevelmultivariate.R +++ b/R/classicalmetaanalysismultilevelmultivariate.R @@ -116,7 +116,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N tempValues <- tempValues[tempValues != ""] if (length(tempValues) > 0) { - randomFormulas[[i]] <- as.formula(paste0("~ 1 | ", paste(sapply(tempValues, .encodeColNamesLax), collapse = "/")), env = parent.frame(1)) + randomFormulas[[i]] <- as.formula(paste0("~ 1 | ", paste(tempValues, collapse = "/")), env = parent.frame(1)) } } else if (tempType == "randomSlopes") { @@ -125,7 +125,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N tempValueGrouping <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]] if (length(tempValuesSlopes) > 0 && tempValueGrouping != "") { - randomFormulas[[i]] <- as.formula(paste0("~ ", paste(sapply(tempValuesSlopes, .encodeColNamesLax), collapse = "+")," | ", .encodeColNamesLax(tempValueGrouping)), env = parent.frame(1)) + randomFormulas[[i]] <- as.formula(paste0("~ ", paste(tempValuesSlopes, collapse = "+")," | ", tempValueGrouping), env = parent.frame(1)) attr(randomFormulas[[i]], "structure") <- "GEN" } @@ -139,7 +139,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N tempValueOuter <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]] if (tempValueInner != "" && tempValueOuter != "") { - randomFormulas[[i]] <- as.formula(paste0("~ ", .encodeColNamesLax(tempValueInner), " | ", .encodeColNamesLax(tempValueOuter)), env = parent.frame(1)) + randomFormulas[[i]] <- as.formula(paste0("~ ", tempValueInner, " | ", tempValueOuter), env = parent.frame(1)) attr(randomFormulas[[i]], "structure") <- .mammGetStructureOptions(options[["randomEffects"]][[i]][["structure"]]) } @@ -149,7 +149,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N tempValueOuter <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]] if (!is.null(unlist(options[["randomEffectsSpecification"]][[i]][["spatialCoordinates"]])) && tempValueOuter != "") { - randomFormulas[[i]] <- as.formula(paste0("~ ", .encodeColNamesLax(tempValueInner), " | ", .encodeColNamesLax(tempValueOuter)), env = parent.frame(1)) + randomFormulas[[i]] <- as.formula(paste0("~ ", tempValueInner, " | ", tempValueOuter), env = parent.frame(1)) attr(randomFormulas[[i]], "structure") <- .mammGetStructureOptions(options[["randomEffects"]][[i]][["structure"]]) } diff --git a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml index e3669b7b..85b42bf1 100644 --- a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml +++ b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml @@ -115,7 +115,16 @@ Form property string typeValue: type.value property string structureValue: structure.value property string spatialInputTypeValue: spatialInputType.value + property string typeLabel: type.currentLabel + property string structureLabel: structure.currentLabel + property string structureCounterValue: structureCounter.text + Text + { + text: qsTr("Structure %1").arg((rowIndex + 1)) + id: structureCounter + } + DropDown { id: type @@ -193,7 +202,7 @@ Form name: "randomEffectsSpecification" source: "randomEffects" title: qsTr("Specification") - visible: true // TODO: randomEffects.size > 0 + visible: true rowSpacing: 20 rowComponent: ColumnLayout @@ -201,26 +210,29 @@ Form property var typeValue: randomEffects.rowAt(rowIndex).typeValue property var structureValue: randomEffects.rowAt(rowIndex).structureValue property var spatialInputTypeValue: randomEffects.rowAt(rowIndex).spatialInputTypeValue + property var typeLabel: randomEffects.rowAt(rowIndex).typeLabel + property var structureLabel: randomEffects.rowAt(rowIndex).structureLabel + property var structureCounterValue: randomEffects.rowAt(rowIndex).structureCounterValue VariablesForm { removeInvisibles: true - preferredHeight: (typeValue == "randomSlopes" || typeValue == "spatial") ? 250 * preferencesModel.uiScale : 200 * preferencesModel.uiScale + preferredHeight: (typeValue == "nested" || typeValue == "randomSlopes" || typeValue == "spatial") ? 250 * preferencesModel.uiScale : 200 * preferencesModel.uiScale visible: typeValue == "simple" || typeValue == "nested" || typeValue == "randomSlopes" || typeValue == "structured" || typeValue == "autoregressive" || (typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables") || typeValue == "knownCorrelation" AvailableVariablesList { name: "allVars" - title: typeValue + ": " + structureValue + title: structureCounterValue + ": " + typeLabel } - + AssignedVariablesList { name: "randomSlopeTerms" title: qsTr("Random Slope Terms") visible: typeValue == "randomSlopes" listViewType: JASP.Interaction - suggestedColumns: ["nominal", "scale"] // this should be choose on assignment + allowedColumns: ["nominal", "scale"] // this should be choose on assignment addAvailableVariablesToAssigned: false } @@ -230,7 +242,7 @@ Form title: qsTr("Factor Levels") visible: typeValue == "structured" singleVariable: true - suggestedColumns: ["nominal"] + allowedColumns: ["nominal"] } @@ -240,7 +252,7 @@ Form title: qsTr("Level 1") visible: typeValue == "nested" singleVariable: true - suggestedColumns: ["nominal"] + allowedColumns: ["nominal"] } AssignedVariablesList @@ -249,7 +261,7 @@ Form title: qsTr("Level 2") visible: typeValue == "nested" singleVariable: true - suggestedColumns: ["nominal"] + allowedColumns: ["nominal"] } AssignedVariablesList @@ -258,7 +270,7 @@ Form title: qsTr("Level 3") visible: typeValue == "nested" singleVariable: true - suggestedColumns: ["nominal"] + allowedColumns: ["nominal"] } AssignedVariablesList @@ -267,7 +279,16 @@ Form title: qsTr("Level 4") visible: typeValue == "nested" singleVariable: true - suggestedColumns: ["nominal"] + allowedColumns: ["nominal"] + } + + AssignedVariablesList + { + name: "level5" + title: qsTr("Level 5") + visible: typeValue == "nested" + singleVariable: true + allowedColumns: ["nominal"] } AssignedVariablesList @@ -276,7 +297,7 @@ Form title: qsTr("Time") visible: typeValue == "autoregressive" singleVariable: true - suggestedColumns: ["ordinal", "scale"] // scale for continuous time AR otherwise ordinal + allowedColumns: ["ordinal", "scale"] // scale for continuous time AR otherwise ordinal } AssignedVariablesList @@ -284,7 +305,7 @@ Form name: "spatialCoordinates" title: qsTr("Spatial Coordinates") visible: typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables" - suggestedColumns: ["nominal"] + allowedColumns: ["nominal"] } AssignedVariablesList @@ -293,7 +314,7 @@ Form title: qsTr("Grouping Factor") visible: typeValue != "nested" singleVariable: true - suggestedColumns: ["nominal"] + allowedColumns: ["nominal"] } } diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml b/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml index e23b6021..1827c7b5 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml @@ -57,6 +57,7 @@ Section { name: "diagnosticsCasewiseDiagnosticsShowInfluentialOnly" text: qsTr("Show influential only") + visible: module == "metaAnalysis" } CheckBox From 1f0f3eb8f33590849f660a8c48e86e086c33e5af Mon Sep 17 00:00:00 2001 From: FBartos Date: Sat, 26 Oct 2024 17:28:47 +0200 Subject: [PATCH 096/127] fix multivariate meta-analysis: random effects display & heterogeneity summary --- R/classicalmetaanalysiscommon.R | 62 ++++++++++++----- ...ssicalmetaanalysismultilevelmultivariate.R | 66 ++++++++++++++++++- 2 files changed, 109 insertions(+), 19 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 8a4c0354..e85390cb 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -444,8 +444,13 @@ overtitleCi <- gettextf("%s%% PI", 100 * options[["confidenceIntervalsLevel"]]) pooledEstimatesTable$addColumnInfo(name = "lPi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) pooledEstimatesTable$addColumnInfo(name = "uPi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) - } + if (.mammHasMultipleHeterogeneities(options, canAdd = TRUE)) { + for (colName in .mammExtractTauLevelNames(fit)) { + pooledEstimatesTable$addColumnInfo(name = colName, title = colName, type = "string", overtitle = gettext("Heterogeneity Level")) + } + } + } # stop on error if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) @@ -1452,14 +1457,36 @@ level = 100 * options[["confidenceIntervalsLevel"]] ) } else { - predictedEffect <- predict( - fit, - newmods = colMeans(model.matrix(fit))[-1], - level = 100 * options[["confidenceIntervalsLevel"]] - ) + + if (.mammHasMultipleHeterogeneities(options, canAdd = TRUE)) { + tauLevelsMatrix <- .mammExtractTauLevels(fit) + predictedEffect <- predict( + fit, + newmods = do.call(rbind, lapply(1:nrow(tauLevelsMatrix), function(i) colMeans(model.matrix(fit))[-1])), + level = 100 * options[["confidenceIntervalsLevel"]], + tau2.levels = tauLevelsMatrix[["tau2.levels"]], + gamma2.levels = tauLevelsMatrix[["gamma2.levels"]] + ) + } else { + predictedEffect <- predict( + fit, + newmods = colMeans(model.matrix(fit))[-1], + level = 100 * options[["confidenceIntervalsLevel"]] + ) + } } } + # keep levels for which the heterogeneity is predicted for complex multivariate models + if (.mammHasMultipleHeterogeneities(options, canAdd = TRUE)) { + tauLevels <- list( + predictedEffect[["tau2.level"]], + predictedEffect[["gamma2.level"]] + ) + tauLevels <- do.call(cbind.data.frame, tauLevels[!sapply(tauLevels, is.null)]) + colnames(tauLevels) <- .mammExtractTauLevelNames(fit) + } + # to data.frame predictedEffect <- .maExtractAndFormatPrediction(predictedEffect) predictedEffect$par <- "Effect Size" @@ -1471,17 +1498,17 @@ list(predictedEffect[,c("est", "lCi", "uCi", "lPi", "uPi")])) # remove non-requested columns - keepResults <- c( - "par", - "est", - if (options[["confidenceIntervals"]]) "lCi", - if (options[["confidenceIntervals"]]) "uCi", - if (options[["predictionIntervals"]]) "lPi", - if (options[["predictionIntervals"]]) "uPi" - ) + predictedEffect <- predictedEffect[,c( + "par", "est", + if (options[["confidenceIntervals"]]) c("lCi", "uCi"), + if (options[["predictionIntervals"]]) c("lPi", "uPi") + )] - predictedEffect <- predictedEffect[,keepResults] - return(as.list(predictedEffect)) + # return the tau levels + if (.mammHasMultipleHeterogeneities(options, canAdd = TRUE)) + predictedEffect <- cbind(predictedEffect, tauLevels) + + return(predictedEffect <- apply(predictedEffect, 1, as.list)) } .maComputePooledEffectPlot <- function(fit, options) { @@ -3095,6 +3122,9 @@ if (.maIsMultilevelMultivariate(options) && any(attr(fit, "skipped"))) messages <- c(messages, gettextf("The Model Structure %1$s was not completely specified and was skipped.", paste0(which(attr(fit, "skipped")), collapse = " and "))) + if (.mammAnyStructureGen(options) && options[["predictionIntervals"]]) + messages <- c(messages, gettext("Prediction interval for the pooled effect size is not available for models with multiple heterogeneity estimates.")) + return(messages) } .maEstimatedMarginalMeansMessages <- function(options, parameter) { diff --git a/R/classicalmetaanalysismultilevelmultivariate.R b/R/classicalmetaanalysismultilevelmultivariate.R index 046e5a9a..61297c67 100644 --- a/R/classicalmetaanalysismultilevelmultivariate.R +++ b/R/classicalmetaanalysismultilevelmultivariate.R @@ -318,7 +318,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N containerH <- createJaspContainer(title = paste0(.mammGetOptionsNameStructure(fit[["struct"]][2]), gettext(" Summary"))) containerH$position <- 3 randomEstimatesContainer[["containerH"]] <- containerH - .mammExtractRandomTables(containerH, options, fit, indx = 3) + .mammExtractRandomTables(containerH, options, fit, indx = 2) } @@ -354,8 +354,8 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N "UN" = gettextf("Unstructured"), "ID" = gettextf("Identity"), "DIAG" = gettextf("Diagonal"), - "AR1" = gettextf("AR(1)"), - "HAR" = gettextf("heteroskedastic AR(1)"), + "AR" = gettextf("AR(1)"), + "HAR" = gettextf("Heteroskedastic AR(1)"), "CAR" = gettextf("Continuous-Time AR"), "SPEXP" = gettextf("Exponential"), "SPGAU" = gettextf("Gaussian"), @@ -365,6 +365,66 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N stop(paste0("Unknown value: ", structure)) )) } +.mammAnyStructureGen <- function(options) { + # only relevant for multivariate + if (options[["module"]] != "metaAnalysisMultilevelMultivariate") + return(FALSE) + + # get all the active components types + randomFormulaList <- .mammGetRandomFormulaList(options) + if (length(randomFormulaList) == 0) + return(FALSE) + + structures <- unlist(lapply(randomFormulaList, attr, which = "structure")) + + return(any(structures %in% "GEN")) +} +.mammHasMultipleHeterogeneities <- function(options, canAddOutput = FALSE) { + # only relevant for multivariate + if (options[["module"]] != "metaAnalysisMultilevelMultivariate") + return(FALSE) + + # get all the active components types + randomFormulaList <- .mammGetRandomFormulaList(options) + if (length(randomFormulaList) == 0) + return(FALSE) + + structures <- unlist(lapply(randomFormulaList, attr, which = "structure")) + + if (canAddOutput) + return(any(structures %in% c("HCS", "UN", "DIAG", "HAR")) && !any(structures %in% "GEN")) + else + return(any(structures %in% c("GEN", "HCS", "UN", "DIAG", "HAR"))) +} +.mammExtractTauLevelNames <- function(fit) { + + levelNames <- c() + + if (fit[["withG"]] && fit[["struct"]][1] %in% c("HCS", "UN", "DIAG", "HAR")) + levelNames <- c(levelNames, fit$g.names[[1]]) + + if (fit[["withH"]] && fit[["struct"]][2] %in% c("HCS", "UN", "DIAG", "HAR")) + levelNames <- c(levelNames, fit$h.names[[1]]) + + return(levelNames) +} +.mammExtractTauLevels <- function(fit, expanded = TRUE) { + + levels <- list() + + if (fit[["withG"]] && fit[["struct"]][1] %in% c("HCS", "UN", "DIAG", "HAR")) + levels[["tau2.levels"]] <- fit$g.levels.f[[1]] + + if (fit[["withH"]] && fit[["struct"]][2] %in% c("HCS", "UN", "DIAG", "HAR")) + levels[["gamma2.levels"]] <- fit$h.levels.f[[1]] + + if (expanded) + levels <- expand.grid(levels) + else + levels <- do.call(cbind.data.frame, levels) + + return(levels) +} .mammExtractRandomTables <- function(tempContainer, options, x, indx = 1) { # dispatching From b9f4ac5e9a1a2f733e9c967e6f62435e413c9792 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sat, 26 Oct 2024 18:11:17 +0200 Subject: [PATCH 097/127] fix multivariate meta-analysis: prediction intervals in estimated marginal means --- R/classicalmetaanalysiscommon.R | 54 +++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index e85390cb..14fb7e99 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -42,11 +42,6 @@ # Generic # - allow different covariates factoring across all settings - -# TODO fix QML -# - remove selected variables in estimated marginal means when removed from the model components -# - check that the variables types are always propagated throughout the options - .ClassicalMetaAnalysisCommon <- function(jaspResults, dataset, options, ...) { # fit the model @@ -445,7 +440,7 @@ pooledEstimatesTable$addColumnInfo(name = "lPi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) pooledEstimatesTable$addColumnInfo(name = "uPi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) - if (.mammHasMultipleHeterogeneities(options, canAdd = TRUE)) { + if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE)) { for (colName in .mammExtractTauLevelNames(fit)) { pooledEstimatesTable$addColumnInfo(name = colName, title = colName, type = "string", overtitle = gettext("Heterogeneity Level")) } @@ -784,6 +779,11 @@ overtitleCi <- gettextf("%s%% PI", 100 * options[["confidenceIntervalsLevel"]]) estimatedMarginalMeansTable$addColumnInfo(name = "lPi", title = gettext("Lower"), type = "number", overtitle = overtitleCi) estimatedMarginalMeansTable$addColumnInfo(name = "uPi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) + if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE)) { + for (colName in .mammExtractTauLevelNames(fit)) { + estimatedMarginalMeansTable$addColumnInfo(name = colName, title = colName, type = "string", overtitle = gettext("Heterogeneity Level")) + } + } } if (options[["estimatedMarginalMeansEffectSizeTestAgainst"]]) { @@ -1448,6 +1448,10 @@ if (!.maIsMetaregressionEffectSize(options)) { predictedEffect <- predict(fit, level = 100 * options[["confidenceIntervalsLevel"]]) + if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE) && !options[["predictionIntervals"]]) { + # remove the non-requested heterogeneity levels + predictedEffect <- predictedEffect[1, , drop = FALSE] + } } else { if (.maIsMetaregressionHeterogeneity(options)) { predictedEffect <- predict( @@ -1458,7 +1462,7 @@ ) } else { - if (.mammHasMultipleHeterogeneities(options, canAdd = TRUE)) { + if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE) && options[["predictionIntervals"]]) { tauLevelsMatrix <- .mammExtractTauLevels(fit) predictedEffect <- predict( fit, @@ -1478,7 +1482,7 @@ } # keep levels for which the heterogeneity is predicted for complex multivariate models - if (.mammHasMultipleHeterogeneities(options, canAdd = TRUE)) { + if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE) && options[["predictionIntervals"]]) { tauLevels <- list( predictedEffect[["tau2.level"]], predictedEffect[["gamma2.level"]] @@ -1505,7 +1509,7 @@ )] # return the tau levels - if (.mammHasMultipleHeterogeneities(options, canAdd = TRUE)) + if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE) && options[["predictionIntervals"]]) predictedEffect <- cbind(predictedEffect, tauLevels) return(predictedEffect <- apply(predictedEffect, 1, as.list)) @@ -1916,11 +1920,31 @@ ) } else { - computedMarginalMeans <- predict( - fit, - newmods = predictorMatrixEffectSize, - level = 100 * options[["confidenceIntervalsLevel"]] + if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE) && options[["predictionIntervals"]]) { + tauLevelsMatrix <- .mammExtractTauLevels(fit) + computedMarginalMeans <- predict( + fit, + newmods = do.call(rbind, lapply(1:nrow(tauLevelsMatrix), function(i) predictorMatrixEffectSize)), + level = 100 * options[["confidenceIntervalsLevel"]], + tau2.levels = if (is.null(dim(predictorMatrixEffectSize))) tauLevelsMatrix[["tau2.levels"]] else do.call(rbind, lapply(1:nrow(predictorMatrixEffectSize), function(i) tauLevelsMatrix))[["tau2.levels"]], + gamma2.levels = if (is.null(dim(predictorMatrixEffectSize))) tauLevelsMatrix[["gamma2.levels"]] else do.call(rbind, lapply(1:nrow(predictorMatrixEffectSize), function(i) tauLevelsMatrix))[["gamma2.levels"]] + ) + } else { + computedMarginalMeans <- predict( + fit, + newmods = predictorMatrixEffectSize, + level = 100 * options[["confidenceIntervalsLevel"]] + ) + } + } + + if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE) && options[["predictionIntervals"]]) { + tauLevels <- list( + computedMarginalMeans[["tau2.level"]], + computedMarginalMeans[["gamma2.level"]] ) + tauLevels <- do.call(cbind.data.frame, tauLevels[!sapply(tauLevels, is.null)]) + colnames(tauLevels) <- .mammExtractTauLevelNames(fit) } @@ -2002,6 +2026,10 @@ if (!options[["predictionIntervals"]]) computedMarginalMeans <- computedMarginalMeans[,!colnames(computedMarginalMeans) %in% c("lPi", "uPi")] + # return the tau levels + if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE) && options[["predictionIntervals"]]) + computedMarginalMeans <- cbind(computedMarginalMeans, tauLevels) + return(computedMarginalMeans) } .maMakeBubblePlotDataset <- function(fit, options, dataset) { From b7f6ede832fe82260ddd0bc2e48b5a8c0c390ac1 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sat, 26 Oct 2024 18:40:50 +0200 Subject: [PATCH 098/127] fix multivariate meta-analysis: forest plot CI/PI issues --- R/forestplot.R | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/R/forestplot.R b/R/forestplot.R index d8b05733..99a7512b 100644 --- a/R/forestplot.R +++ b/R/forestplot.R @@ -3,6 +3,10 @@ # extract common options relativeRowSize <- options[["forestPlotRelativeSizeRow"]] + # overwrite basic options used in the pooled effect/marginal means + options[["confidenceIntervals"]] <- TRUE + options[["predictionIntervals"]] <- options[["forestPlotPredictionIntervals"]] + # keep track of added rows across marginal means and model estimates: tempRow <- 1 additionalInformation <- list() @@ -110,6 +114,11 @@ xRangeStudyInformationPanel <- NA } + ### Make sure no multiple prediction intervals are drawn for complex models ---- + if (.mammHasMultipleHeterogeneities(options)) { + options[["predictionIntervals"]] <- FALSE + options[["forestPlotPredictionIntervals"]] <- FALSE + } ### Estimated marginal means panel ---- From 79ffec2f05f1f569a32f6e8e1271aff8b2e9ad0e Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 27 Oct 2024 08:58:53 +0100 Subject: [PATCH 099/127] fix multivariate meta-analysis: diagnostics table --- R/classicalmetaanalysiscommon.R | 21 ++++++++++--------- ...icalMetaAnalysisMultilevelMultivariate.qml | 5 ++++- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 14fb7e99..4a3cee62 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -442,7 +442,7 @@ if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE)) { for (colName in .mammExtractTauLevelNames(fit)) { - pooledEstimatesTable$addColumnInfo(name = colName, title = colName, type = "string", overtitle = gettext("Heterogeneity Level")) + pooledEstimatesTable$addColumnInfo(name = colName, title = colName, type = .maGetVariableColumnType(colName, options), overtitle = gettext("Heterogeneity Level")) } } } @@ -781,7 +781,7 @@ estimatedMarginalMeansTable$addColumnInfo(name = "uPi", title = gettext("Upper"), type = "number", overtitle = overtitleCi) if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE)) { for (colName in .mammExtractTauLevelNames(fit)) { - estimatedMarginalMeansTable$addColumnInfo(name = colName, title = colName, type = "string", overtitle = gettext("Heterogeneity Level")) + estimatedMarginalMeansTable$addColumnInfo(name = colName, title = colName, type = .maGetVariableColumnType(colName, options), overtitle = gettext("Heterogeneity Level")) } } } @@ -3020,16 +3020,17 @@ } .maGetVariableColumnType <- function(variable, options) { - if (variable %in% c(options[["effectSize"]], options[["effectSizeStandardError"]])) { + if (.maIsMultilevelMultivariate(options)) { + randomVariables <- .mammExtractRandomVariableNames(options) + } else { + randomVariables <- NULL + } + + if (variable %in% c(options[["effectSize"]], options[["effectSizeStandardError"]], "samplingVariance", + options[["predictors"]][options[["predictors.types"]] == "scale"], randomVariables[["scale"]], randomVariables[["ordinal"]])) { return("number") - } else if (variable == options[["clustering"]]) { + } else if (variable %in% c(options[["predictors"]][options[["predictors.types"]] == "nominal"], options[["clustering"]], randomVariables[["nominal"]])) { return("string") - } else if (variable %in% options[["predictors"]]){ - return(switch( - options[["predictors.types"]][variable == options[["predictors"]]], - "scale" = "number", - "nominal" = "string" - )) } else { return("string") } diff --git a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml index 85b42bf1..de5c89dd 100644 --- a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml +++ b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml @@ -390,7 +390,10 @@ Form MA.ClassicalMetaAnalysisBubblePlot {} - MA.ClassicalMetaAnalysisDiagnostics {} + MA.ClassicalMetaAnalysisDiagnostics + { + module: "metaAnalysisMultilevelMultivariate" + } MA.ClassicalMetaAnalysisAdvanced { From 7d5f8970d328d00d70bc7e14a733a40600bd17c8 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 27 Oct 2024 09:25:22 +0100 Subject: [PATCH 100/127] fix multivariate meta-analysis: Baujat not available for rma.mv --- inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml b/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml index 1827c7b5..2d5bace3 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml @@ -108,6 +108,7 @@ Section { name: "diagnosticsPlotsBaujat" text: qsTr("Baujat") + visible: module == "metaAnalysis" } CheckBox From 1d8b26a476f44da8f59c7eb20dfff38d2fd4018b Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 27 Oct 2024 10:56:49 +0100 Subject: [PATCH 101/127] fix multivariate meta-analysis: profile likelihood plot --- R/classicalmetaanalysiscommon.R | 151 ++++++++++++++++++++++---------- 1 file changed, 107 insertions(+), 44 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 4a3cee62..7efec830 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -1203,56 +1203,79 @@ if (is.null(fit) || jaspBase::isTryError(fit) || !is.null(.maCheckIsPossibleOptions(options))) return() - # create plot - profileLikelihoodPlot <- createJaspPlot(title = gettext("Profile Likelihood Plot"), width = 400, height = 320) - profileLikelihoodPlot$dependOn(c(.maDependencies, "diagnosticsPlotsProfileLikelihood")) - profileLikelihoodPlot$position <- 8 - jaspResults[["profileLikelihoodPlot"]] <- profileLikelihoodPlot + # extract precomputed profile likelihoods if done before: + if (!is.null(jaspResults[["profileLikelihoodResults"]])) { - if (.maIsMetaregressionHeterogeneity(options)) { - profileLikelihoodPlot$setError(gettext("Profile likelihood is not available for models that contain meta-regression on heterogeneity.")) - return() - } + dfProfile <- jaspResults[["profileLikelihoodResults"]]$object - # obtain profile likelihood - xTicks <- jaspGraphs::getPrettyAxisBreaks(c(0, 2*fit[["tau2"]])) - dfProfile <- try(profile(fit, xlim = range(xTicks), plot = FALSE, progbar = FALSE)) - if (jaspBase::isTryError(dfProfile)) { - profileLikelihoodPlot$setError(dfProfile) - return() + } else { + + # create the output container + profileLikelihoodResults <- createJaspState() + profileLikelihoodResults$dependOn(.maDependencies) + jaspResults[["profileLikelihoodResults"]] <- profileLikelihoodResults + + if (.maIsMultilevelMultivariate(options)) { + # use the defaults (too many possible parameter combinations to control) + dfProfile <- try(metafor::profile.rma.mv(fit, plot = FALSE, progbar = FALSE)) + + jaspResults[["diagnosticsResults"]]$object <- dfProfile + } else { + # proceed with some nice formatting for rma.uni (too difficult to implement for rma.mv) + xTicks <- jaspGraphs::getPrettyAxisBreaks(c(0, max(0.1, 2*fit[["tau2"]]))) + dfProfile <- try(profile(fit, xlim = range(xTicks), plot = FALSE, progbar = FALSE)) + attr(dfProfile, "xTicks") <- xTicks + + jaspResults[["diagnosticsResults"]]$object <- dfProfile + } } - yTicks <- jaspGraphs::getPrettyAxisBreaks(c(min(dfProfile$ll), max(dfProfile$ll))) + # create profile likelihood plot / container + if (.maIsMultilevelMultivariate(options)) { + # container for multivariate + profileLikelihoodPlot <- createJaspContainer(title = gettext("Profile Likelihood Plots")) + profileLikelihoodPlot$dependOn(c(.maDependencies, "diagnosticsPlotsProfileLikelihood")) + profileLikelihoodPlot$position <- 8 - # create plot - plotOut <- ggplot2::ggplot( - data = data.frame( - x = dfProfile$tau2, - y = dfProfile$ll - ), - ggplot2::aes( - x = x, - y = y) - ) + - jaspGraphs::geom_line() + - jaspGraphs::geom_point() + - ggplot2::geom_line( - data = data.frame( - x = rep(fit[["tau2"]], 2), - y = range(yTicks)), - linetype = "dotted") + - ggplot2::geom_line( - data = data.frame( - x = range(xTicks), - y = rep(max(dfProfile$ll), 2)), - linetype = "dotted") + - ggplot2::labs(x = expression(tau^2), y = gettext("Profile Likelihood")) + - jaspGraphs::scale_x_continuous(breaks = xTicks, limits = range(xTicks)) + - jaspGraphs::scale_y_continuous(breaks = yTicks, limits = range(yTicks)) + - jaspGraphs::geom_rangeframe() + - jaspGraphs::themeJaspRaw() + jaspResults[["profileLikelihoodPlot"]] <- profileLikelihoodPlot - profileLikelihoodPlot$plotObject <- plotOut + if (jaspBase::isTryError(dfProfile)) { + errorPlot <- createJaspPlot(title = gettext("Profile Likelihood Plot")) + errorPlot$setError(dfProfile) + + profileLikelihoodPlot[["errorPlot"]] <- errorPlot + return() + } + + for (i in 1:dfProfile[["comps"]]) { + tempProfilePlot <- createJaspPlot(title = paste0(dfProfile[[i]][["title"]][-1], collapse = " "), width = 400, height = 320) + tempProfilePlot$position <- i + + profileLikelihoodPlot[[paste0("plot", i)]] <- tempProfilePlot + + tempProfilePlot$plotObject <- .maMakeProfileLikelihoodPlot(dfProfile[[i]]) + } + + } else { + # plot for univariate + profileLikelihoodPlot <- createJaspPlot(title = gettext("Profile Likelihood Plot"), width = 400, height = 320) + profileLikelihoodPlot$dependOn(c(.maDependencies, "diagnosticsPlotsProfileLikelihood")) + profileLikelihoodPlot$position <- 8 + + jaspResults[["profileLikelihoodPlot"]] <- profileLikelihoodPlot + + if (.maIsMetaregressionHeterogeneity(options)) { + profileLikelihoodPlot$setError(gettext("Profile likelihood is not available for models that contain meta-regression on heterogeneity.")) + return() + } + + if (jaspBase::isTryError(dfProfile)) { + profileLikelihoodPlot$setError(dfProfile) + return() + } + + profileLikelihoodPlot$plotObject <- .maMakeProfileLikelihoodPlot(dfProfile) + } return() } @@ -2604,6 +2627,46 @@ return(out) } +.maMakeProfileLikelihoodPlot <- function(dfPlot) { + + yTicks <- jaspGraphs::getPrettyAxisBreaks(c(min(dfPlot$ll), max(dfPlot$ll))) + + # xTicks and other attributes only passed for rma.uni + # (there are way too many options to deal with for rma.mv --- using the metafor package defaults) + if (!is.null(attr(dfPlot, "xTicks"))) + xTicks <- attr(dfPlot, "xTicks") + else + xTicks <- jaspGraphs::getPrettyAxisBreaks(c(min(dfPlot[[1]]), max(dfPlot[[1]]))) + + # create plot + plotOut <- ggplot2::ggplot( + data = data.frame(x = dfPlot[[1]], y = dfPlot[["ll"]]), + mapping = ggplot2::aes(x = x, y = y) + ) + + jaspGraphs::geom_line() + + jaspGraphs::geom_point() + + plotOut <- plotOut + + ggplot2::geom_line( + data = data.frame( + x = rep(dfPlot[["vc"]], 2), + y = range(yTicks)), + linetype = "dotted") + + ggplot2::geom_line( + data = data.frame( + x = range(xTicks), + y = rep(max(dfPlot[["maxll"]]), 2)), + linetype = "dotted") + + plotOut <- plotOut + + ggplot2::labs(x = dfPlot[["xlab"]], y = gettext("Profile Likelihood")) + + jaspGraphs::scale_x_continuous(breaks = xTicks, limits = range(xTicks)) + + jaspGraphs::scale_y_continuous(breaks = yTicks, limits = range(yTicks)) + + jaspGraphs::geom_rangeframe() + + jaspGraphs::themeJaspRaw() + + return(plotOut) +} # check functions .maIsMetaregression <- function(options) { From 6e295d5239a530e4093d986e00013c607d362e17 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 27 Oct 2024 11:14:38 +0100 Subject: [PATCH 102/127] fix meta-analysis: weights and GENQ estimators --- DESCRIPTION | 1 + R/classicalmetaanalysiscommon.R | 2 +- inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml | 6 ++++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index b769eb85..989ad6f0 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -30,6 +30,7 @@ Imports: ggmcmc, pema, clubSandwich, + CompQuadForm, patchwork Remotes: jasp-stats/jaspBase, diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 7efec830..16918416 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -184,7 +184,7 @@ # add fixed parameters if needed if (options[["fixParametersWeights"]]) - rmaInput$weights <- as.name(options[["fixParametersWeightsVariable"]]) + rmaInput$weights <- dataset[[options[["fixParametersWeightsVariable"]]]] if (options[["fixParametersTau2"]]) rmaInput$tau2 <- .maGetFixedTau2Options(options) # TODO: add multiple possible fixed taus diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml index ee1ccb7d..0c4382bf 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml @@ -94,7 +94,8 @@ Section Group { - title: qsTr("Fix Parameters") + title: qsTr("Fix Parameters") + visible: module == "metaAnalysis" CheckBox { // TODO: allow fixing in multivariate models @@ -102,7 +103,6 @@ Section text: qsTr("𝜏²") enabled: sectionModel.heterogeneityModelTermsCount == 0 childrenOnSameRow: true - visible: module == "metaAnalysis" FormulaField { @@ -125,6 +125,8 @@ Section label: "" name: "fixParametersWeightsVariable" source: "allVariables" + addEmptyValue: true + allowedColumns: ["scale"] } } } From 14a124768c2424fa81bc7d114404e7197019c08c Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 27 Oct 2024 11:30:44 +0100 Subject: [PATCH 103/127] fix meta-analysis: omnibus moderation test specification --- R/classicalmetaanalysiscommon.R | 30 +++++++++++++++---- .../ClassicalMetaAnalysisAdvanced.qml | 4 +-- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 16918416..862cd9d9 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -389,6 +389,7 @@ return() } else { moderatorsTable$addRows(testEffectSizeCoefficients) + moderatorsTable$addFootnote(attr(testEffectSizeCoefficients, "footnote")) } } } @@ -406,6 +407,7 @@ return() } else { moderatorsTable$addRows(testHeterogeneityCoefficients) + moderatorsTable$addFootnote(attr(testHeterogeneityCoefficients, "footnote")) } } } @@ -1741,10 +1743,16 @@ if (parameter == "effectSize") { maxCoef <- nrow(fit$beta) - selCoef <- .parseRCodeInOptions(options[["addOmnibusModeratorTestEffectSizeCoefficientsValues"]]) + selCoef <- .robmaCleanOptionsToPriors( + options[["addOmnibusModeratorTestEffectSizeCoefficientsValues"]], + message = gettext("Indexes of effect size moderation coefficients were specified in an incorrect format. Try '(1, 2)' to test the first two coefficients.") + ) } else if (parameter == "heterogeneity") { maxCoef <- nrow(fit$alpha) - selCoef <- .parseRCodeInOptions(options[["addOmnibusModeratorTestHeterogeneityCoefficientsValues"]]) + selCoef <- .robmaCleanOptionsToPriors( + options[["addOmnibusModeratorTestHeterogeneityCoefficientsValues"]], + message = gettext("Indexes of heterogeneity moderation coefficients were specified in an incorrect format. Try '(1, 2)' to test the first two coefficients.") + ) } if (!is.numeric(selCoef) || any(!(abs(selCoef - round(selCoef)) < .Machine$double.eps^0.5))) @@ -1767,10 +1775,20 @@ if (.maIsMetaregressionFtest(options)) row$df2 <- fit[["QMdf"]][2] - if (parameter == "effectSize") - row$parameter <- gettextf("Effect Size (coef: %1$s)", paste(selCoef, collapse = ",")) - else if (parameter == "heterogeneity") - row$parameter <- gettextf("Heterogeneity (coef: %1$s)", paste(selCoef, collapse = ",")) + if (parameter == "effectSize") { + row$parameter <- gettextf("Effect Size (coef: %1$s)", paste(selCoef, collapse = ", ")) + attr(row, "footnote") <- gettextf( + "Effect size coefficients %1$s correspond to %2$s.", + paste(selCoef, collapse = ","), + paste(sapply(rownames(fit$beta)[selCoef], function(coefName) .maVariableNames(coefName, options[["predictors"]])), collapse = ", ")) + } else if (parameter == "heterogeneity") { + row$parameter <- gettextf("Heterogeneity (coef: %1$s)", paste(selCoef, collapse = ", ")) + attr(row, "footnote") <- sapply(rownames(fit$alpha)[selCoef], function(coefName) .maVariableNames(coefName, options[["predictors"]])) + attr(row, "footnote") <- gettextf( + "Heterogeneity coefficients %1$s correspond to %2$s.", + paste(selCoef, collapse = ","), + paste(sapply(rownames(fit$alpha)[selCoef], function(coefName) .maVariableNames(coefName, options[["predictors"]])), collapse = ", ")) + } return(row) } diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml index 0c4382bf..c4e9e207 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml @@ -147,7 +147,7 @@ Section { label: "" name: "addOmnibusModeratorTestEffectSizeCoefficientsValues" - value: "c(1, 2)" + value: "(1, 2)" } } @@ -163,7 +163,7 @@ Section { label: "" name: "addOmnibusModeratorTestHeterogeneityCoefficientsValues" - value: "c(1, 2)" + value: "(1, 2)" } } } From e377126ff7d662f61ce907aa1ff28114daa3b4a3 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 27 Oct 2024 20:03:47 +0100 Subject: [PATCH 104/127] fix multivariate meta-analysis: fix spatial random effects & known correlational structures --- DESCRIPTION | 1 + R/classicalmetaanalysiscommon.R | 48 +++++- ...ssicalmetaanalysismultilevelmultivariate.R | 150 +++++++++++++++--- ...icalMetaAnalysisMultilevelMultivariate.qml | 80 +++++----- 4 files changed, 215 insertions(+), 64 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 989ad6f0..4d8a25f1 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -31,6 +31,7 @@ Imports: pema, clubSandwich, CompQuadForm, + sp, patchwork Remotes: jasp-stats/jaspBase, diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 862cd9d9..0d8e4d9d 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -37,8 +37,6 @@ # - vs predicted # - vs outcome # - vs covariates -# Advanced -# - change specification of Omnibus moderation tests (do not include bracket and c, show an information message about which coefficients are included in the test in a table note) # Generic # - allow different covariates factoring across all settings @@ -172,6 +170,27 @@ if (length(randomFormulaList) != 0) { rmaInput$random <- randomFormulaList rmaInput$struct <- do.call(c, lapply(randomFormulaList, attr, which = "structure")) + + # spatial-specific settings + rmaInput$dist <- unlist(lapply(randomFormulaList, attr, which = "dist"), recursive = FALSE) + addConstant <- do.call(c, lapply(randomFormulaList, attr, which = "addConstant")) + if (length(addConstant) > 0 && any(addConstant)) + rmaInput$data$constant <- 1 + for (i in seq_along(rmaInput$dist)) { + if (is.matrix(rmaInput$dist[[i]]) && !all(unique(rmaInput[["data"]][[names(rmaInput$dist)[i]]]) %in% rownames(rmaInput$dist[[names(rmaInput$dist)[i]]]))) + .quitAnalysis(sprintf(gettext("The loaded distance matrix for '%1$s' does not match the dataset. The following levels are missing: %2$s."), + names(rmaInput$dist)[i], + paste0(unique(rmaInput[["data"]][[names(rmaInput$dist)[i]]])[!unique(rmaInput[["data"]][[names(rmaInput$dist)[i]]]) %in% rownames(rmaInput$dist)], collapse = ", "))) + } + + # known correlation-specific settings + rmaInput$R <- unlist(lapply(randomFormulaList, attr, which = "R"), recursive = FALSE) + for (i in seq_along(rmaInput$R)) { + if (!all(unique(rmaInput[["data"]][[names(rmaInput$R)[i]]]) %in% rownames(rmaInput$R[[names(rmaInput$R)[i]]]))) + .quitAnalysis(sprintf(gettext("The loaded correlation matrix for '%1$s' does not match the dataset. The following levels are missing: %2$s."), + names(rmaInput$R)[i], + paste0(unique(rmaInput[["data"]][[names(rmaInput$R)[i]]])[!unique(rmaInput[["data"]][[names(rmaInput$R)[i]]]) %in% rownames(rmaInput$R)], collapse = ", "))) + } } } @@ -255,6 +274,9 @@ fitPermutation = fitPermutation ) + saveRDS(fit, file = "C:/JASP/fit.RDS") + saveRDS(fitClustered, file = "C:/JASP/fitClustered.RDS") + return() } .maFitAddPermutationPValues <- function(fit, fitPerumation, options) { @@ -2380,13 +2402,31 @@ if (.maIsMultilevelMultivariate(options)) { randomFormulaList <- .mammGetRandomFormulaList(options) if (length(randomFormulaList) != 0) { - struct <- do.call(c, lapply(randomFormulaList, attr, "structure")) + struct <- do.call(c, lapply(randomFormulaList, attr, "structure")) + dist <- unlist(unname(lapply(randomFormulaList, attr, which = "dist")), recursive = FALSE) + R <- unlist(unname(lapply(randomFormulaList, attr, which = "R")), recursive = FALSE) + # change distance matrix into a variable + for (i in seq_along(dist)) { + if (is.matrix(dist[[i]])) + dist[[i]] <- paste0(names(dist)[i], gettext(" Distance Matrix")) + } + # change correlation matrix into a variable + for (i in seq_along(R)) { + R[[i]] <- paste0(names(R)[i], gettext(" Correlation Matrix")) + } + if (length(randomFormulaList) > 1) randomFormulaList <- paste0("list(\n\t\t", paste0("'", names(randomFormulaList), "' = ", randomFormulaList, collapse = "\n\t\t"),")") rmaInput$random <- randomFormulaList if (length(struct) != 0) - struct <- paste0("c(", paste0("'", names(struct), "' = '", struct, "'", collapse = ""),")") + struct <- paste0("c(", paste0("'", names(struct), "' = '", struct, "'", collapse = ", "),")") rmaInput$struct <- struct + if (length(dist) > 0) + dist <- paste0("list(", paste0(names(dist), ifelse(names(dist) == "", "'", " = '"), dist, "'", collapse = ", "),")") + rmaInput$dist <- dist + if (length(R) > 0) + R <- paste0("list(", paste0(names(R), " = '", R, "'", collapse = ", "),")") + rmaInput$R <- R } } diff --git a/R/classicalmetaanalysismultilevelmultivariate.R b/R/classicalmetaanalysismultilevelmultivariate.R index 61297c67..b5d28003 100644 --- a/R/classicalmetaanalysismultilevelmultivariate.R +++ b/R/classicalmetaanalysismultilevelmultivariate.R @@ -145,18 +145,99 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N } else if (tempType == "spatial") { - tempValueInner <- paste0("computedSpatialDistance", i) - tempValueOuter <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]] + tempDistanceMetric <- .mammGetDistanceOptions(options[["randomEffectsSpecification"]][[i]][["distanceMetric"]]) - if (!is.null(unlist(options[["randomEffectsSpecification"]][[i]][["spatialCoordinates"]])) && tempValueOuter != "") { - randomFormulas[[i]] <- as.formula(paste0("~ ", tempValueInner, " | ", tempValueOuter), env = parent.frame(1)) - attr(randomFormulas[[i]], "structure") <- .mammGetStructureOptions(options[["randomEffects"]][[i]][["structure"]]) + if (tempDistanceMetric != "loadFromFile") { + + # dispatch distance type + if (tempDistanceMetric == "gcd") { + tempValueInner <- c( + if (options[["randomEffectsSpecification"]][[i]][["longitude"]] != "") options[["randomEffectsSpecification"]][[i]][["longitude"]], + if (options[["randomEffectsSpecification"]][[i]][["latitude"]] != "") options[["randomEffectsSpecification"]][[i]][["latitude"]] + ) + } else { + tempValueInner <- unlist(options[["randomEffectsSpecification"]][[i]][["spatialCoordinates"]]) + } + + tempValueOuter <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]] + + # spatial does not require a grouping factor + if (tempValueOuter == "") + tempValueOuter <- "constant" + + if ((tempDistanceMetric == "gcd" && length(tempValueInner) == 2) || (tempDistanceMetric != "gcd" && length(tempValueInner) > 0)) { + randomFormulas[[i]] <- as.formula(paste0("~ ", paste(tempValueInner, collapse = "+")," | ", tempValueOuter), env = parent.frame(1)) + attr(randomFormulas[[i]], "structure") <- .mammGetStructureOptions(options[["randomEffects"]][[i]][["structure"]]) + attr(randomFormulas[[i]], "dist") <- tempDistanceMetric + attr(randomFormulas[[i]], "addConstant") <- tempValueOuter == "constant" + } + + } else { + + # requires the inner term, the matrix needs to be a row & columns named file + tempValueInner <- options[["randomEffectsSpecification"]][[i]][["locationIdentifier"]] + distanceMatrixFileName <- options[["randomEffectsSpecification"]][[i]][["distanceMatrixFile"]] + + if (distanceMatrixFileName != "" && tempValueInner != "") { + + # try regular csv loading + distanceMatrix <- try(as.matrix(read.csv(file = distanceMatrixFileName, row.names = 1))) + + if (inherits(distanceMatrix, "try-error")) + .quitAnalysis(gettextf("Error reading the distance matrix file: %1$s", distanceMatrix)) + + # if there is only one column, try csv2 (indicates different decimals enconding) + if (ncol(distanceMatrix) == 1) + distanceMatrix <- try(as.matrix(read.csv2(file = distanceMatrixFileName, row.names = 1))) + + if (inherits(distanceMatrix, "try-error")) + .quitAnalysis(gettextf("Error reading the distance matrix file: %1$s", distanceMatrix)) + + if (nrow(distanceMatrix) != ncol(distanceMatrix)) + .quitAnalysis(gettext("The distance matrix must be square. The number of rows (%1$i) does not match the number of columns (%2$i).", + nrow(distanceMatrix), ncol(distanceMatrix))) + + # spatial does not require a grouping factor + tempValueOuter <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]] + if (tempValueOuter == "") + tempValueOuter <- "constant" + + randomFormulas[[i]] <- as.formula(paste0("~ ", tempValueInner, " | ", tempValueOuter), env = parent.frame(1)) + attr(randomFormulas[[i]], "structure") <- .mammGetStructureOptions(options[["randomEffects"]][[i]][["structure"]]) + attr(randomFormulas[[i]], "dist") <- list(distanceMatrix) + names(attr(randomFormulas[[i]], "dist")) <- tempValueInner + attr(randomFormulas[[i]], "addConstant") <- tempValueOuter == "constant" + + } } } else if (tempType == "knownCorrelation") { - stop("Not implemented yet.") + # requires the outer term, the matrix needs to be a row & columns named file + tempValueOuter <- options[["randomEffectsSpecification"]][[i]][["groupingFactor"]] + distanceMatrixFileName <- options[["randomEffectsSpecification"]][[i]][["correlationMatrixFile"]] + if (tempValueOuter != "" && distanceMatrixFileName != "") { + # try regular csv loading + correlationMatrix <- try(as.matrix(read.csv(file = distanceMatrixFileName, row.names = 1))) + + if (inherits(correlationMatrix, "try-error")) + .quitAnalysis(gettextf("Error reading the correlation matrix file: %1$s", correlationMatrix)) + + # if there is only one column, try csv2 (indicates different decimals encoding) + if (ncol(correlationMatrix) == 1) + correlationMatrix <- try(as.matrix(read.csv2(file = distanceMatrixFileName, row.names = 1))) + + if (inherits(correlationMatrix, "try-error")) + .quitAnalysis(gettextf("Error reading the correlation matrix file: %1$s", correlationMatrix)) + if (nrow(correlationMatrix) != ncol(correlationMatrix)) + .quitAnalysis(gettext("The distance matrix must be square. The number of rows (%1$i) does not match the number of columns (%2$i).", + nrow(correlationMatrix), ncol(correlationMatrix))) + + randomFormulas[[i]] <- as.formula(paste0("~ 1 | ", tempValueOuter), env = parent.frame(1)) + attr(randomFormulas[[i]], "R") <- list(correlationMatrix) + names(attr(randomFormulas[[i]], "R")) <- tempValueOuter + } } } @@ -165,7 +246,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N if (all(randomFormulasSkipped)) return(NULL) - randomFormulas <- randomFormulas[!randomFormulasSkipped] + randomFormulas <- randomFormulas[!randomFormulasSkipped] # add missing null elements in case the last random effects was skipped if (length(options[["randomEffectsSpecification"]]) > length(randomFormulasSkipped)) randomFormulasSkipped[(length(randomFormulasSkipped)+1):length(options[["randomEffectsSpecification"]])] <- TRUE @@ -231,13 +312,15 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N } else if (tempType == "spatial") { - variablesScale <- c(variablesScale, unlist(options[["randomEffectsSpecification"]][[i]][["spatialCoordinates"]])) - variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]]) + variablesScale <- c(variablesScale, unlist(options[["randomEffectsSpecification"]][[i]][["spatialCoordinates"]]), + options[["randomEffectsSpecification"]][[i]][["longitude"]], + options[["randomEffectsSpecification"]][[i]][["latitude"]]) + variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]], + options[["randomEffectsSpecification"]][[i]][["locationIdentifier"]]) } else if (tempType == "knownCorrelation") { - stop("Not implemented yet.") - + variablesNominal <- c(variablesNominal, options[["randomEffectsSpecification"]][[i]][["groupingFactor"]]) } } @@ -274,7 +357,11 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N ### create table for nested random effects if (fit[["withS"]]) { - tableS <- createJaspTable(title = gettext("Simple / Nested Estimates")) + containerS <- createJaspContainer(title = gettext("Simple / Nested Summary")) + containerS$position <- 1 + randomEstimatesContainer[["containerS"]] <- containerS + + tableS <- createJaspTable(title = gettext("Estimates")) tableS$position <- 1 tableS$addColumnInfo(name = "factor", type = "string", title = "") @@ -285,7 +372,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N tableS$addColumnInfo(name = "fixed", type = "string", title = gettext("Fixed")) # tableS$addColumnInfo(name = "R", type = "string", title = gettext("R")) # whether supplied via known correlation matrix - randomEstimatesContainer[["tableS"]] <- tableS + containerS[["tableS"]] <- tableS resultsS <- data.frame( factor = .maVariableNames(fit[["s.names"]], unlist(.mammExtractRandomVariableNames(options))), @@ -306,7 +393,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N if (fit[["withG"]]) { # create jasp containers - containerG <- createJaspContainer(title = paste0(.mammGetOptionsNameStructure(fit[["struct"]][1]), gettext(" Summary"))) + containerG <- createJaspContainer(title = .mammGetRandomEstimatesTitle(fit[["struct"]][1])) containerG$position <- 2 randomEstimatesContainer[["containerG"]] <- containerG .mammExtractRandomTables(containerG, options, fit, indx = 1) @@ -315,7 +402,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N if (fit[["withH"]]) { - containerH <- createJaspContainer(title = paste0(.mammGetOptionsNameStructure(fit[["struct"]][2]), gettext(" Summary"))) + containerH <- createJaspContainer(title = .mammGetRandomEstimatesTitle(fit[["struct"]][2])) containerH$position <- 3 randomEstimatesContainer[["containerH"]] <- containerH .mammExtractRandomTables(containerH, options, fit, indx = 2) @@ -324,6 +411,19 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N return() } +.mammGetRandomEstimatesTitle <- function(structure) { + + if (structure == "GEN") + return(gettext("Random Slopes Summary")) + else if (structure %in% c("CS", "HCS", "UN", "ID", "DIAG")) + return(paste0(gettext("Structured"), " (", .mammGetOptionsNameStructure(structure), ") ", gettext("Summary"))) + else if (structure %in% c("AR", "HAR", "CAR")) + return(paste0(gettext("Autoregressive"), " (", .mammGetOptionsNameStructure(structure), ") ", gettext("Summary"))) + else if (structure %in% c("SPEXP", "SPGAU", "SPLIN", "SPRAT", "SPSPH")) + return(paste0(gettext("Spatial"), " (", .mammGetOptionsNameStructure(structure), ") ", gettext("Summary"))) + else + return(gettext("Known Correlation Summary")) +} .mammGetStructureOptions <- function(structure) { return(switch( @@ -365,7 +465,19 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N stop(paste0("Unknown value: ", structure)) )) } -.mammAnyStructureGen <- function(options) { +.mammGetDistanceOptions <- function(distance) { + + return(switch( + distance, + "euclidean" = "euclidean", + "manhattan" = "manhattan", + "maximum" = "maximum", + "greatCircle" = "gcd", + "loadFromFile" = "loadFromFile", + stop(paste0("Unknown value: ", distance)) + )) +} +.mammAnyStructureGen <- function(options) { # only relevant for multivariate if (options[["module"]] != "metaAnalysisMultilevelMultivariate") return(FALSE) @@ -379,7 +491,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N return(any(structures %in% "GEN")) } -.mammHasMultipleHeterogeneities <- function(options, canAddOutput = FALSE) { +.mammHasMultipleHeterogeneities <- function(options, canAddOutput = FALSE) { # only relevant for multivariate if (options[["module"]] != "metaAnalysisMultilevelMultivariate") return(FALSE) @@ -396,7 +508,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N else return(any(structures %in% c("GEN", "HCS", "UN", "DIAG", "HAR"))) } -.mammExtractTauLevelNames <- function(fit) { +.mammExtractTauLevelNames <- function(fit) { levelNames <- c() @@ -408,7 +520,7 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N return(levelNames) } -.mammExtractTauLevels <- function(fit, expanded = TRUE) { +.mammExtractTauLevels <- function(fit, expanded = TRUE) { levels <- list() diff --git a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml index de5c89dd..4cba766d 100644 --- a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml +++ b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml @@ -108,6 +108,7 @@ Form { id: randomEffects name: "randomEffects" + headerLabels: ["Type"] defaultValues: [{"type": "nested"}] rowComponent: RowLayout @@ -129,7 +130,6 @@ Form { id: type name: "type" - label: qsTr("Type") values: [ { label: qsTr("Simple"), value: "simple"}, { label: qsTr("Nested (multilevel)"), value: "nested"}, @@ -175,25 +175,6 @@ Form } })() } - - DropDown - { - id: spatialInputType - name: "spatialInputType" - label: qsTr("Spatial input type") - visible: type.value == "spatial" - values: (function() { - if (type.value == "spatial") { - return [ - { label: qsTr("Compute from variables"), value: "computeFromVariables"}, - { label: qsTr("Load from file"), value: "loadFromFile"} - ]; - } else { - return []; - } - })() - } - } } @@ -217,8 +198,8 @@ Form VariablesForm { removeInvisibles: true - preferredHeight: (typeValue == "nested" || typeValue == "randomSlopes" || typeValue == "spatial") ? 250 * preferencesModel.uiScale : 200 * preferencesModel.uiScale - visible: typeValue == "simple" || typeValue == "nested" || typeValue == "randomSlopes" || typeValue == "structured" || typeValue == "autoregressive" || (typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables") || typeValue == "knownCorrelation" + preferredHeight: (typeValue == "nested" || typeValue == "randomSlopes" || (typeValue == "spatial" && distanceMetric.value != "greatCircle")) ? 250 * preferencesModel.uiScale : 200 * preferencesModel.uiScale + visible: typeValue == "simple" || typeValue == "nested" || typeValue == "randomSlopes" || typeValue == "structured" || typeValue == "autoregressive" || typeValue == "spatial" || typeValue == "knownCorrelation" AvailableVariablesList { @@ -304,8 +285,35 @@ Form { name: "spatialCoordinates" title: qsTr("Spatial Coordinates") - visible: typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables" + visible: typeValue == "spatial" && distanceMetric.value != "greatCircle" && distanceMetric.value != "loadFromFile" + allowedColumns: ["scale"] + } + + AssignedVariablesList + { + name: "longitude" + title: qsTr("Longitude") + visible: typeValue == "spatial" && distanceMetric.value == "greatCircle" + allowedColumns: ["scale"] + singleVariable: true + } + + AssignedVariablesList + { + name: "latitude" + title: qsTr("Latitude") + visible: typeValue == "spatial" && distanceMetric.value == "greatCircle" + allowedColumns: ["scale"] + singleVariable: true + } + + AssignedVariablesList + { + name: "locationIdentifier" + title: qsTr("Location Identifier") + visible: typeValue == "spatial" && distanceMetric.value == "loadFromFile" allowedColumns: ["nominal"] + singleVariable: true } AssignedVariablesList @@ -318,30 +326,18 @@ Form } } - // TODO: Bruno -- adding variable crashes the qml - // TODO: Bruno -- allow single variable only, set-type to nominal - // FactorsForm - // { - // name: "nestedGroupingFactors" - // id: nestedGroupingFactors - // title: qsTr("Nested Grouping Factors") - // preferredHeight: 200 * preferencesModel.uiScale - // initNumberFactors: 1 - // allowAll: true - // visible: typeValue == "nested" - // } - DropDown { name: "distanceMetric" id: distanceMetric label: qsTr("Distance metric") - visible: typeValue == "spatial" && spatialInputTypeValue == "computeFromVariables" + visible: typeValue == "spatial" values: [ { label: qsTr("Euclidean"), value: "euclidean" }, { label: qsTr("Manhattan"), value: "manhattan" }, { label: qsTr("Maximum"), value: "maximum" }, - { label: qsTr("Great-circle"), value: "greatCircle"} + { label: qsTr("Great-circle"), value: "greatCircle"}, + { label: qsTr("Load from file"), value: "loadFromFile"} ] } @@ -349,16 +345,18 @@ Form { name: "distanceMatrixFile" label: qsTr("Distance matrix file") - visible: typeValue == "spatial" && spatialInputTypeValue == "loadFromFile" + visible: typeValue == "spatial" && distanceMetric.value == "loadFromFile" filter: "*.csv" + save: false } FileSelector { - name: "knownCorrelationMatrixFile" - label: qsTr("Known correlation matrix file") + name: "correlationMatrixFile" + label: qsTr("Correlation matrix file") visible: typeValue == "knownCorrelation" filter: "*.csv" + save: false } Divider { } From 5ce0170e1b2ef78e2e25a82093b53df62457ddbf Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 27 Oct 2024 20:04:40 +0100 Subject: [PATCH 105/127] add testing data sets --- R/classicalmetaanalysiscommon.R | 4 +- tests/dist.csv | 3 + tests/species.phy-dat.csv | 171 ++++++++++++++++++++++++++++++++ tests/species.phy-rmatrix.csv | 121 ++++++++++++++++++++++ 4 files changed, 296 insertions(+), 3 deletions(-) create mode 100644 tests/dist.csv create mode 100644 tests/species.phy-dat.csv create mode 100644 tests/species.phy-rmatrix.csv diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 0d8e4d9d..496d3783 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -39,6 +39,7 @@ # - vs covariates # Generic # - allow different covariates factoring across all settings +# Add spe .ClassicalMetaAnalysisCommon <- function(jaspResults, dataset, options, ...) { @@ -274,9 +275,6 @@ fitPermutation = fitPermutation ) - saveRDS(fit, file = "C:/JASP/fit.RDS") - saveRDS(fitClustered, file = "C:/JASP/fitClustered.RDS") - return() } .maFitAddPermutationPValues <- function(fit, fitPerumation, options) { diff --git a/tests/dist.csv b/tests/dist.csv new file mode 100644 index 00000000..c4bc2085 --- /dev/null +++ b/tests/dist.csv @@ -0,0 +1,3 @@ +,m,f +m,1,1.2 +f,1.2,1 diff --git a/tests/species.phy-dat.csv b/tests/species.phy-dat.csv new file mode 100644 index 00000000..176d81f6 --- /dev/null +++ b/tests/species.phy-dat.csv @@ -0,0 +1,171 @@ +"","article","author","year","species","amniotes","environment","ri","ni","yi","vi","species.phy","esid" +"1",1,"Abell, A.J.","1999","Sceloporus_virgatus","yes","wild",0.1,21,0.100335347731076,0.0555555555555556,"Sceloporus_virgatus",1 +"2",1,"Abell, A.J.","1999","Sceloporus_virgatus","yes","wild",-0.17,14,-0.171666663500579,0.0909090909090909,"Sceloporus_virgatus",2 +"3",1,"Abell, A.J.","1999","Sceloporus_virgatus","yes","wild",-0.07,21,-0.0701146706543251,0.0555555555555556,"Sceloporus_virgatus",3 +"4",1,"Abell, A.J.","1999","Sceloporus_virgatus","yes","wild",-0.14,14,-0.140925576070494,0.0909090909090909,"Sceloporus_virgatus",4 +"5",2,"Allaine, D., Graziani, L. & Coulon, J.","1998","Marmota_marmota","yes","wild",-0.54,74,-0.604155602962267,0.0140845070422535,"Marmota_marmota",5 +"6",3,"Baron, J.P., Tully, T. & Le Galliard, J.F.","2010","Vipera_ursinii","yes","wild",0.487,105,0.532120050644693,0.00980392156862745,"Vipera_ursinii",6 +"7",4,"Blouin-Demers, G. & Weatherhead, P.J.","2007","Pantherophis_obsoletus","yes","wild",-0.29,104,-0.298566263660178,0.0099009900990099,"Pantherophis_obsoletus",7 +"8",5,"Bluhm, C.K. & Gowaty, P.A.","2004","Anas_platyrhynchos","yes","captive",0.395,49,0.417710618112312,0.0217391304347826,"Anas_platyrhynchos",8 +"9",6,"Brown, G.P. & Shine, R.","2005","Tropidonophis_mairii","yes","wild",-0.13,318,-0.130739850028878,0.00317460317460317,"Tropidonophis_mairii",9 +"10",10,"Dobson, F.S. & Michener, G.R.","1995","Urocitellus_richardsonii","yes","wild",-0.67,51,-0.810743125475137,0.0208333333333333,"Urocitellus_richardsonii",10 +"11",10,"Dobson, F.S. & Michener, G.R.","1995","Urocitellus_richardsonii","yes","wild",-0.4,38,-0.423648930193602,0.0285714285714286,"Urocitellus_richardsonii",11 +"12",11,"Dobson, F.S., Risch, T.S. & Murie, J.O.","1999","Urocitellus_richardsonii","yes","wild",-0.53,134,-0.590145159841189,0.00763358778625954,"Urocitellus_richardsonii",12 +"13",11,"Dobson, F.S., Risch, T.S. & Murie, J.O.","1999","Urocitellus_richardsonii","yes","wild",-0.5,43,-0.549306144334055,0.025,"Urocitellus_richardsonii",13 +"14",15,"Ebert, D.","1993","Daphnia_magna","no","captive",0.03,215,0.0300090048631265,0.00471698113207547,"Daphnia_magna",14 +"15",16,"Edwards, T.M., Miller, H.D. & Guillette Jr., L.J.","2006","Gambusia_holbrooki","no","wild",-0.32,240,-0.331647108705132,0.00421940928270042,"Gambusia_holbrooki",15 +"16",17,"Ferreiro, R. & Galan, P.","2004","Anguis_fragilis","yes","captive",0.898,68,1.4617915829428,0.0153846153846154,"Anguis_fragilis",16 +"17",20,"Galeotti, P., Rubolini, D., Fea, G., Ghia, D., Nardi, P.A., Gherardi, F. & Fasola, M.","2006","Austropotamobius_italicus","no","wild",-0.17,68,-0.171666663500579,0.0153846153846154,"Austropotamobius_italicus",17 +"18",21,"Genoud, M. & Perrin, N.","1994","Crocidura_russula","yes","captive",-0.64,62,-0.758173744684044,0.0169491525423729,"Crocidura_russula",18 +"19",22,"Gignac, A. & Gregory, P.T.","2005","Thamnophis_ordinoides","yes","captive",-0.22,24,-0.223656109021832,0.0476190476190476,"Thamnophis_ordinoides",19 +"20",23,"Glazier, D.S.","1992","Daphnia_magna","no","captive",0.752,43,0.977542262665677,0.025,"Daphnia_magna",20 +"21",23,"Glazier, D.S.","1992","Daphnia_magna","no","captive",0.168,43,0.169607861283482,0.025,"Daphnia_magna",21 +"22",27,"Hassal, M., Walters, R.J., Telfer, M. & Hassall, M.R.J.","2006","Chorthippus_brunneus","no","wild",-0.406,27,-0.430812376503983,0.0416666666666667,"Chorthippus_brunneus",22 +"23",27,"Hassal, M., Walters, R.J., Telfer, M. & Hassall, M.R.J.","2006","Chorthippus_brunneus","no","captive",-0.433,131,-0.46358306205021,0.0078125,"Chorthippus_brunneus",23 +"24",30,"Huber, S., Hoffmann, E., Millesi, E., Dittami, J. & Arnold, W.","2001","Urocitellus_richardsonii","yes","wild",-0.86,27,-1.29334467204897,0.0416666666666667,"Urocitellus_richardsonii",24 +"25",32,"Kasparian, K., Gei_ler, E. & Trillmich, F.","2005","Cavia_aperea","yes","captive",-0.53,249,-0.590145159841189,0.0040650406504065,"Cavia_aperea",25 +"26",36,"Luiselli, L., Capula, M. & Shine, R.","1996","Coronella_austriaca","yes","wild",0.4,28,0.423648930193602,0.04,"Coronella_austriaca",26 +"27",39,"Marsh-Matthews, E., Brooks, M., Deaton, R. & Tan, H.","2005","Gambusia_affinis","no","captive",-0.393,23,-0.415343091360154,0.05,"Gambusia_affinis",27 +"28",39,"Marsh-Matthews, E., Brooks, M., Deaton, R. & Tan, H.","2005","Gambusia_geiseri","no","captive",0.088,26,0.0882282186707783,0.0434782608695652,"Gambusia_geiseri",28 +"29",40,"Michel, C.L. & Bonnet, X.","2012","Cavia_aperea","yes","captive",-0.78,22,-1.04537054846688,0.0526315789473684,"Cavia_aperea",29 +"30",41,"Michimae, H.","2007","Hynobius_retardatus","no","captive",-0.658,154,-0.789278299316318,0.00662251655629139,"Hynobius_retardatus",30 +"31",42,"Radder, R.S. & Shanbhag, B.A.","2004","Calotes_versicolor","yes","wild",-0.57,25,-0.647522844827373,0.0454545454545455,"Calotes_versicolor",31 +"32",46,"Scantlebury, M., Butterwick, R. & Speakman, J.R.","2001","Canis_lupus","yes","captive",-0.319,12,-0.330533423283901,0.111111111111111,"Canis_lupus",32 +"33",46,"Scantlebury, M., Butterwick, R. & Speakman, J.R.","2001","Canis_lupus","yes","captive",-0.418,7,-0.445266129680317,0.25,"Canis_lupus",33 +"34",49,"Sikes, R.S.","1995","Onychomys_leucogaster","yes","captive",0.282,42,0.289853534216196,0.0256410256410256,"Onychomys_leucogaster",34 +"35",51,"Skibiel, A.L., Dobson, F.S. & Murie, J.O.","2009","Urocitellus_columbianus","yes","wild",-0.28,90,-0.287682072451781,0.0114942528735632,"Urocitellus_columbianus",35 +"36",53,"Stuart-Smith, J., Swain, R., Stuart-Smith, R.D. & Wapstra, E.","2007","Rankinia_diemensis","yes","captive",0.05,90,0.0500417292784913,0.0114942528735632,"Rankinia_diemensis",36 +"37",54,"Taborsky, B., Skubic, E. & Bruintjes, R.","2007","Neolamprologus_pulcher","no","captive",0.26,10,0.266108406873654,0.142857142857143,"Neolamprologus_pulcher",37 +"38",56,"Wagner, E.C. & Williams, T.D.","2007","Taeniopygia_guttata","yes","captive",0.56,52,0.632833186665638,0.0204081632653061,"Taeniopygia_guttata",38 +"39",56,"Wagner, E.C. & Williams, T.D.","2007","Taeniopygia_guttata","yes","captive",0.39,22,0.41180003447869,0.0526315789473684,"Taeniopygia_guttata",39 +"40",57,"Walker, S.E., Rypstra, A.L. & Marshall, S.D.","2003","Hogna_helluo","no","wild",-0.118,17,-0.118552298854127,0.0714285714285714,"Hogna_helluo",40 +"41",58,"Wilkinson, L.R. & Gibbons, J.W.","2005","Kinosternon_subrubrum","yes","wild",0.083,635,0.0831913873722629,0.00158227848101266,"Kinosternon_subrubrum",41 +"42",58,"Wilkinson, L.R. & Gibbons, J.W.","2005","Pseudemys_floridana","yes","wild",0.158,79,0.159334821945307,0.0131578947368421,"Pseudemys_floridana",42 +"43",58,"Wilkinson, L.R. & Gibbons, J.W.","2005","Sternotherus_odoratus","yes","wild",0.193,46,0.195451376913984,0.0232558139534884,"Sternotherus_odoratus",43 +"44",59,"Bonnet, X., Naulleau, G., Shine, R. & Lourdais, O.","2001","Vipera_aspis","yes","wild",-0.14,132,-0.140925576070494,0.00775193798449612,"Vipera_aspis",44 +"45",60,"Oksanen, T.A., Koskela,E. & Mappes, T.","2002","Myodes_glareolus","yes","captive",-0.894,38,-1.44150358981698,0.0285714285714286,"Myodes_glareolus",45 +"46",61,"Rasanen, K., Fredrik, S., Laurila, A. & Merila, J.","2008","Rana_arvalis","no","wild",-0.474,233,-0.515216930005786,0.00434782608695652,"Rana_arvalis",46 +"47",62,"Rollison, N., Brooks, R.J.","2008","Chrysemys_picta","yes","wild",-0.141,130,-0.14194571393891,0.0078740157480315,"Chrysemys_picta",47 +"48",63,"Weatherhead, P.J., Brown, G.P., Prosser, M.R. & Kissner, K.J.","1999","Nerodia_sipedon","yes","wild",-0.22,75,-0.223656109021832,0.0138888888888889,"Nerodia_sipedon",48 +"49",64,"Lim, J.N.",NA,"Gambusia_affinis","no","captive",0.208,23,0.211079993340167,0.05,"Gambusia_affinis",49 +"50",65,"Arcos-Garcia, J. L., Martinez, G. D. M., Gama, R. B., Barros, O. V. E. & Morales, G. E. L.","2010","Iguana_iguana","yes","captive",0.26,137,0.266108406873654,0.00746268656716418,"Iguana_iguana",50 +"51",66,"Bauerfeind, S. S. & Fischer, K.","2007","Bicyclus_anynana","no","captive",-0.27,86,-0.2768638226551,0.0120481927710843,"Bicyclus_anynana",51 +"52",67,"Bauerfeind, S. S. & Fischer, K.","2008","Araschnia_levana","no","captive",0.37,142,0.388423099718296,0.00719424460431655,"Araschnia_levana",52 +"53",68,"Bradshaw, W. E., Holzapfel, C. M. & Oneill, T.","1993","Wyeomyia_smithii","no","captive",-0.026,41,-0.0260058610440899,0.0263157894736842,"Wyeomyia_smithii",53 +"54",69,"Brana, F., Bea, A. & Arrayago, M. J.","1991","Zootoca_vivipara","yes","captive",0.819,14,1.15377257362615,0.0909090909090909,"Zootoca_vivipara",54 +"55",70,"Brooks, R. J., Shilton, C. M., Brown, G. P. & Quinn, N. W. S.","1992","Clemmys_insculpta","yes","wild",0.5,21,0.549306144334055,0.0555555555555556,"Clemmys_insculpta",55 +"56",73,"Cabezas-Diaz, S., Virgos, E. & Villafuerte, R.","2005","Alectoris_rufa","yes","captive",0.54,23,0.604155602962267,0.05,"Alectoris_rufa",56 +"57",75,"Castilla, A. M. & Bauwens, D.","2000a","Podarcis_atrata","yes","captive",-0.552,152,-0.62125323416409,0.00671140939597315,"Podarcis_atrata",57 +"58",76,"Castilla, A. M. & Bauwens, D.","2000b","Podarcis_lilfordi","yes","captive",-0.476,27,-0.517799660419688,0.0416666666666667,"Podarcis_lilfordi",58 +"59",77,"Castro-Franco, R., Bustos-Zagal, M. G. & Mendez-De la Cruz, F. R.","2011","Ctenosaura_pectinata","yes","captive",0.408,25,0.433209450916991,0.0454545454545455,"Ctenosaura_pectinata",59 +"60",78,"Christians, J. K. & Williams, T. D.","2002","Taeniopygia_guttata","yes","captive",0.1,42,0.100335347731076,0.0256410256410256,"Taeniopygia_guttata",60 +"61",79,"Clark, D. R., Bunck, C. M. & Hall, R. J.","1997","Diadophis_punctatus","yes","captive",-0.23,47,-0.234189466759367,0.0227272727272727,"Diadophis_punctatus",61 +"62",80,"Clark, P. J., Ewert, M. A. & Nelson, C. E.","2001","Sternotherus_odoratus","yes","wild",-0.36,70,-0.37688590118819,0.0149253731343284,"Sternotherus_odoratus",62 +"63",81,"Congdon, J. D. & Sels, R. C. V.","1991","Emydoidea_blandingii","yes","wild",0.439,219,0.470991400682336,0.00462962962962963,"Emydoidea_blandingii",63 +"64",82,"Conrad, K. F. & Robertson, R. J.","1992","Sayornis_phoebe","yes","wild",-0.37,32,-0.388423099718296,0.0344827586206897,"Sayornis_phoebe",64 +"65",83,"Costantini, D., Carello, L. & Dell'Omo, G.","2010","Falco_tinnunculus","yes","wild",0.128,1368,0.128706004074512,0.000732600732600733,"Falco_tinnunculus",65 +"66",85,"Doody, J. S., Georges, A. & Young, J. E.","2003","Carettochelys_insculpta","yes","wild",-0.32,44,-0.331647108705132,0.024390243902439,"Carettochelys_insculpta",66 +"67",85,"Doody, J. S., Georges, A. & Young, J. E.","2003","Carettochelys_insculpta","yes","wild",-0.254,44,-0.259684060494553,0.024390243902439,"Carettochelys_insculpta",67 +"68",85,"Doody, J. S., Georges, A. & Young, J. E.","2003","Carettochelys_insculpta","yes","wild",0.098,69,0.0983155510034261,0.0151515151515152,"Carettochelys_insculpta",68 +"69",86,"Du, Y., Lin, C. X., Lin, L. H., Qiu, Q. B. & Ji, X.","2011","Leiolepis_reevesii","yes","captive",-0.26,200,-0.266108406873654,0.0050761421319797,"Leiolepis_reevesii",69 +"70",87,"Dufva, R.","1996","Parus_major","yes","wild",0.086,73,0.0862129645198654,0.0142857142857143,"Parus_major",70 +"71",88,"Formanowicz, D. R. & Shaffer, L. R.","1993","Centruroides_vittatus","no","captive",0.156,34,0.157284277318183,0.032258064516129,"Centruroides_vittatus",71 +"72",92,"Galdino, C. A. B. & Van Sluys, M.","2011","Eurolophosaurus_nanuzae","yes","wild",0.19,12,0.192337169219545,0.111111111111111,"Eurolophosaurus_nanuzae",72 +"73",93,"Guntrip, J., Sibly, R. M. & Smith, R. H.","1997","Prostephanus_truncatus","no","captive",-0.417,54,-0.444055026670094,0.0196078431372549,"Prostephanus_truncatus",73 +"74",96,"Herrmann, P. A. & Herrmann, H. W.","2005","Chamaeleo_montium","yes","captive",0.31,49,0.320545409301946,0.0217391304347826,"Chamaeleo_montium",74 +"75",97,"Horak, D., Klvana, P. & Albrecht, T.","2008","Aythya_ferina","yes","wild",0.01,25,0.0100003333533348,0.0454545454545455,"Aythya_ferina",75 +"76",98,"Isaksson, C., Johansson, A. & Andersson, S.","2008","Parus_major","yes","wild",0.021,66,0.0210030878170776,0.0158730158730159,"Parus_major",76 +"77",99,"Iverson, J. B., Barthelmess, E. L., Smith, G. R. & Derivera, C. E.","1991","Kinosternon_hirtipes","yes","wild",-0.36,11,-0.37688590118819,0.125,"Kinosternon_hirtipes",77 +"78",100,"Iverson, J. B. & Smith, G. R.","1993","Chrysemys_picta","yes","wild",0.03,202,0.0300090048631265,0.0050251256281407,"Chrysemys_picta",78 +"79",101,"Iverson, J. B. & Moler, P. E.","1997","Apalone_ferox","yes","wild",-0.015,41,-0.0150011251518994,0.0263157894736842,"Apalone_ferox",79 +"80",103,"Iverson, J. B., Hines, K. N. & Valiulis, J. M.","2004","Cyclura_cychlura","yes","wild",0.06,78,0.0600721559210316,0.0133333333333333,"Cyclura_cychlura",80 +"81",104,"Iverson, J. B., Young, C. A., Akre, T. S. B. & Griffiths, C. M.","2012","Pituophis_catenifer","yes","wild",-0.34,39,-0.354092528962243,0.0277777777777778,"Pituophis_catenifer",81 +"82",105,"Janzen, F. J.","1993","Apalone_mutica","yes","wild",0.365,6,0.382642354363184,0.333333333333333,"Apalone_mutica",82 +"83",105,"Janzen, F. J.","1993","Apalone_mutica","yes","wild",-0.141,14,-0.14194571393891,0.0909090909090909,"Apalone_mutica",83 +"84",106,"Jarvinen, A.","1996","Ficedula_hypoleuca","yes","wild",-0.033,567,-0.0330119868331721,0.00177304964539007,"Ficedula_hypoleuca",84 +"85",107,"Ji, X., Qiu, Q. B. & Diong, C. H.","2002","Calotes_versicolor","yes","captive",-0.12,20,-0.120581028408444,0.0588235294117647,"Calotes_versicolor",85 +"86",110,"Kamosawa, M. & Ota, H.","1996","Ramphotyphlops_braminus","yes","captive",-0.238,19,-0.242652948778948,0.0625,"Ramphotyphlops_braminus",86 +"87",111,"King, R. B.","1993","Storeria_dekayi","yes","captive",-0.83,25,-1.1881364043926,0.0454545454545455,"Storeria_dekayi",87 +"88",115,"Luddecke, H.","2002","Hyla_labialis","no","captive",-0.425,85,-0.4537785259527,0.0121951219512195,"Hyla_labialis",88 +"89",115,"Luddecke, H.","2002","Hyla_labialis","no","captive",-0.497,25,-0.545314107159945,0.0454545454545455,"Hyla_labialis",89 +"90",115,"Luddecke, H.","2002","Hyla_labialis","no","captive",-0.337,15,-0.35070429345804,0.0833333333333333,"Hyla_labialis",90 +"91",116,"Luiselli, L., Capula, M. & Shine, R.","1997","Natrix_natrix","yes","captive",-0.02,18,-0.0200026673068496,0.0666666666666667,"Natrix_natrix",91 +"92",119,"Czapulak, A.","2002","Cygnus_olor","yes","wild",0.108,390,0.10842286736361,0.00258397932816537,"Cygnus_olor",92 +"93",120,"Diaz, J. A., Perez-Tris, Bauwens, D., Perez-Aranda, D. Carbonell, R., Santos, T & Telleria, J.","2007","Psammodromus_algirus","yes","wild",-0.439,54,-0.470991400682336,0.0196078431372549,"Psammodromus_algirus",93 +"94",120,"Diaz, J. A., Perez-Tris, Bauwens, D., Perez-Aranda, D. Carbonell, R., Santos, T & Telleria, J.","2007","Psammodromus_algirus","yes","wild",-0.411,22,-0.436813884100614,0.0526315789473684,"Psammodromus_algirus",94 +"95",122,"Ji, X. & Brana, F.","2000","Podarcis_muralis","yes","wild",0.44,44,0.472230804420426,0.024390243902439,"Podarcis_muralis",95 +"96",123,"Macip-Ri_os, R. Cisneros, M., Aguilar-Miguel X., & Casas-Andreu, G.","2009","Kinosternon_integrum","yes","wild",-0.787,20,-1.063500674725,0.0588235294117647,"Kinosternon_integrum",96 +"97",124,"Maddox, J. D. & Weatherhead, P. J.","2012","Quiscalus_quiscula","yes","wild",0.154,161,0.155235043730911,0.00632911392405063,"Quiscalus_quiscula",97 +"98",125,"Mallory, M., McNicol, D. & Weatherhead, P.","1994","Bucephala_clangula","yes","wild",-0.19,31,-0.192337169219545,0.0357142857142857,"Bucephala_clangula",98 +"99",126,"Marquez, R.","1996","Alytes_obstetricans","no","wild",-0.04,67,-0.0400213538367682,0.015625,"Alytes_obstetricans",99 +"100",127,"Moreno, J., Merino, S., Vasquez, R. and Armesto, J.","2005","Aphrastura_spinicauda","yes","wild",0.414,30,0.440429028439753,0.037037037037037,"Aphrastura_spinicauda",100 +"101",128,"Nelson, N., Thompson, M. Pledger, S. Keall, S. & Daugherty, C.","2004","Sphenodon_punctatus","yes","wild",0.102,50,0.10235596070533,0.0212765957446809,"Sphenodon_punctatus",101 +"102",129,"Nieuwolt-Dacanay, P. M.","1997","Terrapene_ornata","yes","wild",0.107,203,0.107411175916069,0.005,"Terrapene_ornata",102 +"103",130,"Nilsson, J. & Svensson, E.","1993","Parus_caeruleus","yes","wild",-0.034,108,-0.0340131104279282,0.00952380952380952,"Parus_caeruleus",103 +"104",132,"Podlesak, D. & Blem, C.","2001","Protonotaria_citrea","yes","wild",-0.575,211,-0.654960691167658,0.00480769230769231,"Protonotaria_citrea",104 +"105",133,"Potti, J.","1993","Ficedula_hypoleuca","yes","wild",-0.06,103,-0.0600721559210316,0.01,"Ficedula_hypoleuca",105 +"106",134,"Radder, R. & Shanbhag, B.","2003","Sitana_ponticeriana","yes","wild",0.175,29,0.176820020121789,0.0384615384615385,"Sitana_ponticeriana",106 +"107",135,"Randriamahazo, H & Mori, A","2001","Oplurus_cuvieri","yes","wild",-0.22,19,-0.223656109021832,0.0625,"Oplurus_cuvieri",107 +"108",136,"Roosenburg, W. & Dunham, A.","1997","Malaclemys_terrapin","yes","wild",0.045,92,0.0450304119590906,0.0112359550561798,"Malaclemys_terrapin",108 +"109",136,"Roosenburg, W. & Dunham, A.","1997","Malaclemys_terrapin","yes","wild",0.198,95,0.20065008540444,0.0108695652173913,"Malaclemys_terrapin",109 +"110",137,"Rowe, J.","1992","Emydoidea_blandingii","yes","wild",-0.6,17,-0.693147180559945,0.0714285714285714,"Emydoidea_blandingii",110 +"111",138,"Samraoui, F., Menai, R. & Samraoui, B.","2007","Bubulcus_ibis","yes","wild",0.24,61,0.244774112659353,0.0172413793103448,"Bubulcus_ibis",111 +"112",139,"Schwarzkopf, L.","1992","Eulamprus_tympanum","yes","captive",-0.055,45,-0.0550555592082121,0.0238095238095238,"Eulamprus_tympanum",112 +"113",139,"Schwarzkopf, L.","1992","Eulamprus_tympanum","yes","captive",-0.302,48,-0.311718860003071,0.0222222222222222,"Eulamprus_tympanum",113 +"114",141,"Shanbhag, B. A.,Radder, R. S. & Saidapur, S. K.","2000","Calotes_versicolor","yes","wild",-0.236,131,-0.240533924425558,0.0078125,"Calotes_versicolor",114 +"115",143,"Sinervo, B. & Licht, P.","1991","Uta_stansburiana","yes","captive",-0.67,13,-0.810743125475137,0.1,"Uta_stansburiana",115 +"116",143,"Sinervo, B. & Licht, P.","1991","Uta_stansburiana","yes","captive",-0.59,34,-0.677666067757962,0.032258064516129,"Uta_stansburiana",116 +"117",143,"Sinervo, B. & Licht, P.","1991","Uta_stansburiana","yes","captive",-0.7,37,-0.867300527694053,0.0294117647058824,"Uta_stansburiana",117 +"118",144,"Smith, G. R., Ballinger, R. E. & Rose, B. R.","1995","Sceloporus_virgatus","yes","wild",0.141,28,0.14194571393891,0.04,"Sceloporus_virgatus",118 +"119",145,"Smith, H. G., Ottosson, U. & Ohlsson, T.","1993","Sturnus_vulgaris","yes","wild",0.27,33,0.2768638226551,0.0333333333333333,"Sturnus_vulgaris",119 +"120",145,"Smith, H. G., Ottosson, U. & Ohlsson, T.","1993","Sturnus_vulgaris","yes","wild",0.18,125,0.181982688600706,0.00819672131147541,"Sturnus_vulgaris",120 +"121",145,"Smith, H. G., Ottosson, U. & Ohlsson, T.","1993","Sturnus_vulgaris","yes","wild",0.07,187,0.0701146706543251,0.00543478260869565,"Sturnus_vulgaris",121 +"122",146,"Tanaka, K. & Mori, A.","2011","Elaphe_quadrivirgata","yes","captive",-0.69,43,-0.847955755218963,0.025,"Elaphe_quadrivirgata",122 +"123",146,"Tanaka, K. & Mori, A.","2011","Elaphe_quadrivirgata","yes","captive",-0.8,12,-1.09861228866811,0.111111111111111,"Elaphe_quadrivirgata",123 +"124",147,"Tejedo, M.","1992","Epidalea_calamita","no","captive",0.409,94,0.434409747246291,0.010989010989011,"Epidalea_calamita",124 +"125",148,"Thorbjarnarson, J. B.","1994","Caiman_crocodilus","yes","wild",0.28,152,0.287682072451781,0.00671140939597315,"Caiman_crocodilus",125 +"126",150,"Timi, J. T., Lanfranchi, A. L. & Poulin, R.","2005","Lernanthropus_cynoscicola","no","wild",0.541,54,0.605568312629785,0.0196078431372549,"Lernanthropus_cynoscicola",126 +"127",153,"Uzun, A., Uzun, B. & Kopij, G.","2010","Fulica_atra","yes","wild",-0.54,9,-0.604155602962267,0.166666666666667,"Fulica_atra",127 +"128",154,"Wallace, B. P., Sotherland, P. R., Tomillo, P. S., Reina, R. D., Spotila, J. R. & Paladino, F. V.","2007","Dermochelys_coriacea","yes","wild",0.036,137,0.0360155641044414,0.00746268656716418,"Dermochelys_coriacea",128 +"129",155,"Wheelwright, N. T., Leary, J. & Fitzgerald, C.","1991","Tachycineta_bicolor","yes","wild",-0.26,12,-0.266108406873654,0.111111111111111,"Tachycineta_bicolor",129 +"130",155,"Wheelwright, N. T., Leary, J. & Fitzgerald, C.","1991","Tachycineta_bicolor","yes","wild",-0.29,55,-0.298566263660178,0.0192307692307692,"Tachycineta_bicolor",130 +"131",155,"Wheelwright, N. T., Leary, J. & Fitzgerald, C.","1991","Tachycineta_bicolor","yes","wild",-0.21,52,-0.21317134656486,0.0204081632653061,"Tachycineta_bicolor",131 +"132",155,"Wheelwright, N. T., Leary, J. & Fitzgerald, C.","1991","Tachycineta_bicolor","yes","wild",0.12,21,0.120581028408444,0.0555555555555556,"Tachycineta_bicolor",132 +"133",156,"You, Y. Y., Feng, J., Wang, H. T., Wang, J. L., Dong, C., Su, X. R., Sun, H. M. & Gao, W.","2009","Parus_major","yes","wild",-0.204,818,-0.206902720012192,0.00122699386503067,"Parus_major",133 +"134",157,"Van-Damme, R., Bauwens, D., Brana, F. & Verheyen, R.","1992","Podarcis_muralis","yes","captive",-0.207,14,-0.210034999731342,0.0909090909090909,"Podarcis_muralis",134 +"135",158,"Murphy, M., Armbrecth, B., Vlamis, E. & Pierce, A.","2000","Tachycineta_bicolor","yes","wild",-0.178,52,-0.179916484577676,0.0204081632653061,"Tachycineta_bicolor",135 +"136",159,"Naef-Daenzer, L., Nager, R., Keller, L. & Naef-Daenzer, B.","2004","Parus_major","yes","wild",-0.685,57,-0.838474101980415,0.0185185185185185,"Parus_major",136 +"137",160,"Pettifor, R., Perrins, C. & McCleery","2001","Parus_major","yes","wild",0.14,525,0.140925576070494,0.00191570881226054,"Parus_major",137 +"138",161,"Rauter, C., Mcguire, M., Gwartney, M. & Space, J.","2010","Nicrophorus_pustulatus","no","captive",-0.558,120,-0.629924172176498,0.00854700854700855,"Nicrophorus_pustulatus",138 +"139",162,"Saeki, Y., Crowley, P., Fox, C. & Potter, D.","2009","Copidosoma_bakeri","no","captive",-0.758,25,-0.991497176044218,0.0454545454545455,"Copidosoma_bakeri",139 +"140",163,"Saino, N., Incagli, M., Martinelli, R., Ambrosini, R & Moller, A.","2001","Hirundo_rustica","yes","wild",-0.47,32,-0.510070336613307,0.0344827586206897,"Hirundo_rustica",140 +"141",164,"Sanchez-Lafuente, A.","2004","Porphyrio_porphyrio","yes","wild",0.498,19,0.546643022192718,0.0625,"Porphyrio_porphyrio",141 +"142",164,"Sanchez-Lafuente, A.","2004","Porphyrio_porphyrio","yes","wild",0.7,16,0.867300527694053,0.0769230769230769,"Porphyrio_porphyrio",142 +"143",165,"Jarvinen, A.","1991","Ficedula_hypoleuca","yes","wild",0.32,262,0.331647108705132,0.00386100386100386,"Ficedula_hypoleuca",143 +"144",165,"Jarvinen, A.","1991","Phoenicurus_phoenicurus","yes","wild",0.32,94,0.331647108705132,0.010989010989011,"Phoenicurus_phoenicurus",144 +"145",167,"Rua, M. & P., Galan","2002","Iberolacerta_monticola","yes","captive",-0.36,54,-0.37688590118819,0.0196078431372549,"Iberolacerta_monticola",145 +"146",168,"Bejakovic, D., Kalezic, M. Aleksic, I., Dzukic, G. & Crnobrnja-Isalovic, J.","1995","Podarcis_melisellensis","yes","wild",-0.81,6,-1.12702902604969,0.333333333333333,"Podarcis_melisellensis",146 +"147",168,"Bejakovic, D., Kalezic, M. Aleksic, I., Dzukic, G. & Crnobrnja-Isalovic, J.","1995","Podarcis_melisellensis","yes","captive",-0.06,38,-0.0600721559210316,0.0285714285714286,"Podarcis_melisellensis",147 +"148",169,"Adamopoulou, C. & Valakos, E.","2000","Podarcis_milensis","yes","wild",-0.475,126,-0.516507503091148,0.00813008130081301,"Podarcis_milensis",148 +"149",173,"Sasvari, L., Hegyi, Z. & Hahn, I.","1999","Ciconia_ciconia","yes","wild",0.098,96,0.0983155510034261,0.010752688172043,"Ciconia_ciconia",149 +"150",173,"Sasvari, L., Hegyi, Z. & Hahn, I.","1999","Ciconia_ciconia","yes","wild",0.12,109,0.120581028408444,0.00943396226415094,"Ciconia_ciconia",150 +"151",174,"Ramirez-Bautista, A., Stephenson, B. P., Hernandez-Ibarra, X., Hernandez-Salinas, U., Cruz-Elizalde, R., Lozano, A. & Geoffrey, R.S.","2012","Sceloporus_spinosus","yes","wild",0.424,10,0.452558715638015,0.142857142857143,"Sceloporus_spinosus",151 +"152",175,"Rohwer, F. C. & Eisenhaur, D. I.","1989","Chen_canagica","yes","wild",-0.036,277,-0.0360155641044414,0.00364963503649635,"Chen_canagica",152 +"153",175,"Rohwer, F. C. & Eisenhaur, D. I.","1989","Branta_canadensis","yes","wild",-0.056,82,-0.0560586490603531,0.0126582278481013,"Branta_canadensis",153 +"154",175,"Rohwer, F. C. & Eisenhaur, D. I.","1989","Branta_bernicla","yes","wild",-0.028,25,-0.0280073207773357,0.0454545454545455,"Branta_bernicla",154 +"155",175,"Rohwer, F. C. & Eisenhaur, D. I.","1989","Branta_bernicla","yes","wild",0.314,57,0.324976785659335,0.0185185185185185,"Branta_bernicla",155 +"156",175,"Rohwer, F. C. & Eisenhaur, D. I.","1989","Cygnus_buccinator","yes","wild",-0.226,21,-0.229970121453215,0.0555555555555556,"Cygnus_buccinator",156 +"157",175,"Rohwer, F. C. & Eisenhaur, D. I.","1989","Cygnus_buccinator","yes","wild",0.334,29,0.34732377796759,0.0384615384615385,"Cygnus_buccinator",157 +"158",175,"Rohwer, F. C. & Eisenhaur, D. I.","1989","Somateria_fischeri","yes","wild",-0.157,30,-0.158309384595911,0.037037037037037,"Somateria_fischeri",158 +"159",177,"Milanovich, J. R., Trauth, S. E., Saugey, D. A. & Jordan, R. R.","2006","Plethodon_albagula","no","wild",-0.609,91,-0.707330293503509,0.0113636363636364,"Plethodon_albagula",159 +"160",178,"Jones","unpub","Galaxias_anomalus","no","wild",-0.166,25,-0.167550482275845,0.0454545454545455,"Galaxias_anomalus",160 +"161",178,"Jones","unpub","Galaxias_depressiceps","no","wild",0.237,19,0.241593170554015,0.0625,"Galaxias_depressiceps",161 +"162",178,"Jones","unpub","Galaxias_eldoni","no","wild",0.395,22,0.417710618112312,0.0526315789473684,"Galaxias_eldoni",162 +"163",178,"Jones","unpub","Galaxias_pullus","no","wild",0.284,17,0.29202765864463,0.0714285714285714,"Galaxias_pullus",163 +"164",178,"Jones","unpub","Galaxias_gollumoides","no","wild",0.096,18,0.0962965535578922,0.0666666666666667,"Galaxias_gollumoides",164 +"165",178,"Jones","unpub","Galaxias_southern","no","wild",0.541,20,0.605568312629785,0.0588235294117647,"Galaxias_southern",165 +"166",178,"Jones","unpub","Galaxias_D.","no","wild",0.214,8,0.217359589595119,0.2,"Galaxias_D.",166 +"167",178,"Jones","unpub","Galaxias_vulgaris","no","wild",-0.387,15,-0.40826674218931,0.0833333333333333,"Galaxias_vulgaris",167 +"168",179,"Ford, N. B. & Seigel, R. A.","2010","Spalerosophis_diadema","yes","captive",-0.265,30,-0.271478450974392,0.037037037037037,"Spalerosophis_diadema",168 +"169",180,"Uller, T. & Olsson, M.","2011","Ctenophorus_fordi","yes","captive",0.123,178,0.12362598118313,0.00571428571428571,"Ctenophorus_fordi",169 +"170",181,"Boulton, R. L. Powlesland, R. G.","2008","Petroica_australis","yes","wild",-0.104,133,-0.104377406931055,0.00769230769230769,"Petroica_australis",170 diff --git a/tests/species.phy-rmatrix.csv b/tests/species.phy-rmatrix.csv new file mode 100644 index 00000000..34ca3034 --- /dev/null +++ b/tests/species.phy-rmatrix.csv @@ -0,0 +1,121 @@ +"","Hogna_helluo","Centruroides_vittatus","Chorthippus_brunneus","Prostephanus_truncatus","Nicrophorus_pustulatus","Copidosoma_bakeri","Wyeomyia_smithii","Araschnia_levana","Bicyclus_anynana","Lernanthropus_cynoscicola","Daphnia_magna","Austropotamobius_italicus","Galaxias_pullus","Galaxias_eldoni","Galaxias_gollumoides","Galaxias_anomalus","Galaxias_depressiceps","Galaxias_southern","Galaxias_D.","Galaxias_vulgaris","Gambusia_geiseri","Gambusia_affinis","Gambusia_holbrooki","Neolamprologus_pulcher","Plethodon_albagula","Hynobius_retardatus","Alytes_obstetricans","Rana_arvalis","Epidalea_calamita","Hyla_labialis","Cavia_aperea","Marmota_marmota","Urocitellus_columbianus","Urocitellus_richardsonii","Onychomys_leucogaster","Myodes_glareolus","Crocidura_russula","Canis_lupus","Carettochelys_insculpta","Apalone_ferox","Apalone_mutica","Dermochelys_coriacea","Sternotherus_odoratus","Kinosternon_subrubrum","Kinosternon_integrum","Kinosternon_hirtipes","Emydoidea_blandingii","Terrapene_ornata","Clemmys_insculpta","Chrysemys_picta","Pseudemys_floridana","Malaclemys_terrapin","Caiman_crocodilus","Alectoris_rufa","Cygnus_olor","Cygnus_buccinator","Branta_bernicla","Branta_canadensis","Chen_canagica","Somateria_fischeri","Bucephala_clangula","Anas_platyrhynchos","Aythya_ferina","Fulica_atra","Porphyrio_porphyrio","Bubulcus_ibis","Ciconia_ciconia","Falco_tinnunculus","Aphrastura_spinicauda","Sayornis_phoebe","Petroica_australis","Parus_caeruleus","Parus_major","Hirundo_rustica","Tachycineta_bicolor","Sturnus_vulgaris","Phoenicurus_phoenicurus","Ficedula_hypoleuca","Taeniopygia_guttata","Protonotaria_citrea","Quiscalus_quiscula","Sphenodon_punctatus","Eulamprus_tympanum","Psammodromus_algirus","Zootoca_vivipara","Podarcis_atrata","Podarcis_melisellensis","Podarcis_milensis","Podarcis_muralis","Podarcis_lilfordi","Iberolacerta_monticola","Anguis_fragilis","Chamaeleo_montium","Leiolepis_reevesii","Rankinia_diemensis","Ctenophorus_fordi","Sitana_ponticeriana","Calotes_versicolor","Cyclura_cychlura","Ctenosaura_pectinata","Iguana_iguana","Uta_stansburiana","Sceloporus_spinosus","Sceloporus_virgatus","Oplurus_cuvieri","Eurolophosaurus_nanuzae","Ramphotyphlops_braminus","Vipera_aspis","Vipera_ursinii","Diadophis_punctatus","Natrix_natrix","Tropidonophis_mairii","Storeria_dekayi","Thamnophis_ordinoides","Nerodia_sipedon","Spalerosophis_diadema","Elaphe_quadrivirgata","Coronella_austriaca","Pituophis_catenifer","Pantherophis_obsoletus" +"Hogna_helluo",1,0.991596638655462,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +"Centruroides_vittatus",0.991596638655462,1,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +"Chorthippus_brunneus",0.907563025210084,0.907563025210084,1,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +"Prostephanus_truncatus",0.907563025210084,0.907563025210084,0.92436974789916,1,0.991596638655462,0.957983193277311,0.957983193277311,0.957983193277311,0.957983193277311,0.932773109243697,0.932773109243697,0.932773109243697,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +"Nicrophorus_pustulatus",0.907563025210084,0.907563025210084,0.92436974789916,0.991596638655462,1,0.957983193277311,0.957983193277311,0.957983193277311,0.957983193277311,0.932773109243697,0.932773109243697,0.932773109243697,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +"Copidosoma_bakeri",0.907563025210084,0.907563025210084,0.92436974789916,0.957983193277311,0.957983193277311,1,0.974789915966387,0.974789915966387,0.974789915966387,0.932773109243697,0.932773109243697,0.932773109243697,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +"Wyeomyia_smithii",0.907563025210084,0.907563025210084,0.92436974789916,0.957983193277311,0.957983193277311,0.974789915966387,1,0.983193277310924,0.983193277310924,0.932773109243697,0.932773109243697,0.932773109243697,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +"Araschnia_levana",0.907563025210084,0.907563025210084,0.92436974789916,0.957983193277311,0.957983193277311,0.974789915966387,0.983193277310924,1,0.991596638655462,0.932773109243697,0.932773109243697,0.932773109243697,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +"Bicyclus_anynana",0.907563025210084,0.907563025210084,0.92436974789916,0.957983193277311,0.957983193277311,0.974789915966387,0.983193277310924,0.991596638655462,1,0.932773109243697,0.932773109243697,0.932773109243697,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +"Lernanthropus_cynoscicola",0.907563025210084,0.907563025210084,0.92436974789916,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,1,0.991596638655462,0.983193277310924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +"Daphnia_magna",0.907563025210084,0.907563025210084,0.92436974789916,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.991596638655462,1,0.983193277310924,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +"Austropotamobius_italicus",0.907563025210084,0.907563025210084,0.92436974789916,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.983193277310924,0.983193277310924,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +"Galaxias_pullus",0,0,0,0,0,0,0,0,0,0,0,0,1,0.991596638655462,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454 +"Galaxias_eldoni",0,0,0,0,0,0,0,0,0,0,0,0,0.991596638655462,1,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454 +"Galaxias_gollumoides",0,0,0,0,0,0,0,0,0,0,0,0,0.941176470588235,0.941176470588235,1,0.991596638655462,0.957983193277311,0.957983193277311,0.957983193277311,0.957983193277311,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454 +"Galaxias_anomalus",0,0,0,0,0,0,0,0,0,0,0,0,0.941176470588235,0.941176470588235,0.991596638655462,1,0.957983193277311,0.957983193277311,0.957983193277311,0.957983193277311,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454 +"Galaxias_depressiceps",0,0,0,0,0,0,0,0,0,0,0,0,0.941176470588235,0.941176470588235,0.957983193277311,0.957983193277311,1,0.974789915966387,0.974789915966387,0.974789915966387,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454 +"Galaxias_southern",0,0,0,0,0,0,0,0,0,0,0,0,0.941176470588235,0.941176470588235,0.957983193277311,0.957983193277311,0.974789915966387,1,0.983193277310924,0.983193277310924,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454 +"Galaxias_D.",0,0,0,0,0,0,0,0,0,0,0,0,0.941176470588235,0.941176470588235,0.957983193277311,0.957983193277311,0.974789915966387,0.983193277310924,1,0.991596638655462,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454 +"Galaxias_vulgaris",0,0,0,0,0,0,0,0,0,0,0,0,0.941176470588235,0.941176470588235,0.957983193277311,0.957983193277311,0.974789915966387,0.983193277310924,0.991596638655462,1,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454 +"Gambusia_geiseri",0,0,0,0,0,0,0,0,0,0,0,0,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,1,0.983193277310924,0.983193277310924,0.974789915966387,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454 +"Gambusia_affinis",0,0,0,0,0,0,0,0,0,0,0,0,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.983193277310924,1,0.991596638655462,0.974789915966387,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454 +"Gambusia_holbrooki",0,0,0,0,0,0,0,0,0,0,0,0,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.983193277310924,0.991596638655462,1,0.974789915966387,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454 +"Neolamprologus_pulcher",0,0,0,0,0,0,0,0,0,0,0,0,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.907563025210084,0.974789915966387,0.974789915966387,0.974789915966387,1,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454 +"Plethodon_albagula",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,1,0.991596638655462,0.957983193277311,0.957983193277311,0.957983193277311,0.957983193277311,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908 +"Hynobius_retardatus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.991596638655462,1,0.957983193277311,0.957983193277311,0.957983193277311,0.957983193277311,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908 +"Alytes_obstetricans",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.957983193277311,0.957983193277311,1,0.974789915966387,0.974789915966387,0.974789915966387,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908 +"Rana_arvalis",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.957983193277311,0.957983193277311,0.974789915966387,1,0.983193277310924,0.983193277310924,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908 +"Epidalea_calamita",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.957983193277311,0.957983193277311,0.974789915966387,0.983193277310924,1,0.991596638655462,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908 +"Hyla_labialis",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.957983193277311,0.957983193277311,0.974789915966387,0.983193277310924,0.991596638655462,1,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908 +"Cavia_aperea",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,1,0.957983193277311,0.957983193277311,0.957983193277311,0.957983193277311,0.957983193277311,0.941176470588235,0.941176470588235,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135 +"Marmota_marmota",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.957983193277311,1,0.983193277310924,0.983193277310924,0.966386554621849,0.966386554621849,0.941176470588235,0.941176470588235,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135 +"Urocitellus_columbianus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.957983193277311,0.983193277310924,1,0.991596638655462,0.966386554621849,0.966386554621849,0.941176470588235,0.941176470588235,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135 +"Urocitellus_richardsonii",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.957983193277311,0.983193277310924,0.991596638655462,1,0.966386554621849,0.966386554621849,0.941176470588235,0.941176470588235,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135 +"Onychomys_leucogaster",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.957983193277311,0.966386554621849,0.966386554621849,0.966386554621849,1,0.991596638655462,0.941176470588235,0.941176470588235,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135 +"Myodes_glareolus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.957983193277311,0.966386554621849,0.966386554621849,0.966386554621849,0.991596638655462,1,0.941176470588235,0.941176470588235,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135 +"Crocidura_russula",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,1,0.991596638655462,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135 +"Canis_lupus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.991596638655462,1,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336135,0.252100840336135 +"Carettochelys_insculpta",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,1,0.983193277310924,0.983193277310924,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Apalone_ferox",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.983193277310924,1,0.991596638655462,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Apalone_mutica",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.983193277310924,0.991596638655462,1,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Dermochelys_coriacea",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.890756302521008,0.890756302521008,0.890756302521008,1,0.966386554621849,0.966386554621849,0.966386554621849,0.966386554621849,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Sternotherus_odoratus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.890756302521008,0.890756302521008,0.890756302521008,0.966386554621849,1,0.974789915966387,0.974789915966387,0.974789915966387,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Kinosternon_subrubrum",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.890756302521008,0.890756302521008,0.890756302521008,0.966386554621849,0.974789915966387,1,0.983193277310924,0.983193277310924,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Kinosternon_integrum",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.890756302521008,0.890756302521008,0.890756302521008,0.966386554621849,0.974789915966387,0.983193277310924,1,0.991596638655462,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Kinosternon_hirtipes",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.890756302521008,0.890756302521008,0.890756302521008,0.966386554621849,0.974789915966387,0.983193277310924,0.991596638655462,1,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Emydoidea_blandingii",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.890756302521008,0.890756302521008,0.890756302521008,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,1,0.983193277310924,0.983193277310924,0.957983193277311,0.957983193277311,0.957983193277311,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Terrapene_ornata",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.890756302521008,0.890756302521008,0.890756302521008,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.983193277310924,1,0.991596638655462,0.957983193277311,0.957983193277311,0.957983193277311,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Clemmys_insculpta",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.890756302521008,0.890756302521008,0.890756302521008,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.983193277310924,0.991596638655462,1,0.957983193277311,0.957983193277311,0.957983193277311,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Chrysemys_picta",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.890756302521008,0.890756302521008,0.890756302521008,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.957983193277311,0.957983193277311,0.957983193277311,1,0.991596638655462,0.983193277310924,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Pseudemys_floridana",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.890756302521008,0.890756302521008,0.890756302521008,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.957983193277311,0.957983193277311,0.957983193277311,0.991596638655462,1,0.983193277310924,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Malaclemys_terrapin",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.890756302521008,0.890756302521008,0.890756302521008,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.957983193277311,0.957983193277311,0.957983193277311,0.983193277310924,0.983193277310924,1,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Caiman_crocodilus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,1,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Alectoris_rufa",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,1,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Cygnus_olor",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.92436974789916,1,0.991596638655462,0.966386554621849,0.966386554621849,0.966386554621849,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Cygnus_buccinator",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.92436974789916,0.991596638655462,1,0.966386554621849,0.966386554621849,0.966386554621849,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Branta_bernicla",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.92436974789916,0.966386554621849,0.966386554621849,1,0.991596638655462,0.983193277310924,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Branta_canadensis",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.92436974789916,0.966386554621849,0.966386554621849,0.991596638655462,1,0.983193277310924,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Chen_canagica",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.92436974789916,0.966386554621849,0.966386554621849,0.983193277310924,0.983193277310924,1,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Somateria_fischeri",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.92436974789916,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,1,0.991596638655462,0.974789915966386,0.974789915966386,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Bucephala_clangula",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.92436974789916,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.991596638655462,1,0.974789915966386,0.974789915966386,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Anas_platyrhynchos",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.92436974789916,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.974789915966386,0.974789915966386,1,0.991596638655462,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Aythya_ferina",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.92436974789916,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.932773109243697,0.974789915966386,0.974789915966386,0.991596638655462,1,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Fulica_atra",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,1,0.991596638655462,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Porphyrio_porphyrio",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.991596638655462,1,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Bubulcus_ibis",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,1,0.991596638655462,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Ciconia_ciconia",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.991596638655462,1,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.873949579831933,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Falco_tinnunculus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,1,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Aphrastura_spinicauda",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,0.890756302521008,1,0.991596638655462,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Sayornis_phoebe",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,0.890756302521008,0.991596638655462,1,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Petroica_australis",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,0.890756302521008,0.899159663865546,0.899159663865546,1,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Parus_caeruleus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,1,0.991596638655462,0.974789915966386,0.974789915966386,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Parus_major",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.991596638655462,1,0.974789915966386,0.974789915966386,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Hirundo_rustica",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.974789915966386,0.974789915966386,1,0.991596638655462,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Tachycineta_bicolor",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.974789915966386,0.974789915966386,0.991596638655462,1,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Sturnus_vulgaris",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,1,0.983193277310924,0.983193277310924,0.957983193277311,0.957983193277311,0.957983193277311,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Phoenicurus_phoenicurus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.983193277310924,1,0.991596638655462,0.957983193277311,0.957983193277311,0.957983193277311,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Ficedula_hypoleuca",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.983193277310924,0.991596638655462,1,0.957983193277311,0.957983193277311,0.957983193277311,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Taeniopygia_guttata",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.957983193277311,0.957983193277311,0.957983193277311,1,0.983193277310924,0.983193277310924,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Protonotaria_citrea",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.957983193277311,0.957983193277311,0.957983193277311,0.983193277310924,1,0.991596638655462,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Quiscalus_quiscula",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.647058823529412,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.857142857142857,0.857142857142857,0.873949579831933,0.873949579831933,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.924369747899159,0.924369747899159,0.924369747899159,0.924369747899159,0.957983193277311,0.957983193277311,0.957983193277311,0.983193277310924,0.991596638655462,1,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437 +"Sphenodon_punctatus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,1,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563,0.680672268907563 +"Eulamprus_tympanum",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,1,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101,0.689075630252101 +"Psammodromus_algirus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,1,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639 +"Zootoca_vivipara",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.941176470588235,1,0.949579831932773,0.949579831932773,0.949579831932773,0.949579831932773,0.949579831932773,0.949579831932773,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639 +"Podarcis_atrata",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.941176470588235,0.949579831932773,1,0.966386554621849,0.966386554621849,0.966386554621849,0.966386554621849,0.957983193277311,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639 +"Podarcis_melisellensis",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.941176470588235,0.949579831932773,0.966386554621849,1,0.991596638655462,0.974789915966386,0.974789915966386,0.957983193277311,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639 +"Podarcis_milensis",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.941176470588235,0.949579831932773,0.966386554621849,0.991596638655462,1,0.974789915966386,0.974789915966386,0.957983193277311,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639 +"Podarcis_muralis",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.941176470588235,0.949579831932773,0.966386554621849,0.974789915966386,0.974789915966386,1,0.991596638655462,0.957983193277311,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639 +"Podarcis_lilfordi",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.941176470588235,0.949579831932773,0.966386554621849,0.974789915966386,0.974789915966386,0.991596638655462,1,0.957983193277311,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639 +"Iberolacerta_monticola",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.941176470588235,0.949579831932773,0.957983193277311,0.957983193277311,0.957983193277311,0.957983193277311,0.957983193277311,1,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639 +"Anguis_fragilis",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,1,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941,0.764705882352941 +"Chamaeleo_montium",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,1,0.957983193277311,0.957983193277311,0.957983193277311,0.957983193277311,0.957983193277311,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Leiolepis_reevesii",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.957983193277311,1,0.966386554621849,0.966386554621849,0.966386554621849,0.966386554621849,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Rankinia_diemensis",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.957983193277311,0.966386554621849,1,0.991596638655462,0.974789915966386,0.974789915966386,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Ctenophorus_fordi",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.957983193277311,0.966386554621849,0.991596638655462,1,0.974789915966386,0.974789915966386,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Sitana_ponticeriana",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.957983193277311,0.966386554621849,0.974789915966386,0.974789915966386,1,0.991596638655462,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Calotes_versicolor",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.957983193277311,0.966386554621849,0.974789915966386,0.974789915966386,0.991596638655462,1,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Cyclura_cychlura",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,1,0.983193277310924,0.983193277310924,0.957983193277311,0.957983193277311,0.957983193277311,0.941176470588235,0.941176470588235,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Ctenosaura_pectinata",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.983193277310924,1,0.991596638655462,0.957983193277311,0.957983193277311,0.957983193277311,0.941176470588235,0.941176470588235,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Iguana_iguana",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.983193277310924,0.991596638655462,1,0.957983193277311,0.957983193277311,0.957983193277311,0.941176470588235,0.941176470588235,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Uta_stansburiana",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.957983193277311,0.957983193277311,0.957983193277311,1,0.983193277310924,0.983193277310924,0.941176470588235,0.941176470588235,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Sceloporus_spinosus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.957983193277311,0.957983193277311,0.957983193277311,0.983193277310924,1,0.991596638655462,0.941176470588235,0.941176470588235,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Sceloporus_virgatus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.957983193277311,0.957983193277311,0.957983193277311,0.983193277310924,0.991596638655462,1,0.941176470588235,0.941176470588235,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Oplurus_cuvieri",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,1,0.991596638655462,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Eurolophosaurus_nanuzae",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,0.991596638655462,1,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479 +"Ramphotyphlops_braminus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,1,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521009,0.890756302521009,0.890756302521008,0.890756302521008,0.890756302521008,0.890756302521009,0.890756302521009 +"Vipera_aspis",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.890756302521008,1,0.991596638655462,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546 +"Vipera_ursinii",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.890756302521008,0.991596638655462,1,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546,0.899159663865546 +"Diadophis_punctatus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.890756302521008,0.899159663865546,0.899159663865546,1,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622,0.915966386554622 +"Natrix_natrix",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,1,0.966386554621849,0.966386554621849,0.966386554621849,0.966386554621849,0.924369747899159,0.924369747899159,0.924369747899159,0.92436974789916,0.92436974789916 +"Tropidonophis_mairii",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.966386554621849,1,0.974789915966386,0.974789915966387,0.974789915966387,0.924369747899159,0.924369747899159,0.924369747899159,0.92436974789916,0.92436974789916 +"Storeria_dekayi",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.966386554621849,0.974789915966386,1,0.983193277310924,0.983193277310924,0.924369747899159,0.924369747899159,0.924369747899159,0.92436974789916,0.92436974789916 +"Thamnophis_ordinoides",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.890756302521009,0.899159663865546,0.899159663865546,0.915966386554622,0.966386554621849,0.974789915966387,0.983193277310924,1,0.991596638655462,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916 +"Nerodia_sipedon",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.890756302521009,0.899159663865546,0.899159663865546,0.915966386554622,0.966386554621849,0.974789915966387,0.983193277310924,0.991596638655462,1,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916 +"Spalerosophis_diadema",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.924369747899159,0.924369747899159,0.924369747899159,0.92436974789916,0.92436974789916,1,0.966386554621849,0.966386554621849,0.966386554621849,0.966386554621849 +"Elaphe_quadrivirgata",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.924369747899159,0.924369747899159,0.924369747899159,0.92436974789916,0.92436974789916,0.966386554621849,1,0.974789915966386,0.974789915966387,0.974789915966387 +"Coronella_austriaca",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.252100840336134,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.890756302521008,0.899159663865546,0.899159663865546,0.915966386554622,0.924369747899159,0.924369747899159,0.924369747899159,0.92436974789916,0.92436974789916,0.966386554621849,0.974789915966386,1,0.983193277310924,0.983193277310924 +"Pituophis_catenifer",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.890756302521009,0.899159663865546,0.899159663865546,0.915966386554622,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.966386554621849,0.974789915966387,0.983193277310924,1,0.991596638655462 +"Pantherophis_obsoletus",0,0,0,0,0,0,0,0,0,0,0,0,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.100840336134454,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.201680672268908,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.252100840336135,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.319327731092437,0.680672268907563,0.689075630252101,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.697478991596639,0.764705882352941,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.773109243697479,0.890756302521009,0.899159663865546,0.899159663865546,0.915966386554622,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.92436974789916,0.966386554621849,0.974789915966387,0.983193277310924,0.991596638655462,1 From 8c6d7122fad4f684163d842601d55a78050a675a Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 27 Oct 2024 21:08:52 +0100 Subject: [PATCH 106/127] fix multivariate meta-analysis: add inclusion test for random effects --- ...ssicalmetaanalysismultilevelmultivariate.R | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/R/classicalmetaanalysismultilevelmultivariate.R b/R/classicalmetaanalysismultilevelmultivariate.R index b5d28003..4d40a18b 100644 --- a/R/classicalmetaanalysismultilevelmultivariate.R +++ b/R/classicalmetaanalysismultilevelmultivariate.R @@ -409,6 +409,40 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N } + ### create random structure inclusion summary + if (options[["randomEffectsTestInclusion"]]) { + + tableInclusion <- createJaspTable(title = gettext("Inclusion Test")) + tableInclusion$position <- 4 + tableInclusion$dependOn("randomEffectsTestInclusion") + randomEstimatesContainer[["tableInclusion"]] <- tableInclusion + + tableInclusion$addColumnInfo(name = "model", title = gettext("Removed Component"), type = "string") + tableInclusion$addColumnInfo(name = "logLik", title = gettext("Log Lik."), type = "number") + tableInclusion$addColumnInfo(name = "df", title = gettext("df"), type = "integer") + tableInclusion$addColumnInfo(name = "AIC", title = gettext("AIC"), type = "number") + tableInclusion$addColumnInfo(name = "BIC", title = gettext("BIC"), type = "number") + tableInclusion$addColumnInfo(name = "AICc", title = gettext("AICc"), type = "number") + tableInclusion$addColumnInfo(name = "LRT", title = gettext("LRT"), type = "number") + tableInclusion$addColumnInfo(name = "pval", title = gettext("p"), type = "pvalue") + + dropOneFits <- .mammFitDropOneRandom(jaspResults, options) + + if (length(dropOneFits) == 0) + return() + + fit <- .maExtractFit(jaspResults, options) + fitTests <- lapply(dropOneFits, function(fitB) data.frame(anova(fit, fitB))) + fitTests <- rbind( + cbind(model = "", fitTests[[1]][1,]), + cbind(model = names(fitTests), do.call(rbind, lapply(fitTests, function(fitTest) fitTest[2,]))) + ) + + fitTests <- fitTests[,!colnames(fitTests) %in% "QE"] + tableInclusion$setData(fitTests) + tableInclusion$addFootnote(gettext("Likelihood Ratio Test (LRT) and p-value are based on a comparison with the complete model.")) + } + return() } .mammGetRandomEstimatesTitle <- function(structure) { @@ -424,6 +458,55 @@ ClassicalMetaAnalysisMultilevelMultivariate <- function(jaspResults, dataset = N else return(gettext("Known Correlation Summary")) } +.mammFitDropOneRandom <- function(jaspResults, options) { + + if (!is.null(jaspResults[["dropOneFits"]])) + return(jaspResults[["dropOneFits"]]$object) + + dropOneFitsContainer <- createJaspState() + dropOneFitsContainer$dependOn(.maDependencies) + jaspResults[["dropOneFits"]] <- dropOneFitsContainer + + fit <- .maExtractFit(jaspResults, options) + + # create list of all structures + randomFormulaLists <- .mammGetRandomFormulaList(options) + dropOneFits <- vector("list", length = length(randomFormulaLists)) + names(dropOneFits) <- names(randomFormulaLists) + + startProgressbar(expectedTicks = length(randomFormulaLists), label = gettext("Testing Inclusion of Random Effects / Model Structure")) + + # perform drop one re-estimation + for (i in seq_along(randomFormulaLists)) { + + randomFormulaList <- randomFormulaLists[-i] + randomFormulaList <- unname(randomFormulaList) + + random <- NULL + struct <- NULL + dist <- NULL + R <- NULL + + if (length(randomFormulaList) != 0) { + random <- randomFormulaList + struct <- do.call(c, lapply(randomFormulaList, attr, which = "structure")) + dist <- unlist(lapply(randomFormulaList, attr, which = "dist"), recursive = FALSE) + R <- unlist(lapply(randomFormulaList, attr, which = "R"), recursive = FALSE) + } + + # set default struct if unspecified + if (is.null(struct)) + struct <- "CS" + + tempFit <- try(update(fit, random = random, struct = struct, dist = dist, R = R)) + + dropOneFits[[i]] <- tempFit + progressbarTick() + } + + dropOneFitsContainer$object <- dropOneFits + return(dropOneFits) +} .mammGetStructureOptions <- function(structure) { return(switch( From c382d64d632e0edae50e64fd7403874af0d83933 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 27 Oct 2024 21:12:15 +0100 Subject: [PATCH 107/127] hide confidence intervals for random effects option --- R/classicalmetaanalysiscommon.R | 2 +- inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 496d3783..6493ebb6 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -39,7 +39,7 @@ # - vs covariates # Generic # - allow different covariates factoring across all settings -# Add spe +# - confidence interval for heterogeneity in multilevel multivariate .ClassicalMetaAnalysisCommon <- function(jaspResults, dataset, options, ...) { diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml index b935613f..419ceba6 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml @@ -74,13 +74,14 @@ Section name: "randomEffectsTestInclusion" checked: false } - + /* TODO: will require a lot of work in sorting out which value belongs where CheckBox { text: qsTr("Confidence intervals") name: "randomEffectsConfidenceIntervals" checked: false - } + } + */ } Group From 2da8d273b77b4cb367947154977fa4beb058f3f5 Mon Sep 17 00:00:00 2001 From: FBartos Date: Sun, 27 Oct 2024 22:33:25 +0100 Subject: [PATCH 108/127] fix multivariate meta-analysis: optimizer settings --- DESCRIPTION | 1 + R/classicalmetaanalysis.R | 6 ++ R/classicalmetaanalysiscommon.R | 75 +++++++++---- .../ClassicalMetaAnalysisAdvanced.qml | 101 ++++++++++++++++-- 4 files changed, 153 insertions(+), 30 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 4d8a25f1..1e1cedf3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -32,6 +32,7 @@ Imports: clubSandwich, CompQuadForm, sp, + dfoptim, patchwork Remotes: jasp-stats/jaspBase, diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index d6d2afd2..51fc932d 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -25,6 +25,9 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { .maCheckErrors(dataset, options) } + saveRDS(options, file = "C:/JASP/options.RDS") + saveRDS(dataset, file = "C:/JASP/dataset.RDS") + .ClassicalMetaAnalysisCommon(jaspResults, dataset, options) return() @@ -44,6 +47,9 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "optimizerMinimumTau2", "optimizerMinimumTau2Value", "optimizerMaximumTau2", "optimizerMaximumTau2Value", "optimizerMaximumIterations", "optimizerMaximumIterationsValue", "optimizerConvergenceTolerance", "optimizerConvergenceToleranceValue", "optimizerConvergenceRelativeTolerance", "optimizerConvergenceRelativeToleranceValue", "optimizerStepAdjustment", "optimizerStepAdjustmentValue", + "optimizerMaximumEvaluations", "optimizerMaximumEvaluationsValue", + "optimizerInitialTrustRegionRadius", "optimizerInitialTrustRegionRadiusValue", "optimizerFinalTrustRegionRadius", "optimizerFinalTrustRegionRadiusValue", + "optimizerMaximumRestarts", "optimizerMaximumRestartsValue", # simple ma specific "heterogeneityModelTerms", "heterogeneityModelIncludeIntercept", "heterogeneityModelLink", "permutationTest", "permutationTestIteration", "permutationTestType", "setSeed", "seed", diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 6493ebb6..99b0935f 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -2795,26 +2795,63 @@ rel.tol = if (options[["optimizerConvergenceRelativeTolerance"]]) options[["optimizerConvergenceRelativeToleranceValue"]] ) } else { - if (.maGetMethodOptions(options) %in% c("REML", "ML", "EB")) { - out <- list( - tau2.init = if (options[["optimizerInitialTau2"]]) options[["optimizerInitialTau2Value"]], - iter.max = if (options[["optimizerMaximumIterations"]]) options[["optimizerMaximumIterationsValue"]], - threshold = if (options[["optimizerConvergenceTolerance"]]) options[["optimizerConvergenceToleranceValue"]], - stepadj = if (options[["optimizerStepAdjustment"]]) options[["optimizerStepAdjustmentValue"]] - ) - } else if (.maGetMethodOptions(options) %in% c("PM", "PMM", "GENQM")) { - out <- list( - iter.max = if (options[["optimizerMaximumIterations"]]) options[["optimizerMaximumIterationsValue"]], - tol = if (options[["optimizerConvergenceTolerance"]]) options[["optimizerConvergenceToleranceValue"]], - tau2.min = if (options[["optimizerMinimumTau2"]]) options[["optimizerMinimumTau2Value"]], - tau2.max = if (options[["optimizerMaximumTau2"]]) options[["optimizerMaximumTau2Value"]] - ) - } else if (.maGetMethodOptions(options) %in% c("SD")) { - out <- list( - tau2.init = if (options[["optimizerInitialTau2"]]) options[["optimizerInitialTau2Value"]] - ) + if (.maIsMultilevelMultivariate(options)) { + if (options[["optimizerMethod"]] == "nlminb") { + out <- list( + optimizer = options[["optimizerMethod"]], + eval.max = if (options[["optimizerMaximumEvaluations"]]) options[["optimizerMaximumEvaluationsValue"]], + iter.max = if (options[["optimizerMaximumIterations"]]) options[["optimizerMaximumIterationsValue"]], + rel.tol = if (options[["optimizerConvergenceRelativeTolerance"]]) options[["optimizerConvergenceRelativeToleranceValue"]] + ) + } else if (options[["optimizerMethod"]] %in% c("Nelder-Mead", "BFGS")){ + out <- list( + optimizer = options[["optimizerMethod"]], + maxit = if (options[["optimizerMaximumIterations"]]) options[["optimizerMaximumIterationsValue"]], + reltol = if (options[["optimizerConvergenceRelativeTolerance"]]) options[["optimizerConvergenceRelativeToleranceValue"]] + ) + } else if (options[["optimizerMethod"]] %in% c("uobyqa", "newuoa", "bobyqa")){ + out <- list( + optimizer = options[["optimizerMethod"]], + maxfun = if (options[["optimizerMaximumEvaluations"]]) options[["optimizerMaximumEvaluationsValue"]], + rhobeg = if (options[["optimizerInitialTrustRegionRadius"]]) options[["optimizerInitialTrustRegionRadiusValue"]], + rhoend = if (options[["optimizerFinalTrustRegionRadius"]]) options[["optimizerFinalTrustRegionRadiusValue"]] + ) + } else if (options[["optimizerMethod"]] %in% c("nloptr", "nlm")){ + # could be much more, "nloptr" probably requires choosing a method too + out <- list( + optimizer = options[["optimizerMethod"]], + iterlim = if (options[["optimizerMaximumIterations"]]) options[["optimizerMaximumIterationsValue"]] + ) + } else if (options[["optimizerMethod"]] %in% c("hjk", "nmk", "mads")){ + out <- list( + optimizer = options[["optimizerMethod"]], + tol = if (options[["optimizerConvergenceTolerance"]]) options[["optimizerConvergenceToleranceValue"]], + maxfeval = if (options[["optimizerMaximumEvaluations"]]) options[["optimizerMaximumEvaluationsValue"]], + restarts.max = if (options[["optimizerMethod"]] == "mmk" && options[["optimizerMaximumRestarts"]]) options[["optimizerMaximumRestartsValue"]] + ) + } } else { - out <- list() + if (.maGetMethodOptions(options) %in% c("REML", "ML", "EB")) { + out <- list( + tau2.init = if (options[["optimizerInitialTau2"]]) options[["optimizerInitialTau2Value"]], + iter.max = if (options[["optimizerMaximumIterations"]]) options[["optimizerMaximumIterationsValue"]], + threshold = if (options[["optimizerConvergenceTolerance"]]) options[["optimizerConvergenceToleranceValue"]], + stepadj = if (options[["optimizerStepAdjustment"]]) options[["optimizerStepAdjustmentValue"]] + ) + } else if (.maGetMethodOptions(options) %in% c("PM", "PMM", "GENQM")) { + out <- list( + iter.max = if (options[["optimizerMaximumIterations"]]) options[["optimizerMaximumIterationsValue"]], + tol = if (options[["optimizerConvergenceTolerance"]]) options[["optimizerConvergenceToleranceValue"]], + tau2.min = if (options[["optimizerMinimumTau2"]]) options[["optimizerMinimumTau2Value"]], + tau2.max = if (options[["optimizerMaximumTau2"]]) options[["optimizerMaximumTau2Value"]] + ) + } else if (.maGetMethodOptions(options) %in% c("SD")) { + out <- list( + tau2.init = if (options[["optimizerInitialTau2"]]) options[["optimizerInitialTau2Value"]] + ) + } else { + out <- list() + } } } return(out[!sapply(out, is.null)]) diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml index c4e9e207..e8f6f2bc 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml @@ -178,6 +178,7 @@ Section DropDown { name: "optimizerMethod" + id: optimizerMethod label: qsTr("Method") // TODO: switch default value on heterogeneityModelLink change values: { if (module == "metaAnalysis") { @@ -186,7 +187,7 @@ Section else ["constrOptim", "nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm"] } else if (module == "metaAnalysisMultilevelMultivariate") { - ["nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm", "hjk", "nmk", "mads", "ucminf", "lbfgsb3c", "BBoptim"] + ["nlminb", "BFGS", "Nelder-Mead", "uobyqa", "newuoa", "bobyqa", "nloptr", "nlm", "hjk", "nmk", "mads"] // many else could be added "ucminf", "lbfgsb3c", "BBoptim" } } @@ -238,8 +239,8 @@ Section text: qsTr("Maximum 𝜏²") checked: false childrenOnSameRow: true - visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && - sectionModel.heterogeneityModelTermsCount == 0 && module == "metaAnalysis" + visible: ((method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && + sectionModel.heterogeneityModelTermsCount == 0 && module == "metaAnalysis") DoubleField { @@ -252,14 +253,35 @@ Section } } + CheckBox + { + name: "optimizerMaximumEvaluations" + text: qsTr("Maximum evaluations") + checked: false + childrenOnSameRow: true + visible: (optimizerMethod.value == "nlminb" || optimizerMethod.value == "uobyqa" || optimizerMethod.value == "newuoa" || optimizerMethod.value == "bobyqa" || + optimizerMethod.value == "hjk" || optimizerMethod.value == "nmk" || optimizerMethod.value == "mads") && module == "metaAnalysisMultilevelMultivariate" + + IntegerField + { + label: "" + name: "optimizerMaximumEvaluationsValue" + value: 250 + min: 1 + inclusive: JASP.None + } + } + CheckBox { name: "optimizerMaximumIterations" text: qsTr("Maximum iterations") checked: false childrenOnSameRow: true - visible: method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || - method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu" + visible: ((method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && module == "metaAnalysis") || + ((optimizerMethod.value == "nlminb" || optimizerMethod.value == "Nelder-Mead" || optimizerMethod.value == "BFGS" || + optimizerMethod.value == "nloptr" || optimizerMethod.value == "nlm") && module == "metaAnalysisMultilevelMultivariate") IntegerField { @@ -267,7 +289,7 @@ Section name: "optimizerMaximumIterationsValue" value: { if (sectionModel.heterogeneityModelTermsCount == 0) - 100 + 150 else 1000 } @@ -282,9 +304,10 @@ Section text: qsTr("Convergence tolerance") checked: false childrenOnSameRow: true - visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || + visible: ((method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && - sectionModel.heterogeneityModelTermsCount == 0 + sectionModel.heterogeneityModelTermsCount == 0 && module == "metaAnalysis") || + ((optimizerMethod.value == "hjk" || optimizerMethod.value == "nmk" || optimizerMethod.value == "mads") && module == "metaAnalysisMultilevelMultivariate") DoubleField { @@ -309,7 +332,8 @@ Section text: qsTr("Convergence relative tolerance") checked: false childrenOnSameRow: true - visible: sectionModel.heterogeneityModelTermsCount > 0 + visible: (sectionModel.heterogeneityModelTermsCount > 0 && module == "metaAnalysis") || + ((optimizerMethod.value == "nlminb" || optimizerMethod.value == "Nelder-Mead" || optimizerMethod.value == "BFGS") && module == "metaAnalysisMultilevelMultivariate") DoubleField { @@ -327,8 +351,9 @@ Section text: qsTr("Step adjustment") checked: false childrenOnSameRow: true - visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") && - sectionModel.heterogeneityModelTermsCount == 0 + visible: ((method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") && + sectionModel.heterogeneityModelTermsCount == 0 && module == "metaAnalysis") + DoubleField { @@ -339,6 +364,60 @@ Section inclusive: JASP.None } } + + CheckBox + { + name: "optimizerInitialTrustRegionRadius" + text: qsTr("Initial trust region radius") + checked: false + childrenOnSameRow: true + visible: ((optimizerMethod.value == "uobyqa" || optimizerMethod.value == "newuoa" || optimizerMethod.value == "bobyqa") && module == "metaAnalysisMultilevelMultivariate") + + DoubleField + { + label: "" + name: "optimizerInitialTrustRegionRadiusValue" + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + } + + CheckBox + { + name: "optimizerFinalTrustRegionRadius" + text: qsTr("Final trust region radius") + checked: false + childrenOnSameRow: true + visible: ((optimizerMethod.value == "uobyqa" || optimizerMethod.value == "newuoa" || optimizerMethod.value == "bobyqa") && module == "metaAnalysisMultilevelMultivariate") + + DoubleField + { + label: "" + name: "optimizerFinalTrustRegionRadiusValue" + defaultValue: 1 + min: 0 + inclusive: JASP.None + } + } + + CheckBox + { + name: "optimizerMaximumRestarts" + text: qsTr("Maximum restarts") + checked: false + childrenOnSameRow: true + visible: optimizerMethod.value == "mmk" && module == "metaAnalysisMultilevelMultivariate" + + IntegerField + { + label: "" + name: "optimizerMaximumRestartsValue" + defaultValue: 3 + min: 1 + inclusive: JASP.None + } + } } CheckBox From 30bbd768a301c82a5b5e49502bec624f44b5c401 Mon Sep 17 00:00:00 2001 From: FBartos Date: Mon, 28 Oct 2024 09:34:06 +0100 Subject: [PATCH 109/127] add metafor code injection --- R/classicalmetaanalysis.R | 1 + R/classicalmetaanalysiscommon.R | 17 +++++++++++++++++ .../ClassicalMetaAnalysisAdvanced.qml | 14 ++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 51fc932d..576a5fa5 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -50,6 +50,7 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "optimizerMaximumEvaluations", "optimizerMaximumEvaluationsValue", "optimizerInitialTrustRegionRadius", "optimizerInitialTrustRegionRadiusValue", "optimizerFinalTrustRegionRadius", "optimizerFinalTrustRegionRadiusValue", "optimizerMaximumRestarts", "optimizerMaximumRestartsValue", + "advancedExtendMetaforCall", "advancedExtendMetaforCallCode", # simple ma specific "heterogeneityModelTerms", "heterogeneityModelIncludeIntercept", "heterogeneityModelLink", "permutationTest", "permutationTestIteration", "permutationTestType", "setSeed", "seed", diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 99b0935f..d8118df3 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -225,6 +225,10 @@ # additional input rmaInput$level <- 100 * options[["confidenceIntervalsLevel"]] + # extend the call by custom commands from R if requested + if (options[["advancedExtendMetaforCall"]]) + rmaInput <- c(rmaInput, .maExtendMetaforCallFromOptions(options)) + ### fit the model if (options[["module"]] == "metaAnalysis") { fit <- try(do.call(metafor::rma, rmaInput)) @@ -2458,6 +2462,10 @@ # additional input rmaInput$level <- 100 * options[["confidenceIntervalsLevel"]] + # add additional options + if (options[["advancedExtendMetaforCall"]]) + rmaInput <- c(rmaInput, .maExtendMetaforCallFromOptions(options)) + ### fit the model fit <- paste0("fit <- rma(\n\t", paste(names(rmaInput), "=", rmaInput, collapse = ",\n\t"), "\n)\n") @@ -2878,6 +2886,15 @@ stop(paste0("Unknown effect size transformation: ", effectSizeTransformation)) ) } +.maExtendMetaforCallFromOptions <- function(options) { + + optionsCode <- try(eval(parse(text = options[["advancedExtendMetaforCallCode"]]))) + + if (jaspBase::isTryError(optionsCode)) + .quitAnalysis(gettext("The custom R code for extending the metafor call failed with the following message: %1$s", optionsCode)) + + return(optionsCode) +} # options names .maGetOptionsNameEffectSizeTransformation <- function(effectSizeTransformation) { diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml index e8f6f2bc..50a4d6b1 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml @@ -468,4 +468,18 @@ Section } } + + CheckBox + { + name: "advancedExtendMetaforCall" + id: advancedExtendMetaforCall + text: qsTr("Extend metafor call") + checked: false + } + + TextArea + { + name: "advancedExtendMetaforCallCode" + visible: advancedExtendMetaforCall.checked + } } \ No newline at end of file From 26666a1af523fa8eb7736582f7f69ada7873511f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Barto=C5=A1?= <38475991+FBartos@users.noreply.github.com> Date: Wed, 30 Oct 2024 09:16:15 +0100 Subject: [PATCH 110/127] Apply suggestions from code review Co-authored-by: Don van den Bergh --- R/classicalmetaanalysis.R | 2 -- R/classicalmetaanalysiscommon.R | 6 ++---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index 576a5fa5..bb7a30b9 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -25,8 +25,6 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { .maCheckErrors(dataset, options) } - saveRDS(options, file = "C:/JASP/options.RDS") - saveRDS(dataset, file = "C:/JASP/dataset.RDS") .ClassicalMetaAnalysisCommon(jaspResults, dataset, options) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index d8118df3..04e12eed 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -487,10 +487,8 @@ # requires non-clustered fit pooledHeterogeneity <- .maComputePooledHeterogeneity(.maExtractFit(jaspResults, options, nonClustered = TRUE), options) - if (nrow(pooledHeterogeneity) > 0) { - for (i in 1:nrow(pooledHeterogeneity)) - pooledEstimatesTable$addRows(pooledHeterogeneity[i,]) - } + for (i in seq_len(nrow(pooledHeterogeneity))) + pooledEstimatesTable$addRows(pooledHeterogeneity[i, ]) } # add messages From 046a9d326e5212589a9147fbe7eeab993efc83b4 Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 30 Oct 2024 09:18:43 +0100 Subject: [PATCH 111/127] typos --- R/classicalmetaanalysis.R | 4 ++-- R/classicalmetaanalysiscommon.R | 2 +- inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/R/classicalmetaanalysis.R b/R/classicalmetaanalysis.R index bb7a30b9..e29c8a0a 100644 --- a/R/classicalmetaanalysis.R +++ b/R/classicalmetaanalysis.R @@ -117,8 +117,8 @@ ClassicalMetaAnalysis <- function(jaspResults, dataset = NULL, options, ...) { "bubblePlotBubblesRelativeSize", "bubblePlotBubblesTransparency", "bubblePlotBubblesJitter", - "bubblePlotCondifenceIntervals", - "bubblePlotCondifenceIntervalsTransparency", + "bubblePlotConfidenceIntervals", + "bubblePlotConfidenceIntervalsTransparency", "bubblePlotPredictionIntervals", "bubblePlotPredictionIntervalsTransparency", "colorPalette", diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 04e12eed..16952b30 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -2214,7 +2214,7 @@ } ### add confidence bands - if (options[["bubblePlotCondifenceIntervals"]]) { + if (options[["bubblePlotConfidenceIntervals"]]) { geomCi <- .maBubblePlotMakeCiGeom(dfPlot, options, ci = TRUE) diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml b/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml index 1fd8a3c1..a53da5d2 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml @@ -128,13 +128,13 @@ Section { CheckBox { - name: "bubblePlotCondifenceIntervals" + name: "bubblePlotConfidenceIntervals" label: qsTr("Condifence intervals") checked: true DoubleField { - name: "bubblePlotCondifenceIntervalsTransparency" + name: "bubblePlotConfidenceIntervalsTransparency" label: qsTr("Transparency") defaultValue: 0.30 min: 0 From 210470733e65c538f4342bd1131311aa64c55a1e Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 30 Oct 2024 09:47:00 +0100 Subject: [PATCH 112/127] fixing .maExtendMetaforCallFromOptions --- R/classicalmetaanalysiscommon.R | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 16952b30..7b13f066 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -1612,11 +1612,11 @@ } .maComputePooledHeterogeneity <- function(fit, options) { - if (options[["fixParametersTau2"]]) { + if (fit[["tau2.fix"]]) { confIntHeterogeneity <- data.frame( par = c("\U1D70F", "\U1D70F\U00B2"), - est = c(sqrt(.maGetFixedTau2Options(options)), .maGetFixedTau2Options(options)), + est = c(sqrt(fit[["tau2"]]), fit[["tau2"]]), lCi = c(NA, NA), uCi = c(NA, NA) ) @@ -1690,7 +1690,7 @@ if (inherits(fit, "robust.rma")) class(fit) <- class(fit)[!class(fit) %in% "robust.rma"] - if (options[["fixParametersTau2"]]) { + if (fit[["tau2.fix"]]) { confIntHeterogeneity <- list( est = sqrt(.maGetFixedTau2Options(options)), @@ -2886,10 +2886,14 @@ } .maExtendMetaforCallFromOptions <- function(options) { - optionsCode <- try(eval(parse(text = options[["advancedExtendMetaforCallCode"]]))) + optionsCode <- options[["advancedExtendMetaforCallCode"]] + optionsCode <- trimws(optionsCode, which = "both") + if (substr(optionsCode, 1, 4) != "list") + optionsCode <- paste0("list(\n", optionsCode, "\n)") + optionsCode <- try(eval(parse(text = optionsCode))) if (jaspBase::isTryError(optionsCode)) - .quitAnalysis(gettext("The custom R code for extending the metafor call failed with the following message: %1$s", optionsCode)) + .quitAnalysis(gettextf("The custom R code for extending the metafor call failed with the following message: %1$s", optionsCode)) return(optionsCode) } From 14b1066b9632e6ff31ae3374d2fdab804a77f4d2 Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 30 Oct 2024 10:29:52 +0100 Subject: [PATCH 113/127] make nicer error messages --- R/classicalmetaanalysiscommon.R | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 7b13f066..0a030312 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -351,7 +351,7 @@ } if (jaspBase::isTryError(fit)) { - residualHeterogeneityTable$setError(fit) + residualHeterogeneityTable$setError(.maTryCleanErrorMessages(fit)) return() } @@ -3354,3 +3354,10 @@ "approximate" = options[["permutationTestIteration"]] ))) } +.maTryCleanErrorMessages <- function(message) { + # probably more messages will be gathered over time + if (grepl("singular matrix", message)) + return(gettextf("The model estimation failed with the following message: %1$s. Please, consider simplifying the model.", message)) + + return(message) +} From 609f302fabe078d352203f9875ba04d3126a8126 Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 30 Oct 2024 12:04:00 +0100 Subject: [PATCH 114/127] fixing forest plot with heterogeneity test --- R/classicalmetaanalysiscommon.R | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 0a030312..9f30dd71 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -2977,10 +2977,15 @@ out <- .maOmnibusTest(fit, options, parameter) outPrint <- .maPrintTermTest(out, testStatistic = TRUE) - if (parameter == "effectSize") - return(gettextf("Moderation: %1$s", outPrint)) - else if (parameter == "effectSize") - return(gettextf("Moderation (Heterogeneity): %1$s", outPrint)) + if (.maIsMetaregressionHeterogeneity(options)) { + if (parameter == "effectSize") + return(gettextf("Moderation (Effect Size): %1$s", outPrint)) + else if (parameter == "heterogeneity") + return(gettextf("Moderation (Heterogeneity): %1$s", outPrint)) + } else { + if (parameter == "effectSize") + return(gettextf("Moderation: %1$s", outPrint)) + } } .maPrintHeterogeneityEstimate <- function(fit, options, digits, keepText) { From fcae1756c4a1f36fcf45741ac3d671e31f106efd Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 30 Oct 2024 12:05:00 +0100 Subject: [PATCH 115/127] fixing pooled effect size estimates (under no moderation but heteroskedasticity) --- R/classicalmetaanalysiscommon.R | 67 +++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 9f30dd71..9ba2e961 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -1493,41 +1493,50 @@ # help compute functions .maComputePooledEffect <- function(fit, options) { - if (!.maIsMetaregressionEffectSize(options)) { - predictedEffect <- predict(fit, level = 100 * options[["confidenceIntervalsLevel"]]) - if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE) && !options[["predictionIntervals"]]) { - # remove the non-requested heterogeneity levels - predictedEffect <- predictedEffect[1, , drop = FALSE] - } + # prediction for effect size of a location-scale models without effect size moderator does not work (compute it manually) + if (!.maIsMetaregressionEffectSize(options) && .maIsMetaregressionHeterogeneity(options)) { + + predictedHeterogeneity <- .maComputePooledHeterogeneity(fit, options) + predictedEffect <- data.frame( + pred = fit$beta[1], + se = fit$se[1], + ci.lb = fit$ci.lb[1], + ci.ub = fit$ci.ub[1], + pi.lb = fit$beta[1] - 1.96 * sqrt(fit$se[1]^2 + predictedHeterogeneity[1, 2]^2), + pi.ub = fit$beta[1] + 1.96 * sqrt(fit$se[1]^2 + predictedHeterogeneity[1, 2]^2) + ) + } else { + + predictInput <- list( + object = fit, + level = 100 * options[["confidenceIntervalsLevel"]] + ) + if (.maIsMetaregressionHeterogeneity(options)) { - predictedEffect <- predict( - fit, - newmods = colMeans(model.matrix(fit)$location)[-1], - newscale = colMeans(model.matrix(fit)$scale)[-1], - level = 100 * options[["confidenceIntervalsLevel"]] - ) - } else { + predictInput$newmods <- t(colMeans(model.matrix(fit)$location)[-1]) + predictInput$newscale <- t(colMeans(model.matrix(fit)$scale)[-1]) + } else if (.maIsMetaregressionEffectSize(options)) { + predictInput$newmods <- t(colMeans(model.matrix(fit))[-1]) + } - if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE) && options[["predictionIntervals"]]) { - tauLevelsMatrix <- .mammExtractTauLevels(fit) - predictedEffect <- predict( - fit, - newmods = do.call(rbind, lapply(1:nrow(tauLevelsMatrix), function(i) colMeans(model.matrix(fit))[-1])), - level = 100 * options[["confidenceIntervalsLevel"]], - tau2.levels = tauLevelsMatrix[["tau2.levels"]], - gamma2.levels = tauLevelsMatrix[["gamma2.levels"]] - ) - } else { - predictedEffect <- predict( - fit, - newmods = colMeans(model.matrix(fit))[-1], - level = 100 * options[["confidenceIntervalsLevel"]] - ) - } + if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE) && options[["predictionIntervals"]]) { + tauLevelsMatrix <- .mammExtractTauLevels(fit) + predictInput$tau2.levels <- tauLevelsMatrix[["tau2.levels"]] + predictInput$gamma2.levels <- tauLevelsMatrix[["gamma2.levels"]] + + if (.maIsMetaregressionEffectSize(options)) + predictInput$newmods <- do.call(rbind, lapply(1:nrow(tauLevelsMatrix), function(i) predictInput$newmods)) } + + predictedEffect <- do.call(predict, predictInput) } + + # remove the non-requested heterogeneity levels + if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE) && !options[["predictionIntervals"]]) + predictedEffect <- predictedEffect[1, , drop = FALSE] + # keep levels for which the heterogeneity is predicted for complex multivariate models if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE) && options[["predictionIntervals"]]) { tauLevels <- list( From d4cb59569578e042deca75850a251b3502da4295 Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 30 Oct 2024 12:59:19 +0100 Subject: [PATCH 116/127] fix empty weights --- R/classicalmetaanalysiscommon.R | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 9ba2e961..5bb663e0 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -203,7 +203,7 @@ rmaInput$weighted <- FALSE # add fixed parameters if needed - if (options[["fixParametersWeights"]]) + if (options[["fixParametersWeights"]] && options[["fixParametersWeightsVariable"]] != "") rmaInput$weights <- dataset[[options[["fixParametersWeightsVariable"]]]] if (options[["fixParametersTau2"]]) rmaInput$tau2 <- .maGetFixedTau2Options(options) # TODO: add multiple possible fixed taus @@ -837,6 +837,8 @@ # drop non-required columns if (parameter == "effectSize" && !options[["estimatedMarginalMeansEffectSizeTestAgainst"]]) estimatedMarginalMeans <- estimatedMarginalMeans[,!colnames(estimatedMarginalMeans) %in% c("df", "stat", "pval")] + else if (parameter == "heterogeneity") + estimatedMarginalMeans <- estimatedMarginalMeans[,!colnames(estimatedMarginalMeans) %in% c("lPi", "uPi")] estimatedMarginalMeansTable$setData(estimatedMarginalMeans) @@ -2447,7 +2449,7 @@ rmaInput$weighted <- FALSE # add fixed parameters if needed - if (options[["fixParametersWeights"]]) + if (options[["fixParametersWeights"]] && options[["fixParametersWeightsVariable"]] != "") rmaInput$weights <- as.name(options[["fixParametersWeightsVariable"]]) if (options[["fixParametersTau2"]]) rmaInput$tau2 <- .maGetFixedTau2Options(options) From 3d205f02b50b40f778bc2510bb1cce241ce5ef29 Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 31 Oct 2024 11:24:43 +0100 Subject: [PATCH 117/127] fix funnel plot: allow offsetting x-axis label position + larger default --- R/funnelplot.R | 8 +++++--- inst/qml/FunnelPlot.qml | 7 +++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/R/funnelplot.R b/R/funnelplot.R index cbf8c510..c6214370 100644 --- a/R/funnelplot.R +++ b/R/funnelplot.R @@ -116,7 +116,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { "funnelUnderH1PowerEnhancement", "funnelUnderH1PowerEnhancementBreaks", "funnelPredictionInterval", "funnelUnderH0LineType", "funnelUnderH0FillColors", "funnelUnderH1LineType", "funnelUnderH1FillColors", "invertColors", - "estimatesMappingLabel", "estimatesMappingColor", "estimatesMappingShape", "estimatesLegendPosition" + "estimatesMappingLabel", "estimatesMappingColor", "estimatesMappingShape", "estimatesLegendPosition", "estimatesMappingLabelOffset" )) funnelPlotContainer$position <- 1 jaspResults[["funnelPlotContainer"]] <- funnelPlotContainer @@ -318,7 +318,7 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { } # specify the position of the labels dfLabels$position <- ifelse(dfLabels$x < tempAdjustMean, "right", "left") - dfLabels$nudge_x <- ifelse(dfLabels$x < tempAdjustMean, -0.05, 0.05) + dfLabels$nudge_x <- ifelse(dfLabels$x < tempAdjustMean, -1, 1) * options[["estimatesMappingLabelOffset"]] } ### specify "background" for the funnel plot @@ -420,7 +420,9 @@ FunnelPlot <- function(jaspResults, dataset = NULL, options, ...) { out <- out + ggplot2::geom_text( data = dfLabels, - mapping = ggplot2::aes(x = x, y = y, label = label, hjust = position), nudge_x = dfLabels$nudge_x + mapping = ggplot2::aes(x = x, y = y, label = label, hjust = position), + nudge_x = dfLabels$nudge_x, + ) } diff --git a/inst/qml/FunnelPlot.qml b/inst/qml/FunnelPlot.qml index b5577cca..fe7f4fd7 100644 --- a/inst/qml/FunnelPlot.qml +++ b/inst/qml/FunnelPlot.qml @@ -313,6 +313,13 @@ Form { label: qsTr("Left"), value: "left"} ] } + + DoubleField + { + name: "estimatesMappingLabelOffset" + label: qsTr("Label offset") + defaultValue: 0.10 + } } From 1eef1bf791cbf42dea2479a10b1d51fe82703b24 Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 31 Oct 2024 11:36:43 +0100 Subject: [PATCH 118/127] fix effect size computation: no errors on no input --- R/effectsizecomputation.R | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index cc7a9124..059f99d8 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -20,6 +20,8 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { # all input checking is done within the escalc function # - error messages are cleaned and forwarded to the user dataOutput <- .escComputeEffectSizes(dataset, options) + saveRDS(options, file = "C:/JASP/options.RDS") + saveRDS(dataset, file = "C:/JASP/dataset.RDS") .escComputeSummaryTable(jaspResults, dataset, options, dataOutput) .escExportData(jaspResults, options, dataOutput) @@ -43,17 +45,25 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { newDataOutput <- try(stop(gettext("Cannot compute outcomes. Chech that all of the required information is specified via the appropriate arguments (i.e. an Effect Size and either Standard Error, Sampling Variance, or 95% Confidence Interval)."))) } else { # set escalc input - escalcInput <- c( - .escGetEscalcDataOptions(dataset, effectSizeType, variables), - .escGetEscalcAdjustFrequenciesOptions(effectSizeType, variables), - .escGetEscalcVtypeOption(effectSizeType, variables), - measure = if (effectSizeType[["design"]] == "reportedEffectSizes") "GEN" else effectSizeType[["effectSize"]], - replace = i == 1, - add.measure = TRUE, - data = if (!is.null(dataOutput)) list(dataOutput) - ) + tempDataOptions <- .escGetEscalcDataOptions(dataset, effectSizeType, variables) + + # skip on no input and don't set an error message + if (length(tempDataOptions) == 0) { + next + } else { + escalcInput <- c( + tempDataOptions, + .escGetEscalcAdjustFrequenciesOptions(effectSizeType, variables), + .escGetEscalcVtypeOption(effectSizeType, variables), + measure = if (effectSizeType[["design"]] == "reportedEffectSizes") "GEN" else effectSizeType[["effectSize"]], + replace = i == 1, + add.measure = TRUE, + data = if (!is.null(dataOutput)) list(dataOutput) + ) + + newDataOutput <- try(do.call(metafor::escalc, escalcInput)) + } - newDataOutput <- try(do.call(metafor::escalc, escalcInput)) } From 88540866c079402cd027553253354605d04fa1d6 Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 31 Oct 2024 12:48:08 +0100 Subject: [PATCH 119/127] fix effect size computation: better handling of observed effects --- R/effectsizecomputation.R | 57 ++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index 059f99d8..c8b689fd 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -40,32 +40,34 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { effectSizeType <- options[["effectSizeType"]][[i]] variables <- options[["variables"]][[i]] - # dispatch - if (effectSizeType[["design"]] == "reportedEffectSizes" && !.escReportedEffectSizesReady(variables)) { - newDataOutput <- try(stop(gettext("Cannot compute outcomes. Chech that all of the required information is specified via the appropriate arguments (i.e. an Effect Size and either Standard Error, Sampling Variance, or 95% Confidence Interval)."))) - } else { - # set escalc input - tempDataOptions <- .escGetEscalcDataOptions(dataset, effectSizeType, variables) + # skip on no input to the reported effect sizes (no error added) + if (effectSizeType[["design"]] == "reportedEffectSizes" && !.escReportedEffectSizesReady(variables, all = FALSE)) + next - # skip on no input and don't set an error message - if (length(tempDataOptions) == 0) { - next - } else { - escalcInput <- c( - tempDataOptions, - .escGetEscalcAdjustFrequenciesOptions(effectSizeType, variables), - .escGetEscalcVtypeOption(effectSizeType, variables), - measure = if (effectSizeType[["design"]] == "reportedEffectSizes") "GEN" else effectSizeType[["effectSize"]], - replace = i == 1, - add.measure = TRUE, - data = if (!is.null(dataOutput)) list(dataOutput) - ) + # set escalc input (allows to check whether at least something was specified) + tempDataOptions <- .escGetEscalcDataOptions(dataset, effectSizeType, variables) - newDataOutput <- try(do.call(metafor::escalc, escalcInput)) - } + # skip on no input and don't set an error message + if (length(tempDataOptions) == 0) + next - } + # set error message if reported effect sizes cannot be performed + if (effectSizeType[["design"]] == "reportedEffectSizes" && !.escReportedEffectSizesReady(variables, all = TRUE)) { + newDataOutput <- try(stop(gettext("Cannot compute outcomes. Chech that all of the required information is specified via the appropriate arguments (i.e. an Effect Size and either Standard Error, Sampling Variance, or 95% Confidence Interval)."))) + } else { + # set escalc input + escalcInput <- c( + tempDataOptions, + .escGetEscalcAdjustFrequenciesOptions(effectSizeType, variables), + .escGetEscalcVtypeOption(effectSizeType, variables), + measure = if (effectSizeType[["design"]] == "reportedEffectSizes") "GEN" else effectSizeType[["effectSize"]], + replace = i == 1, + add.measure = TRUE, + data = if (!is.null(dataOutput)) list(dataOutput) + ) + newDataOutput <- try(do.call(metafor::escalc, escalcInput)) + } if (inherits(newDataOutput, "try-error")) { errors[[paste0("i",i)]] <- list( @@ -832,9 +834,16 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { return(inputs) } -.escReportedEffectSizesReady <- function(.escReportedEffectSizesReady, variables){ +.escReportedEffectSizesReady <- function(variables, all = TRUE){ - return(!(length(variables[["confidenceInterval"]]) == 0 && variables[["standardError"]] == "" && variables[["samplingVariance"]] == "")) + varianceMeasureReady <- !(length(variables[["confidenceInterval"]]) == 0 && variables[["standardError"]] == "" && variables[["samplingVariance"]] == "") + effectSizeReady <- variables[["effectSize"]] != "" + + if (all) { + return(effectSizeReady && varianceMeasureReady) + } else { + return((effectSizeReady + varianceMeasureReady) >= 1) + } } .escVariableInputs <- c( "group1OutcomePlus", From ff097d0b9536f283682218aec3e2d1071611e81b Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 31 Oct 2024 12:51:15 +0100 Subject: [PATCH 120/127] fix effect size computation: cronbachsAlpha -> coefficientAlpha --- R/effectsizecomputation.R | 4 ++-- inst/qml/EffectSizeComputation.qml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index c8b689fd..97ccebf5 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -394,7 +394,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { } else if (design == "other") { if (measurement == "reliability") { inputs <- list( - ai = dataset[[variables[["cronbachsAlpha"]]]], + ai = dataset[[variables[["coefficientAlpha"]]]], mi = dataset[[variables[["items"]]]], ni = dataset[[variables[["sampleSize"]]]] ) @@ -849,7 +849,7 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { "group1OutcomePlus", "time1OutcomePlus", "outcomePlusPlus", - "cronbachsAlpha", + "coefficientAlpha", "homozygousDominantAlleles", "group1OutcomeMinus", "time1OutcomeMinus", diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index 0ab5904b..5b068d0c 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -357,8 +357,8 @@ Form AssignedVariablesList { // metafor: ai - name: "cronbachsAlpha" - title: qsTr("Cronbach's alpha") + name: "coefficientAlpha" + title: qsTr("Coefficient Ξ±") singleVariable: true allowedColumns: ["scale"] visible: (designValue == "other" && measurementValue == "reliability") From 0a09a2e0971eb121f9c48b50503a726d4422707f Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 31 Oct 2024 12:56:26 +0100 Subject: [PATCH 121/127] fix effect size computation: fixing incorrect variance type --- inst/qml/EffectSizeComputation.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index 5b068d0c..458ef7b0 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -990,7 +990,7 @@ Form { label: qsTr("LS"), value: "LS" }, { label: qsTr("LS2"), value: "LS2" }, { label: qsTr("AV"), value: "AV" }, - { label: qsTr("A2"), value: "AV2" } + { label: qsTr("AV2"), value: "AV2" } ]; } else { return []; From 32fd0b104e1183afe939edbf23078c82c9413e55 Mon Sep 17 00:00:00 2001 From: FBartos Date: Thu, 31 Oct 2024 13:46:57 +0100 Subject: [PATCH 122/127] fix meta-analysis: prevent issues with dropping the intercept --- R/classicalmetaanalysiscommon.R | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/R/classicalmetaanalysiscommon.R b/R/classicalmetaanalysiscommon.R index 5bb663e0..de2e9d75 100644 --- a/R/classicalmetaanalysiscommon.R +++ b/R/classicalmetaanalysiscommon.R @@ -1516,12 +1516,18 @@ ) if (.maIsMetaregressionHeterogeneity(options)) { - predictInput$newmods <- t(colMeans(model.matrix(fit)$location)[-1]) - predictInput$newscale <- t(colMeans(model.matrix(fit)$scale)[-1]) + predictInput$newmods <- t(colMeans(model.matrix(fit)$location)) + predictInput$newscale <- t(colMeans(model.matrix(fit)$scale)) } else if (.maIsMetaregressionEffectSize(options)) { - predictInput$newmods <- t(colMeans(model.matrix(fit))[-1]) + predictInput$newmods <- t(colMeans(model.matrix(fit))) } + if (!is.null(predictInput$newmods) && options[["effectSizeModelIncludeIntercept"]]) + predictInput$newmods <- predictInput$newmods[, -1, drop=FALSE] + + if (!is.null(predictInput$newscale) && options[["heterogeneityModelIncludeIntercept"]]) + predictInput$newscale <- predictInput$newscale[, -1, drop=FALSE] + if (.mammHasMultipleHeterogeneities(options, canAddOutput = TRUE) && options[["predictionIntervals"]]) { tauLevelsMatrix <- .mammExtractTauLevels(fit) predictInput$tau2.levels <- tauLevelsMatrix[["tau2.levels"]] @@ -1873,6 +1879,11 @@ effectSize = fit[["formula.mods"]], heterogeneity = fit[["formula.scale"]] ) + hasIntercept <- switch( + parameter, + effectSize = options[["effectSizeModelIncludeIntercept"]], + heterogeneity = options[["heterogeneityModelIncludeIntercept"]] + ) # extract the used variables terms <- attr(terms(formula, data = fit[["data"]]), "term.labels") @@ -1919,14 +1930,16 @@ # add the specified variable and pool across the combinations of the remaining values if (length(selectedVariables) == 1 && selectedVariables == "") { # empty string creates overall adjusted estimate - outMatrix <- colMeans(model.matrix(formula, data = expand.grid(predictorsRemaining)))[-1] + outMatrix <- t(colMeans(model.matrix(formula, data = expand.grid(predictorsRemaining)))) } else { predictorsSelectedGrid <- expand.grid(predictorsSelected) outMatrix <- do.call(rbind, lapply(1:nrow(predictorsSelectedGrid), function(i) { - colMeans(model.matrix(formula, data = expand.grid(c(predictorsRemaining, predictorsSelectedGrid[i,,drop = FALSE]))))[-1] + colMeans(model.matrix(formula, data = expand.grid(c(predictorsRemaining, predictorsSelectedGrid[i,,drop = FALSE])))) })) } + if (hasIntercept) + outMatrix <- outMatrix[, -1, drop=FALSE] # keep information about the variable and levels if (length(selectedVariables) == 1 && selectedVariables == "") { From 304d88a6fcdd743f5fb3db5723bc1f550e1e8877 Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 1 Nov 2024 09:52:32 +0100 Subject: [PATCH 123/127] Update effectsizecomputation.R --- R/effectsizecomputation.R | 2 -- 1 file changed, 2 deletions(-) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index 97ccebf5..17a5ebf0 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -20,8 +20,6 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { # all input checking is done within the escalc function # - error messages are cleaned and forwarded to the user dataOutput <- .escComputeEffectSizes(dataset, options) - saveRDS(options, file = "C:/JASP/options.RDS") - saveRDS(dataset, file = "C:/JASP/dataset.RDS") .escComputeSummaryTable(jaspResults, dataset, options, dataOutput) .escExportData(jaspResults, options, dataOutput) From 7a10472ee7ada80f9a810ce5b877560a18ff30ba Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 1 Nov 2024 14:38:28 +0100 Subject: [PATCH 124/127] computedcolumnsNamesEffectSize -> computedColumnsNamesEffectSize --- R/effectsizecomputation.R | 8 ++++---- inst/qml/EffectSizeComputation.qml | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/R/effectsizecomputation.R b/R/effectsizecomputation.R index 17a5ebf0..11add3b4 100644 --- a/R/effectsizecomputation.R +++ b/R/effectsizecomputation.R @@ -143,9 +143,9 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { # columns to add if (options[["computeSamplingVariance"]]) { - columnOptions <- c("computedcolumnsNamesEffectSize", "computedcolumnsNamesSamplingVariance", "computedcolumnsNamesEffectSizeType") + columnOptions <- c("computedColumnsNamesEffectSize", "computedcolumnsNamesSamplingVariance", "computedColumnsNamesEffectSizeType") } else { - columnOptions <- c("computedcolumnsNamesEffectSize", "computedcolumnsNamesStandardError", "computedcolumnsNamesEffectSizeType") + columnOptions <- c("computedColumnsNamesEffectSize", "computedcolumnsNamesStandardError", "computedColumnsNamesEffectSizeType") } for (column in columnOptions) { @@ -158,10 +158,10 @@ EffectSizeComputation <- function(jaspResults, dataset, options, state = NULL) { jaspResults[[column]] <- createJaspColumn(columnName = columnName, dependencies = c("effectSizeType", "variables", column)) jaspResults[[column]]$setScale(switch( column, - "computedcolumnsNamesEffectSize" = dataOutput[["yi"]], + "computedColumnsNamesEffectSize" = dataOutput[["yi"]], "computedcolumnsNamesStandardError" = sqrt(dataOutput[["vi"]]), "computedcolumnsNamesSamplingVariance" = dataOutput[["vi"]], - "computedcolumnsNamesEffectSizeType" = dataOutput[["measure"]] + "computedColumnsNamesEffectSizeType" = dataOutput[["measure"]] )) } diff --git a/inst/qml/EffectSizeComputation.qml b/inst/qml/EffectSizeComputation.qml index 458ef7b0..8e226726 100644 --- a/inst/qml/EffectSizeComputation.qml +++ b/inst/qml/EffectSizeComputation.qml @@ -1027,7 +1027,7 @@ Form TextField { - name: "computedcolumnsNamesEffectSize" + name: "computedColumnsNamesEffectSize" label: qsTr("Effect size") defaultValue: "computed effect size" } @@ -1050,7 +1050,7 @@ Form TextField { - name: "computedcolumnsNamesEffectSizeType" + name: "computedColumnsNamesEffectSizeType" label: qsTr("Effect size type") defaultValue: "computed effect size type" } @@ -1059,4 +1059,4 @@ Form } -} \ No newline at end of file +} From f873fdb2d6e135e2301fc849353f5869cc39aca9 Mon Sep 17 00:00:00 2001 From: FBartos Date: Fri, 1 Nov 2024 18:30:10 +0100 Subject: [PATCH 125/127] add documentation (part 1/2) --- inst/help/ClassicalMetaAnalysis.md | 11 ------- inst/help/ClassicalMetaAnalysis_nl.md | 11 ------- inst/qml/ClassicalMetaAnalysis.qml | 7 ++++ ...icalMetaAnalysisMultilevelMultivariate.qml | 24 +++++++++++++- .../ClassicalMetaAnalysisAdvanced.qml | 32 +++++++++++++++++++ .../ClassicalMetaAnalysisBubblePlot.qml | 18 +++++++++-- .../ClassicalMetaAnalysisDiagnostics.qml | 16 ++++++++++ ...icalMetaAnalysisEstimatedMarginalMeans.qml | 9 ++++++ .../ClassicalMetaAnalysisModel.qml | 7 ++++ .../ClassicalMetaAnalysisStatistics.qml | 16 ++++++++++ 10 files changed, 126 insertions(+), 25 deletions(-) delete mode 100644 inst/help/ClassicalMetaAnalysis.md delete mode 100644 inst/help/ClassicalMetaAnalysis_nl.md diff --git a/inst/help/ClassicalMetaAnalysis.md b/inst/help/ClassicalMetaAnalysis.md deleted file mode 100644 index 9ad5724d..00000000 --- a/inst/help/ClassicalMetaAnalysis.md +++ /dev/null @@ -1,11 +0,0 @@ -Classical Meta-Analysis -========================== - -You can read this blog to have more information about Meta Analysis. - -Additional documentation will be available in future releases of JASP. - -### R Packages ---- -- metafor -- stats diff --git a/inst/help/ClassicalMetaAnalysis_nl.md b/inst/help/ClassicalMetaAnalysis_nl.md deleted file mode 100644 index dce460fd..00000000 --- a/inst/help/ClassicalMetaAnalysis_nl.md +++ /dev/null @@ -1,11 +0,0 @@ -Klassieke Meta-Analyse -========================== - -Om meer informatie te verkrijgen over Meta-Analyses kan dit bestand worden gelezen: blog. - -Aanvullende documentatie zal beschikbaar zijn in toekomstige versies van JASP. - -### R Packages ---- -- metafor -- stats diff --git a/inst/qml/ClassicalMetaAnalysis.qml b/inst/qml/ClassicalMetaAnalysis.qml index 62e9c1e2..7a5a0fcc 100644 --- a/inst/qml/ClassicalMetaAnalysis.qml +++ b/inst/qml/ClassicalMetaAnalysis.qml @@ -40,6 +40,7 @@ Form title: qsTr("Effect Size") singleVariable: true allowedColumns: ["scale"] + info: qsTr("Variable containing the observed effect sizes.") } AssignedVariablesList { @@ -48,6 +49,7 @@ Form title: qsTr("Effect Size Standard Error") singleVariable: true allowedColumns: ["scale"] + info: qsTr("Variable containing the standard errors corresponding to the effect sizes.") } DropDown @@ -56,6 +58,7 @@ Form id: method label: qsTr("Method") startValue: "restrictedML" + info: qsTr("Method used to estimate heterogeneity (tau-squared) in the meta-analysis. The available methods depend on the inclusion of heterogeneity model terms.") values: (function() { if (sectionModel.heterogeneityModelTermsCount == 0) { return [ @@ -89,6 +92,7 @@ Form label: qsTr("Fixed effect test") startValue: "knha" values: [ "z", "t", "knha"] + info: qsTr("Method for testing the model coefficients: 'z' uses standard normal approximation, 't' uses t-distribution, and 'knha' uses the Knapp and Hartung adjustment (default).") } AssignedVariablesList @@ -98,6 +102,7 @@ Form title: qsTr("Predictors") allowedColumns: ["nominal", "scale"] allowTypeChange: true + info: qsTr("Variables to include as predictors (moderators) in the meta-regression model.") } AssignedVariablesList @@ -108,6 +113,7 @@ Form singleVariable: true enabled: !sectionAdvanced.permutationTestChecked allowedColumns: ["nominal"] + info: qsTr("Variable indicating clustering of effect sizes. This option is disabled when permutation tests are selected.") } AssignedVariablesList @@ -116,6 +122,7 @@ Form title: qsTr("Study Labels") singleVariable: true allowedColumns: ["nominal"] + info: qsTr("Variable containing labels for the studies. Used for labeling outputs and plots.") } } diff --git a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml index 4cba766d..afddbafd 100644 --- a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml +++ b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml @@ -41,6 +41,7 @@ Form title: qsTr("Effect Size") singleVariable: true allowedColumns: ["scale"] + info: qsTr("Variable containing the observed effect sizes.") } AssignedVariablesList @@ -50,6 +51,7 @@ Form title: qsTr("Effect Size Standard Error") singleVariable: true allowedColumns: ["scale"] + info: qsTr("Variable containing the standard errors corresponding to the effect sizes.") } DropDown @@ -58,6 +60,7 @@ Form id: method label: qsTr("Method") startValue: "restrictedML" + info: qsTr("Method used to estimate heterogeneity in the meta-analysis.") values: [ { label: qsTr("Maximum Likelihood") , value: "maximumLikelihood"}, { label: qsTr("Restricted ML") , value: "restrictedML" } @@ -70,6 +73,7 @@ Form label: qsTr("Fixed effect test") startValue: "t" values: [ "z", "t"] + info: qsTr("Method for testing the model coefficients: 'z' uses standard normal approximation, 't' uses t-distribution.") } AssignedVariablesList @@ -78,6 +82,7 @@ Form id: predictors title: qsTr("Predictors") allowedColumns: ["nominal", "scale"] + info: qsTr("Variables to include as predictors (moderators) in the meta-regression model.") } AssignedVariablesList @@ -87,6 +92,7 @@ Form title: qsTr("Clustering") singleVariable: true allowedColumns: ["nominal"] + info: qsTr("Variable indicating clustering of effect sizes. This option is disabled when permutation tests are selected.") } AssignedVariablesList @@ -95,6 +101,7 @@ Form title: qsTr("Study Labels") singleVariable: true allowedColumns: ["nominal"] + info: qsTr("Variable containing labels for the studies. Used for labeling outputs and plots.") } } @@ -102,7 +109,8 @@ Form Section { title: qsTr("Random Effects / Model Structure") - expanded: true + expanded: true + info: qsTr("Specify the random effects structure for the meta-analysis model, including the types of random effects and their associated variables. Allows modeling of complex data structures such as multilevel, multivariate, autoregressive, spatial, and other forms of dependency.") ComponentsList { @@ -130,6 +138,7 @@ Form { id: type name: "type" + info: qsTr("Type of random effect to include in the model.") values: [ { label: qsTr("Simple"), value: "simple"}, { label: qsTr("Nested (multilevel)"), value: "nested"}, @@ -147,6 +156,7 @@ Form name: "structure" label: qsTr("Structure") visible: type.value == "structured" || type.value == "autoregressive" || type.value == "spatial" + info: qsTr("Structure of the random effect when the type is 'Structured', 'Autoregressive', or 'Spatial'. Available structures depend on the selected type.") values: (function() { if (type.value == "structured") { return [ @@ -214,6 +224,7 @@ Form visible: typeValue == "randomSlopes" listViewType: JASP.Interaction allowedColumns: ["nominal", "scale"] // this should be choose on assignment + info: qsTr("Variables to include as random slope terms in the model. Available when the random effect type is 'Random slopes'.") addAvailableVariablesToAssigned: false } @@ -223,6 +234,7 @@ Form title: qsTr("Factor Levels") visible: typeValue == "structured" singleVariable: true + info: qsTr("Variable indicating the factor levels ('Inner Term') for the structured random effect. Available when the random effect type is 'Structured'.") allowedColumns: ["nominal"] } @@ -279,6 +291,7 @@ Form visible: typeValue == "autoregressive" singleVariable: true allowedColumns: ["ordinal", "scale"] // scale for continuous time AR otherwise ordinal + info: qsTr("Variable indicating time points for an autoregressive random effects structure. Available when the random effect type is 'Autoregressive'.") } AssignedVariablesList @@ -287,6 +300,7 @@ Form title: qsTr("Spatial Coordinates") visible: typeValue == "spatial" && distanceMetric.value != "greatCircle" && distanceMetric.value != "loadFromFile" allowedColumns: ["scale"] + info: qsTr("Variables representing spatial coordinates for a spatial random effects structure. Available when the random effect type is 'Spatial' and the distance metric is not 'Great-circle' or prespecified in a file.") } AssignedVariablesList @@ -296,6 +310,7 @@ Form visible: typeValue == "spatial" && distanceMetric.value == "greatCircle" allowedColumns: ["scale"] singleVariable: true + info: qsTr("Variable representing longitude (in decimal degrees, with minus signs for West) for a spatial random effects structure using the 'Great-circle' distance metric. Available when the random effect type is 'Spatial' and the distance metric is 'Great-circle'.") } AssignedVariablesList @@ -305,6 +320,7 @@ Form visible: typeValue == "spatial" && distanceMetric.value == "greatCircle" allowedColumns: ["scale"] singleVariable: true + info: qsTr("Variable representing latitude (in decimal degrees, with minus signs for South) for a spatial random effects structure using the 'Great-circle' distance metric. Available when the random effect type is 'Spatial' and the distance metric is 'Great-circle'.") } AssignedVariablesList @@ -314,6 +330,7 @@ Form visible: typeValue == "spatial" && distanceMetric.value == "loadFromFile" allowedColumns: ["nominal"] singleVariable: true + info: qsTr("Variable identifying locations when loading distances matrix from a file for a spatial random effects structure. The location corresponds to the row and column names of the distance matrix. The names cannot start with a number.") } AssignedVariablesList @@ -323,6 +340,7 @@ Form visible: typeValue != "nested" singleVariable: true allowedColumns: ["nominal"] + info: qsTr("Grouping variable specifying which observations share the same random effect ('Outer Term'). Available for random effect types other than 'Nested (Multilevel)'. The 'Grouping Factor' is not required for 'Spatial' Random Effects.") } } @@ -332,6 +350,7 @@ Form id: distanceMetric label: qsTr("Distance metric") visible: typeValue == "spatial" + info: qsTr("Distance metric used to calculate distances in a spatial random effects structure. Available when the random effect type is 'Spatial'.") values: [ { label: qsTr("Euclidean"), value: "euclidean" }, { label: qsTr("Manhattan"), value: "manhattan" }, @@ -348,6 +367,8 @@ Form visible: typeValue == "spatial" && distanceMetric.value == "loadFromFile" filter: "*.csv" save: false + info: qsTr("CSV file containing the distance matrix for the spatial random effects structure. The first row and the first column of the file must contain names that map the matrix entries to the 'Location Identifier' (the names cannot start with a number). Available when the random effect type is 'Spatial' and the distance metric is loaded from a file.") + } FileSelector @@ -357,6 +378,7 @@ Form visible: typeValue == "knownCorrelation" filter: "*.csv" save: false + info: qsTr("CSV file containing the known correlation matrix for the random effects structure. The first row and the first column of the file must contain names that map the matrix entries to the 'Grouping Factor' (the names cannot start with a number). Available when the random effect type is 'Known correlation'.") } Divider { } diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml index 50a4d6b1..f81116ca 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisAdvanced.qml @@ -27,6 +27,7 @@ Section property string module: "metaAnalysis" columns: 1 + info: qsTr("Advanced options for the meta-analysis, including optimization settings, clustering, and permutation tests.") property alias permutationTestChecked: permutationTest.checked @@ -42,6 +43,7 @@ Section name: "showMetaforRCode" text: qsTr("Show metafor R code") Layout.preferredWidth: 300 * jaspTheme.uiScale + info: qsTr("Display the underlying R code used by the metafor package to fit the model.") } CheckBox @@ -49,6 +51,7 @@ Section name: "weightedEstimation" text: qsTr("Weighted estimation") checked: true + info: qsTr("Perform weighted estimation using inverse-variance weights. Uncheck for unweighted estimation.") } Group @@ -61,6 +64,7 @@ Section name: "clusteringUseClubSandwich" text: qsTr("Use clubSandwich") checked: true + info: qsTr("Use the clubSandwich package for robust variance estimation in clustered data. Enabled when a clustering variable is specified.") } CheckBox @@ -68,6 +72,7 @@ Section name: "clusteringSmallSampleCorrection" text: qsTr("Small sample correction") checked: true + info: qsTr("Apply a small-sample correction to the clustered standard errors.") } } @@ -81,6 +86,7 @@ Section name: "useSparseMatricies" text: qsTr("Use sparse matricies") checked: false + info: qsTr("Use sparse matrix representations to speed up computations in models with large datasets or complex random effects structures. Available in multilevel/multivariate meta-analysis.") } CheckBox @@ -88,6 +94,7 @@ Section name: "computeCovarianceMatrix" text: qsTr("Compute covariance matrix") checked: true + info: qsTr("Compute the covariance matrix of the parameter estimates. Available in multilevel/multivariate meta-analysis.") } } } @@ -103,6 +110,7 @@ Section text: qsTr("𝜏²") enabled: sectionModel.heterogeneityModelTermsCount == 0 childrenOnSameRow: true + info: qsTr("Fix the value of 𝜏² in the model instead of estimating it. Unavailable in multilevel/multivariate meta-analysis or with meta-regression model for heterogeneity. A more complex heterogeneity terms in the multilevel/multivariate meta-analysis can be fixed via the 'Extend metafor call' option.") FormulaField { @@ -119,6 +127,7 @@ Section name: "fixParametersWeights" text: qsTr("Weights") childrenOnSameRow: true + info: qsTr("Use custom weights for the effect sizes instead of inverse-variance weights.") DropDown { @@ -142,12 +151,14 @@ Section name: "addOmnibusModeratorTestEffectSizeCoefficients" enabled: sectionModel.effectSizeModelTermsCount > 0 childrenOnSameRow: false + info: qsTr("Include an omnibus test for the specified effect size regression coefficients. Available when effect size model terms are included. The coefficients should be selected via their comma-separated indicies which correspond to the order presented in the 'Effect Size Meta-Regression Coefficients' Table.") TextField { label: "" name: "addOmnibusModeratorTestEffectSizeCoefficientsValues" value: "(1, 2)" + info: qsTr("Specify the indices of the effect size meta-regression coefficients to include in the omnibus test, e.g. '(1, 2)' for the first and the second coefficient.") } } @@ -158,12 +169,14 @@ Section enabled: sectionModel.heterogeneityModelTermsCount > 0 childrenOnSameRow: false visible: module == "metaAnalysis" + info: qsTr("Include an omnibus test for the specified heterogeneity regression coefficients. Available when heterogeneity model terms are included. The coefficients should be selected via their comma-separated indicies which correspond to the order presented in the 'Heterogeneity Meta-Regression Coefficients' Table.") TextField { label: "" name: "addOmnibusModeratorTestHeterogeneityCoefficientsValues" value: "(1, 2)" + info: qsTr("Specify the indices of the heterogeneity meta-regression coefficients to include in the omnibus test, e.g. '(1, 2)' for the first and the second coefficient.") } } } @@ -174,12 +187,14 @@ Section enabled: method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu" || method.value == "sidikJonkman" + info: qsTr("Optimizer settings for estimating the meta-analytic models. A more complex/unavailbe settings can be specified via the 'Extend metafor call' option.") DropDown { name: "optimizerMethod" id: optimizerMethod label: qsTr("Method") // TODO: switch default value on heterogeneityModelLink change + info: qsTr("Select the optimization method to use for fitting the model. Available in multilevel/multivariate meta-analysis or when heterogeneity model terms are included.") values: { if (module == "metaAnalysis") { if (sectionModel.heterogeneityModelLinkValue == "log") @@ -200,6 +215,7 @@ Section text: qsTr("Initial 𝜏²") checked: false childrenOnSameRow: true + info: qsTr("Specify the initial value of 𝜏² for the optimization algorithm. Available only for specific optimization methods and unavailable in multilevel/multivariate meta-analysis or when heterogeneity model terms are included.") visible: (method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || method.value == "sidikJonkman") && sectionModel.heterogeneityModelTermsCount == 0 && module == "metaAnalysis" @@ -219,6 +235,7 @@ Section text: qsTr("Minimum 𝜏²") checked: false childrenOnSameRow: true + info: qsTr("Specify the minimum allowable value of 𝜏² during optimization. Available only for specific optimization methods and unavailable in multilevel/multivariate meta-analysis or when heterogeneity model terms are included.") visible: (method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && sectionModel.heterogeneityModelTermsCount == 0 && module == "metaAnalysis" @@ -239,6 +256,7 @@ Section text: qsTr("Maximum 𝜏²") checked: false childrenOnSameRow: true + info: qsTr("Specify the maximim allowable value of 𝜏² during optimization. Available only for specific optimization methods and unavailable in multilevel/multivariate meta-analysis or when heterogeneity model terms are included.") visible: ((method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && sectionModel.heterogeneityModelTermsCount == 0 && module == "metaAnalysis") @@ -259,6 +277,7 @@ Section text: qsTr("Maximum evaluations") checked: false childrenOnSameRow: true + info: qsTr("Set the maximum number of function evaluations for the optimizer. Available when using specific optimization methods in multilevel/multivariate meta-analysis.") visible: (optimizerMethod.value == "nlminb" || optimizerMethod.value == "uobyqa" || optimizerMethod.value == "newuoa" || optimizerMethod.value == "bobyqa" || optimizerMethod.value == "hjk" || optimizerMethod.value == "nmk" || optimizerMethod.value == "mads") && module == "metaAnalysisMultilevelMultivariate" @@ -278,6 +297,7 @@ Section text: qsTr("Maximum iterations") checked: false childrenOnSameRow: true + info: qsTr("Set the maximum number of iterations for the optimizer. Available when using certain estimation or optimization methods.") visible: ((method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && module == "metaAnalysis") || ((optimizerMethod.value == "nlminb" || optimizerMethod.value == "Nelder-Mead" || optimizerMethod.value == "BFGS" || @@ -304,6 +324,7 @@ Section text: qsTr("Convergence tolerance") checked: false childrenOnSameRow: true + info: qsTr("Set the convergence tolerance for the optimizer. Available when using certain methods without heterogeneity model terms or specific optimizers in multilevel/multivariate meta-analysis.") visible: ((method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes" || method.value == "pauleMandel" || method.value == "pauleMandelMu" || method.value == "qeneralizedQStatMu") && sectionModel.heterogeneityModelTermsCount == 0 && module == "metaAnalysis") || @@ -332,6 +353,7 @@ Section text: qsTr("Convergence relative tolerance") checked: false childrenOnSameRow: true + info: qsTr("Set the relative convergence tolerance for the optimizer. Available when heterogeneity model terms are included or using specific optimizers in multilevel/multivariate meta-analysis.") visible: (sectionModel.heterogeneityModelTermsCount > 0 && module == "metaAnalysis") || ((optimizerMethod.value == "nlminb" || optimizerMethod.value == "Nelder-Mead" || optimizerMethod.value == "BFGS") && module == "metaAnalysisMultilevelMultivariate") @@ -351,6 +373,7 @@ Section text: qsTr("Step adjustment") checked: false childrenOnSameRow: true + info: qsTr("Set the step adjustment factor for the optimizer. Available when using certain methods without heterogeneity model terms and unavailable in multilevel/multivariate meta-analysis.") visible: ((method.value == "restrictedML" || method.value == "maximumLikelihood" || method.value == "empiricalBayes") && sectionModel.heterogeneityModelTermsCount == 0 && module == "metaAnalysis") @@ -371,6 +394,7 @@ Section text: qsTr("Initial trust region radius") checked: false childrenOnSameRow: true + info: qsTr("Set the initial trust region radius for the optimizer. Available when using specific optimization methods in multilevel/multivariate meta-analysis.") visible: ((optimizerMethod.value == "uobyqa" || optimizerMethod.value == "newuoa" || optimizerMethod.value == "bobyqa") && module == "metaAnalysisMultilevelMultivariate") DoubleField @@ -389,6 +413,7 @@ Section text: qsTr("Final trust region radius") checked: false childrenOnSameRow: true + info: qsTr("Set the final trust region radius for the optimizer. Available when using specific optimization methods in multilevel/multivariate meta-analysis.") visible: ((optimizerMethod.value == "uobyqa" || optimizerMethod.value == "newuoa" || optimizerMethod.value == "bobyqa") && module == "metaAnalysisMultilevelMultivariate") DoubleField @@ -407,6 +432,7 @@ Section text: qsTr("Maximum restarts") checked: false childrenOnSameRow: true + info: qsTr("Set the maximum number of restarts for the optimizer. Available when using the Nelder-Mead method ('nmk') in multilevel/multivariate meta-analysis.") visible: optimizerMethod.value == "mmk" && module == "metaAnalysisMultilevelMultivariate" IntegerField @@ -427,6 +453,8 @@ Section id: permutationTest visible: module == "metaAnalysis" enabled: clustering.count == 0 + info: qsTr("Perform a permutation test for the model coefficients. Available in the meta-analysis module when clustering is not specified. The resulting permuation p-values are displayed in the 'p (permutation)' column. Note that permutation can be computationally intesive.") + RadioButtonGroup { @@ -434,6 +462,7 @@ Section title: qsTr("Type") columns: 2 radioButtonsOnSameRow: true + info: qsTr("Select the type of permutation test.") RadioButton { @@ -461,6 +490,7 @@ Section value: 1000 min: 10 inclusive: JASP.None + info: qsTr("Specify the number of permutations to use in the approximate permutation test.") } SetSeed{} @@ -475,11 +505,13 @@ Section id: advancedExtendMetaforCall text: qsTr("Extend metafor call") checked: false + info: qsTr("Allow adding custom arguments to the metafor function call. Consult the metafor R package documentation for the available commands (https://wviechtb.github.io/metafor/reference/rma.uni.html and https://wviechtb.github.io/metafor/reference/rma.mv.html).") } TextArea { name: "advancedExtendMetaforCallCode" visible: advancedExtendMetaforCall.checked + info: qsTr("The additional arguments to the metafor function call must be specified as a named list (the 'list()' call can be ommited). E.g., 'list(tau2 = 1)' (or 'tau2 = 1') can be used to fix the between-study heterogeneity to a given value. Multiple arguments must be comma-seprated, e.g. 'list(tau2 = 1, gamma2 = 0.5)' (or 'tau2 = 1, gamma2 = 0.5'). New lines are ignored." ) } } \ No newline at end of file diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml b/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml index a53da5d2..bef0f0d1 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml @@ -25,6 +25,7 @@ Section { title: qsTr("Bubble Plot") property string module: "metaAnalysis" + info: qsTr("Options for visualizing the estimated effect sizes at different levels of the predictors with the observed estimates visualized as bubbles. Continuous predictors can be split into three bins with cutoffs at Β±x standard deviations from the mean. Predictors that are not specified for either the x-axis, lines, or plots are averaged over.") VariablesForm { @@ -33,7 +34,7 @@ Section AvailableVariablesList { name: "bubblePlotModelVariables" - title: qsTr("Model variables") + title: qsTr("Model Variables") source: [{ name: "effectSizeModelTerms", use: "noInteraction" }] } @@ -41,9 +42,10 @@ Section { name: "bubblePlotSelectedVariable" id: bubblePlotSelectedVariable - title: qsTr("Selected variable") + title: qsTr("Selected Variable") singleVariable: true allowTypeChange:false + info: qsTr("Variable to be visualized at the x-axis.") } AssignedVariablesList @@ -52,6 +54,7 @@ Section id: bubblePlotSeparateLines title: qsTr("Separate Lines") allowTypeChange:false + info: qsTr("Variable(s) according to which predictions are split across different lines.") } AssignedVariablesList @@ -60,6 +63,7 @@ Section id: bubblePlotSeparatePlots title: qsTr("Separate Plots") allowTypeChange:false + info: qsTr("Variable(s) according to which predictions are split across different plots.") } } @@ -77,6 +81,7 @@ Section min: 0 enabled: bubblePlotSeparateLines.columnsTypes.includes("scale") || bubblePlotSeparatePlots.columnsTypes.includes("scale") Layout.preferredWidth: 300 * jaspTheme.uiScale + info: qsTr("Standard deviation cutoff used for binning continuous covariates.") } Group @@ -87,6 +92,7 @@ Section { name: "bubblePlotBubblesSize" label: qsTr("Size") + info: qsTr("Options for determining the size of the observed estimates.") values: [ { label: qsTr("Weight") , value: "weight"}, { label: qsTr("Inverse variance") , value: "inverseVariance" }, @@ -101,6 +107,7 @@ Section defaultValue: 1 min: 0 inclusive: JASP.None + info: qsTr("Set the relative size of the observed estimates.") } DoubleField @@ -111,6 +118,7 @@ Section min: 0 max: 1 inclusive: JASP.None + info: qsTr("Set the transparency of the observed estimates.") } DoubleField @@ -120,6 +128,7 @@ Section label: qsTr("Jitter") defaultValue: 1 min: 0 + info: qsTr("Set the degree of x-coordinate jitter of the observed estimates. Available when the x-axis variable is nominal.") } } } @@ -131,6 +140,7 @@ Section name: "bubblePlotConfidenceIntervals" label: qsTr("Condifence intervals") checked: true + info: qsTr("Include confidence interval of the estimated effect sizes.") DoubleField { @@ -148,6 +158,7 @@ Section name: "bubblePlotPredictionIntervals" label: qsTr("Prediction intervals") checked: true + info: qsTr("Include prediction interval of the estimated effect sizes.") DoubleField { @@ -172,6 +183,7 @@ Section id: bubblePlotTheme label: qsTr("Theme") startValue: "jasp" + info: qsTr("Set theme of the bubble plot.") values: [ { label: "JASP", value: "jasp"}, @@ -191,12 +203,14 @@ Section defaultValue: 1.5 min: 0 inclusive: JASP.None + info: qsTr("Adjust the text size of the bubble plot.") } DropDown { name: "bubblePlotLegendPosition" label: qsTr("Legend position") + info: qsTr("Set legend of the bubble plot.") startValue: "right" values: [ diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml b/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml index 2d5bace3..b110c964 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisDiagnostics.qml @@ -26,6 +26,7 @@ Section title: qsTr("Diagnostics") property string module: "metaAnalysis" columns: 1 + info: qsTr("Options for evaluating the influence of individual studies and assessing model diagnostics, including variance inflation factors, casewise diagnostics, and diagnostic plots.") Group { @@ -39,12 +40,14 @@ Section text: qsTr("Variace inflation factor") Layout.preferredWidth: 300 * jaspTheme.uiScale enabled: predictors.count > 0 + info: qsTr("Include variance inflation factors to assess multicollinearity among predictors. Available when predictors are included in the model.") CheckBox { name: "diagnosticsVarianceInflationFactorAggregate" text: qsTr("Aggregate by terms") checked: true + info: qsTr("Aggregate variance inflation factors by terms instead of individual coefficients.") } } @@ -52,45 +55,55 @@ Section { name: "diagnosticsCasewiseDiagnostics" text: qsTr("Casewise diagnostics") + info: qsTr("Include casewise diagnostics to assess the influence of individual studies on the meta-analysis results.") CheckBox { name: "diagnosticsCasewiseDiagnosticsShowInfluentialOnly" text: qsTr("Show influential only") visible: module == "metaAnalysis" + info: qsTr("Show only the influential studies in the casewise diagnostics. Unvailable when performing multilevel/multivariate meta-analysis.") } CheckBox { name: "diagnosticsCasewiseDiagnosticsIncludePredictors" text: qsTr("Include predictors") + info: qsTr("Include predictor variables in the casewise diagnostics output.") } CheckBox { name: "diagnosticsCasewiseDiagnosticsDifferenceInCoefficients" text: qsTr("Difference in coefficients") + info: qsTr("Include the differences in model coefficients when each study is excluded (DFBETAS).") } CheckBox { name: "diagnosticsCasewiseDiagnosticsExportToDataset" text: qsTr("Export to dataset") + info: qsTr("Export the casewise diagnostics results to the dataset.") CheckBox { name: "diagnosticsCasewiseDiagnosticsExportToDatasetInfluentialIndicatorOnly" text: qsTr("Influential indicator only") checked: true + visible: module == "metaAnalysis" + info: qsTr("Export only the indicator of influential cases to the dataset.") } } + /* CheckBox { name: "diagnosticsCasewiseDiagnosticsRerunWithoutInfluentialCases" text: qsTr("Rerun without influential cases") visible: false + info: qsTr("Option to rerun the analysis without influential cases.") } + */ } } @@ -102,6 +115,7 @@ Section { name: "diagnosticsPlotsProfileLikelihood" text: qsTr("Profile likelihood") + info: qsTr("Include a profile likelihood plot for the heterogeneity parameter (τ²).") } CheckBox @@ -109,12 +123,14 @@ Section name: "diagnosticsPlotsBaujat" text: qsTr("Baujat") visible: module == "metaAnalysis" + info: qsTr("Include a Baujat plot to detect studies contributing to heterogeneity and overall effect size. Unvailable when performing multilevel/multivariate meta-analysis.") } CheckBox { name: "diagnosticsResidualFunnel" text: qsTr("Residual funnel") + info: qsTr("Include a residual funnel plot.") } } } diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml b/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml index 20e12ab5..85cf9453 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisEstimatedMarginalMeans.qml @@ -26,6 +26,7 @@ Section title: qsTr("Estimated Marginal Means") columns: 1 property string module: "metaAnalysis" + info: qsTr("Options to compute estimated marginal means (EMMs) for the effect size and heterogeneity models, allowing examination of predicted values at specific levels of moderators.") Group { @@ -49,6 +50,7 @@ Section name: "estimatedMarginalMeansEffectSizeSelectedVariables" title: qsTr("Selected variables") allowTypeChange:false + info: qsTr("Variables selected for computing estimated marginal means in the effect size model.") } } @@ -64,12 +66,14 @@ Section min: 0 enabled: estimatedMarginalMeansEffectSizeSelectedVariables.columnsTypes.includes("scale") Layout.preferredWidth: 350 * jaspTheme.uiScale + info: qsTr("Standard deviation factor for covariates when computing estimated marginal means; applies to scale variables.") } CheckBox { name: "estimatedMarginalMeansEffectSizeAddAdjustedEstimate" label: qsTr("Add adjusted estimate") + info: qsTr("Include the adjusted effect estimate, which accounts for the moderators in the meta-regression model. This provides the effect size adjusted for the influence of moderators, as opposed to the pooled effect which combines the estimates across all studies.") } CheckBox @@ -77,6 +81,7 @@ Section name: "estimatedMarginalMeansEffectSizeTestAgainst" label: qsTr("Test against") childrenOnSameRow: true + info: qsTr("Option to test the estimated marginal means against a specific value.") DoubleField { @@ -110,6 +115,7 @@ Section name: "estimatedMarginalMeansHeterogeneitySelectedVariables" title: qsTr("Selected variables") allowTypeChange:false + info: qsTr("Variables selected for computing estimated marginal means in the heterogeneity model. Unvailable when performing multilevel/multivariate meta-analysis.") } } @@ -125,18 +131,21 @@ Section min: 0 enabled: estimatedMarginalMeansHeterogeneitySelectedVariables.columnsTypes.includes("scale") Layout.preferredWidth: 350 * jaspTheme.uiScale + info: qsTr("Standard deviation factor for covariates when computing estimated marginal means; applies to scale variables.") } CheckBox { name: "estimatedMarginalMeansHeterogeneityAddAdjustedEstimate" label: qsTr("Add adjusted estimate") + info: qsTr("Include the adjusted heterogeneity estimate, which accounts for the moderators in the heterogeneity meta-regression model. This provides the heterogeneity estimate adjusted for the influence of moderators, as opposed to the pooled heterogeneity estimate which combines the heterogeneity estimates across all studies.") } DropDown { name: "estimatedMarginalMeansHeterogeneityTransformation" label: qsTr("Heterogeneity transformation") + info: qsTr("Transformation to apply to the heterogeneity estimate: tau (𝜏) or tau-squared (𝜏²).") values: [ { label: qsTr("𝜏") , value: "tau" }, { label: qsTr("𝜏²") , value: "tau2" } diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml b/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml index afaf93f5..4b37828b 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml @@ -36,6 +36,7 @@ Section Group { title: qsTr("Effect size model") + info: qsTr("Specify the effect size and heterogeneity models for the meta-analysis, including model terms, intercepts, and link functions.") VariablesForm { @@ -55,6 +56,7 @@ Section title: qsTr("Model Terms") listViewType: JASP.Interaction allowTypeChange:false + info: qsTr("Variables assigned as model terms in the effect size model.") } } @@ -63,6 +65,7 @@ Section name: "effectSizeModelIncludeIntercept" label: qsTr("Include intercept") checked: true + info: qsTr("Include an intercept in the effect size model.") } } @@ -71,6 +74,7 @@ Section title: qsTr("Heterogeneity model") visible: module =="metaAnalysis" columns: 2 + info: qsTr("Unvailable when performing multilevel/multivariate meta-analysis.") VariablesForm { @@ -91,6 +95,7 @@ Section listViewType: JASP.Interaction allowTypeChange:false addAvailableVariablesToAssigned: false + info: qsTr("Variables assigned as model terms in the heterogeneity model. Specifying a heterogeneity model results in a 'location-scale' meta-analytic model.") } } @@ -99,6 +104,7 @@ Section name: "heterogeneityModelIncludeIntercept"; label: qsTr("Include intercept") checked: true + info: qsTr("Include an intercept in the heterogeneity model.") } DropDown @@ -107,6 +113,7 @@ Section id: heterogeneityModelLink label: qsTr("Link") values: ["log", "identity"] + info: qsTr("Link function used in the heterogeneity model: 'log' or 'identity'.") } } } diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml index 419ceba6..a123f1e2 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml @@ -26,6 +26,7 @@ Section title: qsTr("Statistics") columns: 2 property string module: "metaAnalysis" + info: qsTr("Options for summarizing the meta-analytic results.") Group { @@ -33,12 +34,14 @@ Section columns: 2 enabled: method.value != "fixedEffects" && method.value != "equalEffects" visible: module == "metaAnalysis" + info: qsTr("Summarize the meta-analytic between-study heterogeneity. Unvailable when performing multilevel/multivariate meta-analysis.") CheckBox { text: qsTr("𝜏") name: "heterogeneityTau" checked: true + info: qsTr("Include 𝜏, the square root of the estimated between-study variance.") } CheckBox @@ -46,6 +49,7 @@ Section text: qsTr("𝜏²") name: "heterogeneityTau2" checked: true + info: qsTr("Include 𝜏², the estimated between-study variance.") } CheckBox @@ -53,6 +57,7 @@ Section text: qsTr("IΒ²") name: "heterogeneityI2" checked: false + info: qsTr("Include IΒ², the percentage of total variation across studies due to heterogeneity.") } CheckBox @@ -60,6 +65,7 @@ Section text: qsTr("HΒ²") name: "heterogeneityH2" checked: false + info: qsTr("Include HΒ², an index indicating the ratio of total variability to sampling variability.") } } @@ -67,12 +73,14 @@ Section { title: qsTr("Random Effects / Model Structure") visible: module == "metaAnalysisMultilevelMultivariate" + info: qsTr("Available when performing multilevel/multivariate meta-analysis.") CheckBox { text: qsTr("Test inclusion") name: "randomEffectsTestInclusion" checked: false + info: qsTr("Test the inclusion of the individual Random Effects / Model Structure components. The test compares the complete model (i.e., including all components) with a model without one of the specified Random Effects / Model Structure components at a time.") } /* TODO: will require a lot of work in sorting out which value belongs where CheckBox @@ -88,12 +96,14 @@ Section { title: qsTr("Meta-Regression") enabled: predictors.count > 0 + info: qsTr("Create summaries of the meta-regression. Available when predictors are included.") CheckBox { name: "metaregressionTermTests" text: qsTr("Term tests") checked: true + info: qsTr("Include tests for each term in the meta-regression model.") } CheckBox @@ -101,6 +111,7 @@ Section name: "metaregressionCoefficientEstimates" text: qsTr("Coefficient estimates") checked: true + info: qsTr("Include estimates of the regression coefficients in the meta-regression model.") } CheckBox @@ -108,6 +119,7 @@ Section name: "metaregressionCoefficientCorrelationMatrix" text: qsTr("Coefficient correlation matrix") checked: false + info: qsTr("Include the correlation matrix of the regression coefficients.") } } @@ -119,6 +131,7 @@ Section text: qsTr("Confidence intervals") checked: true childrenOnSameRow: true + info: qsTr("Include confidence intervals in the tabular output.") CIField { @@ -131,6 +144,7 @@ Section text: qsTr("Prediction intervals") name: "predictionIntervals" checked: true + info: qsTr("Include prediction intervals in the tabular output.") } DropDown @@ -138,6 +152,7 @@ Section name: "transformEffectSize" label: qsTr("Transform effect size") setLabelAbove: true + info: qsTr("Select a transformation to apply to the effect size estimates in the output. This transformation applies to the 'Meta-Analytic Estimates Table', 'Estimated Marginal Means Table', 'Forest Plot', and the 'Bubble Plot'. The 'Meta-Regression Coeffient Estimates' are not transformed.") values: [ { label: qsTr("None") , value: "none" }, // NULL { label: qsTr("Fisher's z to r") , value: "fishersZToCorrelation" }, // transf.ztor @@ -162,6 +177,7 @@ Section { name: "fitMeasures" text: qsTr("Fit measures") + info: qsTr("Include fit statistics for the model, such as AIC and BIC.") } } \ No newline at end of file From 9aa45500cd7169a281e07c4703fe56a7c89e185b Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 6 Nov 2024 14:40:08 +0100 Subject: [PATCH 126/127] add documentation (2/2) --- inst/help/FunnelPlot.md | 3 -- ...icalMetaAnalysisMultilevelMultivariate.qml | 2 +- inst/qml/FunnelPlot.qml | 39 ++++++++++++++++++- .../ClassicalMetaAnalysisBubblePlot.qml | 12 +++--- .../ClassicalMetaAnalysisForestPlot.qml | 38 +++++++++++++++++- .../ClassicalMetaAnalysisModel.qml | 5 ++- .../ClassicalMetaAnalysisStatistics.qml | 2 +- 7 files changed, 85 insertions(+), 16 deletions(-) delete mode 100644 inst/help/FunnelPlot.md diff --git a/inst/help/FunnelPlot.md b/inst/help/FunnelPlot.md deleted file mode 100644 index 392adf85..00000000 --- a/inst/help/FunnelPlot.md +++ /dev/null @@ -1,3 +0,0 @@ -### References ---- -- Kossmeier, M., Tran, U. S., & Voracek, M. (2020). Power-enhanced funnel plots for meta-analysis. Zeitschrift fΓΌr Psychologie, 228(1). \ No newline at end of file diff --git a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml index afddbafd..7e0df159 100644 --- a/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml +++ b/inst/qml/ClassicalMetaAnalysisMultilevelMultivariate.qml @@ -110,7 +110,7 @@ Form { title: qsTr("Random Effects / Model Structure") expanded: true - info: qsTr("Specify the random effects structure for the meta-analysis model, including the types of random effects and their associated variables. Allows modeling of complex data structures such as multilevel, multivariate, autoregressive, spatial, and other forms of dependency.") + info: qsTr("Options for specifying the random effects structure for the meta-analysis model, including the types of random effects and their associated variables. Allows modeling of complex data structures such as multilevel, multivariate, autoregressive, spatial, and other forms of dependency.") ComponentsList { diff --git a/inst/qml/FunnelPlot.qml b/inst/qml/FunnelPlot.qml index fe7f4fd7..5db34381 100644 --- a/inst/qml/FunnelPlot.qml +++ b/inst/qml/FunnelPlot.qml @@ -24,6 +24,8 @@ import JASP 1.0 Form { + infoBottom: qsTr("Kossmeier, M., Tran, U. S., & Voracek, M. (2020). Power-enhanced funnel plots for meta-analysis. Zeitschrift fΓΌr Psychologie, 228(1).") + VariablesForm { preferredHeight: 200 * preferencesModel.uiScale @@ -39,6 +41,7 @@ Form name: "effectSize" singleVariable: true allowedColumns: ["scale"] + info: qsTr("Variable containing the observed effect sizes.") } AssignedVariablesList @@ -47,6 +50,7 @@ Form title: qsTr("Effect Size Standard Error") singleVariable: true allowedColumns: ["scale"] + info: qsTr("Variable containing the standard errors corresponding to the effect sizes.") } AssignedVariablesList @@ -56,6 +60,7 @@ Form title: qsTr("Study Label") singleVariable: true allowedColumns: ["nominal"] + info: qsTr("Variable containing labels for the studies. Used for labeling outputs and plots.") } AssignedVariablesList @@ -64,6 +69,7 @@ Form title: qsTr("Split") singleVariable: true allowedColumns: ["nominal"] + info: qsTr("Variable used to split the funnel plot into separate groups or categories.") } } @@ -73,6 +79,7 @@ Form id: funnelUnderH0 label: qsTr("Funnel under Hβ‚€") checked: true + info: qsTr("Specify the funnel plot under the null hypothesis.") Group { @@ -84,6 +91,7 @@ Form name: "funnelUnderH0ParametersFixedMu" defaultValue: 0 negativeValues: true + info: qsTr("Fixed value for the mean effect size under the null hypothesis.") } DoubleField @@ -92,6 +100,7 @@ Form name: "funnelUnderH0ParametersFixedTau" defaultValue: 0 min: 0 + info: qsTr("Fixed value for 𝜏, representing the heterogeneity under the null hypothesis.") } } @@ -100,12 +109,14 @@ Form name: "funnelUnderH0FillColors" label: qsTr("Fill colors") checked: true + info: qsTr("Fill the funnel plot's prediction intervals under the null hypothesis with different colors.") } DropDown { name: "funnelUnderH0LineType" label: qsTr("Line type") + info: qsTr("Set the type of line of the funnel plot's prediction intervals under the null hypothesis.") values: [ { label: qsTr("None"), value: "none" }, { label: qsTr("Solid"), value: "solid" }, @@ -121,6 +132,7 @@ Form id: funnelUnderH1 label: qsTr("Funnel under H₁") checked: false + info: qsTr("Estimate or specify the funnel plot under the alternative hypothesis.") RadioButtonGroup { @@ -128,6 +140,7 @@ Form title: qsTr("Parameters") columns: 2 radioButtonsOnSameRow: true + info: qsTr("Choose whether to estimate or manually fix the parameters for the funnel plot under the alternative hypothesis.") RadioButton { @@ -155,6 +168,7 @@ Form id: method label: qsTr("Method") startValue: "restrictedML" + info: qsTr("Select the heterogeneity estimation method for the funnel plot under the alternative hypothesis.") values: [ { label: qsTr("Equal Effects") , value: "equalEffects" }, { label: qsTr("Fixed Effects") , value: "fixedEffects" }, @@ -175,13 +189,15 @@ Form { name: "funnelUnderH1IncludeHeterogeneity" label: qsTr("Include heterogeneity") - enabled: method.value != "fixedEffects" && method.value != "equalEffects" + enabled: method.value != "fixedEffects" && method.value != "equalEffects" + info: qsTr("Include heterogeneity (𝜏) in the funnel plot under the alternative hypothesis. If unselected, the heterogeneity estimate is not used to adjust the prediction intervals.") } CheckBox { name: "funnelUnderH1EstimatesTable" label: qsTr("Estimates table") + info: qsTr("Summarize the effect size and heterogeneity estimates used for the funnel plot under the alternative hypothesis in a table.") } } @@ -195,6 +211,7 @@ Form name: "funnelUnderH1ParametersFixedMu" defaultValue: 0 negativeValues: true + info: qsTr("Fixed value for the mean effect size under the alternative hypothesis.") } DoubleField @@ -203,6 +220,7 @@ Form name: "funnelUnderH1ParametersFixedTau" defaultValue: 0 min: 0 + info: qsTr("Fixed value for 𝜏, representing the heterogeneity under the alternative hypothesis.") } } @@ -210,6 +228,7 @@ Form { name: "funnelUnderH1FillColors" label: qsTr("Fill colors") + info: qsTr("Fill the funnel plot's prediction intervals under the alternative hypothesis with different colors.") } DropDown @@ -217,6 +236,7 @@ Form name: "funnelUnderH1LineType" label: qsTr("Line type") startValue: "solid" + info: qsTr("Set the type of line of the funnel plot's prediction intervals under the alternative hypothesis.") values: [ { label: qsTr("None"), value: "none" }, { label: qsTr("Solid"), value: "solid" }, @@ -230,6 +250,7 @@ Form name: "funnelUnderH1PowerEnhancement" enabled: funnelUnderH1.checked label: qsTr("Power enhancement") + info: qsTr("Visualize power levels to detect the effect size under the alternative hypothesis with alpha = 0.05.") TextField { @@ -237,6 +258,7 @@ Form name: "funnelUnderH1PowerEnhancementBreaks" value: "(0.15, 0.30, 0.50, 0.70, 0.90)" fieldWidth: 200 * preferencesModel.uiScale + info: qsTr("Specify the breakpoints for power enhancement. All levels must be within the 0.05 - 1 range.") } } } @@ -245,11 +267,13 @@ Form Group { title: qsTr("Estimates Mapping") + info: qsTr("Set mapping for labels, colors, and shapes of the effect size estimates.") DropDown { label: qsTr("Label") name: "estimatesMappingLabel" + info: qsTr("Show all or only a subset of the effect size estimate labels.") enabled: studyLabel.count > 0 values: { if (funnelUnderH0.checked && funnelUnderH1.checked) { @@ -287,6 +311,7 @@ Form label: qsTr("Color") addEmptyValue: true allowedColumns: ["nominal"] + info: qsTr("Map colors of the effect size estimates in the funnel plot based on the selected variable.") } DropDown @@ -296,6 +321,8 @@ Form label: qsTr("Shape") addEmptyValue: true allowedColumns: ["nominal"] + info: qsTr("Map shapes of the effect size estimates in the funnel plot based on the selected variable.") + } DropDown @@ -304,6 +331,7 @@ Form enabled: estimatesMappingColor.checked || estimatesMappingShape.checked label: qsTr("Legend position") startValue: "right" + info: qsTr("Set the legend position of the funnel plot. Available when color or shape mapping is enabled.") values: [ { label: qsTr("None"), value: "none"}, @@ -319,6 +347,7 @@ Form name: "estimatesMappingLabelOffset" label: qsTr("Label offset") defaultValue: 0.10 + info: qsTr("Adjust the offset of labels in the funnel plot.") } } @@ -331,12 +360,14 @@ Form name: "funnelPredictionInterval" value: "(0.90, 0.95, 0.99)" fieldWidth: 120 * preferencesModel.uiScale + info: qsTr("Specify the confidence levels for the funnel plot prediction intervals.") } CheckBox { name: "invertColors" label: qsTr("Invert colors") + info: qsTr("Invert the colors used in the funnel plot.") } } @@ -344,24 +375,30 @@ Form { name: "funnelPlotAsymmetryTests" label: qsTr("Funnel plot asymmetry tests") + info: qsTr("Perform tests to detect asymmetry in the funnel plot indicating potential publication bias. The tests are performed with the 'Method' specified in the 'Funnel under H₁' option.") + CheckBox { name: "funnelPlotAsymmetryTestsMetaRegression" label: qsTr("Meta-regression") checked: true + info: qsTr("Include meta-regression tests for funnel plot asymmetry.") } CheckBox { name: "funnelPlotAsymmetryTestsWeightedRegression" label: qsTr("Weighted regression") + info: qsTr("Include weighted regression tests for funnel plot asymmetry.") + } CheckBox { name: "funnelPlotAsymmetryTestsRankCorrelation" label: qsTr("Rank correlation") + info: qsTr("Include rank correlation tests for funnel plot asymmetry.") } } } diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml b/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml index bef0f0d1..89548e70 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisBubblePlot.qml @@ -45,7 +45,7 @@ Section title: qsTr("Selected Variable") singleVariable: true allowTypeChange:false - info: qsTr("Variable to be visualized at the x-axis.") + info: qsTr("Variable to be visualized on the x-axis.") } AssignedVariablesList @@ -86,7 +86,7 @@ Section Group { - title: qsTr("Bubles") + title: qsTr("Bubbles") DropDown { @@ -140,7 +140,7 @@ Section name: "bubblePlotConfidenceIntervals" label: qsTr("Condifence intervals") checked: true - info: qsTr("Include confidence interval of the estimated effect sizes.") + info: qsTr("Include confidence intervals of the estimated effect sizes.") DoubleField { @@ -158,7 +158,7 @@ Section name: "bubblePlotPredictionIntervals" label: qsTr("Prediction intervals") checked: true - info: qsTr("Include prediction interval of the estimated effect sizes.") + info: qsTr("Include prediction intervals of the estimated effect sizes.") DoubleField { @@ -183,7 +183,7 @@ Section id: bubblePlotTheme label: qsTr("Theme") startValue: "jasp" - info: qsTr("Set theme of the bubble plot.") + info: qsTr("Set the theme of the bubble plot.") values: [ { label: "JASP", value: "jasp"}, @@ -210,7 +210,7 @@ Section { name: "bubblePlotLegendPosition" label: qsTr("Legend position") - info: qsTr("Set legend of the bubble plot.") + info: qsTr("Set the legend position of the bubble plot.") startValue: "right" values: [ diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml b/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml index 59931f13..58265d08 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisForestPlot.qml @@ -26,12 +26,14 @@ Section title: qsTr("Forest Plot") property string module: "metaAnalysis" columns: 1 + info: qsTr("Options for visualizing study-level information, estimated marginal means, and the model information in an all encompassing forest plot. Different sections of the forest plot can be individually enabled/disabled.") CheckBox { id: forestPlotStudyInformation name: "forestPlotStudyInformation" text: qsTr("Study information") + info: qsTr("Add study-level information panel to the forest plot. There are three sections of the study-level information panel: a) the left section with study labels, names, and etc designed via the 'Selected Variables' option, b) the middle section visualizing the estimates and confidence intervals based on the meta-analytic input, c) the right section textually summarizing the estimates and confidence intervals based on the meta-analytic input.") } VariablesForm @@ -50,6 +52,7 @@ Section id: forestPlotStudyInformationSelectedVariables title: qsTr("Selected Variables") allowedColumns: ["nominal"] + info: qsTr("Select variables containing study-level information to be printed in the left section of the panel. Each variable creates a new column in the panel.") } } @@ -60,6 +63,7 @@ Section enabled: forestPlotStudyInformation.checked visible: forestPlotStudyInformationSelectedVariables.count > 0 headerLabels: [qsTr("Title"), qsTr("Width"), qsTr("Alignment")] + info: qsTr("Adjust the Title, Width, and Alignment of each column in the left section of the study-level information panel.") rowComponent: RowLayout { @@ -122,6 +126,7 @@ Section enabled: effectSize.count == 1 && effectSizeStandardError.count == 1 checked: false Layout.preferredWidth: 300 * jaspTheme.uiScale + info: qsTr("Include predicted effect sizes in the middle section of the study-level information panel.") } CheckBox @@ -129,6 +134,7 @@ Section name: "forestPlotStudyInformationStudyWeights" text: qsTr("Study weights") enabled: forestPlotStudyInformation.checked + info: qsTr("Include the study weights in the right section of the study-level information panel.") } CheckBox @@ -137,6 +143,7 @@ Section text: qsTr("Secondary confidence interval") enabled: forestPlotStudyInformation.checked childrenOnSameRow: true + info: qsTr("Include secondary confidence interval for effect sizes in the middle section of the study-level information panel.") CIField { @@ -150,6 +157,8 @@ Section Group { title: qsTr("Order") + info: qsTr("Order the study-level information panel by a variable.") + DropDown { name: "forestPlotStudyInformationOrderBy" @@ -175,6 +184,7 @@ Section id: forestPlotEstimatedMarginalMeans text: qsTr("Estimated marginal means") enabled: sectionModel.effectSizeModelTermsCount > 0 + info: qsTr("Add estimated marginal means information to the forest plot. Available when effect size meta-regression is specified.") } VariablesForm @@ -185,7 +195,7 @@ Section AvailableVariablesList { name: "forestPlotEstimatedMarginalMeansModelVariables" - title: qsTr("Model variables") + title: qsTr("Model Variables") source: [{ name: "effectSizeModelTerms", use: "noInteraction" }] } @@ -193,8 +203,9 @@ Section { id: forestPlotEstimatedMarginalMeansSelectedVariables name: "forestPlotEstimatedMarginalMeansSelectedVariables" - title: qsTr("Selected variables") + title: qsTr("Selected Variables") allowTypeChange:false + info: qsTr("Select variables for which the estimated marginal means are visualized.") } } @@ -212,6 +223,7 @@ Section label: qsTr("Term tests") checked: true Layout.preferredWidth: 350 * jaspTheme.uiScale + info: qsTr("Include the omnibus term test of variables included in the estimated marginal means. The null hypothesis states that the effect size at all levels of the categorical variable are equal or that there is no linear association between the effect size and the continuous variable.") } CheckBox @@ -221,12 +233,14 @@ Section enabled: forestPlotEstimatedMarginalMeans.checked label: qsTr("Coefficient tests") checked: true + info: qsTr("Include coefficient tests of variables included in the estimated marginal means. The null hypothesis states that the estimated marginal mean for a given level equals the tested value.") DoubleField { name: "forestPlotEstimatedMarginalMeansCoefficientTestsAgainst" text: qsTr("Against") defaultValue: 0 + info: qsTr("Specify the test value for the coefficient tests.") } } @@ -237,6 +251,7 @@ Section name: "forestPlotEstimatedMarginalMeansAdjustedEffectSizeEstimate" label: qsTr("Adjusted effect size estimate") enabled: forestPlotEstimatedMarginalMeans.checked + info: qsTr("Include the adjusted effect size estimate in the estimated marginal means section.") } } @@ -249,6 +264,7 @@ Section id: forestPlotModelInformation enabled: effectSize.count == 1 && effectSizeStandardError.count == 1 text: qsTr("Model information") + info: qsTr("Add meta-analytic model information to the forest plot.") } Group @@ -262,6 +278,7 @@ Section text: qsTr("Pooled effect size estimate") checked: true Layout.preferredWidth: 300 * jaspTheme.uiScale + info: qsTr("Include the overall meta-analytic effect size estimate in the model information section.") } CheckBox @@ -269,6 +286,7 @@ Section name: "forestPlotPooledEffectSizeTest" text: qsTr("Pooled effect size test") checked: true + info: qsTr("Include the test of the overall meta-analytic effect size estimate in the model information section.") } CheckBox @@ -276,6 +294,7 @@ Section name: "forestPlotResidualHeterogeneityTest" text: qsTr("Residual heterogeneity test") checked: true + info: qsTr("Include the test of the residual heterogeneity in the model information section.") } CheckBox @@ -285,6 +304,7 @@ Section enabled: (method.value != "fixedEffects" || method.value != "equalEffects") visible: module == "metaAnalysis" checked: module == "metaAnalysis" + info: qsTr("Include the meta-analytic residual heterogeneity estimate in the model information section. Not available for multilevel/multivariate meta-analysis.") } CheckBox @@ -293,6 +313,7 @@ Section text: qsTr("Effect size moderation test") enabled: sectionModel.effectSizeModelTermsCount > 0 checked: true + info: qsTr("Include the omnibus effect size moderation test in the model information section. Available when effect size meta-regression is specified.") } CheckBox @@ -302,6 +323,7 @@ Section enabled: sectionModel.heterogeneityModelTermsCount > 0 visible: module == "metaAnalysis" checked: module == "metaAnalysis" + info: qsTr("Include the omnibus heterogeneity moderation test in the model information section. Available when moderation meta-regression is specified.") } } @@ -326,6 +348,7 @@ Section text: qsTr("Prediction intervals") checked: true Layout.preferredWidth: 300 * jaspTheme.uiScale + info: qsTr("Include prediction intervals of the estimated marginal means and the model information output.") } CheckBox @@ -333,6 +356,7 @@ Section name: "forestPlotEstimatesAndConfidenceIntervals" text: qsTr("Estimates and confidence intervals") checked: true + info: qsTr("Include effect size estimates and confidence intervals summary text in the right panel of the forest plot.") } CheckBox @@ -340,12 +364,14 @@ Section name: "forestPlotTestsInRightPanel" text: qsTr("Tests in right panel") checked: false + info: qsTr("Move test results text to the right panel.") } } Group { title: qsTr("Mapping") + info: qsTr("Select a variable for encoding the color or shape of the study information and the estimated marginal means output.") DropDown { @@ -370,6 +396,7 @@ Section Group { title: qsTr("Relative Size") + info: qsTr("Adjust the relative size of the forest plot components.") DoubleField { @@ -439,6 +466,7 @@ Section name: "forestPlotAuxiliaryAdjustWidthBasedOnText" text: qsTr("Adjust width based on text") checked: true + info: qsTr("Turn off the automatic width adjustment of the individual components.") } } @@ -453,6 +481,7 @@ Section min: 1 value: 2 inclusive: JASP.None + info: qsTr("Number of digits printed for the effect size and confidence intervals summary text.") } DropDown @@ -470,6 +499,7 @@ Section name: "forestPlotAuxiliaryPlotColor" enabled: forestPlotMappingColor.value == "" label: qsTr("Color") + info: qsTr("Change color of the plotted objects. Only available if no color mapping is selected.") values: [ { label: qsTr("Black") , value: "black"}, { label: qsTr("Blue") , value: "blue" }, @@ -482,6 +512,7 @@ Section name: "forestPlotAuxiliaryAddVerticalLine" text: qsTr("Add vertical line") childrenOnSameRow: true + info: qsTr("Add a solid vertical line in the forest plot.") DoubleField { @@ -496,6 +527,7 @@ Section name: "forestPlotAuxiliaryAddVerticalLine2" text: qsTr("Add vertical line (2)") childrenOnSameRow: true + info: qsTr("Add a dotted vertical line in the forest plot.") DoubleField { @@ -510,6 +542,7 @@ Section name: "forestPlotAuxiliaryEffectLabel" text: qsTr("X-axis label") value: "Effect Size" + info: qsTr("Change the x-axis label of the forest plot (the default 'Effect Size' changes in accordance with the selected effect size transformation).") } CheckBox @@ -517,6 +550,7 @@ Section name: "forestPlotAuxiliarySetXAxisLimit" text: qsTr("X-axis limits") childrenOnSameRow: true + info: qsTr("Change the default x-axis limits.") DoubleField { diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml b/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml index 4b37828b..7ce0c8be 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisModel.qml @@ -26,6 +26,7 @@ Section title: qsTr("Model") columns: 2 property string module: "metaAnalysis" + info: qsTr("Options for specifing the effect size and heterogeneity models based on the included predictors, including model terms, intercepts, and link functions.") property alias effectSizeModelTerms: effectSizeModelTerms property alias effectSizeModelTermsCount: effectSizeModelTerms.count @@ -36,7 +37,7 @@ Section Group { title: qsTr("Effect size model") - info: qsTr("Specify the effect size and heterogeneity models for the meta-analysis, including model terms, intercepts, and link functions.") + info: qsTr("Specify the effect size model.") VariablesForm { @@ -74,7 +75,7 @@ Section title: qsTr("Heterogeneity model") visible: module =="metaAnalysis" columns: 2 - info: qsTr("Unvailable when performing multilevel/multivariate meta-analysis.") + info: qsTr("Specify the heterogeneity model. Unvailable when performing multilevel/multivariate meta-analysis.") VariablesForm { diff --git a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml index a123f1e2..0005caf3 100644 --- a/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml +++ b/inst/qml/qml_components/ClassicalMetaAnalysisStatistics.qml @@ -103,7 +103,7 @@ Section name: "metaregressionTermTests" text: qsTr("Term tests") checked: true - info: qsTr("Include tests for each term in the meta-regression model.") + info: qsTr("Include tests for each term in the meta-regression model. The null hypothesis states that the effect size at all levels of the categorical variable are equal or that there is no linear association between the effect size and the continuous variable).") } CheckBox From 26b26f65c862bbcaa80bf8ed4b014e9db078739d Mon Sep 17 00:00:00 2001 From: FBartos Date: Wed, 6 Nov 2024 15:10:15 +0100 Subject: [PATCH 127/127] update not possible --- inst/Upgrades.qml | 32 ++++++-------------------------- 1 file changed, 6 insertions(+), 26 deletions(-) diff --git a/inst/Upgrades.qml b/inst/Upgrades.qml index 5446fdb8..8b454072 100644 --- a/inst/Upgrades.qml +++ b/inst/Upgrades.qml @@ -71,33 +71,13 @@ Upgrades Upgrade { functionName: "ClassicalMetaAnalysis" - fromVersion: "0.16.4" - toVersion: "0.17" + fromVersion: "0.19.1" + toVersion: "0.19.2" - // ClassicalMetaAnalysis.qml - ChangeRename { from: "dependent"; to: "effectSize" } - ChangeRename { from: "wlsWeights"; to: "effectSizeSe" } - ChangeRename { from: "studyLabels"; to: "studyLabel" } - ChangeRename { from: "includeConstant"; to: "interceptTerm" } - - // ClassicalMetaAnalysisStatistics.qml - ChangeRename { from: "regressionCoefficientsEstimates"; to: "coefficientEstimate" } - ChangeRename { from: "regressionCoefficientsConfidenceIntervals"; to: "coefficientCi" } - ChangeRename { from: "regressionCoefficientsConfidenceIntervalsInterval"; to: "coefficientCiLevel" } - ChangeRename { from: "test"; to: "estimateTest" } - ChangeRename { from: "regressionCoefficientsCovarianceMatrix"; to: "covarianceMatrix" } - ChangeRename { from: "modelFit"; to: "fitMeasure" } - ChangeRename { from: "rSquaredChange"; to: "funnelPlotRankTestAsymmetry" } - ChangeRename { from: "funnelPlotAsymmetryTest"; to: "funnelPlotRegressionTestAsymmetry" } - ChangeRename { from: "residualsParameters"; to: "residualParameter" } - - // ClassicalMetaAnalysisDiagnostics.qml - ChangeRename { from: "trimFillPlot"; to: "trimFillAnalysis" } - ChangeRename { from: "plotResidualsPredicted"; to: "profilePlot" } - ChangeRename { from: "plotResidualsDependent"; to: "diagnosticPlot" } - ChangeRename { from: "plotResidualsQQ"; to: "diagnosticQqPlot" } - ChangeRename { from: "plotResidualsCovariates"; to: "failSafeN" } - ChangeRename { from: "residualsCasewiseDiagnostics"; to: "casewiseDiagnostics" } + ChangeIncompatible + { + msg: qsTr("Results of this analysis cannot be updated. The analysis was created with an older version of JASP and the analysis options are not longer compatible. Please, redo the analysis with the updated module or download the 0.19.1 version of JASP to rerun or edit the analysis.") + } } Upgrade {