This shows you the differences between two versions of the page.
neuroimagen:adni_cusp [2015/12/21 16:22] osotolongo [Notas para Composite Scores] |
neuroimagen:adni_cusp [2020/08/04 10:58] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Using ADNI data for Cusp model fitting ====== | ||
- | |||
- | ===== Simple way ===== | ||
- | |||
- | Auditory Verbal Learning Test fitted with Whole gray matter and covariables. | ||
- | |||
- | # Estevez-Gonzalez, | ||
- | # Rey verbal learning test is a useful tool for differential diagnosis in the preclinical phase | ||
- | # of Alzheimer' | ||
- | # International Journal of Geriatric Psychiatry. 18 (11), 1021. | ||
- | |||
- | < | ||
- | library(" | ||
- | library(cusp) | ||
- | library(psych) #for composite scores | ||
- | # Let's get the data | ||
- | tmp_np <- merge(adas, neurobat, by=c(" | ||
- | mt2fa <- merge(tmp_np, | ||
- | rm(tmp_np) | ||
- | # Calculate the subject age at every point | ||
- | mt2fa$vAGE = mt2fa$AGE + mt2fa$Years | ||
- | data <- data.frame(mt2fa$WholeBrain, | ||
- | datac <- data[complete.cases(data), | ||
- | datac$WB = datac$mt2fa.WholeBrain/ | ||
- | fit_avd <- cusp(y ~ mt2fa.AVDEL30MIN, | ||
- | summary(fit_avd) | ||
- | </ | ||
- | |||
- | ++++ Amazing results| | ||
- | |||
- | < | ||
- | Call: | ||
- | cusp(formula = y ~ mt2fa.AVDEL30MIN, | ||
- | mt2fa.PTGENDER + mt2fa.PTEDUCAT, | ||
- | mt2fa.PTGENDER + mt2fa.PTEDUCAT, | ||
- | |||
- | Deviance Residuals: | ||
- | | ||
- | -2.06955 | ||
- | |||
- | Coefficients: | ||
- | | ||
- | a[(Intercept)] | ||
- | a[WB] 5.365145 | ||
- | a[mt2fa.vAGE] | ||
- | a[mt2fa.PTGENDERFemale] | ||
- | a[mt2fa.PTEDUCAT] | ||
- | b[(Intercept)] | ||
- | b[WB] | ||
- | b[mt2fa.vAGE] | ||
- | b[mt2fa.PTGENDERFemale] | ||
- | b[mt2fa.PTEDUCAT] | ||
- | w[(Intercept)] | ||
- | w[mt2fa.AVDEL30MIN] | ||
- | --- | ||
- | Signif. codes: | ||
- | |||
- | |||
- | Null deviance: | ||
- | Linear deviance: 110910.4 | ||
- | Logist deviance: | ||
- | Delay deviance: | ||
- | |||
- | | ||
- | Linear model 0.1557933 -19036.661 | ||
- | Cusp model | ||
- | --- | ||
- | Note: R.Squared for cusp model is Cobb's pseudo-R^2. This value | ||
- | can become negative. | ||
- | |||
- | Chi-square test of linear vs. cusp model | ||
- | |||
- | X-squared = 2.343e+04, df = 6, p-value = 0 | ||
- | |||
- | Number of optimization iterations: 40 | ||
- | </ | ||
- | ++++ | ||
- | |||
- | ===== Z-scores ===== | ||
- | |||
- | Now let's compare the weights of each variable on the model. We need to translate everything to z-scores (or just do another linear transformation that carry every thing to comparable values) | ||
- | |||
- | < | ||
- | datac$zWB = (datac$WB - mean(datac$WB))/ | ||
- | datac$zAge = (datac$mt2fa.vAGE - mean(datac$mt2fa.vAGE))/ | ||
- | datac$zEduc = (datac$mt2fa.PTEDUCAT - mean(datac$mt2fa.PTEDUCAT))/ | ||
- | datac$zAVD = (datac$mt2fa.AVDEL30MIN - mean(datac$mt2fa.AVDEL30MIN))/ | ||
- | fit_avd_z <- cusp(y ~ zAVD, alpha ~ zWB + zAge + mt2fa.PTGENDER + zEduc, beta ~ zWB +zAge + mt2fa.PTGENDER + zEduc, datac) | ||
- | summary(fit_avd_z) | ||
- | </ | ||
- | |||
- | ++++ The results are of course the same but the coefficients must be meaningful now,| | ||
- | < | ||
- | Coefficients: | ||
- | | ||
- | a[(Intercept)] | ||
- | a[zWB] | ||
- | a[zAge] | ||
- | a[mt2fa.PTGENDERFemale] | ||
- | a[zEduc] | ||
- | b[(Intercept)] | ||
- | b[zWB] | ||
- | b[zAge] | ||
- | b[mt2fa.PTGENDERFemale] | ||
- | b[zEduc] | ||
- | w[(Intercept)] | ||
- | w[zAVD] | ||
- | --- | ||
- | Signif. codes: | ||
- | </ | ||
- | ++++ | ||
- | |||
- | ===== Composite scores ===== | ||
- | |||
- | First I'm going to try another NP test (Recognition) | ||
- | |||
- | < | ||
- | fit_avr <- cusp(y ~ zAVR, alpha ~ zWB + zAge + mt2fa.PTGENDER + zEduc, beta ~ zWB +zAge + mt2fa.PTGENDER + zEduc, datac) | ||
- | </ | ||
- | |||
- | ++++ and this is not so good but still an improvement is done | | ||
- | |||
- | < | ||
- | > summary(fit_avr) | ||
- | Call: | ||
- | cusp(formula = y ~ zAVR, alpha = alpha ~ zWB + zAge + mt2fa.PTGENDER + | ||
- | zEduc, beta = beta ~ zWB + zAge + mt2fa.PTGENDER + zEduc, | ||
- | data = datac) | ||
- | |||
- | Deviance Residuals: | ||
- | Min | ||
- | -3.3337 | ||
- | |||
- | Coefficients: | ||
- | Estimate Std. Error z value Pr(> | ||
- | a[(Intercept)] | ||
- | a[zWB] | ||
- | a[zAge] | ||
- | a[mt2fa.PTGENDERFemale] -0.09332 | ||
- | a[zEduc] | ||
- | b[(Intercept)] | ||
- | b[zWB] | ||
- | b[zAge] | ||
- | b[mt2fa.PTGENDERFemale] | ||
- | b[zEduc] | ||
- | w[(Intercept)] | ||
- | w[zAVR] | ||
- | --- | ||
- | Signif. codes: | ||
- | |||
- | |||
- | Null deviance: 6633.7 | ||
- | Linear deviance: 5952.1 | ||
- | Logist deviance: | ||
- | Delay deviance: 5049.6 | ||
- | |||
- | | ||
- | Linear model 0.1187225 -9157.572 | ||
- | Cusp model | ||
- | --- | ||
- | Note: R.Squared for cusp model is Cobb's pseudo-R^2. This value | ||
- | can become negative. | ||
- | |||
- | Chi-square test of linear vs. cusp model | ||
- | |||
- | X-squared = 2382, df = 6, p-value = 0 | ||
- | |||
- | Number of optimization iterations: 38 | ||
- | </ | ||
- | ++++ | ||
- | |||
- | Now, let's try a composite score | ||
- | |||
- | < | ||
- | gfam <- data.frame(datac$zAVD, | ||
- | famod <- fa(gfam, scores=" | ||
- | datac$cs <- famod$scores | ||
- | fit_cs <- cusp(y ~ cs, alpha ~ zWB + zAge + mt2fa.PTGENDER + zEduc, beta ~ zWB +zAge + mt2fa.PTGENDER + zEduc, datac) | ||
- | </ | ||
- | |||
- | ++++ And we get a very bad fit result | | ||
- | < | ||
- | > summary(fit_cs) | ||
- | |||
- | Call: | ||
- | cusp(formula = y ~ cs, alpha = alpha ~ zWB + zAge + mt2fa.PTGENDER + | ||
- | zEduc, beta = beta ~ zWB + zAge + mt2fa.PTGENDER + zEduc, | ||
- | data = datac) | ||
- | |||
- | Deviance Residuals: | ||
- | Min | ||
- | -2.9864 | ||
- | |||
- | Coefficients: | ||
- | | ||
- | a[(Intercept)] | ||
- | a[zWB] | ||
- | a[zAge] | ||
- | a[mt2fa.PTGENDERFemale] | ||
- | a[zEduc] | ||
- | b[(Intercept)] | ||
- | b[zWB] | ||
- | b[zAge] | ||
- | b[mt2fa.PTGENDERFemale] | ||
- | b[zEduc] | ||
- | w[(Intercept)] | ||
- | w[cs] 1.012113 | ||
- | --- | ||
- | Signif. codes: | ||
- | |||
- | |||
- | Null deviance: 5487.3 | ||
- | Linear deviance: 4490.5 | ||
- | Logist deviance: | ||
- | Delay deviance: 5324.3 | ||
- | |||
- | R.Squared | ||
- | Linear model 0.16171127 -8205.808 | ||
- | Cusp model | ||
- | --- | ||
- | Note: R.Squared for cusp model is Cobb's pseudo-R^2. This value | ||
- | can become negative. | ||
- | |||
- | Chi-square test of linear vs. cusp model | ||
- | |||
- | X-squared = 723, df = 6, p-value = 0 | ||
- | |||
- | Number of optimization iterations: 106 | ||
- | </ | ||
- | ++++ | ||
- | //That is, the composite score is not related through a cusp model to the independent variable analyzed here // | ||
- | |||
- | ===== A try for ADAS-Cog ===== | ||
- | < | ||
- | data <- data.frame(mt2fa$WholeBrain, | ||
- | datac <- data[complete.cases(data), | ||
- | datac$WB = datac$mt2fa.WholeBrain/ | ||
- | datac$zWB = (datac$WB - mean(datac$WB))/ | ||
- | datac$zAge = (datac$mt2fa.vAGE - mean(datac$mt2fa.vAGE))/ | ||
- | datac$zEduc = (datac$mt2fa.PTEDUCAT - mean(datac$mt2fa.PTEDUCAT))/ | ||
- | datac$dr = (mean(datac$mt2fa.Q4SCORE) - datac$mt2fa.Q4SCORE)/ | ||
- | datac$r = (mean(datac$mt2fa.Q8SCORE) - datac$mt2fa.Q8SCORE)/ | ||
- | fit_dr <- cusp(y ~ dr, alpha ~ zWB + zAge + mt2fa.PTGENDER + zEduc, beta ~ zWB +zAge + mt2fa.PTGENDER + zEduc, datac) | ||
- | fit_r <- cusp(y ~ r, alpha ~ zWB + zAge + mt2fa.PTGENDER + zEduc, beta ~ zWB +zAge + mt2fa.PTGENDER + zEduc, datac) | ||
- | </ | ||
- | |||
- | ++++ not bad at all for Delay Recall | | ||
- | < | ||
- | > summary(fit_dr) | ||
- | |||
- | Call: | ||
- | cusp(formula = y ~ dr, alpha = alpha ~ zWB + zAge + mt2fa.PTGENDER + | ||
- | zEduc, beta = beta ~ zWB + zAge + mt2fa.PTGENDER + zEduc, | ||
- | data = datac) | ||
- | |||
- | Deviance Residuals: | ||
- | Min | ||
- | -3.1117 | ||
- | |||
- | Coefficients: | ||
- | | ||
- | a[(Intercept)] | ||
- | a[zWB] | ||
- | a[zAge] | ||
- | a[mt2fa.PTGENDERFemale] | ||
- | a[zEduc] | ||
- | b[(Intercept)] | ||
- | b[zWB] | ||
- | b[zAge] | ||
- | b[mt2fa.PTGENDERFemale] | ||
- | b[zEduc] | ||
- | w[(Intercept)] | ||
- | w[dr] 1.118457 | ||
- | --- | ||
- | Signif. codes: | ||
- | |||
- | |||
- | Null deviance: 8511.4 | ||
- | Linear deviance: 5443.0 | ||
- | Logist deviance: | ||
- | Delay deviance: 4560.9 | ||
- | |||
- | | ||
- | Linear model 0.2000289 -8896.008 | ||
- | Cusp model | ||
- | --- | ||
- | Note: R.Squared for cusp model is Cobb's pseudo-R^2. This value | ||
- | can become negative. | ||
- | |||
- | Chi-square test of linear vs. cusp model | ||
- | |||
- | X-squared = 1965, df = 6, p-value = 0 | ||
- | |||
- | Number of optimization iterations: 38 | ||
- | </ | ||
- | ++++ | ||
- | |||
- | ++++ but worst for Recognition | | ||
- | < | ||
- | > summary(r) | ||
- | |||
- | Call: | ||
- | cusp(formula = y ~ r, alpha = alpha ~ zWB + zAge + mt2fa.PTGENDER + | ||
- | zEduc, beta = beta ~ zWB + zAge + mt2fa.PTGENDER + zEduc, | ||
- | data = datac) | ||
- | |||
- | Deviance Residuals: | ||
- | Min | ||
- | -3.1343 | ||
- | |||
- | Coefficients: | ||
- | | ||
- | a[(Intercept)] | ||
- | a[zWB] | ||
- | a[zAge] | ||
- | a[mt2fa.PTGENDERFemale] -0.138675 | ||
- | a[zEduc] | ||
- | b[(Intercept)] | ||
- | b[zWB] | ||
- | b[zAge] | ||
- | b[mt2fa.PTGENDERFemale] | ||
- | b[zEduc] | ||
- | w[(Intercept)] | ||
- | w[r] | ||
- | --- | ||
- | Signif. codes: | ||
- | |||
- | |||
- | Null deviance: 6279.2 | ||
- | Linear deviance: 5963.7 | ||
- | Logist deviance: | ||
- | Delay deviance: 5578.1 | ||
- | |||
- | | ||
- | Linear model 0.1235032 -9206.852 | ||
- | Cusp model | ||
- | --- | ||
- | Note: R.Squared for cusp model is Cobb's pseudo-R^2. This value | ||
- | can become negative. | ||
- | |||
- | Chi-square test of linear vs. cusp model | ||
- | |||
- | X-squared = 1913, df = 6, p-value = 0 | ||
- | |||
- | Number of optimization iterations: 44 | ||
- | </ | ||
- | ++++ | ||
- | |||
- | ===== Notas para Composite Scores ===== | ||
- | |||
- | Lo ideal seria hacer script con todos los composites posibles y mirarlo contra los biomarcadores disponibles en // | ||
- | |||
- | ++++ Hay varios biomarcadores en la tabla // | ||
- | |||
- | <code R> | ||
- | > names(adnimerge) | ||
- | [1] " | ||
- | [5] " | ||
- | [9] " | ||
- | [13] " | ||
- | [17] " | ||
- | [21] " | ||
- | [25] " | ||
- | [29] " | ||
- | [33] " | ||
- | [37] " | ||
- | [41] " | ||
- | [45] " | ||
- | [49] " | ||
- | [53] " | ||
- | [57] " | ||
- | [61] " | ||
- | [65] " | ||
- | [69] " | ||
- | [73] " | ||
- | [77] " | ||
- | [81] " | ||
- | [85] " | ||
- | [89] " | ||
- | [93] " | ||
- | </ | ||
- | ++++ | ||
- | El problema es que cada uno debe ser analizado de manera distinta. Las variables // | ||
- | |||
- | < | ||
- | library(" | ||
- | library(cusp) | ||
- | library(psych) #for composite scores | ||
- | # Let's get the data | ||
- | tmp_np <- merge(adas, neurobat, by=c(" | ||
- | m <- merge(tmp_np, | ||
- | rm(tmp_np) | ||
- | # Select data | ||
- | m$cAGE = m$AGE + m$Years | ||
- | data <- data.frame(m$WholeBrain, | ||
- | datac <- data[complete.cases(data), | ||
- | #Z-scores and Composite Scores | ||
- | datac$zavd = (datac$m.AVDEL30MIN - mean(datac$m.AVDEL30MIN))/ | ||
- | datac$zdr = (mean(datac$m.Q4SCORE) - datac$m.Q4SCORE)/ | ||
- | datac$zAge = (datac$m.cAGE - mean(datac$m.cAGE))/ | ||
- | datac$zEduc = (datac$m.PTEDUCAT - mean(datac$m.PTEDUCAT))/ | ||
- | gfam <- data.frame(datac$zavd, | ||
- | famod <- fa(gfam, scores=" | ||
- | datac$drcs <- famod$scores | ||
- | # NI biomarker | ||
- | datac$wb = datac$m.WholeBrain/ | ||
- | datac$zwb = (datac$wb - mean(datac$wb))/ | ||
- | #fit to Cusp model | ||
- | fit <- cusp(y ~ drcs, alpha ~ zwb + zAge + m.PTGENDER + zEduc, beta ~ zwb +zAge + m.PTGENDER + zEduc, datac) | ||
- | summary(fit) | ||
- | </ | ||
- | |||
- | ++++ El resultado no es demasiado bueno | | ||
- | |||
- | < | ||
- | > summary(fit) | ||
- | |||
- | Call: | ||
- | cusp(formula = y ~ drcs, alpha = alpha ~ zwb + zAge + m.PTGENDER + | ||
- | zEduc, beta = beta ~ zwb + zAge + m.PTGENDER + zEduc, data = datac) | ||
- | |||
- | Deviance Residuals: | ||
- | | ||
- | -3.03128 | ||
- | |||
- | Coefficients: | ||
- | | ||
- | a[(Intercept)] | ||
- | a[zwb] | ||
- | a[zAge] | ||
- | a[m.PTGENDERFemale] | ||
- | a[zEduc] | ||
- | b[(Intercept)] | ||
- | b[zwb] | ||
- | b[zAge] | ||
- | b[m.PTGENDERFemale] | ||
- | b[zEduc] | ||
- | w[(Intercept)] | ||
- | w[drcs] | ||
- | --- | ||
- | Signif. codes: | ||
- | |||
- | |||
- | Null deviance: 7603.1 | ||
- | Linear deviance: 4650.8 | ||
- | Logist deviance: | ||
- | Delay deviance: 5097.1 | ||
- | |||
- | | ||
- | Linear model 0.1983602 -8324.282 | ||
- | Cusp model | ||
- | --- | ||
- | Note: R.Squared for cusp model is Cobb's pseudo-R^2. This value | ||
- | can become negative. | ||
- | |||
- | Chi-square test of linear vs. cusp model | ||
- | |||
- | X-squared = 893.6, df = 6, p-value = 0 | ||
- | |||
- | Number of optimization iterations: 52 | ||
- | </ | ||
- | ++++ |