Risks of Long-term Cognitive Impairment in Breast Cancer Patients Treated with Adjuvant Chemotherapy
Benjamin Chan
r Sys.time()
source
the R script, make.R
to generate the project document.
> source("make.R")
This document was generated on 2016-06-17 22:10:57.
Live version is stored here. Static version is this document.
This document is for the Cognitive Impairment topic.
For other topics, see links from the project repository.
Sequence of scripts:
prologue.Rmd %>% tidyData.Rmd %>% runMetaAnalysisPrePost.Rmd %>% epilogue.Rmd
<script type="application/json" data-for="htmlwidget-869">{ "x": { "diagram": "digraph {\n\ngraph [layout=dot]\n\nnode [fontname=\"Lato\"]\n\n \"a\" [label = \"prologue.Rmd\", style = \"filled\", fontcolor = \"white\", fontsize = \"30pt\", color = \"#014386ff\", shape = \"oval\"] \n \"b\" [label = \"tidyData.Rmd\", style = \"filled\", fontcolor = \"white\", fontsize = \"30pt\", color = \"#014386ff\", shape = \"oval\"] \n \"c\" [label = \"runMetaAnalysisPrePost.Rmd\", style = \"filled\", fontcolor = \"white\", fontsize = \"30pt\", color = \"#014386ff\", shape = \"oval\"] \n \"d\" [label = \"epilogue.Rmd\", style = \"filled\", fontcolor = \"white\", fontsize = \"30pt\", color = \"#014386ff\", shape = \"oval\"] \n \"a\"->\"b\" \n \"b\"->\"c\" \n \"c\"->\"d\" \n}", "config": { "engine": "dot", "options": null } },"evals": [ ] }</script>- Set path of input data sources
- Load
devtools
- Source the
loadPkg
function - Load packages
- Source the
makeMetadata
function - Start the job timer
## Sourcing https://gist.githubusercontent.com/benjamin-chan/3b59313e8347fffea425/raw/84a146f3cde6330b901521710d513fa9d0b96951/loadPkg.R
## SHA-1 hash of file is 7bdcd4569a86aa9fff8ced241327992c550a16ce
## Sourcing https://gist.githubusercontent.com/benjamin-chan/091209ab4eee1f171540/raw/be6ae083cb81d383210979c195007b10f06f457c/makeMetadata.R
## SHA-1 hash of file is e3ec736201b7b84922ec31f1d49e236f36aa0164
Sequence of scripts:
replicateOno.Rmd %>% readAhles.Rmd %>% readTager.Rmd %>% readSchagen.Rmd %>% readBender2015.Rmd %>% reshapeOno.Rmd %>% addFromDataAbstraction.Rmd %>% combineData.Rmd
<script type="application/json" data-for="htmlwidget-1027">{ "x": { "diagram": "digraph {\n\ngraph [layout=dot]\n\nnode [fontname=\"Lato\"]\n\n \"a\" [label = \"replicateOno.Rmd\", style = \"filled\", fontcolor = \"white\", fontsize = \"30pt\", color = \"#014386ff\", shape = \"oval\"] \n \"b\" [label = \"readAhles.Rmd\", style = \"filled\", fontcolor = \"white\", fontsize = \"30pt\", color = \"#014386ff\", shape = \"oval\"] \n \"c\" [label = \"readTager.Rmd\", style = \"filled\", fontcolor = \"white\", fontsize = \"30pt\", color = \"#014386ff\", shape = \"oval\"] \n \"d\" [label = \"readSchagen.Rmd\", style = \"filled\", fontcolor = \"white\", fontsize = \"30pt\", color = \"#014386ff\", shape = \"oval\"] \n \"e\" [label = \"readBender2015.Rmd\", style = \"filled\", fontcolor = \"white\", fontsize = \"30pt\", color = \"#014386ff\", shape = \"oval\"] \n \"f\" [label = \"reshapeOno.Rmd\", style = \"filled\", fontcolor = \"white\", fontsize = \"30pt\", color = \"#014386ff\", shape = \"oval\"] \n \"g\" [label = \"addFromDataAbstraction.Rmd\", style = \"filled\", fontcolor = \"white\", fontsize = \"30pt\", color = \"#014386ff\", shape = \"oval\"] \n \"h\" [label = \"combineData.Rmd\", style = \"filled\", fontcolor = \"white\", fontsize = \"30pt\", color = \"#014386ff\", shape = \"oval\"] \n \"a\"->\"b\" \n \"b\"->\"c\" \n \"c\"->\"d\" \n \"d\"->\"e\" \n \"e\"->\"f\" \n \"f\"->\"g\" \n \"g\"->\"h\" \n}", "config": { "engine": "dot", "options": null } },"evals": [ ] }</script>Replicate data from Ono, Miyuki, et al. "A Meta-Analysis of Cognitive Impairment and Decline Associated with Adjuvant Chemotherapy in Women with Breast Cancer." Front Oncol. 2015; 5: 59.
Data file was requested and received from the co-author, James Ogilvie, in October 2015.
The DOMAINFORMETAkvd
field (column AG) was coded by Kathleen Van Dyk [email protected].
From: Van Dyk, Kathleen [[email protected]]
Sent: Tuesday, November 03, 2015 5:08 PM
To: Ayse Tezcan
Cc: Benjamin Chan
Subject: RE: Cognitive impairment draft paper
Hi,
Attached is the Ono spreadsheet with a new column with my suggestions for
domains and domains for each Ahles test is in sheet 2. I've highlighted tests
that we may want to exclude if we want to consistently keep one or two
measures per test. Ben --- does it matter statistically if there is more than
one measure from the same test (for example delayed recall and delayed
recognition) in the same domain? In almost every case we have total and delay
for memory tests but if we add in more measures (Trial 6, Supraspan,
Recognition) does this confound analyses because these are likely highly
correlated measures within the same test? Would all of the studies need to
use the same measures in each test (i.e., every study uses Total and Delay)?
I might not be asking this clearly --- let me know what you think.
Read data file.
f <- sprintf("%s/%s", pathIn, "Requested Chemo Data domains kvd 11.19.15 2.xlsx")
echoFile(f)
## File: StudyDocuments/Requested Chemo Data domains kvd 11.19.15 2.xlsx
## Modification date: 2016-06-17 21:15:18
## File size: 178.9 KB
D0 <- read.xlsx(f, sheet=1, check.names=TRUE)
D0 <- data.table(D0)
Show a map of the column names and locations.
colNames <- data.frame(colNum = 1:ncol(D0),
colCell = c(LETTERS,
sprintf("%s%s", LETTERS[1], LETTERS),
sprintf("%s%s", LETTERS[2], LETTERS),
sprintf("%s%s", LETTERS[3], LETTERS))[1:ncol(D0)],
varName = names(D0))
colNames
## colNum colCell varName
## 1 1 A First.Auth
## 2 2 B Study.Ref
## 3 3 C Pub.Year
## 4 4 D Cog.Test
## 5 5 E DOMAIN.FOR.META..kvd.
## 6 6 F Journal
## 7 7 G Pre.Meta
## 8 8 H Design
## 9 9 I Comp.Grp
## 10 10 J Healthy_GROUP
## 11 11 K Tx.Grp
## 12 12 L Pre.Post.Time.Interval
## 13 13 M Time.SD
## 14 14 N Tx.N
## 15 15 O Ctl.N
## 16 16 P Total.N
## 17 17 Q Tx.Age
## 18 18 R Tx.Age.SD
## 19 19 S Ctl.Age
## 20 20 T Ctl.Age.SD
## 21 21 U Tx.IQ
## 22 22 V Tx.IQ.SD
## 23 23 W Ctl.IQ
## 24 24 X Ctl.IQ.SD
## 25 25 Y IQ.Note
## 26 26 Z Tx.EDU
## 27 27 AA Tx.EDU.SD
## 28 28 AB Ctl.EDU
## 29 29 AC Ctl.EDU.SD
## 30 30 AD EDU.Note
## 31 31 AE Tx.Chem.Time
## 32 32 AF Tx.Chem.Time.SD
## 33 33 AG Cognitive.Domain.Primary
## 34 34 AH Score.Typ
## 35 35 AI Tx.M
## 36 36 AJ Tx.SD
## 37 37 AK Ctl.M
## 38 38 AL Ctl.SD
## 39 39 AM Direct.Notes
## 40 40 AN X1.X2
## 41 41 AO Tx.N.1
## 42 42 AP Ctl.N.1
## 43 43 AQ Tx.SD.2
## 44 44 AR Ctl.SD.2
## 45 45 AS Spooled
## 46 46 AT Cohen.s.d
## 47 47 AU Hedges.g
## 48 48 AV Var1
## 49 49 AW Var2
## 50 50 AX Variance
## 51 51 AY Standard.Error
## 52 52 AZ Weight
## 53 53 BA w.ES
## 54 54 BB w.ES.2
## 55 55 BC w.2
## 56 56 BD StudyES
## 57 57 BE StudySE
## 58 58 BF z
## 59 59 BG LowerCI
## 60 60 BH UpperCI
## 61 61 BI Q
## 62 62 BJ df
## 63 63 BK Q.Critical
## 64 64 BL Q.Sig...p..05.
## 65 65 BM RANDOM.EFFECT
## 66 66 BN RE_w
## 67 67 BO w.ES.1
## 68 68 BP w.ES.2.1
## 69 69 BQ w.2.1
## 70 70 BR StudyES.1
## 71 71 BS StudySE.1
## 72 72 BT z.1
## 73 73 BU LowerCI.1
## 74 74 BV UpperCI.1
## 75 75 BW Q.1
## 76 76 BX df.1
## 77 77 BY Q.Critical.1
## 78 78 BZ Q.Sig...p..05..1
## 79 79 CA I.2.Fixed
## 80 80 CB I.2.Random
Put the summary rows in a separate data table, DOno
.
DOno <- D0[is.na(First.Auth) & !is.na(Weight), c(52:ncol(D0)), with=FALSE]
Put the instrument-level rows in a separate data table, D
.
Only keep the columns needed to calculate fixed and random effects statistics.
The RANDOM.EFFECT
column was specific to the Ono analysis.
The value in the Ono spreadsheet will be different for our use.
From: James Ogilvie [[email protected]]
Sent: Sunday, October 18, 2015 5:42 PM
To: Benjamin Chan
Cc: '[email protected]'; '[email protected]';
'[email protected]'; Ayse Tezcan ([email protected]); Meghan Soulsby
([email protected])
Subject: Re: Fwd: request for data from your recently published meta-analysis
Hi Benjamin,
Thanks for contacting me regarding this issue. I had wondered whether Dr.
Melnikow had received the data I had sent, as I had not received confirmation
of my email containing the data.
These are very good questions! It took me a while to get my head around the
random effect model when performing this analysis. I am attaching an article
that I found very useful in coming to terms with the model - hopefully you
will find this useful too.
To answer your questions, is a constant across a pool of studies that you
wish to examine and generate summary/aggregate statistics (e.g., grand mean
effect size). Therefore, the value of the constant will change depending on
the the specific pool of studies examined. It is calculated across the total
pool of studies.
is the total Q statistic (assessing heterogeneity) that is calculated across
ALL studies and relates to the grand mean effect size. It is not the same as
the Q statistic in column BH. There is a Q statistic for each study (this is
the Q in column BH), as well as a Q statistic for all studies pooled
together (this being thestatistic). The formula for calculating the Q
statistic are provided in the pdf I've attached titled "Heterogeneity in
MA".
As I've mentioned, the value of is specific to the pool of studies you are
examining. Therefore, the value to calculate effect sizes according to a
random effects model will be different for your analyses - assuming you have a
different pool of studies that you are including in the analyses. Given this,
the value in column BL needs to be updated by you to be specific to the pool
of studies you are looking at.
importantVar <- c(1, 9:12, 14:17, 19, 35:39, 65, 33, 4, 5, 34)
authors <- c("Bender", "Collins", "Jenkins", "Wefel")
D <- D0[First.Auth %in% authors, importantVar, with=FALSE]
setnames(D,
names(D),
c("author",
"comparisonGroup",
"healthyGroup",
"treatmentGroup",
"timeDays",
"nGroup1",
"nGroup2",
"nTotal",
"ageGroup1",
"ageGroup2",
"meanGroup1",
"sdGroup1",
"meanGroup2",
"sdGroup2",
"direction",
"randomEffect", # Keep the value from Ono for verification purposes; do not use for analysis
gsub("\\.", "", names(D0)[c(33, 4, 5, 34)])))
setnames(D, "DOMAINFORMETAkvd", "CognitiveDomainForMetaAnalysis")
The data in the received file is in the form of longitudinal means and standard deviations. Do not show
D
Replicate spreadsheet calculations.
D <- D[direction == "Lower worse",
`:=` (diffMean = meanGroup2 - meanGroup1)]
D <- D[direction == "Greater worse",
`:=` (diffMean = meanGroup1 - meanGroup2)]
D <- D[,
`:=` (sdPooled = sqrt((((nGroup1 - 1) * (sdGroup1 ^ 2)) +
((nGroup2 - 1) * (sdGroup2 ^ 2))) /
(nGroup1 + nGroup2 - 2)))]
D <- D[,
`:=` (cohenD = diffMean / sdPooled)]
D <- D[,
`:=` (hedgesG = cohenD * (1 - (3 / ((4 * nTotal) - 9))))]
D <- D[,
`:=` (var1 = (nGroup1 + nGroup2) / (nGroup1 * nGroup2),
var2 = hedgesG ^ 2 / (2 * (nGroup1 + nGroup2)))]
D <- D[,
`:=` (variance = var1 + var2)]
D <- D[,
`:=` (se = sqrt(variance),
weightFE = 1 / variance)]
D <- D[,
`:=` (effSizeWeightedFE = weightFE * hedgesG)]
D <- D[, weightRE := 1 / (variance + randomEffect)]
D <- D[, effSizeWeightedRE := weightRE * hedgesG]
Calculate fixed effects statisitcs.
DFixed <- D[!is.na(nTotal),
.(df = .N,
sumWeights = sum(weightFE),
effSize = sum(effSizeWeightedFE) / sum(weightFE),
se = sqrt(1 / sum(weightFE)),
sumEffSizeWeighted = sum(effSizeWeightedFE),
ssEffSizeWeighted = sum(weightFE * hedgesG ^ 2),
ssWeights = sum(weightFE ^ 2)),
.(author, timeDays)]
DFixed <- DFixed[,
`:=` (z = effSize / se,
lowerCI = effSize + qnorm(0.025) * se,
upperCI = effSize + qnorm(0.975) * se,
Q = ssEffSizeWeighted - (sumEffSizeWeighted ^ 2 / sumWeights),
criticalValue = qchisq(0.05, df, lower.tail=FALSE))]
DFixed <- DFixed[,
`:=` (pvalue = pchisq(Q, df, lower.tail=FALSE),
Isq = 100 * ((Q - df) / Q))]
Check if my calculations agree with Ono's.
isCheckFixedPassed <- all.equal(DOno[, .(effSize = StudyES, z, Q)],
DFixed[, .(effSize, z, Q)],
check.names=FALSE)
message(sprintf("Do my FIXED effect statistic calculations agree with Ono's? %s",
isCheckFixedPassed))
## Do my FIXED effect statistic calculations agree with Ono's? TRUE
print(xtable(DFixed), type="html")
author | timeDays | df | sumWeights | effSize | se | sumEffSizeWeighted | ssEffSizeWeighted | ssWeights | z | lowerCI | upperCI | Q | criticalValue | pvalue | Isq | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Bender | 182.62 | 16 | 96.80 | 1.02 | 0.10 | 98.53 | 241.49 | 626.88 | 10.01 | 0.82 | 1.22 | 141.21 | 26.30 | 0.00 | 88.67 |
2 | Bender | 547.50 | 16 | 63.53 | 0.55 | 0.13 | 34.76 | 285.90 | 290.59 | 4.36 | 0.30 | 0.79 | 266.88 | 26.30 | 0.00 | 94.00 |
3 | Collins | 537.90 | 23 | 604.56 | 0.21 | 0.04 | 124.90 | 39.49 | 15893.07 | 5.08 | 0.13 | 0.29 | 13.69 | 35.17 | 0.94 | -68.01 |
4 | Collins | 146.50 | 23 | 607.30 | 0.10 | 0.04 | 58.14 | 17.63 | 16035.80 | 2.36 | 0.02 | 0.18 | 12.07 | 35.17 | 0.97 | -90.58 |
5 | Jenkins | 364.00 | 14 | 592.05 | 0.08 | 0.04 | 47.58 | 23.62 | 25038.13 | 1.96 | -0.00 | 0.16 | 19.79 | 23.68 | 0.14 | 29.27 |
6 | Jenkins | 28.00 | 14 | 593.46 | 0.03 | 0.04 | 19.46 | 12.29 | 25157.32 | 0.80 | -0.05 | 0.11 | 11.65 | 23.68 | 0.63 | -20.17 |
7 | Wefel | 182.62 | 10 | 89.09 | 0.18 | 0.11 | 15.73 | 5.24 | 793.76 | 1.67 | -0.03 | 0.38 | 2.47 | 18.31 | 0.99 | -305.57 |
8 | Wefel | 547.86 | 10 | 79.52 | 0.26 | 0.11 | 20.75 | 8.62 | 632.66 | 2.33 | 0.04 | 0.48 | 3.20 | 18.31 | 0.98 | -212.29 |
Calculate random effects statisitcs.
DRandom <- D[!is.na(nTotal),
.(df = .N,
sumWeights = sum(weightRE),
ssEffSizeWeighted = sum(weightRE * hedgesG ^ 2),
ssWeights = sum(weightRE ^ 2),
sumEffSizeWeighted = sum(effSizeWeightedRE),
effSize = sum(effSizeWeightedRE) / sum(weightRE),
se = sqrt(1 / sum(weightRE))),
.(author, timeDays)]
DRandom <- DRandom[,
`:=` (z = effSize / se,
lowerCI = effSize + qnorm(0.025) * se,
upperCI = effSize + qnorm(0.975) * se,
Q = ssEffSizeWeighted - (sumEffSizeWeighted ^ 2 / sumWeights),
criticalValue = qchisq(0.05, df, lower.tail=FALSE))]
DRandom <- DRandom[,
`:=` (pvalue = pchisq(Q, df, lower.tail=FALSE),
Isq = 100 * ((Q - df) / Q))]
Check if my calculations agree with Ono's.
isCheckRandomPassed <- all.equal(DOno[, .(effSize = StudyES.1, z = z.1, Q = Q.1)],
DRandom[, .(effSize, z, Q)],
check.names=FALSE)
message(sprintf("Do my RANDOM effect statistic calculations agree with Ono's? %s",
isCheckRandomPassed))
## Do my RANDOM effect statistic calculations agree with Ono's? TRUE
print(xtable(DRandom), type="html")
author | timeDays | df | sumWeights | ssEffSizeWeighted | ssWeights | sumEffSizeWeighted | effSize | se | z | lowerCI | upperCI | Q | criticalValue | pvalue | Isq | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Bender | 182.62 | 16 | 48.04 | 137.29 | 147.43 | 53.60 | 1.12 | 0.14 | 7.73 | 0.83 | 1.40 | 77.50 | 26.30 | 0.00 | 79.35 |
2 | Bender | 547.50 | 16 | 37.25 | 199.95 | 92.56 | 26.23 | 0.70 | 0.16 | 4.30 | 0.38 | 1.03 | 181.48 | 26.30 | 0.00 | 91.18 |
3 | Collins | 537.90 | 23 | 115.28 | 7.62 | 577.83 | 23.96 | 0.21 | 0.09 | 2.23 | 0.03 | 0.39 | 2.64 | 35.17 | 1.00 | -770.38 |
4 | Collins | 146.50 | 23 | 115.38 | 3.38 | 578.84 | 11.11 | 0.10 | 0.09 | 1.03 | -0.09 | 0.28 | 2.31 | 35.17 | 1.00 | -895.09 |
5 | Jenkins | 364.00 | 14 | 75.63 | 3.04 | 408.57 | 6.11 | 0.08 | 0.11 | 0.70 | -0.14 | 0.31 | 2.54 | 23.68 | 1.00 | -450.68 |
6 | Jenkins | 28.00 | 14 | 75.65 | 1.57 | 408.83 | 2.50 | 0.03 | 0.11 | 0.29 | -0.19 | 0.26 | 1.49 | 23.68 | 1.00 | -840.71 |
7 | Wefel | 182.62 | 10 | 36.53 | 2.16 | 133.47 | 6.48 | 0.18 | 0.17 | 1.07 | -0.15 | 0.50 | 1.01 | 18.31 | 1.00 | -890.02 |
8 | Wefel | 547.86 | 10 | 34.81 | 3.79 | 121.21 | 9.12 | 0.26 | 0.17 | 1.55 | -0.07 | 0.59 | 1.41 | 18.31 | 1.00 | -611.34 |
Exclude tests Kathleen determined to be not useful.
From: Van Dyk, Kathleen [[email protected]]
Sent: Thursday, November 19, 2015 10:22 AM
To: Benjamin Chan
Cc: Ayse Tezcan
Subject: RE: Cognitive impairment draft paper
Hi Ben,
Ok --- attached is the Ono spreadsheet with my suggested domains. I did
strikethrough for the measures we probably shouldn't include at all in the
domains to keep it somewhat uniform across tests (i.e., some folks used Trial
1 from a list-learning test, some just used Total and Delay, etc.).
strikethrough <- c("RAVL trial 6",
"CVLT Trial 1",
"RVLT trial 1",
"AVLT supraspan")
D <- D[!(CogTest %in% strikethrough)]
Domains and tests.
unique(D[, .(CognitiveDomainForMetaAnalysis, CogTest)])[order(CognitiveDomainForMetaAnalysis, CogTest)]
## CognitiveDomainForMetaAnalysis CogTest
## 1: Attn/Wkg Mem/Concentration WAIS-III -Arithmetic
## 2: Attn/Wkg Mem/Concentration 4WSTM 15 sec
## 3: Attn/Wkg Mem/Concentration 4WSTM 30 sec
## 4: Attn/Wkg Mem/Concentration 4WSTM 5 sec
## 5: Attn/Wkg Mem/Concentration Consonant trigrams
## 6: Attn/Wkg Mem/Concentration Letter-number sequencing: WAIS-III
## 7: Attn/Wkg Mem/Concentration PASAT number correct
## 8: Attn/Wkg Mem/Concentration Spatial span: WMS-III
## 9: Attn/Wkg Mem/Concentration TMT part A time
## 10: Attn/Wkg Mem/Concentration Trails A
## 11: Attn/Wkg Mem/Concentration WAIS-III Digit span
## 12: Attn/Wkg Mem/Concentration WAIS-III Letter-number sequencing
## 13: Attn/Wkg Mem/Concentration WAIS-R arithmetic
## 14: Attn/Wkg Mem/Concentration WAIS-R digit span
## 15: Attn/Wkg Mem/Concentration WMS-III digit span backwards
## 16: Attn/Wkg Mem/Concentration WMS-III digit span forward
## 17: Attn/Wkg Mem/Concentration WMS-III letter number sequencing
## 18: Attn/Wkg Mem/Concentration WMS-III spatial span backwards
## 19: Attn/Wkg Mem/Concentration WMS-III spatial span forwards
## 20: Exec Fxn Stroop
## 21: Exec Fxn TMT part B time
## 22: Exec Fxn Trails B
## 23: Exec Fxn WAIS-R similarities
## 24: Exec Fxn WCST sorts divided by trials
## 25: Information Proc Speed Letter cancellation
## 26: Information Proc Speed Symbol search: WAIS-III
## 27: Information Proc Speed WAIS-III Digit Symbol Coding
## 28: Information Proc Speed WAIS-III Symbol search
## 29: Information Proc Speed WAIS-R digit symbol
## 30: Motor Speed Grooved Peg Board time
## 31: Motor Speed Grooved pegboard dominant hand
## 32: Motor Speed Grooved pegboard nondominant hand
## 33: Verbal Ability/Language Boston Naming Test number correct
## 34: Verbal Ability/Language Verbal Fluency FAS number correct
## 35: Verbal Ability/Language Verbal fluency COWAT correct
## 36: Verbal Memory AVLT delayed
## 37: Verbal Memory AVLT total
## 38: Verbal Memory CVLT delayed recall
## 39: Verbal Memory CVLT delayed recognition
## 40: Verbal Memory RAVL delayed recall
## 41: Verbal Memory RAVL total score
## 42: Verbal Memory VSRT Delayed Recall
## 43: Verbal Memory VSRT Long-Term Storage
## 44: Verbal Memory WMS-III Logical memory II
## 45: Verbal Memory WMS-III Story delayed recall
## 46: Verbal Memory WMS-III Story immediate recall
## 47: Visual Memory Complex figure delayed
## 48: Visual Memory Complex figure immediate
## 49: Visual Memory NVSRT Delayed Recall
## 50: Visual Memory RCF delayed recall
## 51: Visual Memory RCF immediate recall
## 52: Visual Memory RVLT delayed recall
## 53: Visual Memory RVLT delayed recognition
## 54: Visual Memory WMS-III Family pictures II
## 55: Visuospatial WAIS-III Block design
## 56: Visuospatial WAIS-R block design
## CognitiveDomainForMetaAnalysis CogTest
Save working data tables to file if the integrity checks passed.
I don't need to save DOno
since the integrity checks passed.
metadataD = makeMetadata(D)
metadataDFixed = makeMetadata(DFixed)
metadataDRandom = makeMetadata(DRandom)
if (isCheckFixedPassed & isCheckRandomPassed) {
f <- sprintf("%s/%s", pathOut, "Ono.RData")
save(D,
metadataD,
DFixed,
metadataDFixed,
DRandom,
metadataDRandom,
file=f)
message(sprintf("%s saved on: %s\nFile size: %s KB",
f,
file.mtime(f),
file.size(f) / 1e3))
} else {
warning(sprinf("Integrity checks failed.\n%s not saved.", f))
}
## Output/Ono.RData saved on: 2016-06-17 22:11:00
## File size: 70.637 KB
Read data from Ahles TA, et al. "Longitudinal Assessment of Cognitive Changes Associated With Adjuvant Treatment for Breast Cancer: Impact of Age and Cognitive Reserve." J Clin Oncol. 2010 Oct 10; 28(29): 4434-4440.
Data file was requested and received from the co-author, Yuelin Li, in October 2015.
Read data file (text format).
f <- sprintf("%s/%s", pathIn, "Soulsby_means.txt")
echoFile(f)
## File: StudyDocuments/Soulsby_means.txt
## Modification date: 2016-06-17 21:15:18
## File size: 36.1 KB
D <- fread(f, sep="|")
The data in the received file is in the form of longitudinal means and standard deviations. Do not show
D
Study design.
D[, .(nrows = .N, totalN = sum(N)), .(txgrp, ptime)]
## txgrp ptime nrows totalN
## 1: chemo baseline 35 2056
## 2: chemo posttx 35 1886
## 3: chemo 1yr 35 1677
## 4: chemo 2yr 35 1549
## 5: chemo no baseline 35 2432
## 6: chemo no posttx 35 2321
## 7: chemo no 1yr 35 2237
## 8: chemo no 2yr 35 2138
## 9: control baseline 35 1522
## 10: control posttx 35 1478
## 11: control 1yr 35 1447
## 12: control 2yr 35 1346
Map ptime
to months after treatment.
Ahles TA, et al. reports results in terms of
- Baseline
- 1 month after treatment
- 6 months after treatment
- 18 months after treatment
As far as I can tell, values of ptime
map to these, although seemingly imprecise.
D[ptime == "baseline", monthsPostTx := 0]
D[ptime == "posttx", monthsPostTx := 1]
D[ptime == "1yr", monthsPostTx := 6]
D[ptime == "2yr", monthsPostTx := 18]
Exclude
- Non-chemotherapy and control patients
D <- D[txgrp == "chemo"]
Instruments. Do not show
D[, .N, .(Variable, Label)]
Merge Kathleen's [email protected] domain assignments.
From: Van Dyk, Kathleen [[email protected]]
Sent: Tuesday, November 03, 2015 5:08 PM
To: Ayse Tezcan
Cc: Benjamin Chan
Subject: RE: Cognitive impairment draft paper
Hi,
Attached is the Ono spreadsheet with a new column with my suggestions for
domains and domains for each Ahles test is in sheet 2. I've highlighted tests
that we may want to exclude if we want to consistently keep one or two
measures per test. Ben --- does it matter statistically if there is more than
one measure from the same test (for example delayed recall and delayed
recognition) in the same domain? In almost every case we have total and delay
for memory tests but if we add in more measures (Trial 6, Supraspan,
Recognition) does this confound analyses because these are likely highly
correlated measures within the same test? Would all of the studies need to
use the same measures in each test (i.e., every study uses Total and Delay)?
I might not be asking this clearly --- let me know what you think.
f <- sprintf("%s/%s", pathIn, "Requested Chemo Data domains kvd 11.19.15 2.xlsx")
echoFile(f)
## File: StudyDocuments/Requested Chemo Data domains kvd 11.19.15 2.xlsx
## Modification date: 2016-06-17 21:15:18
## File size: 178.9 KB
D0 <- read.xlsx(f, sheet=2, check.names=TRUE)
D0 <- data.table(D0)
CognitiveDomainForMetaAnalysis <- D0[!is.na(DOMAIN.FOR.META..kvd.), DOMAIN.FOR.META..kvd.]
lookup <- cbind(D[, .N, .(Variable, Label)], CognitiveDomainForMetaAnalysis)[, .(Variable, CognitiveDomainForMetaAnalysis)]
D <- merge(lookup, D, by="Variable")
unique(D[, .(CognitiveDomainForMetaAnalysis, Label)])[order(CognitiveDomainForMetaAnalysis, Label)]
## CognitiveDomainForMetaAnalysis
## 1: Attn/Wkg Mem/Concentration
## 2: Attn/Wkg Mem/Concentration
## 3: Attn/Wkg Mem/Concentration
## 4: Attn/Wkg Mem/Concentration
## 5: Attn/Wkg Mem/Concentration
## 6: Attn/Wkg Mem/Concentration
## 7: Attn/Wkg Mem/Concentration
## 8: Attn/Wkg Mem/Concentration
## 9: Attn/Wkg Mem/Concentration
## 10: Attn/Wkg Mem/Concentration
## 11: Exec Fxn
## 12: Exec Fxn
## 13: Exec Fxn
## 14: Exec Fxn
## 15: Exec Fxn
## 16: Exec Fxn
## 17: Exec Fxn
## 18: Information Proc Speed
## 19: Information Proc Speed
## 20: Information Proc Speed
## 21: Information Proc Speed
## 22: Motor Speed
## 23: Motor Speed
## 24: Motor Speed
## 25: Verbal Ability/Language
## 26: Verbal Ability/Language
## 27: Verbal Ability/Language
## 28: Verbal Ability/Language
## 29: Verbal Memory
## 30: Verbal Memory
## 31: Verbal Memory
## 32: Verbal Memory
## 33: Visual Memory
## 34: Visual Memory
## 35: Visuospatial
## CognitiveDomainForMetaAnalysis
## Label
## 1: CPT: Distractibility, Correct Responses
## 2: CPT: Distractibility, False Positives
## 3: CPT: Distractibility, Reaction Time
## 4: CPT: Vigilance, Correct Responses
## 5: CPT: Vigilance, False Positives
## 6: CPT: Vigilance, Reaction Time
## 7: DKEFS Trails: Letter Sequencing, sec
## 8: DKEFS Trails: Number Sequencing, sec
## 9: PASAT (Rao): 2 second pacing
## 10: PASAT (Rao): 3 second pacing
## 11: DKEFS Card Sorting: Confirmed Correct Sorts
## 12: DKEFS Card Sorting: Free Sorting
## 13: DKEFS Stroop: Color-Word
## 14: DKEFS Trails: Number-Letter Switching, sec
## 15: DKEFS Verbal Fluency: Switching Fruits/Veget
## 16: DKEFS: Card Sorting, Sort Recognition
## 17: DKEFS: Stroop, Set Shifting
## 18: CVLT-2: Digit Symbol
## 19: DKEFS Stroop: Color Patch Naming
## 20: DKEFS Stroop: Word Reading, sec
## 21: DKEFS Trails: Visual Scanning in Seconds
## 22: DKEFS Trails: Motor Speed, sec
## 23: Grooved Pegboard Test: Left Hand, sec
## 24: Grooved Pegboard Test: Right Hand, sec
## 25: DKEFS Verbal Fluency
## 26: DKEFS Verbal Fluency: anival or clothing and names
## 27: WASI: Vocabulary
## 28: WRAT-3 Reading Score
## 29: CVLT-2: Long Delay Free Recall
## 30: CVLT-2: Trials 1-5 Total
## 31: Wechsler Memory Scale-3: Logical Memory I
## 32: Wechsler Memory Scale-3: Logical Memory II
## 33: Wechsler Memory Scale-3: Faces I
## 34: Wechsler Memory Scale-3: Faces II
## 35: WASI: Block Design
## Label
Save working data tables to file.
metadata <- makeMetadata(D)
f <- sprintf("%s/%s", pathOut, "Ahles.RData")
save(D, metadata, file=f)
message(sprintf("%s saved on: %s\nFile size: %s KB",
f,
file.mtime(f),
file.size(f) / 1e3))
## Output/Ahles.RData saved on: 2016-06-17 22:11:00
## File size: 22.375 KB
Read data from Tager, FA, et al. "The cognitive effects of chemotherapy in post-menopausal breast cancer patients: a controlled longitudinal study." Breast Cancer Res Treat. 2010 Aug;123(1):25-34.
Data file was requested and received from the co-author, Paula S. McKinley, on November 20, 2015.
Read data file (SPSS format).
f <- sprintf("%s/%s", pathIn, "Tager_DataForMetaAnalysis.sav")
echoFile(f)
## File: StudyDocuments/Tager_DataForMetaAnalysis.sav
## Modification date: 2016-06-17 21:15:18
## File size: 102.7 KB
D <- read_sav(f)
D <- data.table(D)
D <- D[,
`:=` (session = factor(session,
levels = 1:4,
labels = c("Pre-surgery",
"Post surgery before treatment",
"Post treatment/6mths post surgery",
"6 month follow-up")),
chemoyn = factor(chemoyn,
levels= 0:1,
labels = c("No", "Yes")),
CTregmen = factor(CTregmen,
levels = 1:3,
labels = c("AC",
"ACT",
"CMF")),
tx = factor(tx,
levels = 0:11,
labels = c("None",
"Chemo",
"Radiation",
"Tamoxifen",
"Arimadex",
"Chemo + Radiation",
"Chemo + Tamoxifen",
"Chemo + Arimadex",
"Radiation + Tamoxifen",
"Radiation + Arimadex",
"Chemo + Radiation + Tamoxifen",
"Chemo + Radiation + Arimadex")))]
Check data.
D[, .N, .(chemoyn, CTregmen)]
## chemoyn CTregmen N
## 1: No NA 89
## 2: Yes CMF 24
## 3: Yes ACT 40
## 4: Yes AC 21
D[, .N, .(chemoyn, chemowks)]
## chemoyn chemowks N
## 1: No 88 89
## 2: Yes 24 39
## 3: Yes 16 14
## 4: Yes 12 8
## 5: Yes 28 3
## 6: Yes 18 3
## 7: Yes 8 12
## 8: Yes 14 6
Keep z-score variables for these instruments.
- Finger Tapper - Dom Hand
- Finger Tapper - NonDom Hand
- Pegboard - Dom Hand
- Pegboard - Nondom Hand
- COWAT
- Boston Naming
- Trail Making A
- Trail Making B
- WAIS-III Digit Symbol
- WAIS-III Digit Span
- WAIS-III Arithmetic
- WAIS-III Number/Letter
- Rey Copy
- Buschke Total
- Benton Visual Retention Correct
measures <- c("tapdomz",
"tapndomz",
"pegdomz",
"pegndomz",
"cowz",
"bntz",
"trlaz",
"trlbz",
"dsymz",
"dspaz",
"aritz",
"numz",
"reyz",
"bustotz",
"bvrcoz")
Melt data.
D <- melt(D,
id.vars = c("subid", "session", "chemoyn", "chemowks", "CTregmen", "tx"),
measure.vars = measures)
setnames(D, "variable", "Variable")
D <- D[Variable == "tapdomz", Label := "Finger Tapper - Dom Hand"]
D <- D[Variable == "tapndomz", Label := "Finger Tapper - NonDom Hand"]
D <- D[Variable == "pegdomz", Label := "Pegboard - Dom Hand"]
D <- D[Variable == "pegndomz", Label := "Pegboard - Nondom Hand"]
D <- D[Variable == "cowz", Label := "COWAT"]
D <- D[Variable == "bntz", Label := "Boston Naming"]
D <- D[Variable == "trlaz", Label := "Trail Making A"]
D <- D[Variable == "trlbz", Label := "Trail Making B"]
D <- D[Variable == "dsymz", Label := "WAIS-III Digit Symbol"]
D <- D[Variable == "dspaz", Label := "WAIS-III Digit Span"]
D <- D[Variable == "aritz", Label := "WAIS-III Arithmetic"]
D <- D[Variable == "numz", Label := "WAIS-III Number/Letter"]
D <- D[Variable == "reyz", Label := "Rey Copy"]
D <- D[Variable == "bustotz", Label := "Buschke Total "]
D <- D[Variable == "bvrcoz", Label := "Benton Visual Retention Correct"]
setkey(D, subid, session)
Exclude
- Non-chemotherapy patients
- Measurements before surgery
D <- D[chemoyn != "No" &
session != "Pre-surgery"]
D[, .N, .(chemoyn, session)]
## chemoyn session N
## 1: Yes Post surgery before treatment 450
## 2: Yes Post treatment/6mths post surgery 450
## 3: Yes 6 month follow-up 375
Calculate means and standard deviations
T <- D[,
.(N = .N,
meanZ = mean(value, na.rm=TRUE),
sdZ = sd(value, na.rm=TRUE)),
.(Variable,
Label,
session)]
setkey(T, Variable, Label, session)
Check against Table 2, column CT Group of Tager, FA, et al..
T1 <- T[session == "Post surgery before treatment"]
T1 <- T1[, x := sprintf("%.2f (%.2f)", meanZ, sdZ)]
T1[, .(Variable, Label, N, x)]
## Variable Label N x
## 1: tapdomz Finger Tapper - Dom Hand 30 1.74 (1.21)
## 2: tapndomz Finger Tapper - NonDom Hand 30 1.38 (1.11)
## 3: pegdomz Pegboard - Dom Hand 30 -0.18 (1.67)
## 4: pegndomz Pegboard - Nondom Hand 30 -0.41 (1.64)
## 5: cowz COWAT 30 0.24 (0.94)
## 6: bntz Boston Naming 30 -0.33 (1.48)
## 7: trlaz Trail Making A 30 0.40 (1.00)
## 8: trlbz Trail Making B 30 0.32 (1.18)
## 9: dsymz WAIS-III Digit Symbol 30 0.69 (0.98)
## 10: dspaz WAIS-III Digit Span 30 0.23 (0.91)
## 11: aritz WAIS-III Arithmetic 30 0.09 (0.92)
## 12: numz WAIS-III Number/Letter 30 0.34 (0.90)
## 13: reyz Rey Copy 30 -1.52 (2.84)
## 14: bustotz Buschke Total 30 -0.60 (1.06)
## 15: bvrcoz Benton Visual Retention Correct 30 0.01 (1.17)
Map session
to months after treatment.
Tager, FA, et al.
- Baseline
- 1 month after treatment
- 6 months after treatment
As far as I can tell, values of ptime
map to these, although seemingly imprecise.
T <- T[session == "Post surgery before treatment", monthsPostTx := 0]
T <- T[session == "Post treatment/6mths post surgery", monthsPostTx := 6]
T <- T[session == "6 month follow-up", monthsPostTx := 12]
Merge Kathleen's [email protected] domain assignments.
From: Van Dyk, Kathleen [[email protected]]
Sent: Tuesday, November 03, 2015 5:08 PM
To: Ayse Tezcan
Cc: Benjamin Chan
Subject: RE: Cognitive impairment draft paper
Hi,
Attached is the Ono spreadsheet with a new column with my suggestions for
domains and domains for each Ahles test is in sheet 2. I've highlighted tests
that we may want to exclude if we want to consistently keep one or two
measures per test. Ben --- does it matter statistically if there is more than
one measure from the same test (for example delayed recall and delayed
recognition) in the same domain? In almost every case we have total and delay
for memory tests but if we add in more measures (Trial 6, Supraspan,
Recognition) does this confound analyses because these are likely highly
correlated measures within the same test? Would all of the studies need to
use the same measures in each test (i.e., every study uses Total and Delay)?
I might not be asking this clearly --- let me know what you think.
f <- sprintf("%s/%s", pathIn, "Requested Chemo Data domains kvd 11.19.15 2.xlsx")
echoFile(f)
## File: StudyDocuments/Requested Chemo Data domains kvd 11.19.15 2.xlsx
## Modification date: 2016-06-17 21:15:18
## File size: 178.9 KB
D0 <- read.xlsx(f, sheet=1, check.names=TRUE)
D0 <- data.table(D0)
D0 <- D0[First.Auth == "Tager" & !is.na(DOMAIN.FOR.META..kvd.),
.(Label = Cog.Test,
CognitiveDomainForMetaAnalysis = DOMAIN.FOR.META..kvd.)]
D0 <- D0[Label == "WAIS-IIIDigit Span",
Label := "WAIS-III Digit Span"]
lookup <- D0
T <- merge(lookup, T, by="Label")
unique(T[, .(CognitiveDomainForMetaAnalysis, Label)])[order(CognitiveDomainForMetaAnalysis, Label)]
## CognitiveDomainForMetaAnalysis Label
## 1: Attn/Wkg Mem/Concentration Trail Making A
## 2: Attn/Wkg Mem/Concentration WAIS-III Arithmetic
## 3: Attn/Wkg Mem/Concentration WAIS-III Digit Span
## 4: Attn/Wkg Mem/Concentration WAIS-III Number/Letter
## 5: Exec Fxn Trail Making B
## 6: Information Proc Speed WAIS-III Digit Symbol
## 7: Motor Speed Finger Tapper - Dom Hand
## 8: Motor Speed Finger Tapper - NonDom Hand
## 9: Motor Speed Pegboard - Dom Hand
## 10: Motor Speed Pegboard - Nondom Hand
## 11: Verbal Ability/Language Boston Naming
## 12: Verbal Ability/Language COWAT
## 13: Verbal Memory Buschke Total
## 14: Visuospatial Rey Copy
Save working data tables to file.
metadata <- makeMetadata(T)
f <- sprintf("%s/%s", pathOut, "Tager.RData")
save(T, metadata, file=f)
message(sprintf("%s saved on: %s\nFile size: %s KB",
f,
file.mtime(f),
file.size(f) / 1e3))
## Output/Tager.RData saved on: 2016-06-17 22:11:00
## File size: 20.292 KB
Read data from Schagen, et al. "Change in Cognitive Function After Chemotherapy: a Prospective Study in Breast Cancer Patients" JNCI, Vol. 98, No. 23, December 6, 2006. and Stouten-Kemperman "Neurotoxicity in breast cancer survivors ???10 years post-treatment is dependent on treatment type." Brain Imaging and Behavior (2015) 9:275-284.
From: Ayse Tezcan [mailto:[email protected]]
Sent: Monday, May 16, 2016 8:59 AM
To: Joy Melnikow
Cc: Ganz, Patricia, M.D.; Meghan Soulsby; Benjamin Chan; Van Dyk, Kathleen
Subject: Re: Request to include your data in our meta-analysis of cognitive impairment associated with breast cancer chemotherapyThis is great news!
Just to remind what the studies were:
- "Change in Cognitive Function After Chemotherapy: a Prospective Study in Breast Cancer Patients"" JNCI, Vol. 98, No. 23, December 6, 2006
- "Neurotoxicity in breast cancer survivors ???10 years post-treatment is dependent on treatment type."" Brain Imaging and Behavior (2015) 9:275-284
The study compared 4 groups: FEC (Con-CT), CTC (high dose), No-chemo (RT- only) and healthy controls.
The 2015 study was a follow-up study to the 2006 study. For 2006 study, the follow-up assessment was 12 months after baseline, and for 2015 study, it was ???10 years.
2015 study included 61.5% of the original FEC participants, 82% of CTC, 50.9% of RT-only and 66.7% of HCs.
For our study, we only need the data from the FEC (Con-CT) group; however, we can discuss the effect of high dose chemotherapy.
f <- sprintf("%s/%s", pathIn, "Schagen Domains.xlsx")
echoFile(f)
## File: StudyDocuments/Schagen Domains.xlsx
## Modification date: 2016-06-17 21:15:18
## File size: 17.9 KB
varname <- c("cognitiveDomain", "cognitiveTest", "comment", "monthsPostTx")
D1 <- data.table(read.xlsx(f, sheet="2006"))
setnames(D1, names(D1), c(varname, "fec", "ctc", "noct", "control"))
D2 <- data.table(read.xlsx(f, sheet="2015"))
setnames(D2, names(D2), c(varname, "hict", "conct", "rtonly", "hc"))
From the 2006 data, remove the CTC, no-CT, and control columns.
D1 <- D1[,
`:=` (ctc = NULL,
noct = NULL,
control = NULL)]
From the 2015 data, remove the HI-CT, RT, and HC columns.
D2 <- D2[,
`:=` (hict = NULL,
rtonly = NULL,
hc = NULL)]
Add sample sizes.
D1 <- D1[, n := 39]
D2 <- D2[, n := 24]
Split up the mean and SD values into separate columns.
D1 <- D1[,
`:=` (mean = as.numeric(tstrsplit(fec, "\\(")[[1]]),
sd = as.numeric(gsub(")", "", tstrsplit(fec, "\\(")[[2]])))]
D1 <- D1[, fec := NULL]
D2 <- D2[,
`:=` (mean = as.numeric(tstrsplit(conct, "\\(")[[1]]),
sd = as.numeric(gsub(")", "", tstrsplit(conct, "\\(")[[2]])))]
D2 <- D2[, conct := NULL]
Clean up cognitive test labels.
D1[, .N, cognitiveTest]
## cognitiveTest N
## 1: Stroop color word test mean card 1+2 b 2
## 2: WAIS Digit Symbol c 2
## 3: Trailmaking A b 2
## 4: Eriksen congruent b 2
## 5: Eriksen perceptual b 2
## 6: Eriksen response conflict b 2
## 7: Stroop color word test card 4 b 2
## 8: Stroop color word test interference b 2
## 9: Trailmaking B b 2
## 10: AFM task stimulus identification b 2
## 11: AFM task central response decision b 2
## 12: AFM task time response preparation b 2
## 13: AFM reaction time corrected for errors b 2
## 14: CVLT recall c 2
## 15: CVLT delayed recall c 2
## 16: CVLT recognition c 2
## 17: WMS immediate recall c 2
## 18: WMS delayed recall c 2
## 19: Memory update 6 c 2
## 20: Memory update 9 c 2
## 21: Memory update 12 c 2
## 22: Word fluency c 2
## 23: Fepsy Finger Tapping (dominant) c 2
## 24: Fepsy Finger Tapping (non dominant) c 2
## cognitiveTest N
D1 <- D1[, cognitiveTest := gsub("\\s+[abc]\\s*$", "", cognitiveTest)]
D1[, .N, cognitiveTest]
## cognitiveTest N
## 1: Stroop color word test mean card 1+2 2
## 2: WAIS Digit Symbol 2
## 3: Trailmaking A 2
## 4: Eriksen congruent 2
## 5: Eriksen perceptual 2
## 6: Eriksen response conflict 2
## 7: Stroop color word test card 4 2
## 8: Stroop color word test interference 2
## 9: Trailmaking B 2
## 10: AFM task stimulus identification 2
## 11: AFM task central response decision 2
## 12: AFM task time response preparation 2
## 13: AFM reaction time corrected for errors 2
## 14: CVLT recall 2
## 15: CVLT delayed recall 2
## 16: CVLT recognition 2
## 17: WMS immediate recall 2
## 18: WMS delayed recall 2
## 19: Memory update 6 2
## 20: Memory update 9 2
## 21: Memory update 12 2
## 22: Word fluency 2
## 23: Fepsy Finger Tapping (dominant) 2
## 24: Fepsy Finger Tapping (non dominant) 2
## cognitiveTest N
D2 <- D2[, cognitiveTest := gsub("^\\s*", "", cognitiveTest)]
Remove the Eriksen
, AFM
, and Memory update
tests from 2006 data.
Kathleen suggests
This is not a standard clinical NP test - we may want to take out (Eriksen)
and
This task seems to be an experimental measure - not sure if it should be included (AFM)
and
I don't know what this test is (Memory update)
D1 <- D1[grep("(Eriksen)|(AFM)|(Memory update)", cognitiveTest, invert=TRUE)]
Rename CVLT tests.
D2 <- D2[cognitiveTest == "Verbal memory immediate recall", cognitiveTest := "CVLT recall"]
D2 <- D2[cognitiveTest == "Verbal memory delayed recall correct", cognitiveTest := "CVLT delayed recall"]
D2 <- D2[cognitiveTest == "Verbal memory cued recognition hits", cognitiveTest := "CVLT recognition"]
Identify tests used in both 2006 and 2015 publications.
t1 <- unique(D1[, cognitiveTest])
t2 <- unique(D2[, cognitiveTest])
intersect(t1, t2)
## [1] "Trailmaking A" "Trailmaking B" "CVLT recall"
## [4] "CVLT delayed recall" "CVLT recognition" "WMS immediate recall"
## [7] "WMS delayed recall"
Row bind the 2006 data to the 2015 data.
D <- rbind(D1, D2)
Rename domain values.
D[cognitiveDomain == "Attention", cognitiveDomain := "Attn/Wkg Mem/Concentration"]
# D[cognitiveDomain == "", cognitiveDomain := "Verbal Memory"]
# D[cognitiveDomain == "", cognitiveDomain := "Visual Memory"]
D[cognitiveDomain == "Language", cognitiveDomain := "Verbal Ability/Language"]
# D[cognitiveDomain == "", cognitiveDomain := "Motor Speed"]
D[cognitiveDomain == "Information Processing Speed", cognitiveDomain := "Information Proc Speed"]
D[grep("Executive Func", cognitiveDomain), cognitiveDomain := "Exec Fxn"]
# D[cognitiveDomain == "", cognitiveDomain := "Visuospatial"]
Add global variable values.
D <- D[,
`:=` (author = "Schagen",
treatmentGroup = "FEC/CON-CT",
scoreType = "Raw")]
Save working data tables to file.
metadata <- makeMetadata(D)
f <- sprintf("%s/%s", pathOut, "Schagen.RData")
save(D, metadata, file=f)
message(sprintf("%s saved on: %s\nFile size: %s KB",
f,
file.mtime(f),
file.size(f) / 1e3))
## Output/Schagen.RData saved on: 2016-06-17 22:11:01
## File size: 19.691 KB
Read data from Bender, et al. "Patterns of change in cognitive function with anastrozole therapy." Cancer. 2015 Aug 1;121(15):2627-36. doi: 10.1002/cncr.29393. Epub 2015 Apr 23.
Data provided by
From: Sereika, Susan M [mailto:[email protected]]
Sent: Monday, May 23, 2016 6:40 AM
To: Benjamin Chan; Joy Melnikow; Ayse Zubeyde Tezcan
Cc: Bender, Catherine M
Subject: Summary Statistics Individual NP Tests for the Anastrozole Only Group from Bender et al., 2015Hello,
Attached is an SAS dataset containing the summary statistics (mean, STD, and n) for the 9 individual NP test values that were used in calculating the three reported composites (executive function, concentration, and visual working memory) at pretreatment (baseline) and at 6, 12, and 18 months post baseline for breast cancer survivors receiving anastrozole only from Bender et al., 2015.
f <- sprintf("%s/%s", pathIn, "bendersummarystats.sas7bdat")
echoFile(f)
## File: StudyDocuments/bendersummarystats.sas7bdat
## Modification date: 2016-06-17 21:15:18
## File size: 131.1 KB
D <- read_sas(f)
D <- data.table(D)
Melt the data.
meltStat <- function (D, re, value.name, id.vars) {
varnames <- grep(re, names(D), value=TRUE)
D <- melt(D[, c(id.vars, varnames), with=FALSE],
id.vars=id.vars,
variable.name="test",
value.name=value.name)
D <- D[, test := gsub(re, "", test)]
D
}
id.vars <- c("stime", "group")
D1 <- meltStat(D, "^mean_", "mean", id.vars)
D2 <- meltStat(D, "^std_", "sd", id.vars)
D3 <- meltStat(D, "^n_", "n", id.vars)
keyvar <- c(id.vars, "test")
D <- merge(D1, merge(D2, D3, by=keyvar, all=TRUE), by=keyvar, all=TRUE)
Create monthsPostTx
.
D <- D[stime == 0, monthsPostTx := 0]
D <- D[stime == 1, monthsPostTx := 6]
D <- D[stime == 2, monthsPostTx := 12]
D <- D[stime == 3, monthsPostTx := 18]
D <- D[, stime := NULL]
Add cognitiveDomain
and cognitiveTest
.
domains <- data.frame(rbind(c("cftircl", "Complex Figure Test: Immediate Recall", "Vis Mem"),
c("cftdrcl", "Complex Figure Test: Delayed Recall", "Vis Mem"),
c("CFB005A1", "Digit Vigilance Test - Page 1 - Time (seconds)", "Attn/Wkg Mem/Concen"),
c("CFB005B1", "Digit Vigilance Test - Page 1 - Errors", "Attn/Wkg Mem/Concen"),
c("SWMTotalerrors", "SWM Total errors", "Attn/Wkg Mem/Concen"),
c("SWMStrategy", "SWM Strategy", "Attn/Wkg Mem/Concen"),
c("SOCMeaninitthinktime5moves", "SOC Mean initial thinking time (5 moves)", "Exec Fxn"),
c("SOCMeansubseqthinktime5mo", "SOC Mean subsequent thinking time (5 moves)", "Exec Fxn"),
c("SOCProblemssolvdinminmoves", "SOC Problems solved in minimum moves", "Exec Fxn")))
domains <- data.table(domains)
setnames(domains, names(domains), c("test", "cognitiveTest", "cognitiveDomain"))
D <- merge(D, domains, by="test")
D <- D[, test := NULL]
Add global variable values.
D <- D[,
`:=` (author = "Bender 2015",
scoreType = "Raw")]
D <- D[group == 1, treatmentGroup := "CT + Anastrozole"]
D <- D[group == 3, treatmentGroup := "Anastrozole alone"]
D <- D[group == 4, treatmentGroup := "Control"]
Only keep the CT + Anastrozole
group.
D <- D[treatmentGroup == "CT + Anastrozole"]
Save working data tables to file.
metadata <- makeMetadata(D)
f <- sprintf("%s/%s", pathOut, "Bender2015.RData")
save(D, metadata, file=f)
message(sprintf("%s saved on: %s\nFile size: %s KB",
f,
file.mtime(f),
file.size(f) / 1e3))
## Output/Bender2015.RData saved on: 2016-06-17 22:11:01
## File size: 19.854 KB
Reshape the Ono data set so it has a similar structure to the Ahles and Tager data.
f <- sprintf("%s/%s", pathOut, "Ono.RData")
load(f, verbose=TRUE)
## Loading objects:
## D
## metadataD
## DFixed
## metadataDFixed
## DRandom
## metadataDRandom
metadata$timeStamp
## [1] "2016-06-17 22:11:01"
metadata$colNames
## [1] "group" "mean" "sd"
## [4] "n" "monthsPostTx" "cognitiveTest"
## [7] "cognitiveDomain" "author" "scoreType"
## [10] "treatmentGroup"
Melt data.
idVars <- c("author",
"comparisonGroup",
"treatmentGroup",
"timeDays",
"CogTest",
"CognitiveDomainPrimary",
"CognitiveDomainForMetaAnalysis",
"ScoreTyp",
"ageGroup1")
DN <- melt(D, id.vars = idVars,
measure.vars = c("nGroup1", "nGroup2"), value.name = "N",
na.rm=TRUE)
DMean <- melt(D, id.vars = idVars,
measure.vars = c("meanGroup1", "meanGroup2"), value.name = "mean",
na.rm=TRUE)
DSD <- melt(D, id.vars = idVars,
measure.vars = c("sdGroup1", "sdGroup2"), value.name = "sd",
na.rm=TRUE)
Check studies. Do not show
D[, .N, .(author, comparisonGroup, treatmentGroup, timeDays, ageGroup1)]
Prepare measure data sets for merging.
DN <- DN [variable == "nGroup1" , group := "Group 1"]
DMean <- DMean[variable == "meanGroup1", group := "Group 1"]
DSD <- DSD [variable == "sdGroup1" , group := "Group 1"]
DN <- DN [variable == "nGroup2" , group := "Group 2"]
DMean <- DMean[variable == "meanGroup2", group := "Group 2"]
DSD <- DSD [variable == "sdGroup2" , group := "Group 2"]
Merge the melted data.
setkeyv(DN, c(idVars, "group"))
setkeyv(DMean, c(idVars, "group"))
setkeyv(DSD, c(idVars, "group"))
D <- merge(DN[, variable := NULL], DMean[, variable := NULL])
D <- merge(D, DSD[, variable := NULL])
Deduplicate pre-treatment data.
D1 <- D[group == "Group 1"]
setkeyv(D1, idVars[!(idVars %in% c("comparisonGroup", "treatmentGroup", "timeDays"))])
D1 <- unique(D1)
D1 <- D1[, monthsPostTx := 0]
D1 <- D1[,
`:=` (comparisonGroup = NULL,
treatmentGroup = NULL,
timeDays = NULL,
group = NULL)]
Calculate monthsPostRx
for post-treatment values.
D2 <- D[group == "Group 2"]
D2 <- D2[, monthsPostTx := round(timeDays / 365.25 * 12)]
D2 <- D2[,
`:=` (comparisonGroup = NULL,
timeDays = NULL,
group = NULL)]
rbind
pre-treatment and post-treatment data.
D <- rbind(D1, D2, fill=TRUE)
Check data structure
unique(D[, .(author, monthsPostTx)])[order(author, monthsPostTx)]
## author monthsPostTx
## 1: Bender 0
## 2: Bender 6
## 3: Bender 18
## 4: Collins 0
## 5: Collins 5
## 6: Collins 18
## 7: Jenkins 0
## 8: Jenkins 1
## 9: Jenkins 12
## 10: Wefel 0
## 11: Wefel 6
## 12: Wefel 18
Rename the age variable.
setnames(D, "ageGroup1", "age")
Overwrite the data to file.
metadata <- makeMetadata(D)
f <- sprintf("%s/%s", pathOut, "Ono.RData")
save(D, metadata, file=f)
message(sprintf("%s saved on: %s\nFile size: %s KB",
f,
file.mtime(f),
file.size(f) / 1e3))
## Output/Ono.RData saved on: 2016-06-17 22:11:01
## File size: 21.525 KB
Create data sets from studies we had to abstract data from ourselves. I.e., data did not come from primary source authors or secondary source systematic reviews.
Structure of the data should be
author
monthsPostTx
treatmentGroup
cognitiveDomainOriginal
(remove this column since we won't use it)cognitiveDomain
cognitiveTest
scoreType
n
mean
sd
Reference: Fan 2005, et al. J Clin Oncol. 2005 Nov 1;23(31):8025-32.
Data is in the Table 9.
There is a footnote to Table 9:
NOTE. Higher scores represent better function.
This is different from Trails A and B scores from other studies.
Make sure to account for this different in combineData.Rmd
.
Fan reports medians.
We'll assign their median values to the mean
variable to keep things consistent.
Need to figure out what to do with sd
D <- rbind(data.table(monthsPostTx= 0, cognitiveTest="Trails A", mean=42.0, sd=NA, n=104, cognitiveDomain="Attn/Wkg Mem/Concentration"),
data.table(monthsPostTx= 0, cognitiveTest="Trails B", mean=47.5, sd=NA, n=104, cognitiveDomain="Exec Fxn"),
data.table(monthsPostTx=12, cognitiveTest="Trails A", mean=44.0, sd=NA, n= 91, cognitiveDomain="Attn/Wkg Mem/Concentration"),
data.table(monthsPostTx=12, cognitiveTest="Trails B", mean=49.0, sd=NA, n= 91, cognitiveDomain="Exec Fxn"),
data.table(monthsPostTx=24, cognitiveTest="Trails A", mean=47.0, sd=NA, n= 81, cognitiveDomain="Attn/Wkg Mem/Concentration"),
data.table(monthsPostTx=24, cognitiveTest="Trails B", mean=50.0, sd=NA, n= 81, cognitiveDomain="Exec Fxn"))
D <- D[,
`:=` (author = "Fan",
treatmentGroup = "Chemotherapy",
scoreType = "T score")]
D4a <- D
print(xtable(D4a), type="html")
monthsPostTx | cognitiveTest | mean | sd | n | cognitiveDomain | author | treatmentGroup | scoreType | |
---|---|---|---|---|---|---|---|---|---|
1 | 0.00 | Trails A | 42.00 | 104.00 | Attn/Wkg Mem/Concentration | Fan | Chemotherapy | T score | |
2 | 0.00 | Trails B | 47.50 | 104.00 | Exec Fxn | Fan | Chemotherapy | T score | |
3 | 12.00 | Trails A | 44.00 | 91.00 | Attn/Wkg Mem/Concentration | Fan | Chemotherapy | T score | |
4 | 12.00 | Trails B | 49.00 | 91.00 | Exec Fxn | Fan | Chemotherapy | T score | |
5 | 24.00 | Trails A | 47.00 | 81.00 | Attn/Wkg Mem/Concentration | Fan | Chemotherapy | T score | |
6 | 24.00 | Trails B | 50.00 | 81.00 | Exec Fxn | Fan | Chemotherapy | T score |
Reference: McDonald 2012, et al. J Clin Oncol. 2012 Jul 10;30(20):2500-8. doi: 10.1200/JCO.2011.38.5674. Epub 2012 Jun 4
Data is in the Table A2 of the appendix.
D <- rbind(data.table(monthsPostTx= 0, cognitiveTest="0-back", mean=96.1, sd= 8.2),
data.table(monthsPostTx= 0, cognitiveTest="1-back", mean=78.3, sd=30.1),
data.table(monthsPostTx= 0, cognitiveTest="2-back", mean=80.1, sd=27.5),
data.table(monthsPostTx= 0, cognitiveTest="3-back", mean=66.7, sd=25.2),
data.table(monthsPostTx=12, cognitiveTest="0-back", mean=88.0, sd=21.9),
data.table(monthsPostTx=12, cognitiveTest="1-back", mean=89.1, sd=13.2),
data.table(monthsPostTx=12, cognitiveTest="2-back", mean=83.1, sd=16.1),
data.table(monthsPostTx=12, cognitiveTest="3-back", mean=68.4, sd=22.9))
D <- D[,
`:=` (author = "McDonald",
treatmentGroup = "CTx+",
cognitiveDomain = "Attn/Wkg Mem/Concentration",
scoreType = "% accuracy",
n = 16)]
D4b <- D
print(xtable(D4b), type="html")
monthsPostTx | cognitiveTest | mean | sd | author | treatmentGroup | cognitiveDomain | scoreType | n | |
---|---|---|---|---|---|---|---|---|---|
1 | 0.00 | 0-back | 96.10 | 8.20 | McDonald | CTx+ | Attn/Wkg Mem/Concentration | % accuracy | 16.00 |
2 | 0.00 | 1-back | 78.30 | 30.10 | McDonald | CTx+ | Attn/Wkg Mem/Concentration | % accuracy | 16.00 |
3 | 0.00 | 2-back | 80.10 | 27.50 | McDonald | CTx+ | Attn/Wkg Mem/Concentration | % accuracy | 16.00 |
4 | 0.00 | 3-back | 66.70 | 25.20 | McDonald | CTx+ | Attn/Wkg Mem/Concentration | % accuracy | 16.00 |
5 | 12.00 | 0-back | 88.00 | 21.90 | McDonald | CTx+ | Attn/Wkg Mem/Concentration | % accuracy | 16.00 |
6 | 12.00 | 1-back | 89.10 | 13.20 | McDonald | CTx+ | Attn/Wkg Mem/Concentration | % accuracy | 16.00 |
7 | 12.00 | 2-back | 83.10 | 16.10 | McDonald | CTx+ | Attn/Wkg Mem/Concentration | % accuracy | 16.00 |
8 | 12.00 | 3-back | 68.40 | 22.90 | McDonald | CTx+ | Attn/Wkg Mem/Concentration | % accuracy | 16.00 |
Reference: Wefel 2010, et al Cancer. 2010 Jul 15;116(14):3348-56. doi: 10.1002/cncr.25098.
Data is in the Table 4. Use data from Time Point 1 and Time Point 4.
Cognitive testing was conducted at baseline [Time Point 1] and then on average 2.9 months (standard deviation "SD" = 0.59), 7.0 months (SD, 1.4), and 13.1 months (SD = 2.8) after baseline [Time Point 4].
D <- rbind(data.table(monthsPostTx= 0 , n=42, mean= 0.09, sd=0.86, cognitiveTest="Hopkins Verbal Learning Test Total", cognitiveDomain="Verbal Memory", scoreType="Z-score"),
data.table(monthsPostTx= 0 , n=42, mean=-0.18, sd=2.51, cognitiveTest="Trail Making Part B", cognitiveDomain="Exec Fxn", scoreType="Z-score"),
data.table(monthsPostTx= 0 , n=42, mean= 0.29, sd=0.96, cognitiveTest="MAE Controlled Oral Word Association", cognitiveDomain="Verbal Ability/Language", scoreType="Z-score"),
data.table(monthsPostTx= 0 , n=42, mean=-0.34, sd=1.57, cognitiveTest="Trail Making Part A", cognitiveDomain="Attn/Wkg Mem/Concentration", scoreType="Z-score"),
data.table(monthsPostTx= 0 , n=42, mean=11.71, sd=2.45, cognitiveTest="WAIS-R Digit Symbol", cognitiveDomain="Information Proc Speed", scoreType="Scaled score"),
data.table(monthsPostTx= 0 , n=42, mean= 9.00, sd=2.48, cognitiveTest="WAIS-R Digit Span", cognitiveDomain="Attn/Wkg Mem/Concentration", scoreType="Scaled score"),
data.table(monthsPostTx=13.1, n=28, mean=-0.44, sd=1.23, cognitiveTest="Hopkins Verbal Learning Test Total", cognitiveDomain="Verbal Memory", scoreType="Z-score"),
data.table(monthsPostTx=13.1, n=28, mean= 0.15, sd=1.22, cognitiveTest="Trail Making Part B", cognitiveDomain="Exec Fxn", scoreType="Z-score"),
data.table(monthsPostTx=13.1, n=28, mean= 0.30, sd=1.15, cognitiveTest="MAE Controlled Oral Word Association", cognitiveDomain="Verbal Ability/Language", scoreType="Z-score"),
data.table(monthsPostTx=13.1, n=28, mean= 0.56, sd=1.29, cognitiveTest="Trail Making Part A", cognitiveDomain="Attn/Wkg Mem/Concentration", scoreType="Z-score"),
data.table(monthsPostTx=13.1, n=28, mean=13.25, sd=2.03, cognitiveTest="WAIS-R Digit Symbol", cognitiveDomain="Information Proc Speed", scoreType="Scaled score"),
data.table(monthsPostTx=13.1, n=28, mean=10.04, sd=2.67, cognitiveTest="WAIS-R Digit Span", cognitiveDomain="Attn/Wkg Mem/Concentration", scoreType="Scaled score"))
D <- D[,
`:=` (author = "Wefel 2010",
treatmentGroup = "Chemotherapy with or without paclitaxel")]
D4c <- D
print(xtable(D4c), type="html")
monthsPostTx | n | mean | sd | cognitiveTest | cognitiveDomain | scoreType | author | treatmentGroup | |
---|---|---|---|---|---|---|---|---|---|
1 | 0.00 | 42.00 | 0.09 | 0.86 | Hopkins Verbal Learning Test Total | Verbal Memory | Z-score | Wefel 2010 | Chemotherapy with or without paclitaxel |
2 | 0.00 | 42.00 | -0.18 | 2.51 | Trail Making Part B | Exec Fxn | Z-score | Wefel 2010 | Chemotherapy with or without paclitaxel |
3 | 0.00 | 42.00 | 0.29 | 0.96 | MAE Controlled Oral Word Association | Verbal Ability/Language | Z-score | Wefel 2010 | Chemotherapy with or without paclitaxel |
4 | 0.00 | 42.00 | -0.34 | 1.57 | Trail Making Part A | Attn/Wkg Mem/Concentration | Z-score | Wefel 2010 | Chemotherapy with or without paclitaxel |
5 | 0.00 | 42.00 | 11.71 | 2.45 | WAIS-R Digit Symbol | Information Proc Speed | Scaled score | Wefel 2010 | Chemotherapy with or without paclitaxel |
6 | 0.00 | 42.00 | 9.00 | 2.48 | WAIS-R Digit Span | Attn/Wkg Mem/Concentration | Scaled score | Wefel 2010 | Chemotherapy with or without paclitaxel |
7 | 13.10 | 28.00 | -0.44 | 1.23 | Hopkins Verbal Learning Test Total | Verbal Memory | Z-score | Wefel 2010 | Chemotherapy with or without paclitaxel |
8 | 13.10 | 28.00 | 0.15 | 1.22 | Trail Making Part B | Exec Fxn | Z-score | Wefel 2010 | Chemotherapy with or without paclitaxel |
9 | 13.10 | 28.00 | 0.30 | 1.15 | MAE Controlled Oral Word Association | Verbal Ability/Language | Z-score | Wefel 2010 | Chemotherapy with or without paclitaxel |
10 | 13.10 | 28.00 | 0.56 | 1.29 | Trail Making Part A | Attn/Wkg Mem/Concentration | Z-score | Wefel 2010 | Chemotherapy with or without paclitaxel |
11 | 13.10 | 28.00 | 13.25 | 2.03 | WAIS-R Digit Symbol | Information Proc Speed | Scaled score | Wefel 2010 | Chemotherapy with or without paclitaxel |
12 | 13.10 | 28.00 | 10.04 | 2.67 | WAIS-R Digit Span | Attn/Wkg Mem/Concentration | Scaled score | Wefel 2010 | Chemotherapy with or without paclitaxel |
Reference: Dumas 2013, et al. Brain Imaging Behav. 2013 Dec; 7(4): 10.1007/s11682-013-9244-1.
Data is in the Table 3.
D <- rbind(data.table(monthsPostTx= 0, cognitiveTest="0-back sensitivity ", mean=2.27, sd=0.9),
data.table(monthsPostTx= 0, cognitiveTest="1-back sensitivity ", mean=1.70, sd=1.2),
data.table(monthsPostTx= 0, cognitiveTest="2-back sensitivity ", mean=1.89, sd=0.8),
data.table(monthsPostTx= 0, cognitiveTest="3-back sensitivity ", mean=1.32, sd=0.9),
data.table(monthsPostTx=12, cognitiveTest="0-back sensitivity ", mean=2.40, sd=0.8),
data.table(monthsPostTx=12, cognitiveTest="1-back sensitivity ", mean=2.29, sd=1.0),
data.table(monthsPostTx=12, cognitiveTest="2-back sensitivity ", mean=1.68, sd=0.7),
data.table(monthsPostTx=12, cognitiveTest="3-back sensitivity ", mean=1.60, sd=0.8),
data.table(monthsPostTx= 0, cognitiveTest="0-back bias ", mean=0.20, sd=0.3),
data.table(monthsPostTx= 0, cognitiveTest="1-back bias ", mean=0.22, sd=0.5),
data.table(monthsPostTx= 0, cognitiveTest="2-back bias ", mean=0.05, sd=0.4),
data.table(monthsPostTx= 0, cognitiveTest="3-back bias ", mean=0.61, sd=0.3),
data.table(monthsPostTx=12, cognitiveTest="0-back bias ", mean=0.26, sd=0.3),
data.table(monthsPostTx=12, cognitiveTest="1-back bias ", mean=0.06, sd=0.2),
data.table(monthsPostTx=12, cognitiveTest="2-back bias ", mean=0.03, sd=.03),
data.table(monthsPostTx=12, cognitiveTest="3-back bias ", mean=0.32, sd=0.2))
D <- D[,
`:=` (author = "Dumas",
treatmentGroup = "Chemotherapy +",
cognitiveDomain = "Attn/Wkg Mem/Concentration",
scoreType = "",
n = 9)]
D4d <- D
print(xtable(D4d), type="html")
monthsPostTx | cognitiveTest | mean | sd | author | treatmentGroup | cognitiveDomain | scoreType | n | |
---|---|---|---|---|---|---|---|---|---|
1 | 0.00 | 0-back sensitivity | 2.27 | 0.90 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
2 | 0.00 | 1-back sensitivity | 1.70 | 1.20 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
3 | 0.00 | 2-back sensitivity | 1.89 | 0.80 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
4 | 0.00 | 3-back sensitivity | 1.32 | 0.90 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
5 | 12.00 | 0-back sensitivity | 2.40 | 0.80 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
6 | 12.00 | 1-back sensitivity | 2.29 | 1.00 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
7 | 12.00 | 2-back sensitivity | 1.68 | 0.70 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
8 | 12.00 | 3-back sensitivity | 1.60 | 0.80 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
9 | 0.00 | 0-back bias | 0.20 | 0.30 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
10 | 0.00 | 1-back bias | 0.22 | 0.50 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
11 | 0.00 | 2-back bias | 0.05 | 0.40 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
12 | 0.00 | 3-back bias | 0.61 | 0.30 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
13 | 12.00 | 0-back bias | 0.26 | 0.30 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
14 | 12.00 | 1-back bias | 0.06 | 0.20 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
15 | 12.00 | 2-back bias | 0.03 | 0.03 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 | |
16 | 12.00 | 3-back bias | 0.32 | 0.20 | Dumas | Chemotherapy + | Attn/Wkg Mem/Concentration | 9.00 |
Reference: Moore 2014, et al. Support Care Cancer. 2014 Aug;22(8):2127-31. doi: 10.1007/s00520-014-2197-0. Epub 2014 Mar 20.
Data was sent by the study author.
D <- rbind(data.table(monthsPostTx= 0, cognitiveTest="WAIS-III Symbol Search" , mean=29, sd= 6),
data.table(monthsPostTx= 0, cognitiveTest="WAIS-III Digit Symbol Coding", mean=75, sd=14),
data.table(monthsPostTx= 1, cognitiveTest="WAIS-III Symbol Search" , mean=32, sd= 4),
data.table(monthsPostTx= 1, cognitiveTest="WAIS-III Digit Symbol Coding", mean=74, sd= 8),
data.table(monthsPostTx=12, cognitiveTest="WAIS-III Symbol Search" , mean=33, sd= 4),
data.table(monthsPostTx=12, cognitiveTest="WAIS-III Digit Symbol Coding", mean=74, sd=14))
D <- D[,
`:=` (author = "Moore",
treatmentGroup = "Chemotherapy",
cognitiveDomain = "Info Proc Speed",
scoreType = "",
n = 7)]
D4e <- D
print(xtable(D4e), type="html")
monthsPostTx | cognitiveTest | mean | sd | author | treatmentGroup | cognitiveDomain | scoreType | n | |
---|---|---|---|---|---|---|---|---|---|
1 | 0.00 | WAIS-III Symbol Search | 29.00 | 6.00 | Moore | Chemotherapy | Info Proc Speed | 7.00 | |
2 | 0.00 | WAIS-III Digit Symbol Coding | 75.00 | 14.00 | Moore | Chemotherapy | Info Proc Speed | 7.00 | |
3 | 1.00 | WAIS-III Symbol Search | 32.00 | 4.00 | Moore | Chemotherapy | Info Proc Speed | 7.00 | |
4 | 1.00 | WAIS-III Digit Symbol Coding | 74.00 | 8.00 | Moore | Chemotherapy | Info Proc Speed | 7.00 | |
5 | 12.00 | WAIS-III Symbol Search | 33.00 | 4.00 | Moore | Chemotherapy | Info Proc Speed | 7.00 | |
6 | 12.00 | WAIS-III Digit Symbol Coding | 74.00 | 14.00 | Moore | Chemotherapy | Info Proc Speed | 7.00 |
Load data from
- Ono
- Ahles
- Tager
- Schagen
f <- sprintf("%s/%s", pathOut, "Ono.RData")
load(f, verbose=TRUE)
## Loading objects:
## D
## metadata
metadata$colNames
## [1] "author" "CogTest"
## [3] "CognitiveDomainPrimary" "CognitiveDomainForMetaAnalysis"
## [5] "ScoreTyp" "age"
## [7] "N" "mean"
## [9] "sd" "monthsPostTx"
## [11] "treatmentGroup"
D1 <- D
colNames1 <- metadataD$colNames
f <- sprintf("%s/%s", pathOut, "Ahles.RData")
load(f, verbose=TRUE)
## Loading objects:
## D
## metadata
metadata$colNames
## [1] "Variable" "CognitiveDomainForMetaAnalysis"
## [3] "txgrp" "ptime"
## [5] "NObs" "Label"
## [7] "N" "Mean"
## [9] "Median" "StdDev"
## [11] "monthsPostTx"
D2 <- D
f <- sprintf("%s/%s", pathOut, "Tager.RData")
load(f, verbose=TRUE)
## Loading objects:
## T
## metadata
metadata$colNames
## [1] "Label" "CognitiveDomainForMetaAnalysis"
## [3] "Variable" "session"
## [5] "N" "meanZ"
## [7] "sdZ" "monthsPostTx"
D3 <- T
f <- sprintf("%s/%s", pathOut, "Schagen.RData")
load(f, verbose=TRUE)
## Loading objects:
## D
## metadata
metadata$colNames
## [1] "cognitiveDomain" "cognitiveTest" "comment"
## [4] "monthsPostTx" "n" "mean"
## [7] "sd" "author" "treatmentGroup"
## [10] "scoreType"
D5 <- D
f <- sprintf("%s/%s", pathOut, "Bender2015.RData")
load(f, verbose=TRUE)
## Loading objects:
## D
## metadata
metadata$colNames
## [1] "group" "mean" "sd"
## [4] "n" "monthsPostTx" "cognitiveTest"
## [7] "cognitiveDomain" "author" "scoreType"
## [10] "treatmentGroup"
D6 <- D
Structure of the data should be
author
monthsPostTx
treatmentGroup
cognitiveDomainOriginal
(remove this column since we won't use it)cognitiveDomain
cognitiveTest
scoreType
n
mean
sd
Restructure Ono.
colOrder <- c("author",
"monthsPostTx",
"treatmentGroup",
"cognitiveDomain",
"cognitiveTest",
"scoreType",
"n",
"mean",
"sd")
setnames(D1,
c("CogTest", "CognitiveDomainPrimary", "CognitiveDomainForMetaAnalysis", "ScoreTyp", "N"),
c("cognitiveTest", "cognitiveDomainOriginal", "cognitiveDomain", "scoreType", "n"))
D1 <- D1[author == "Bender", author := "Bender 2006"]
D1 <- D1[author == "Wefel", author := "Wefel 2004"]
D1 <- D1[scoreType == "z score", scoreType := "Z-score"]
D1 <- D1[scoreType == "Scaled scores", scoreType := "Scaled score"]
D1[,
`:=` (cognitiveDomainOriginal = NULL)]
setcolorder(D1, c(colOrder, "age"))
Fix a data errors in Collins. Remove a duplicate row.
n0 <- nrow(D1)
D1 <- D1[!(author == "Collins" & monthsPostTx == 0 &
cognitiveTest %in% c("Letter-number sequencing: WAIS-III", "Symbol search: WAIS-III"))]
message(sprintf("Removed %d rows", n0 - nrow(D1)))
## Removed 2 rows
Restructure Ahles.
D2 <- D2[, author := "Ahles"]
setnames(D2,
c("CognitiveDomainForMetaAnalysis", "txgrp", "Label", "N", "Mean", "StdDev"),
c("cognitiveDomain", "treatmentGroup", "cognitiveTest", "n", "mean", "sd"))
D2[,
`:=` (Variable = NULL,
ptime = NULL,
NObs = NULL,
Median = NULL,
scoreType = "Z-score")]
setcolorder(D2, colOrder)
Restructure Tager.
D3 <- D3[, author := "Tager"]
setnames(D3,
c("Label", "CognitiveDomainForMetaAnalysis", "N", "meanZ", "sdZ"),
c("cognitiveTest", "cognitiveDomain", "n", "mean", "sd"))
D3[,
`:=` (Variable = NULL,
session = NULL,
treatmentGroup = "Chemo",
scoreType = "Z-score")]
setcolorder(D3, colOrder)
rbindlist
the data.
D <- rbindlist(list(D1, D2, D3, D4a, D4b, D4c, D4d, D4e, D5, D6),
use.names=TRUE,
fill=TRUE)
Exclude Fan since it has missing data and cannot be included in the meta-analysis.
D <- D[author != "Fan"]
Fill in age
for these studies.
unique(D[is.na(age), author])
## [1] "Ahles" "Tager" "McDonald" "Wefel 2010" "Dumas"
## [6] "Moore" "Schagen" "Bender 2015"
D <- D[author == "Ahles" , age := 51.7]
D <- D[author == "Tager" , age := 60.3]
D <- D[author == "Fan" , age := 48]
D <- D[author == "McDonald" , age := 52.9]
D <- D[author == "Wefel 2010", age := 48.8]
D <- D[author == "Dumas" , age := 57.1]
D <- D[author == "Moore" , age := 53]
D <- D[author == "Schagen" , age := 45.5]
D <- D[author == "Bender 2015", age := 59.2]
Standardize age.
age <- unique(D[, .(author, age)])
age <- age[, ageCentered := scale(age, center=TRUE, scale=FALSE)]
age[,
.(meanRaw = mean(age),
sdRaw = sd(age),
meanCentered = mean(ageCentered),
sdCentered = sd(ageCentered))]
## meanRaw sdRaw meanCentered sdCentered
## 1: 51.34846 6.308398 3.279495e-15 6.308398
age[order(age)]
## author age ageCentered
## 1: Bender 2006 40.11 -11.2384615
## 2: Bender 2006 44.13 -7.2184615
## 3: Wefel 2004 45.40 -5.9484615
## 4: Schagen 45.50 -5.8484615
## 5: Wefel 2010 48.80 -2.5484615
## 6: Jenkins 51.49 0.1415385
## 7: Ahles 51.70 0.3515385
## 8: McDonald 52.90 1.5515385
## 9: Moore 53.00 1.6515385
## 10: Dumas 57.10 5.7515385
## 11: Collins 57.90 6.5515385
## 12: Bender 2015 59.20 7.8515385
## 13: Tager 60.30 8.9515385
D <- merge(D, age, by=c("author", "age"))
Fill in education
, mean education, for these studies.
unique(D[is.na(age), author])
## character(0)
D <- D[author == "Bender 2006", education := 14.11]
D <- D[author == "Collins" , education := 14.6]
D <- D[author == "Jenkins" , education := 12.02]
D <- D[author == "Wefel 2004", education := 14]
D <- D[author == "Ahles" , education := 15.7]
D <- D[author == "Tager" , education := 16.6]
D <- D[author == "Fan" , education := NA]
D <- D[author == "McDonald" , education := 15.2]
D <- D[author == "Wefel 2010", education := 13.0]
D <- D[author == "Dumas" , education := 15.3]
D <- D[author == "Moore" , education := NA]
D <- D[author == "Schagen" , education := NA]
D <- D[author == "Bender 2015", education := 14.8]
Standardize education.
education <- unique(D[, .(author, education)])
education <- education[, educationCentered := scale(education, center=TRUE, scale=FALSE)]
education[,
.(meanRaw = mean(education, na.rm=TRUE),
sdRaw = sd(education, na.rm=TRUE),
meanCentered = mean(educationCentered, na.rm=TRUE),
sdCentered = sd(educationCentered, na.rm=TRUE))]
## meanRaw sdRaw meanCentered sdCentered
## 1: 14.533 1.327973 5.329071e-16 1.327973
education[order(education)]
## author education educationCentered
## 1: Jenkins 12.02 -2.513
## 2: Wefel 2010 13.00 -1.533
## 3: Wefel 2004 14.00 -0.533
## 4: Bender 2006 14.11 -0.423
## 5: Collins 14.60 0.067
## 6: Bender 2015 14.80 0.267
## 7: McDonald 15.20 0.667
## 8: Dumas 15.30 0.767
## 9: Ahles 15.70 1.167
## 10: Tager 16.60 2.067
## 11: Moore NA NA
## 12: Schagen NA NA
D <- merge(D, education, by=c("author", "education"))
Use mean substitution for Moore and Schagen. Moore and Schagen does not report education descriptive data for their cohorts. Schagen reports IQ score. Substitute the mean value of the other studies.
D <- D[author == "Moore", educationCentered := 0]
D <- D[author == "Schagen", educationCentered := 0]
Identify tests where higher values are worse.
D <- D[,
isHigherWorse :=
(grepl("sec|time", cognitiveTest, ignore.case=TRUE) &
!(grepl("4WSTM", cognitiveTest) | grepl("PASAT", cognitiveTest))) |
grepl("pegboard", cognitiveTest, ignore.case=TRUE) |
(grepl("stroop", cognitiveTest, ignore.case=TRUE) & !grepl("^stroop$", cognitiveTest, ignore.case=TRUE))|
(grepl("trail", cognitiveTest, ignore.case=TRUE) & author != "Fan")]
tests <- unique(D[, .(isHigherWorse, cognitiveDomain, cognitiveTest)])
setorder(tests, isHigherWorse, cognitiveDomain, cognitiveTest)
print(xtable(tests[isHigherWorse == TRUE]), type="html")
isHigherWorse | cognitiveDomain | cognitiveTest | |
---|---|---|---|
1 | TRUE | Attn/Wkg Mem/Concentration | Trails A |
2 | TRUE | Attn/Wkg Mem/Concentration | TMT part A time |
3 | TRUE | Attn/Wkg Mem/Concentration | CPT: Distractibility, Reaction Time |
4 | TRUE | Attn/Wkg Mem/Concentration | DKEFS Trails: Number Sequencing, sec |
5 | TRUE | Attn/Wkg Mem/Concentration | DKEFS Trails: Letter Sequencing, sec |
6 | TRUE | Attn/Wkg Mem/Concentration | CPT: Vigilance, Reaction Time |
7 | TRUE | Attn/Wkg Mem/Concentration | Trail Making A |
8 | TRUE | Attn/Wkg Mem/Concentration | Trail Making Part A |
9 | TRUE | Attn/Wkg Mem/Concentration | Trailmaking A |
10 | TRUE | Motor Speed | Grooved Peg Board time |
11 | TRUE | Motor Speed | Grooved pegboard dominant hand |
12 | TRUE | Motor Speed | Grooved pegboard nondominant hand |
13 | TRUE | Motor Speed | DKEFS Trails: Motor Speed, sec |
14 | TRUE | Motor Speed | Grooved Pegboard Test: Left Hand, sec |
15 | TRUE | Motor Speed | Grooved Pegboard Test: Right Hand, sec |
16 | TRUE | Motor Speed | Pegboard - Dom Hand |
17 | TRUE | Motor Speed | Pegboard - Nondom Hand |
18 | TRUE | Exec Fxn | Trails B |
19 | TRUE | Exec Fxn | TMT part B time |
20 | TRUE | Exec Fxn | DKEFS Stroop: Color-Word |
21 | TRUE | Exec Fxn | DKEFS: Stroop, Set Shifting |
22 | TRUE | Exec Fxn | DKEFS Trails: Number-Letter Switching, sec |
23 | TRUE | Exec Fxn | Trail Making B |
24 | TRUE | Exec Fxn | Trail Making Part B |
25 | TRUE | Exec Fxn | Stroop color word test card 4 |
26 | TRUE | Exec Fxn | Stroop color word test interference |
27 | TRUE | Exec Fxn | Trailmaking B |
28 | TRUE | Exec Fxn | Stroop card 3 |
29 | TRUE | Exec Fxn | SOC Mean initial thinking time (5 moves) |
30 | TRUE | Information Proc Speed | DKEFS Stroop: Color Patch Naming |
31 | TRUE | Information Proc Speed | DKEFS Trails: Visual Scanning in Seconds |
32 | TRUE | Information Proc Speed | DKEFS Stroop: Word Reading, sec |
33 | TRUE | Information Proc Speed | Stroop color word test mean card 1+2 |
34 | TRUE | Information Proc Speed | Stroop card 1 |
35 | TRUE | Information Proc Speed | Stroop card 2 |
36 | TRUE | Attn/Wkg Mem/Concen | Digit Vigilance Test - Page 1 - Time (seconds) |
print(xtable(tests[isHigherWorse == FALSE]), type="html")
isHigherWorse | cognitiveDomain | cognitiveTest | |
---|---|---|---|
1 | FALSE | Attn/Wkg Mem/Concentration | 4WSTM 15 sec |
2 | FALSE | Attn/Wkg Mem/Concentration | 4WSTM 30 sec |
3 | FALSE | Attn/Wkg Mem/Concentration | 4WSTM 5 sec |
4 | FALSE | Attn/Wkg Mem/Concentration | WAIS-III -Arithmetic |
5 | FALSE | Attn/Wkg Mem/Concentration | Consonant trigrams |
6 | FALSE | Attn/Wkg Mem/Concentration | PASAT number correct |
7 | FALSE | Attn/Wkg Mem/Concentration | Spatial span: WMS-III |
8 | FALSE | Attn/Wkg Mem/Concentration | WAIS-III Digit span |
9 | FALSE | Attn/Wkg Mem/Concentration | WAIS-III Letter-number sequencing |
10 | FALSE | Attn/Wkg Mem/Concentration | WMS-III digit span backwards |
11 | FALSE | Attn/Wkg Mem/Concentration | WMS-III digit span forward |
12 | FALSE | Attn/Wkg Mem/Concentration | WMS-III letter number sequencing |
13 | FALSE | Attn/Wkg Mem/Concentration | WMS-III spatial span backwards |
14 | FALSE | Attn/Wkg Mem/Concentration | WMS-III spatial span forwards |
15 | FALSE | Attn/Wkg Mem/Concentration | WAIS-R arithmetic |
16 | FALSE | Attn/Wkg Mem/Concentration | WAIS-R digit span |
17 | FALSE | Attn/Wkg Mem/Concentration | Letter-number sequencing: WAIS-III |
18 | FALSE | Attn/Wkg Mem/Concentration | CPT: Distractibility, Correct Responses |
19 | FALSE | Attn/Wkg Mem/Concentration | CPT: Distractibility, False Positives |
20 | FALSE | Attn/Wkg Mem/Concentration | PASAT (Rao): 2 second pacing |
21 | FALSE | Attn/Wkg Mem/Concentration | PASAT (Rao): 3 second pacing |
22 | FALSE | Attn/Wkg Mem/Concentration | CPT: Vigilance, Correct Responses |
23 | FALSE | Attn/Wkg Mem/Concentration | CPT: Vigilance, False Positives |
24 | FALSE | Attn/Wkg Mem/Concentration | WAIS-III Arithmetic |
25 | FALSE | Attn/Wkg Mem/Concentration | WAIS-III Digit Span |
26 | FALSE | Attn/Wkg Mem/Concentration | WAIS-III Number/Letter |
27 | FALSE | Attn/Wkg Mem/Concentration | 0-back |
28 | FALSE | Attn/Wkg Mem/Concentration | 1-back |
29 | FALSE | Attn/Wkg Mem/Concentration | 2-back |
30 | FALSE | Attn/Wkg Mem/Concentration | 3-back |
31 | FALSE | Attn/Wkg Mem/Concentration | WAIS-R Digit Span |
32 | FALSE | Attn/Wkg Mem/Concentration | 0-back sensitivity |
33 | FALSE | Attn/Wkg Mem/Concentration | 1-back sensitivity |
34 | FALSE | Attn/Wkg Mem/Concentration | 2-back sensitivity |
35 | FALSE | Attn/Wkg Mem/Concentration | 3-back sensitivity |
36 | FALSE | Attn/Wkg Mem/Concentration | 0-back bias |
37 | FALSE | Attn/Wkg Mem/Concentration | 1-back bias |
38 | FALSE | Attn/Wkg Mem/Concentration | 2-back bias |
39 | FALSE | Attn/Wkg Mem/Concentration | 3-back bias |
40 | FALSE | Verbal Memory | RAVL delayed recall |
41 | FALSE | Verbal Memory | RAVL total score |
42 | FALSE | Verbal Memory | CVLT delayed recall |
43 | FALSE | Verbal Memory | CVLT delayed recognition |
44 | FALSE | Verbal Memory | WMS-III Logical memory II |
45 | FALSE | Verbal Memory | AVLT delayed |
46 | FALSE | Verbal Memory | AVLT total |
47 | FALSE | Verbal Memory | WMS-III Story delayed recall |
48 | FALSE | Verbal Memory | WMS-III Story immediate recall |
49 | FALSE | Verbal Memory | CVLT-2: Trials 1-5 Total |
50 | FALSE | Verbal Memory | CVLT-2: Long Delay Free Recall |
51 | FALSE | Verbal Memory | Wechsler Memory Scale-3: Logical Memory I |
52 | FALSE | Verbal Memory | Wechsler Memory Scale-3: Logical Memory II |
53 | FALSE | Verbal Memory | Buschke Total |
54 | FALSE | Verbal Memory | Hopkins Verbal Learning Test Total |
55 | FALSE | Verbal Memory | CVLT recall |
56 | FALSE | Verbal Memory | CVLT recognition |
57 | FALSE | Visual Memory | RCF delayed recall |
58 | FALSE | Visual Memory | RCF immediate recall |
59 | FALSE | Visual Memory | RVLT delayed recall |
60 | FALSE | Visual Memory | RVLT delayed recognition |
61 | FALSE | Visual Memory | WMS-III Family pictures II |
62 | FALSE | Visual Memory | Complex figure delayed |
63 | FALSE | Visual Memory | Complex figure immediate |
64 | FALSE | Visual Memory | Wechsler Memory Scale-3: Faces I |
65 | FALSE | Visual Memory | Wechsler Memory Scale-3: Faces II |
66 | FALSE | Visual Memory | WMS immediate recall |
67 | FALSE | Visual Memory | WMS delayed recall |
68 | FALSE | Verbal Ability/Language | Boston Naming Test number correct |
69 | FALSE | Verbal Ability/Language | Verbal Fluency FAS number correct |
70 | FALSE | Verbal Ability/Language | Verbal fluency COWAT correct |
71 | FALSE | Verbal Ability/Language | DKEFS Verbal Fluency: anival or clothing and names |
72 | FALSE | Verbal Ability/Language | DKEFS Verbal Fluency |
73 | FALSE | Verbal Ability/Language | WRAT-3 Reading Score |
74 | FALSE | Verbal Ability/Language | WASI: Vocabulary |
75 | FALSE | Verbal Ability/Language | Boston Naming |
76 | FALSE | Verbal Ability/Language | COWAT |
77 | FALSE | Verbal Ability/Language | MAE Controlled Oral Word Association |
78 | FALSE | Verbal Ability/Language | Word fluency |
79 | FALSE | Verbal Ability/Language | Fluency Animals |
80 | FALSE | Verbal Ability/Language | Fluency Professions |
81 | FALSE | Motor Speed | Finger Tapper - Dom Hand |
82 | FALSE | Motor Speed | Finger Tapper - NonDom Hand |
83 | FALSE | Motor Speed | Fepsy Finger Tapping (dominant) |
84 | FALSE | Motor Speed | Fepsy Finger Tapping (non dominant) |
85 | FALSE | Motor Speed | Mean taps dominant hand |
86 | FALSE | Motor Speed | Mean taps non-dominant hand |
87 | FALSE | Exec Fxn | WCST sorts divided by trials |
88 | FALSE | Exec Fxn | Stroop |
89 | FALSE | Exec Fxn | WAIS-R similarities |
90 | FALSE | Exec Fxn | DKEFS Card Sorting: Confirmed Correct Sorts |
91 | FALSE | Exec Fxn | DKEFS Verbal Fluency: Switching Fruits/Veget |
92 | FALSE | Exec Fxn | DKEFS Card Sorting: Free Sorting |
93 | FALSE | Exec Fxn | DKEFS: Card Sorting, Sort Recognition |
94 | FALSE | Visuospatial | WAIS-III Block design |
95 | FALSE | Visuospatial | WAIS-R block design |
96 | FALSE | Visuospatial | WASI: Block Design |
97 | FALSE | Visuospatial | Rey Copy |
98 | FALSE | Information Proc Speed | WAIS-III Digit Symbol Coding |
99 | FALSE | Information Proc Speed | WAIS-III Symbol search |
100 | FALSE | Information Proc Speed | Letter cancellation |
101 | FALSE | Information Proc Speed | WAIS-R digit symbol |
102 | FALSE | Information Proc Speed | Symbol search: WAIS-III |
103 | FALSE | Information Proc Speed | CVLT-2: Digit Symbol |
104 | FALSE | Information Proc Speed | WAIS-III Digit Symbol |
105 | FALSE | Information Proc Speed | WAIS-R Digit Symbol |
106 | FALSE | Information Proc Speed | WAIS Digit Symbol |
107 | FALSE | Information Proc Speed | Digit symbol |
108 | FALSE | Info Proc Speed | WAIS-III Digit Symbol Coding |
109 | FALSE | Info Proc Speed | WAIS-III Symbol Search |
110 | FALSE | Attn/Wkg Mem/Concen | Digit Vigilance Test - Page 1 - Errors |
111 | FALSE | Attn/Wkg Mem/Concen | SWM Strategy |
112 | FALSE | Attn/Wkg Mem/Concen | SWM Total errors |
113 | FALSE | Vis Mem | Complex Figure Test: Delayed Recall |
114 | FALSE | Vis Mem | Complex Figure Test: Immediate Recall |
Output to CSV for Kathleen to verify. No longer needed. See issue #7.
f <- "tests.csv"
write.csv(tests, f, row.names=FALSE)
Shorten domain labels.
setnames(D, c("cognitiveDomain", "cognitiveTest"), c("domain", "test"))
D <- D[domain == "Attn/Wkg Mem/Concentration", domain := "Attn/Wkg Mem/Concen"]
D <- D[domain == "Verbal Memory", domain := "Verb Mem"]
D <- D[domain == "Visual Memory", domain := "Vis Mem"]
D <- D[domain == "Verbal Ability/Language", domain := "Verb Ability/Lang"]
# D <- D[domain == "Motor Speed", domain := ""]
D <- D[domain == "Information Proc Speed", domain := "Info Proc Speed"]
# D <- D[domain == "Exec Fxn", domain := ""]
# D <- D[domain == "Visuospatial", domain := ""]
D <- D[, domain := factor(domain)]
D[, .N, domain]
## domain N
## 1: Verb Ability/Lang 37
## 2: Visuospatial 13
## 3: Verb Mem 63
## 4: Exec Fxn 60
## 5: Info Proc Speed 46
## 6: Attn/Wkg Mem/Concen 162
## 7: Motor Speed 39
## 8: Vis Mem 49
Trim leading and trailing whitespace.
D <- D[, test := gsub("^[[:space:]]*", "", test)]
D <- D[, test := gsub("[[:space:]]*$", "", test)]
Standardize test labels.
D <- D[, test := gsub(":", "", test)]
D <- D[, test := gsub("anival", "animal", test)]
D <- D[, test := gsub("Wechsler Memory Scale-3", "WMS-III", test)]
D <- D[, test := gsub("Trails A", "TMT A", test)]
D <- D[, test := gsub("Trail Making A", "TMT A", test)]
D <- D[, test := gsub("Trail Making Part A", "TMT A", test)]
D <- D[, test := gsub("TMT part A time", "TMT A", test)]
D <- D[, test := gsub("Trailmaking A", "TMT A", test)]
D <- D[, test := gsub("Trails B", "TMT B", test)]
D <- D[, test := gsub("Trail Making B", "TMT B", test)]
D <- D[, test := gsub("Trail Making Part B", "TMT B", test)]
D <- D[, test := gsub("TMT part B time", "TMT B", test)]
D <- D[, test := gsub("Trailmaking B", "TMT B", test)]
D <- D[, test := gsub(" in Seconds", ", sec", test)]
D <- D[, test := gsub("second", "sec", test)]
D <- D[, test := gsub(" - ", " ", test)]
D <- D[, test := gsub("WAIS-III -Arithmetic", "WAIS-III Arithmetic", test)]
D <- D[, test := gsub("WAIS-III Letter-number sequencing", "WAIS-III Letter-number", test)]
D <- D[, test := gsub("WAIS-III Number/Letter", "WAIS-III Letter-number", test)]
D <- D[, test := gsub("Letter-number sequencing WAIS-III", "WAIS-III Letter-Number", test)]
D <- D[, test := gsub("Symbol search WAIS-III", "WAIS-III Symbol Search", test)]
D <- D[, test := gsub("Spatial span WMS-III", "WMS-III Spatial span", test)]
D <- D[, test := gsub("Verbal fluency COWAT correct", "COWAT Verbal fluency correct", test)]
D <- D[, test := gsub("^Boston Naming Test number correct$", "Boston Naming Test", test)]
D <- D[, test := gsub("^Boston Naming$", "Boston Naming Test", test)]
D <- D[, test := gsub("Peg Board time", "Pegboard, sec", test)]
D <- D[, test := gsub("^Pegboard", "Grooved Pegboard", test)]
D <- D[, test := gsub("dominant hand", "Dom Hand", test)]
D <- D[, test := gsub("nondominant hand", "Nondom Hand", test)]
D <- D[, test := gsub("nonDom", "Nondom", test)]
D <- D[, test := gsub("Grooved Pegboard Test", "Grooved Pegboard", test)]
D <- D[, test := toTitleCase(test)]
D <- D[, test := gsub("4wstm", "4WSTM", test)]
D <- D[, test := gsub("TMT a", "TMT A", test)]
Output to tests.csv for Kathleen to verify.
f <- "tests.csv"
write.csv(unique(D[, .(domain, test)])[order(domain, test)], f, row.names=FALSE)
file.info(f)["mtime"]
## mtime
## tests.csv 2016-06-17 22:11:03
Create slab
variable for study label.
Add additional information for Bender.
D <- D[, slab := sprintf("%s: %s", author, test)]
D <- D[author == "Bender 2006" & age == 40.11,
slab := sprintf("%s (%s)", slab, "CT alone")]
D <- D[author == "Bender 2006" & age == 44.13,
slab := sprintf("%s (%s)", slab, "CT + tamoxifen")]
D <- D[, `:=` (treatmentGroup = NULL)]
Split the data into two versions
DLong
Longitudinal (including all time points)DPrepost
Pre-post (pre-treatment and 12+ month post-treatment)
D[, .N, .(author, monthsPostTx)][order(author, monthsPostTx)]
## author monthsPostTx N
## 1: Ahles 0.0 35
## 2: Ahles 1.0 35
## 3: Ahles 6.0 35
## 4: Ahles 18.0 35
## 5: Bender 2006 0.0 14
## 6: Bender 2006 6.0 14
## 7: Bender 2006 18.0 14
## 8: Bender 2015 0.0 7
## 9: Bender 2015 6.0 7
## 10: Bender 2015 12.0 7
## 11: Bender 2015 18.0 7
## 12: Collins 0.0 21
## 13: Collins 5.0 21
## 14: Collins 18.0 21
## 15: Dumas 0.0 8
## 16: Dumas 12.0 8
## 17: Jenkins 0.0 13
## 18: Jenkins 1.0 13
## 19: Jenkins 12.0 13
## 20: McDonald 0.0 4
## 21: McDonald 12.0 4
## 22: Moore 0.0 2
## 23: Moore 1.0 2
## 24: Moore 12.0 2
## 25: Schagen 0.0 14
## 26: Schagen 12.0 14
## 27: Schagen 138.0 15
## 28: Tager 0.0 14
## 29: Tager 6.0 14
## 30: Tager 12.0 14
## 31: Wefel 2004 0.0 10
## 32: Wefel 2004 6.0 10
## 33: Wefel 2004 18.0 10
## 34: Wefel 2010 0.0 6
## 35: Wefel 2010 13.1 6
## author monthsPostTx N
DLong <- D
DPre <- D[monthsPostTx == 0]
DPre [, .N, .(author, monthsPostTx)][order(author, monthsPostTx)]
## author monthsPostTx N
## 1: Ahles 0 35
## 2: Bender 2006 0 14
## 3: Bender 2015 0 7
## 4: Collins 0 21
## 5: Dumas 0 8
## 6: Jenkins 0 13
## 7: McDonald 0 4
## 8: Moore 0 2
## 9: Schagen 0 14
## 10: Tager 0 14
## 11: Wefel 2004 0 10
## 12: Wefel 2010 0 6
DPost <- D[12 <= monthsPostTx]
DPost[, .N, .(author, monthsPostTx)][order(author, monthsPostTx)]
## author monthsPostTx N
## 1: Ahles 18.0 35
## 2: Bender 2006 18.0 14
## 3: Bender 2015 12.0 7
## 4: Bender 2015 18.0 7
## 5: Collins 18.0 21
## 6: Dumas 12.0 8
## 7: Jenkins 12.0 13
## 8: McDonald 12.0 4
## 9: Moore 12.0 2
## 10: Schagen 12.0 14
## 11: Schagen 138.0 15
## 12: Tager 12.0 14
## 13: Wefel 2004 18.0 10
## 14: Wefel 2010 13.1 6
key <- c("author", "age", "ageCentered", "education", "educationCentered",
"domain", "test", "isHigherWorse", "scoreType", "slab")
setkeyv(DPre , key)
setkeyv(DPost, key)
DPrepost <- merge(DPre, DPost, suffixes=c("Pre", "Post"))
Calculate summaries for monthsPostTxPost
.
monthsPostTxPost <- unique(DPrepost[, .(author, monthsPostTxPost)])
list(n = length(monthsPostTxPost[, monthsPostTxPost]),
summary = summary(monthsPostTxPost[, monthsPostTxPost]),
sd = sd(monthsPostTxPost[, monthsPostTxPost]),
data = monthsPostTxPost[order(author)])
## $n
## [1] 14
##
## $summary
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 12.00 12.00 12.55 23.22 18.00 138.00
##
## $sd
## [1] 33.15966
##
## $data
## author monthsPostTxPost
## 1: Ahles 18.0
## 2: Bender 2006 18.0
## 3: Bender 2015 12.0
## 4: Bender 2015 18.0
## 5: Collins 18.0
## 6: Dumas 12.0
## 7: Jenkins 12.0
## 8: McDonald 12.0
## 9: Moore 12.0
## 10: Schagen 12.0
## 11: Schagen 138.0
## 12: Tager 12.0
## 13: Wefel 2004 18.0
## 14: Wefel 2010 13.1
Add additional information for Schagen. The 2006 paper's author is Schagen. But the 2015 paper's author is actually Stouten-Kemperman (Schagen is the lat author).
DPrepost <- DPrepost[author == "Schagen" & monthsPostTxPost == 12,
slab := sprintf("%s: %s", "Schagen", test)]
DPrepost <- DPrepost[author == "Schagen" & monthsPostTxPost == 138,
slab := sprintf("%s: %s", "Stouten-Kemperman", test)]
Add additional information for Bender 2015.
DPrepost <- DPrepost[author == "Bender 2015",
slab := sprintf("%s: %s (%d months)", author, test, monthsPostTxPost)]
If the cognitive test where high values are worse, then flip the signs so the pre-post difference will have the same direction as tests where high values are better.
DPrepost <- DPrepost[isHigherWorse == TRUE,
`:=` (meanPre = -meanPre,
meanPost = -meanPost)]
message(sprintf("%d rows were flipped", nrow(DPrepost[isHigherWorse == TRUE])))
## 37 rows were flipped
Calculate effect sizes.
calcFixed <- function (D) {
escalc("SMD", data=D,
m1i=meanPost, sd1i=sdPost, n1i=nPost,
m2i=meanPre, sd2i=sdPre, n2i=nPre)
}
l <- list(calcFixed(DPrepost[domain == "Attn/Wkg Mem/Concen"]),
calcFixed(DPrepost[domain == "Verb Mem"]),
calcFixed(DPrepost[domain == "Vis Mem"]),
calcFixed(DPrepost[domain == "Verb Ability/Lang"]),
calcFixed(DPrepost[domain == "Motor Speed"]),
calcFixed(DPrepost[domain == "Info Proc Speed"]),
calcFixed(DPrepost[domain == "Exec Fxn"]),
calcFixed(DPrepost[domain == "Visuospatial"]))
DPrepost <- rbindlist(l)
Order the data.
setorder(DPrepost, domain, author, test)
Remove studies with missing data.
unique(DPrepost[is.na(yi), .(author, domain, test, yi)])
## Empty data.table (0 rows) of 4 cols: author,domain,test,yi
DPrepost <- DPrepost[!is.na(yi)]
Add id
variable.
Will need this for the random effect.
DPrepost <- DPrepost[, id := factor(1:nrow(DPrepost))]
Save working data tables to file.
metadataPrepost <- makeMetadata(DPrepost)
metadataLong <- makeMetadata(DLong)
f <- sprintf("%s/%s", pathOut, "AllStudies.RData")
save(DPrepost, metadataPrepost, DLong, metadataLong, file=f)
message(sprintf("%s saved on: %s\nFile size: %s KB",
f,
file.mtime(f),
file.size(f) / 1e3))
## Output/AllStudies.RData saved on: 2016-06-17 22:11:03
## File size: 59.906 KB
Standardized mean differences (SMD) between pre-treatment and 12+ month post-treatment cognitive impairment measures is modeled with a multilevel mixed effects model. Cognitive domain is modeled as a fixed effect, with one effect size for each of the 8 domains. In our meta-analysis, we have multiple SMDs from each study (one for each cognitive test reported). Instead of modeling the random effect as a single parameter (as we would if we only had one observed SMD per study), we partition the random effect into variance components for observed SMD i and for study. The two variance components allow for the computation of an intraclass correlation. In addition, study-level mean age and years of education are included as covariates.
- Age is centered around a mean of 51.3.
- Education is centered around a mean of 14.5.
Therefore, the main effects from the models with these covariates are the estimates at the covariate means.
Mathematically, the model is represented as
y i = ∑ j = 1 β j x i , domain j + γ age x i , age + γ education x i , education + σ i + σ studyA second model to estimate a global SMD is
y i = β + γ age x i , age + γ education x i , education + σ i + σ studyModels were estimated using the rma.mv()
function from the metafor
package for R.
citation("metafor")
##
## To cite the metafor package in publications, please use:
##
## 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/
##
## A BibTeX entry for LaTeX users is
##
## @Article{,
## title = {Conducting meta-analyses in {R} with the {metafor} package},
## author = {Wolfgang Viechtbauer},
## journal = {Journal of Statistical Software},
## year = {2010},
## volume = {36},
## number = {3},
## pages = {1--48},
## url = {http://www.jstatsoft.org/v36/i03/},
## }
An additional reference is
Konstantopoulos, S. (2011), Fixed effects and variance components estimation in three-level meta-analysis. Res. Synth. Method, 2: 61-76. doi: 10.1002/jrsm.35
Load tidy data.
f <- sprintf("%s/%s", pathOut, "AllStudies.RData")
load(f, verbose=TRUE)
## Loading objects:
## DPrepost
## metadataPrepost
## DLong
## metadataLong
metadataPrepost$timeStamp
## [1] "2016-06-17 22:11:03"
metadataPrepost$colNames
## [1] "author" "age" "ageCentered"
## [4] "education" "educationCentered" "domain"
## [7] "test" "isHigherWorse" "scoreType"
## [10] "slab" "monthsPostTxPre" "nPre"
## [13] "meanPre" "sdPre" "commentPre"
## [16] "groupPre" "monthsPostTxPost" "nPost"
## [19] "meanPost" "sdPost" "commentPost"
## [22] "groupPost" "yi" "vi"
## [25] "id"
D <- DPrepost
M0
models domain SMDs without confoundersM1
models domain SMDs with domain effect modifiersM2
models the global SMD with confounders
randomEffect <- list(~ 1 | id, ~ 1 | author)
M0 <- rma.mv(yi ~ domain - 1,
vi, data=D, random=randomEffect, slab=slab)
M1 <- rma.mv(yi ~ domain - 1 +
ageCentered + educationCentered +
ageCentered * domain +
educationCentered * domain,
vi, data=D, random=randomEffect, slab=slab)
M2 <- rma.mv(yi ~ ageCentered + educationCentered,
vi, data=D, random=randomEffect)
betasM0 <- data.frame(M0[c("b", "se", "zval", "pval", "ci.lb", "ci.ub")])
betasM1 <- data.frame(M1[c("b", "se", "zval", "pval", "ci.lb", "ci.ub")])
betasM2 <- data.frame(M2[c("b", "se", "zval", "pval", "ci.lb", "ci.ub")])
j <- grepl("domain", rownames(M1$b)) & !grepl(":", rownames(M1$b))
summary <- rbind(data.frame(studies = D[, .(studies = uniqueN(author)), domain][, studies],
tests = D[, .N, domain][, N],
betasM1[j, ]),
data.frame(studies = D[, .(studies = uniqueN(author))][, studies],
tests = D[, .N],
betasM2[1, ]))
rownames(summary) <- gsub("domain", "", rownames(summary))
rownames(summary) <- gsub("intrcpt", "**GLOBAL**", rownames(summary))
studies | tests | b | se | zval | pval | ci.lb | ci.ub | |
---|---|---|---|---|---|---|---|---|
Motor Speed | 5 | 12 | -0.069 | 0.234 | -0.294 | 0.7685 | -0.528 | 0.390 |
Exec Fxn | 8 | 20 | 0.116 | 0.125 | 0.927 | 0.3537 | -0.129 | 0.360 |
Visuospatial | 4 | 4 | 0.183 | 0.309 | 0.592 | 0.5537 | -0.422 | 0.788 |
Info Proc Speed | 8 | 14 | 0.107 | 0.143 | 0.750 | 0.4530 | -0.173 | 0.387 |
Attn/Wkg Mem/Concen | 11 | 59 | -0.074 | 0.092 | -0.797 | 0.4254 | -0.254 | 0.107 |
Vis Mem | 6 | 19 | 0.525 | 0.130 | 4.028 | 0.0001 | 0.269 | 0.780 |
Verb Mem | 7 | 23 | 0.422 | 0.124 | 3.415 | 0.0006 | 0.180 | 0.664 |
Verb Ability/Lang | 6 | 11 | 0.221 | 0.177 | 1.249 | 0.2118 | -0.126 | 0.567 |
**GLOBAL** | 12 | 162 | 0.135 | 0.062 | 2.191 | 0.0284 | 0.014 | 0.255 |
The intraclass correlation within study from M1
is 0.201.
summary(M0)
##
## Multivariate Meta-Analysis Model (k = 162; method: REML)
##
## logLik Deviance AIC BIC AICc
## -146.4545 292.9090 312.9090 343.2785 314.4475
##
## Variance Components:
##
## estim sqrt nlvls fixed factor
## sigma^2.1 0.1369 0.3700 162 no id
## sigma^2.2 0.0178 0.1333 12 no author
##
## Test for Residual Heterogeneity:
## QE(df = 154) = 579.9426, p-val < .0001
##
## Test of Moderators (coefficient(s) 1,2,3,4,5,6,7,8):
## QM(df = 8) = 32.2282, p-val < .0001
##
## Model Results:
##
## estimate se zval pval ci.lb
## domainMotor Speed -0.0960 0.1398 -0.6867 0.4923 -0.3700
## domainExec Fxn 0.0770 0.1082 0.7117 0.4767 -0.1351
## domainVisuospatial 0.2523 0.2308 1.0930 0.2744 -0.2001
## domainInfo Proc Speed 0.0683 0.1291 0.5293 0.5966 -0.1847
## domainAttn/Wkg Mem/Concen -0.0317 0.0737 -0.4300 0.6672 -0.1762
## domainVis Mem 0.4551 0.1137 4.0018 <.0001 0.2322
## domainVerb Mem 0.3842 0.1066 3.6039 0.0003 0.1753
## domainVerb Ability/Lang 0.2254 0.1413 1.5952 0.1107 -0.0515
## ci.ub
## domainMotor Speed 0.1780
## domainExec Fxn 0.2892
## domainVisuospatial 0.7046
## domainInfo Proc Speed 0.3214
## domainAttn/Wkg Mem/Concen 0.1128
## domainVis Mem 0.6779 ***
## domainVerb Mem 0.5931 ***
## domainVerb Ability/Lang 0.5022
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(M1)
##
## Multivariate Meta-Analysis Model (k = 162; method: REML)
##
## logLik Deviance AIC BIC AICc
## -135.3009 270.6018 322.6018 398.7104 335.2505
##
## Variance Components:
##
## estim sqrt nlvls fixed factor
## sigma^2.1 0.1531 0.3913 162 no id
## sigma^2.2 0.0385 0.1962 12 no author
##
## Test for Residual Heterogeneity:
## QE(df = 138) = 531.1145, p-val < .0001
##
## Test of Moderators (coefficient(s) 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24):
## QM(df = 24) = 44.8038, p-val = 0.0061
##
## Model Results:
##
## estimate se zval
## domainMotor Speed -0.0689 0.2340 -0.2944
## domainExec Fxn 0.1156 0.1246 0.9274
## domainVisuospatial 0.1828 0.3087 0.5922
## domainInfo Proc Speed 0.1073 0.1429 0.7504
## domainAttn/Wkg Mem/Concen -0.0736 0.0923 -0.7971
## domainVis Mem 0.5247 0.1303 4.0276
## domainVerb Mem 0.4218 0.1235 3.4155
## domainVerb Ability/Lang 0.2206 0.1767 1.2487
## ageCentered 0.0076 0.0415 0.1840
## educationCentered -0.0201 0.2595 -0.0775
## domainExec Fxn:ageCentered -0.0126 0.0449 -0.2807
## domainVisuospatial:ageCentered -0.0292 0.0664 -0.4395
## domainInfo Proc Speed:ageCentered -0.0166 0.0490 -0.3385
## domainAttn/Wkg Mem/Concen:ageCentered 0.0052 0.0418 0.1246
## domainVis Mem:ageCentered -0.0375 0.0436 -0.8600
## domainVerb Mem:ageCentered -0.0482 0.0440 -1.0954
## domainVerb Ability/Lang:ageCentered -0.0326 0.0508 -0.6422
## domainExec Fxn:educationCentered -0.0258 0.2704 -0.0953
## domainVisuospatial:educationCentered 0.1819 0.3904 0.4660
## domainInfo Proc Speed:educationCentered -0.1265 0.2746 -0.4606
## domainAttn/Wkg Mem/Concen:educationCentered 0.0245 0.2587 0.0945
## domainVis Mem:educationCentered 0.1858 0.2783 0.6675
## domainVerb Mem:educationCentered 0.2110 0.2647 0.7972
## domainVerb Ability/Lang:educationCentered 0.1098 0.2947 0.3727
## pval ci.lb ci.ub
## domainMotor Speed 0.7685 -0.5276 0.3898
## domainExec Fxn 0.3537 -0.1287 0.3599
## domainVisuospatial 0.5537 -0.4222 0.7879
## domainInfo Proc Speed 0.4530 -0.1729 0.3874
## domainAttn/Wkg Mem/Concen 0.4254 -0.2544 0.1073
## domainVis Mem <.0001 0.2694 0.7800 ***
## domainVerb Mem 0.0006 0.1798 0.6639 ***
## domainVerb Ability/Lang 0.2118 -0.1257 0.5669
## ageCentered 0.8540 -0.0738 0.0890
## educationCentered 0.9382 -0.5286 0.4884
## domainExec Fxn:ageCentered 0.7789 -0.1005 0.0753
## domainVisuospatial:ageCentered 0.6603 -0.1594 0.1010
## domainInfo Proc Speed:ageCentered 0.7350 -0.1126 0.0794
## domainAttn/Wkg Mem/Concen:ageCentered 0.9008 -0.0768 0.0872
## domainVis Mem:ageCentered 0.3898 -0.1229 0.0480
## domainVerb Mem:ageCentered 0.2733 -0.1346 0.0381
## domainVerb Ability/Lang:ageCentered 0.5208 -0.1321 0.0669
## domainExec Fxn:educationCentered 0.9241 -0.5557 0.5041
## domainVisuospatial:educationCentered 0.6412 -0.5832 0.9471
## domainInfo Proc Speed:educationCentered 0.6451 -0.6646 0.4117
## domainAttn/Wkg Mem/Concen:educationCentered 0.9247 -0.4825 0.5314
## domainVis Mem:educationCentered 0.5044 -0.3597 0.7313
## domainVerb Mem:educationCentered 0.4253 -0.3078 0.7298
## domainVerb Ability/Lang:educationCentered 0.7094 -0.4678 0.6874
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(M2)
##
## Multivariate Meta-Analysis Model (k = 162; method: REML)
##
## logLik Deviance AIC BIC AICc
## -158.9321 317.8641 327.8641 343.2086 328.2563
##
## Variance Components:
##
## estim sqrt nlvls fixed factor
## sigma^2.1 0.1708 0.4132 162 no id
## sigma^2.2 0.0202 0.1422 12 no author
##
## Test for Residual Heterogeneity:
## QE(df = 159) = 649.8230, p-val < .0001
##
## Test of Moderators (coefficient(s) 2,3):
## QM(df = 2) = 1.2251, p-val = 0.5420
##
## Model Results:
##
## estimate se zval pval ci.lb ci.ub
## intrcpt 0.1348 0.0615 2.1911 0.0284 0.0142 0.2553 *
## ageCentered -0.0127 0.0115 -1.1038 0.2697 -0.0351 0.0098
## educationCentered 0.0302 0.0548 0.5500 0.5823 -0.0773 0.1376
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Save working data tables to file.
metadata <- makeMetadata(D)
f <- sprintf("%s/%s", pathOut, "metaAnalysisCognitiveImpairment.RData")
save(D, metadata, M0, M1, M2, summary, file=f)
message(sprintf("%s saved on: %s\nFile size: %s KB",
f,
file.mtime(f),
file.size(f) / 1e3))
## Output/metaAnalysisCognitiveImpairment.RData saved on: 2016-06-17 22:11:05
## File size: 104.979 KB
f <- sprintf("%s/%s", pathOut, "metaAnalysisCognitiveImpairment-Data.csv")
write.csv(D, file=f, row.names=FALSE)
f <- sprintf("%s/%s", pathOut, "metaAnalysisCognitiveImpairment-summary.csv")
write.csv(summary, file=f, row.names=FALSE)
## png
## 2
Full resolution file is here.
Check the profile likelihoods of the variance and correlation components.
## Profiling sigma2 = 1
##
|
| | 0%
|
|=== | 5%
|
|====== | 10%
|
|========== | 15%
|
|============= | 20%
|
|================ | 25%
|
|==================== | 30%
|
|======================= | 35%
|
|========================== | 40%
|
|============================= | 45%
|
|================================ | 50%
|
|==================================== | 55%
|
|======================================= | 60%
|
|========================================== | 65%
|
|============================================== | 70%
|
|================================================= | 75%
|
|==================================================== | 80%
|
|======================================================= | 85%
|
|========================================================== | 90%
|
|============================================================== | 95%
|
|=================================================================| 100%
## Profiling sigma2 = 2
##
|
| | 0%
|
|=== | 5%
|
|====== | 10%
|
|========== | 15%
|
|============= | 20%
|
|================ | 25%
|
|==================== | 30%
|
|======================= | 35%
|
|========================== | 40%
|
|============================= | 45%
|
|================================ | 50%
|
|==================================== | 55%
|
|======================================= | 60%
|
|========================================== | 65%
|
|============================================== | 70%
|
|================================================= | 75%
|
|==================================================== | 80%
|
|======================================================= | 85%
|
|========================================================== | 90%
|
|============================================================== | 95%
|
|=================================================================| 100%
Funnel plot to check for publication bias. See BMJ 2011;342:d4002 for a guide to interpret funnel plots.
## png
## 2
Publication bias does not appear to be a great concern.
## Sourcing https://gist.githubusercontent.com/benjamin-chan/80149dd4cdb16b2760ec/raw/a1fafde5c5086024dd01d410cc2f72fb82e93f26/sessionInfo.R
## SHA-1 hash of file is 41209357693515acefb05d4b209340e744a1cbe4
## $timeStart
## [1] "2016-06-17 22:10:58"
##
## $timeEnd
## [1] "2016-06-17 22:11:22 PDT"
##
## $timeElapsed
## [1] "23.68345 secs"
##
## $Sys.info
## sysname release version nodename machine
## "Windows" "7 x64" "build 9200" "FAMILYPC" "x86-64"
## login user effective_user
## "Ben" "Ben" "Ben"
##
## $sessionInfo
## R version 3.2.2 (2015-08-14)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 8 x64 (build 9200)
##
## locale:
## [1] LC_COLLATE=English_United States.1252
## [2] LC_CTYPE=English_United States.1252
## [3] LC_MONETARY=English_United States.1252
## [4] LC_NUMERIC=C
## [5] LC_TIME=English_United States.1252
##
## attached base packages:
## [1] tools stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] extrafont_0.17 DiagrammeR_0.8 metafor_1.9-9
## [4] Matrix_1.2-2 xtable_1.7-4 haven_0.2.0
## [7] googlesheets_0.1.0 openxlsx_3.0.0 data.table_1.9.6
## [10] devtools_1.7.0
##
## loaded via a namespace (and not attached):
## [1] Rcpp_0.11.6 cellranger_1.0.0 formatR_1.2
## [4] digest_0.6.8 jsonlite_0.9.16 memoise_0.2.1
## [7] evaluate_0.8 lattice_0.20-33 DBI_0.3.1
## [10] rstudioapi_0.3.1 curl_0.9.1 yaml_2.1.13
## [13] parallel_3.2.2 Rttf2pt1_1.3.3 dplyr_0.4.3
## [16] httr_1.1.0 stringr_1.0.0 knitr_1.11
## [19] htmlwidgets_0.3.2 grid_3.2.2 R6_2.0.1
## [22] rmarkdown_0.8 RJSONIO_1.3-0 extrafontdb_1.0
## [25] magrittr_1.5 htmltools_0.2.6 assertthat_0.1
## [28] stringi_0.4-1 chron_2.3-47