Psychophysiology data are miserably complicated, but what's worse is that they are complicated by design.
Data are presently organized so that they are wide -- that is, all the repeated data for a participant are in one record. For longitudinal analyses, we need to reorganize these data so that columns represent the measure (e.g., blood pressure) and each record represents a measure on a single condition (e.g., baseline, orthostasis, etc). This means that participant IDs repeated over as many rows as there are conditions. This data format is called narrow if only to distinguish it from wide.
In the following, TestData is a data frame with the wide data. csvCounterBal is a text file with the counterbalancing information.
# *** Counterbalancing order * times...
csvCounterBal = read.csv("/prj/hnd/Wave01/zPrj/PsyPhys/dat/CounterbalanceTiming.csv", as.is = T)
csvCounterBal = csvCounterBal[!(csvCounterBal$Counterbalance == "" & csvCounterBal$t0 == ""), ]
head(csvCounterBal)
Counterbalance t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 TotalTime
1 OHA Baseline OrthoStand OrthoRecover HappyInstruct HappyThink HappySpeak MoodScale HappyRecovery AngryInstruct AngryThink AngrySpeak MoodScale AngryRecovery NA
2 5 5 8 2 2 3 1 8 2 2 3 1 8 50
4 OAH Baseline OrthoStand OrthoRecover AngryInstruct AngryThink AngrySpeak MoodScale AngryRecovery HappyInstruct HappyThink HappySpeak MoodScale HappyRecovery NA
5 5 5 8 2 2 3 1 8 2 2 3 1 8 50
7 HAO Baseline HappyInstruct HappyThink HappySpeak MoodScale HappyRecovery AngryInstruct AngryThink AngrySpeak MoodScale AngryRecovery OrthoStand OrthoRecover NA
8 5 2 2 3 1 8 2 2 3 1 8 5 8 50
cBalTime = list()
cBalTime[["OHA"]] = csvCounterBal[1:2, 2:14]
cBalTime[["OAH"]] = csvCounterBal[3:4, 2:14]
cBalTime[["HAO"]] = csvCounterBal[5:6, 2:14]
cBalTime[["HOA"]] = csvCounterBal[7:8, 2:14]
cBalTime[["AHO"]] = csvCounterBal[9:10, 2:14]
cBalTime[["AOH"]] = csvCounterBal[11:12, 2:14]
xBalTime = list()
for (k in seq_along(cBalTime)) {
xBalTime[[k]] = data.frame(n = 1:length(cBalTime[[k]][1, ]), meas = t(cBalTime[[k]][1, ]), dur = as.integer(cBalTime[[k]][2, ]), cum = cumsum(as.integer(cBalTime[[k]][2, ])), stringsAsFactors = F)
names(xBalTime)[k] = names(cBalTime)[k]
colnames(xBalTime[[k]]) = zQ(n, meas, dur, cum)
}
# *** Restructure data for repeated measures analysis...
(load("/prj/hnd/Wave01/zPrj/PsyPhys/dat/TestData.rdata"))
[1] "TestData"
head(TestData)
HNDid countercode Counterbalance_num aho aoh hoa hao oha oah HNDstand W01CenTract HNDmarch dob Age0 Age0grp Sex Race PovStat HseHldEducation FamilyIncome HouseholdIncome HseHldIncomeCat
1 8031079801 AHO 1 1 0 0 0 0 0 803 240100 0 1940-08-28 63 7 0 0 0 11 7 97 97
2 8031107801 HAO 4 0 0 0 1 0 0 803 240100 0 1941-08-02 63 7 1 0 0 11 0 23 23
3 8031107802 OAH 6 0 0 0 0 0 1 803 240100 0 1951-09-06 53 5 0 0 0 12 0 23 23
4 8031117901 OHA 5 0 0 0 0 1 0 803 240100 0 1964-03-09 40 3 1 0 0 20 0 23 23
5 8031117902 AHO 1 1 0 0 0 0 0 803 240100 0 1967-01-23 37 2 0 0 0 18 0 22 22
6 8031136901 HAO 4 0 0 0 1 0 0 803 240100 0 1948-06-07 56 6 1 0 0 9 0 19 19
SEScommunity SEScountry YrsinHouse Gini MarginofError Gini100 MedianHHincomeCT MedianFamilyincomeCT TotalPop WhitePop BlackPop BlackWhite PercentBlack RateNeighborhood CrimePrev SeriousCrime
1 4 6 9 0.375 0.041 37.5 86042 88702 2474 2295 80 0.03486 3.234 4 2 2
2 5 5 2 0.375 0.041 37.5 86042 88702 2474 2295 80 0.03486 3.234 1 1 2
3 8 5 1 0.375 0.041 37.5 86042 88702 2474 2295 80 0.03486 3.234 1 2 1
4 7 5 1 0.375 0.041 37.5 86042 88702 2474 2295 80 0.03486 3.234 4 2 1
5 7 7 1 0.375 0.041 37.5 86042 88702 2474 2295 80 0.03486 3.234 4 2 2
6 6 5 10 0.375 0.041 37.5 86042 88702 2474 2295 80 0.03486 3.234 2 1 3
Calcium_d1 Magnesium_d1 Potassium_d1 Sodium_d1 energy_d1 Calcium_d2 Magnesium_d2 Potassium_d2 Sodium_d2 energy_d2 average_Calcium average_Magnesium average_Potassium average_sodium average_energy
1 1331.4 546.23 6028 8693 3652 1378.2 359.26 3324.2 2335.4 1879.4 1354.8 452.75 4676 5514 2765.7
2 451.2 86.76 1046 1653 1124 154.7 67.92 582.4 889.4 778.7 303.0 77.34 814 1271 951.5
3 892.0 345.15 3565 5839 3092 676.2 209.74 2372.6 3601.9 2312.5 784.1 277.45 2969 4721 2702.1
4 514.2 205.71 1818 2647 1462 1931.4 637.66 7667.6 6364.1 8530.8 1222.8 421.68 4743 4506 4996.6
5 448.7 252.18 2369 2106 1774 896.6 370.09 2662.7 2282.4 1713.6 672.7 311.14 2516 2194 1743.9
6 668.3 165.71 2348 1957 1661 379.6 125.79 1685.6 1260.0 1266.1 523.9 145.75 2017 1609 1463.5
PsyPhysHouston MedHxAlcStatus MedHxOpiateStatus MedHxCokeStatus MedHxMarijStatus MedHxCigaretteStatus AlcoholCurrent SmokingCurrent Opiate_dich Coke_dich Marij_dich AnyDrugsCurrent hiv htn
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
2 NA 0 0 0 0 0 0 0 0 0 0 0 0 1
3 5 0 0 0 0 0 0 0 0 0 0 0 0 0
4 7 0 0 0 0 0 0 0 0 0 0 0 0 0
5 7 0 0 0 0 0 0 0 0 0 0 0 0 0
6 1 0 0 0 0 0 0 0 0 0 0 0 0 1
Hyperlipidemia PhysWaistSize PhysHipSize PhysWHR PhysWeight PhysHeight PhysBMI bsa PhysRespRate PhysRespPatt PhysBPsitRsys PhysBPsitRdia PhysBPsitLsys PhysBPsitLdia PhysBPstandRsys
1 1 104 127 0.8189 95 175 31.02 2.104 18 0 130 80 130 80 150
2 1 94 106 0.8868 77 165 28.28 1.844 16 0 160 84 160 80 170
3 1 115 120 0.9583 96 160 37.50 1.981 16 0 130 70 130 70 140
4 0 95 101 0.9406 84 180 25.93 2.038 18 0 126 84 124 84 149
5 0 76 98 0.7755 58 158 23.23 1.584 18 0 96 60 90 62 108
6 1 114 115 0.9913 98 178 30.93 2.159 18 0 190 90 190 90 200
PhysBPstandRdia PhysBPstandLsys PhysBPstandLdia homa diabetes diabetesHx diabetesDx diabetesRx LabFasting LabResInsulin LabResHgbA1C LabResGlucose LabResNa mrrbase sdrrbase mhrbase sdhrbase
1 96 140 90 9.615 1 NA 2 0 1 22.0 7.100 177 139 604.7 59.95 NA 10.731
2 90 170 90 1.521 0 NA 1 0 1 6.1 5.100 101 141 1101.9 14.41 54.47 1.030
3 76 140 76 2.553 0 NA 0 0 1 11.0 5.699 94 139 802.0 28.79 74.97 3.146
4 0 140 90 1.099 0 NA 0 0 1 5.0 5.199 89 141 NA 74.58 48.97 4.471
5 70 110 70 1.738 0 NA 0 0 1 8.0 5.399 88 140 772.0 68.32 78.78 7.391
6 100 200 100 5.086 0 NA 1 0 1 20.0 5.699 103 139 950.2 21.44 63.28 1.902
rmssdbas pnn50bas phfbase abslfbas abshfbas loglfbas loghfbas lhrbase sd1base sd2base apenbase sampenba PsyPhysBaselineBPsys PsyPhysBaselineBPdia PsyPhysBaselineHR PsyPhysBaselineIBI
1 49.87 27.9749 0.2656 2282.4 1431.55 7.733 7.267 1.594 35.51 89.47 1.2274 1.510 146.4 88.66 100.08 0.6299
2 15.53 0.7634 0.2812 120.5 52.43 4.791 3.959 2.298 11.13 32.19 0.9970 1.373 139.6 74.53 54.69 1.0999
3 26.39 2.9491 0.2500 487.2 265.90 6.189 5.583 1.832 18.83 47.05 1.0393 1.888 124.6 60.02 74.91 0.7999
4 48.35 27.6265 0.3125 5053.3 131.38 8.528 4.878 NA 35.69 165.37 0.8648 1.073 126.1 84.52 51.72 1.2000
5 47.92 26.1965 0.2305 4416.7 1029.12 8.393 6.936 4.292 34.16 124.30 1.0971 1.377 108.1 66.19 78.73 0.7699
6 22.22 2.4691 0.2344 283.5 181.23 5.647 5.200 1.564 15.88 61.25 0.6226 1.585 153.7 84.05 63.94 0.9500
PsyPhysBaselineTPR PsyPhysBaselineCardOutput PsyPhysBaselineMAP PsyPhysBaselineSV PsyPhysBaselineAC PsyPhysBaselineET restingSVindex restingTPRindex restingCOindex PsyPhysOrthostasisBPsys
1 1.2998 5.689 110.69 57.62 1.29 0.2599 27.38 0.6177 2.704 141.6
2 1.2100 5.029 100.98 92.44 1.56 0.3600 50.12 0.6561 2.727 146.7
3 0.4900 10.459 85.12 139.81 2.54 0.3100 70.59 0.2474 5.280 128.3
4 1.7100 3.680 101.88 72.38 2.14 0.3400 35.51 0.8389 1.805 126.2
5 0.9299 5.579 86.02 71.72 1.88 0.2900 45.27 0.5870 3.521 106.4
6 1.1099 6.069 108.30 95.52 1.82 0.2900 44.25 0.5141 2.812 173.1
PsyPhysOrthostasisBPdia PsyPhysOrthostasisHR PsyPhysOrthostasisIBI PsyPhysOrthostasisTPR PsyPhysOrthostasisCardOutput PsyPhysOrthostasisMAP PsyPhysOrthostasisSV PsyPhysOrthostasisAC
1 86.05 102.58 0.6200 1.2400 5.590 106.11 56.27 1.36
2 73.94 62.84 0.9600 0.9600 6.489 103.02 103.56 1.58
3 66.20 90.17 0.6699 0.5599 9.488 88.16 105.45 2.29
4 77.77 68.94 0.8799 0.9900 6.029 97.89 88.08 2.40
5 69.00 86.22 0.7000 1.0098 5.140 86.28 59.93 1.82
6 96.08 70.69 0.8500 1.3198 5.590 122.06 79.38 1.44
PsyPhysOrthostasisET PsyPhysOrthoRecovBPsys PsyPhysOrthoRecovBPdia PsyPhysOrthoRecovHR PsyPhysOrthoRecovIBI PsyPhysOrthoRecovTPR PsyPhysOrthoRecovCardOutput PsyPhysOrthoRecovMAP PsyPhysOrthoRecovSV
1 0.2300 140.0 84.08 97.88 0.6499 1.22 5.720 104.80 59.47
2 0.3199 154.7 75.66 55.45 1.0898 1.08 5.939 106.42 107.58
3 0.2500 128.8 61.69 77.19 0.7799 0.49 10.670 87.30 138.69
4 0.2800 126.8 81.05 60.48 1.0198 1.25 4.960 100.22 84.02
5 0.2700 110.9 70.25 78.83 0.7699 1.07 5.060 89.19 64.98
6 0.2599 152.0 87.42 66.27 0.9199 1.27 5.369 109.94 81.58
PsyPhysOrthoRecovAC PsyPhysOrthoRecovET PsyPhysAngerThinkBPsys PsyPhysAngerThinkBPdia PsyPhysAngerThinkHR PsyPhysAngerThinkIBI PsyPhysAngerThinkTPR PsyPhysAngerThinkCardOutput PsyPhysAngerThinkMAP
1 1.42 0.24 152.7 90.86 99.75 0.6200 1.2400 5.880 114.45
2 1.52 0.35 158.7 74.77 57.55 1.0498 0.9500 6.789 106.80
3 2.47 0.30 145.8 68.56 74.17 0.8099 0.5399 10.939 98.73
4 2.27 0.31 118.6 78.77 60.50 1.0198 1.3198 4.460 96.05
5 1.79 0.29 115.0 68.19 71.80 0.8600 1.0198 5.390 89.33
6 1.70 0.28 157.7 88.95 60.26 1.0000 1.2798 5.340 113.08
PsyPhysAngerThinkSV PsyPhysAngerThinkAC PsyPhysAngerThinkET PsyPhysAngerSpeakBPsys PsyPhysAngerSpeakBPdia PsyPhysAngerSpeakHR PsyPhysAngerSpeakIBI PsyPhysAngerSpeakTPR PsyPhysAngerSpeakCardOutput
1 59.48 1.23 0.2599 170.1 99.72 105.19 0.6000 1.4600 5.680
2 118.36 1.55 0.3500 165.4 80.62 58.01 1.0498 1.1399 6.149
3 147.47 2.20 0.3100 159.1 77.45 81.30 0.7400 0.6399 10.359
4 74.98 2.36 0.3000 121.6 82.36 63.16 0.9700 1.4399 4.189
5 76.86 1.84 0.3000 118.7 73.88 79.97 0.7599 1.0698 5.420
6 88.78 1.64 0.3100 163.7 93.80 64.75 0.9399 1.4199 5.130
PsyPhysAngerSpeakMAP PsyPhysAngerSpeakSV PsyPhysAngerSpeakAC PsyPhysAngerSpeakET PsyPhysAngerRecovBPsys PsyPhysAngerRecovBPdia PsyPhysAngerRecovHR PsyPhysAngerRecovIBI PsyPhysAngerRecovTPR
1 126.58 55.26 1.03 0.25 135.9 80.75 97.91 0.6399 1.0398
2 113.62 107.28 1.39 0.34 187.0 90.11 60.41 1.0098 1.3198
3 109.66 127.62 1.88 0.29 139.2 67.67 81.91 0.7400 0.5399
4 99.25 67.58 2.22 0.29 116.2 75.84 58.97 1.0398 1.2300
5 94.75 68.22 1.70 0.30 107.0 67.41 74.55 0.8199 1.0698
6 118.75 80.27 1.51 0.30 181.2 95.80 63.47 0.9500 1.2998
PsyPhysAngerRecovCardOutput PsyPhysAngerRecovMAP PsyPhysAngerRecovSV PsyPhysAngerRecovAC PsyPhysAngerRecovET PsyPhysHappyThinkBPsys PsyPhysHappyThinkBPdia PsyPhysHappyThinkHR PsyPhysHappyThinkIBI
1 6.359 101.78 65.83 1.53 0.2599 142.6 83.47 98.30 0.6299
2 5.909 127.70 99.06 1.17 0.3500 166.4 79.42 56.83 1.0698
3 11.010 95.89 135.75 2.24 0.3000 141.9 64.80 76.25 0.7899
4 4.680 93.00 80.28 2.48 0.3000 125.6 82.41 49.77 1.2200
5 4.850 85.22 65.77 1.86 0.3000 105.4 66.52 75.47 0.7999
6 5.859 124.94 92.69 1.45 0.3000 163.4 88.66 59.83 1.0000
PsyPhysHappyThinkTPR PsyPhysHappyThinkCardOutput PsyPhysHappyThinkMAP PsyPhysHappyThinkSV PsyPhysHappyThinkAC PsyPhysHappyThinkET PsyPhysHappySpeakBPsys PsyPhysHappySpeakBPdia PsyPhysHappySpeakHR
1 1.08 6.520 106.41 67.06 1.44 0.25 163.0 93.38 101.44
2 1.15 6.220 113.55 109.72 1.41 0.35 175.3 86.25 63.58
3 0.47 12.229 95.45 160.59 2.35 0.31 149.6 73.80 81.58
4 1.58 3.810 99.88 77.38 2.21 0.33 121.4 82.91 62.48
5 1.03 4.939 84.52 65.95 1.88 0.29 108.5 69.36 80.70
6 1.21 5.729 115.38 95.69 1.65 0.31 174.6 94.80 66.00
PsyPhysHappySpeakIBI PsyPhysHappySpeakTPR PsyPhysHappySpeakCardOutput PsyPhysHappySpeakMAP PsyPhysHappySpeakSV PsyPhysHappySpeakAC PsyPhysHappySpeakET PsyPhysHappyRecovBPsys PsyPhysHappyRecovBPdia
1 0.6200 1.23 6.270 119.61 62.95 1.17 0.25 143.2 88.44
2 0.9900 1.26 5.949 121.39 98.34 1.26 0.34 171.9 83.06
3 0.7400 0.60 10.658 104.20 131.19 2.01 0.29 158.5 78.12
4 1.0000 1.44 4.279 99.50 69.47 2.19 0.31 118.5 80.23
5 0.7500 1.05 5.020 87.39 63.09 1.81 0.29 108.0 67.53
6 0.9299 1.33 5.850 122.88 89.75 1.48 0.29 158.1 88.05
PsyPhysHappyRecovHR PsyPhysHappyRecovIBI PsyPhysHappyRecovTPR PsyPhysHappyRecovCardOutput PsyPhysHappyRecovMAP PsyPhysHappyRecovSV PsyPhysHappyRecovAC PsyPhysHappyRecovET ces CEScut16 CEScut20
1 98.61 0.6399 1.3098 5.409 109.27 55.55 1.29 0.2599 6 0 0
2 58.86 1.0398 1.1899 6.060 116.80 104.05 1.34 0.3500 25 1 1
3 81.91 0.7400 0.6699 10.180 110.22 125.02 1.86 0.2900 2 0 0
4 58.95 1.0598 1.4600 4.090 96.47 70.75 2.30 0.3100 7 0 0
5 77.72 0.7899 1.0498 5.140 86.31 66.77 1.86 0.2900 7 0 0
6 63.95 0.9500 1.2000 5.720 112.55 90.36 1.68 0.3000 15 0 0
CES01 CES02 CES03 CES04 CES05 CES06 CES07 CES08 CES09 CES10 CES11 CES12 CES13 CES14 CES15 CES16 CES17 CES18 CES19 CES20 acasiReact01 acasiReact02 acasiReact03 acasiReact04 acasiReact05 acasiReact06
1 2 0 0 3 0 1 0 3 0 0 2 3 0 0 0 3 0 1 0 0 0 0 0 0 0 0
2 1 1 2 2 2 1 1 2 1 1 3 3 2 2 2 3 0 1 1 2 0 4 0 4 1 1
3 0 0 0 3 0 0 0 3 0 0 1 3 1 0 0 3 0 0 0 0 1 1 1 3 1 3
4 0 1 0 2 0 1 0 2 0 0 0 3 0 0 0 3 0 1 1 1 2 1 3 1 4 1
5 1 0 0 3 1 1 1 3 0 0 0 3 1 0 0 3 0 1 0 1 1 1 1 4 2 1
6 3 1 1 3 2 1 1 3 0 1 2 2 1 0 0 3 0 1 0 0 3 0 4 0 4 0
acasiPerStr1 acasiPerStr2 acasiPerStr3 acasiPerStr4 acasiVig acasiVig1 acasiVig2 acasiPerStr acasiAnger acasiPDSQanx acasiEmoSup acasiInsSup HseHldSF12PCS HseHldSF12MCS LabResK LabResCalcium
1 0 0 3 0 12 12 0 5 12 1 18 8 50.07 52.48 4.199 8.799
2 0 0 4 1 20 11 9 5 4 0 15 8 29.72 64.12 4.199 8.500
3 0 4 4 1 16 9 7 1 7 1 26 6 36.94 54.34 4.000 8.699
4 1 3 2 1 6 3 3 5 11 0 18 17 58.55 49.30 4.100 8.799
5 1 4 2 2 14 8 6 5 3 1 18 16 59.10 54.09 4.100 8.898
6 2 3 3 1 1 1 0 5 8 1 28 7 37.11 43.84 4.199 8.398
LabResCa2 LabResMg LabResCl LabResCO2 LabResCreatinine LabResUpH LabResUCreatinine LabResChol LabResLDLcalc LabResHDL LabResTriglyc LabResRBC LabResHgb LabResHct LabResWBC LabResAlbumin LabResCRP
1 NA 1.9 102 26 0.8999 5.5 NA 254 181.2 37 179 5.199 15.2 45.50 8.398 4.1 NA
2 NA 2.0 104 29 1.2998 5.0 NA 236 118.4 42 378 4.399 13.3 39.80 5.300 3.9 NA
3 NA 1.9 99 29 1.2998 7.0 NA 293 226.0 45 110 4.199 13.1 38.59 5.100 4.1 NA
4 NA 1.8 101 29 1.2000 5.5 NA 199 120.8 60 91 4.199 14.2 43.20 3.900 4.1 NA
5 NA 1.8 103 25 1.0000 6.5 NA 204 110.4 75 93 4.500 14.1 42.90 5.500 4.1 NA
6 NA 1.9 103 23 2.2998 5.5 NA 192 124.6 38 147 4.500 14.4 42.90 7.000 4.0 NA
MedHxCVhtn MedHxCVchf MedHxCVheartLarge MedHxCVangina MedHxCVmi MedHxCVcad MedHxCVmurmur MedHxCVvalveLeak MedHxCVaFib MedHxCVheartInfect MedHxCVrheumHeart MedHxCVmitralValve MedHxCVtia
1 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0 0 0 0
MedHxCVstroke MedHxCVclaudication MedHxCVdvt MedHxCVaneurysm MedHxSurgCABG MedHxSurgEndart MedHxSurgAngioHeart MedHxAnxietyDisorder MedHxADD MedHxDepression MedHxSuicidality MedHxBipolarDisorder
1 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0 0 0
MedHxSchizophrenia MedHxDiabetes MedHxSleepApnea MedHxDiabetesYear MedHxMenopAge MedHxSurgHysterectomy MedHxSurgHysterectomyYear MedHxAllergyDrugs MedHxMeningitis MedHxTuberculosis MedHxHIVorAIDS
1 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0 0
MedHxHepatitis MedHxCVA MedHxAneurysm MedHxBrain MedHxBreast MedHxEsophagus MedHxStomach MedHxColon MedHxRectum MedHxLiver MedHxSkin MedHxBone MedHxMultipleMyeloma MedHxLeukemiaLymphoma MedHxLung
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
MedHxProstate MedHxTesticular MedHxCervix MedHxOvary MedHxLupus MedHxAlzheimersDisease MedHxDementiaAny MedHxParkinsonDisease MedHxMultipleSclerosis MedHxEpilepsy MedHxBreastCancL MedHxBreastCancR
1 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0 0 0
MedHxThryroidDisorder MedHxKidneyDisease MedHxHeadInjury RxDiabetes RxHRT RxMI RxAngina RxStroke RxPsycho RxpainRel RxHTN RxAntiHypany RxAntiHypCA RxAntiHypBB RxAntiHypCCB RxAntiHypACE RxAntiHypDr
1 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0 0
RxAntiHypVd RxAntiHypAB RxCholesterolany RxPsychoTany Rxantianxiety Rxanticonvulsants Rxantidepressants Rxantipsychotics Rxsedatives Rxsleepaid RxPainRelany Rxreliefofpain RxanalgesicsGeneral
1 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 1 0 0 1 0 0 0 0 0 0
RxanalgesicsNarcotic RxanalgesicsNonnarcotic RxPulmonany RxPulmonaPainrelief RxPulmonaAnalgesic RxCNSany RxCNS rxHypercholesterolemia RxAnorexiants CardiovascularCluster CancerCluster
1 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 1 0 0 0
PsychologicalCluster MetabolicCluster ImmuneCluster NeurologicalCluster CardiovascularSum PsychologicalSum MetabolicSum CancerSum CensusTract
1 0 1 0 0 0 0 1 0 240100
2 0 0 0 0 0 0 0 0 240100
3 0 0 0 0 0 0 0 0 240100
4 0 0 0 0 0 0 0 0 240100
5 0 0 0 0 0 0 0 0 240100
6 0 0 0 0 0 0 0 0 240100
TestData$cBal = factor(TestData$Counterbalance_num, levels = 1:6, labels = c("AHO", "AOH", "HOA", "HAO", "OHA", "OAH"))
with(TestData, table(Counterbalance_num, cBal))
cBal
Counterbalance_num AHO AOH HOA HAO OHA OAH
1 153 0 0 0 0 0
2 0 49 0 0 0 0
3 0 0 51 0 0 0
4 0 0 0 139 0 0
5 0 0 0 0 140 0
6 0 0 0 0 0 144
table(TestData$cBal)
AHO AOH HOA HAO OHA OAH
153 49 51 139 140 144
conditions = zQ(Baseline, Orthostasis, OrthoRecov, AngerThink, AngerSpeak, AngerRecov, HappyThink, HappySpeak, HappyRecov)
conNames = zQ(Baseline, OrthoStand, OrthoRecover, AngryThink, AngrySpeak, AngryRecovery, HappyThink, HappySpeak, HappyRecovery)
measures = zQ(BPsys, BPdia, HR, IBI, TPR, CardOutput, MAP, SV, AC, ET)
uniqIdent = zQ(HNDid, Counterbalance_num, cBal)
allMeasure = c(zQ(HNDid, cNum, cBal), measures, zQ(conIdx, ConNam))
xond = list()
for (i in seq_along(conditions)) {
accum = uniqIdent
for (j in seq_along(measures)) {
accum[j + 3] = paste0("PsyPhys", conditions[i], measures[j])
}
xond[[i]] = accum
}
xond
[[1]]
[1] "HNDid" "Counterbalance_num" "cBal" "PsyPhysBaselineBPsys" "PsyPhysBaselineBPdia" "PsyPhysBaselineHR" "PsyPhysBaselineIBI"
[8] "PsyPhysBaselineTPR" "PsyPhysBaselineCardOutput" "PsyPhysBaselineMAP" "PsyPhysBaselineSV" "PsyPhysBaselineAC" "PsyPhysBaselineET"
[[2]]
[1] "HNDid" "Counterbalance_num" "cBal" "PsyPhysOrthostasisBPsys" "PsyPhysOrthostasisBPdia" "PsyPhysOrthostasisHR"
[7] "PsyPhysOrthostasisIBI" "PsyPhysOrthostasisTPR" "PsyPhysOrthostasisCardOutput" "PsyPhysOrthostasisMAP" "PsyPhysOrthostasisSV" "PsyPhysOrthostasisAC"
[13] "PsyPhysOrthostasisET"
[[3]]
[1] "HNDid" "Counterbalance_num" "cBal" "PsyPhysOrthoRecovBPsys" "PsyPhysOrthoRecovBPdia" "PsyPhysOrthoRecovHR"
[7] "PsyPhysOrthoRecovIBI" "PsyPhysOrthoRecovTPR" "PsyPhysOrthoRecovCardOutput" "PsyPhysOrthoRecovMAP" "PsyPhysOrthoRecovSV" "PsyPhysOrthoRecovAC"
[13] "PsyPhysOrthoRecovET"
[[4]]
[1] "HNDid" "Counterbalance_num" "cBal" "PsyPhysAngerThinkBPsys" "PsyPhysAngerThinkBPdia" "PsyPhysAngerThinkHR"
[7] "PsyPhysAngerThinkIBI" "PsyPhysAngerThinkTPR" "PsyPhysAngerThinkCardOutput" "PsyPhysAngerThinkMAP" "PsyPhysAngerThinkSV" "PsyPhysAngerThinkAC"
[13] "PsyPhysAngerThinkET"
[[5]]
[1] "HNDid" "Counterbalance_num" "cBal" "PsyPhysAngerSpeakBPsys" "PsyPhysAngerSpeakBPdia" "PsyPhysAngerSpeakHR"
[7] "PsyPhysAngerSpeakIBI" "PsyPhysAngerSpeakTPR" "PsyPhysAngerSpeakCardOutput" "PsyPhysAngerSpeakMAP" "PsyPhysAngerSpeakSV" "PsyPhysAngerSpeakAC"
[13] "PsyPhysAngerSpeakET"
[[6]]
[1] "HNDid" "Counterbalance_num" "cBal" "PsyPhysAngerRecovBPsys" "PsyPhysAngerRecovBPdia" "PsyPhysAngerRecovHR"
[7] "PsyPhysAngerRecovIBI" "PsyPhysAngerRecovTPR" "PsyPhysAngerRecovCardOutput" "PsyPhysAngerRecovMAP" "PsyPhysAngerRecovSV" "PsyPhysAngerRecovAC"
[13] "PsyPhysAngerRecovET"
[[7]]
[1] "HNDid" "Counterbalance_num" "cBal" "PsyPhysHappyThinkBPsys" "PsyPhysHappyThinkBPdia" "PsyPhysHappyThinkHR"
[7] "PsyPhysHappyThinkIBI" "PsyPhysHappyThinkTPR" "PsyPhysHappyThinkCardOutput" "PsyPhysHappyThinkMAP" "PsyPhysHappyThinkSV" "PsyPhysHappyThinkAC"
[13] "PsyPhysHappyThinkET"
[[8]]
[1] "HNDid" "Counterbalance_num" "cBal" "PsyPhysHappySpeakBPsys" "PsyPhysHappySpeakBPdia" "PsyPhysHappySpeakHR"
[7] "PsyPhysHappySpeakIBI" "PsyPhysHappySpeakTPR" "PsyPhysHappySpeakCardOutput" "PsyPhysHappySpeakMAP" "PsyPhysHappySpeakSV" "PsyPhysHappySpeakAC"
[13] "PsyPhysHappySpeakET"
[[9]]
[1] "HNDid" "Counterbalance_num" "cBal" "PsyPhysHappyRecovBPsys" "PsyPhysHappyRecovBPdia" "PsyPhysHappyRecovHR"
[7] "PsyPhysHappyRecovIBI" "PsyPhysHappyRecovTPR" "PsyPhysHappyRecovCardOutput" "PsyPhysHappyRecovMAP" "PsyPhysHappyRecovSV" "PsyPhysHappyRecovAC"
[13] "PsyPhysHappyRecovET"
narrow = data.frame()
for (i in 1:nrow(TestData)) {
df = as.data.frame(TestData[i, xond[[1]]], stringsAsFactors = F)
df = cbind(df, data.frame(conIdx = 1, conNam = conNames[1], stringsAsFactors = F))
names(df) = allMeasure
for (j in 2:length(conditions)) {
dfmore = as.data.frame(TestData[i, xond[[j]]])
dfmore = cbind(dfmore, data.frame(conIdx = j, conNam = conNames[j], stringsAsFactors = F))
names(dfmore) = allMeasure
df = rbind(df, dfmore)
}
df.cBal = as.character(df$cBal[1])
df = merge(df, xBalTime[[df.cBal]][which(xBalTime[[df.cBal]]$meas %in% conNames), ], by.x = "ConNam", by.y = "meas")
narrow = rbind(narrow, df)
}
narrow = narrow[, c(zQ(HNDid, cNum, cBal), zQ(conIdx, ConNam, n, dur, cum), measures)]
names(narrow) = c(zQ(HNDid, cNum, cBal), zQ(conIdx, ConNam, datIdx, datDur, datCum), measures)
head(narrow, n = 20)
HNDid cNum cBal conIdx ConNam datIdx datDur datCum BPsys BPdia HR IBI TPR CardOutput MAP SV AC ET
1 8031079801 1 AHO 6 AngryRecovery 6 8 21 135.9 80.75 97.91 0.6399 1.0398 6.359 101.78 65.83 1.53 0.2599
2 8031079801 1 AHO 5 AngrySpeak 4 3 12 170.1 99.72 105.19 0.6000 1.4600 5.680 126.58 55.26 1.03 0.2500
3 8031079801 1 AHO 4 AngryThink 3 2 9 152.7 90.86 99.75 0.6200 1.2400 5.880 114.45 59.48 1.23 0.2599
4 8031079801 1 AHO 1 Baseline 1 5 5 146.4 88.66 100.08 0.6299 1.2998 5.689 110.69 57.62 1.29 0.2599
5 8031079801 1 AHO 9 HappyRecovery 11 8 37 143.2 88.44 98.61 0.6399 1.3098 5.409 109.27 55.55 1.29 0.2599
6 8031079801 1 AHO 8 HappySpeak 9 3 28 163.0 93.38 101.44 0.6200 1.2300 6.270 119.61 62.95 1.17 0.2500
7 8031079801 1 AHO 7 HappyThink 8 2 25 142.6 83.47 98.30 0.6299 1.0798 6.520 106.41 67.06 1.44 0.2500
8 8031079801 1 AHO 3 OrthoRecover 13 8 50 140.0 84.08 97.88 0.6499 1.2200 5.720 104.80 59.47 1.42 0.2400
9 8031079801 1 AHO 2 OrthoStand 12 5 42 141.6 86.05 102.58 0.6200 1.2400 5.590 106.11 56.27 1.36 0.2300
10 8031107801 4 HAO 6 AngryRecovery 11 8 37 187.0 90.11 60.41 1.0098 1.3198 5.909 127.70 99.06 1.17 0.3500
11 8031107801 4 HAO 5 AngrySpeak 9 3 28 165.4 80.62 58.01 1.0498 1.1399 6.149 113.62 107.28 1.39 0.3400
12 8031107801 4 HAO 4 AngryThink 8 2 25 158.7 74.77 57.55 1.0498 0.9500 6.789 106.80 118.36 1.55 0.3500
13 8031107801 4 HAO 1 Baseline 1 5 5 139.6 74.53 54.69 1.0999 1.2100 5.029 100.98 92.44 1.56 0.3600
14 8031107801 4 HAO 9 HappyRecovery 6 8 21 171.9 83.06 58.86 1.0398 1.1899 6.060 116.80 104.05 1.34 0.3500
15 8031107801 4 HAO 8 HappySpeak 4 3 12 175.3 86.25 63.58 0.9900 1.2598 5.949 121.39 98.34 1.26 0.3400
16 8031107801 4 HAO 7 HappyThink 3 2 9 166.4 79.42 56.83 1.0698 1.1499 6.220 113.55 109.72 1.41 0.3500
17 8031107801 4 HAO 3 OrthoRecover 13 8 50 154.7 75.66 55.45 1.0898 1.0798 5.939 106.42 107.58 1.52 0.3500
18 8031107801 4 HAO 2 OrthoStand 12 5 42 146.7 73.94 62.84 0.9600 0.9600 6.489 103.02 103.56 1.58 0.3199
19 8031107802 6 OAH 6 AngryRecovery 8 8 34 139.2 67.67 81.91 0.7400 0.5399 11.010 95.89 135.75 2.24 0.3000
20 8031107802 6 OAH 5 AngrySpeak 6 3 25 159.1 77.45 81.30 0.7400 0.6399 10.359 109.66 127.62 1.88 0.2900
head(narrow[order(narrow$HNDid, narrow$conIdx), 1:9], n = 50)
HNDid cNum cBal conIdx ConNam datIdx datDur datCum BPsys
4 8031079801 1 AHO 1 Baseline 1 5 5 146.4
9 8031079801 1 AHO 2 OrthoStand 12 5 42 141.6
8 8031079801 1 AHO 3 OrthoRecover 13 8 50 140.0
3 8031079801 1 AHO 4 AngryThink 3 2 9 152.7
2 8031079801 1 AHO 5 AngrySpeak 4 3 12 170.1
1 8031079801 1 AHO 6 AngryRecovery 6 8 21 135.9
7 8031079801 1 AHO 7 HappyThink 8 2 25 142.6
6 8031079801 1 AHO 8 HappySpeak 9 3 28 163.0
5 8031079801 1 AHO 9 HappyRecovery 11 8 37 143.2
13 8031107801 4 HAO 1 Baseline 1 5 5 139.6
18 8031107801 4 HAO 2 OrthoStand 12 5 42 146.7
17 8031107801 4 HAO 3 OrthoRecover 13 8 50 154.7
12 8031107801 4 HAO 4 AngryThink 8 2 25 158.7
11 8031107801 4 HAO 5 AngrySpeak 9 3 28 165.4
10 8031107801 4 HAO 6 AngryRecovery 11 8 37 187.0
16 8031107801 4 HAO 7 HappyThink 3 2 9 166.4
15 8031107801 4 HAO 8 HappySpeak 4 3 12 175.3
14 8031107801 4 HAO 9 HappyRecovery 6 8 21 171.9
22 8031107802 6 OAH 1 Baseline 1 5 5 124.6
27 8031107802 6 OAH 2 OrthoStand 2 5 10 128.3
26 8031107802 6 OAH 3 OrthoRecover 3 8 18 128.8
21 8031107802 6 OAH 4 AngryThink 5 2 22 145.8
20 8031107802 6 OAH 5 AngrySpeak 6 3 25 159.1
19 8031107802 6 OAH 6 AngryRecovery 8 8 34 139.2
25 8031107802 6 OAH 7 HappyThink 10 2 38 141.9
24 8031107802 6 OAH 8 HappySpeak 11 3 41 149.6
23 8031107802 6 OAH 9 HappyRecovery 13 8 50 158.5
31 8031117901 5 OHA 1 Baseline 1 5 5 126.1
36 8031117901 5 OHA 2 OrthoStand 2 5 10 126.2
35 8031117901 5 OHA 3 OrthoRecover 3 8 18 126.8
30 8031117901 5 OHA 4 AngryThink 10 2 38 118.6
29 8031117901 5 OHA 5 AngrySpeak 11 3 41 121.6
28 8031117901 5 OHA 6 AngryRecovery 13 8 50 116.2
34 8031117901 5 OHA 7 HappyThink 5 2 22 125.6
33 8031117901 5 OHA 8 HappySpeak 6 3 25 121.4
32 8031117901 5 OHA 9 HappyRecovery 8 8 34 118.5
40 8031117902 1 AHO 1 Baseline 1 5 5 108.1
45 8031117902 1 AHO 2 OrthoStand 12 5 42 106.4
44 8031117902 1 AHO 3 OrthoRecover 13 8 50 110.9
39 8031117902 1 AHO 4 AngryThink 3 2 9 115.0
38 8031117902 1 AHO 5 AngrySpeak 4 3 12 118.7
37 8031117902 1 AHO 6 AngryRecovery 6 8 21 107.0
43 8031117902 1 AHO 7 HappyThink 8 2 25 105.4
42 8031117902 1 AHO 8 HappySpeak 9 3 28 108.5
41 8031117902 1 AHO 9 HappyRecovery 11 8 37 108.0
49 8031136901 4 HAO 1 Baseline 1 5 5 153.7
54 8031136901 4 HAO 2 OrthoStand 12 5 42 173.1
53 8031136901 4 HAO 3 OrthoRecover 13 8 50 152.0
48 8031136901 4 HAO 4 AngryThink 8 2 25 157.7
47 8031136901 4 HAO 5 AngrySpeak 9 3 28 163.7
# save(narrow, file='/prj/hnd/Wave01/zPrj/PsyPhys/dat/narrow2.rdata') # Would have saved but this is a demo...
It's useful to try to visualize these data. We can plot the sequence of conditions (ignoring counterbalancing).
library(zStat)
conNames = zQ(Baseline, OrthoStand, OrthoRecover, AngryThink, AngrySpeak, AngryRecovery, HappyThink, HappySpeak, HappyRecovery)
measures = zQ(BPsys, BPdia, HR, IBI, TPR, CardOutput, MAP, SV, AC, ET)
(condStand = data.frame(qx = 1:length(conNames), nm = conNames))
qx nm
1 1 Baseline
2 2 OrthoStand
3 3 OrthoRecover
4 4 AngryThink
5 5 AngrySpeak
6 6 AngryRecovery
7 7 HappyThink
8 8 HappySpeak
9 9 HappyRecovery
agg = list()
ylim = data.frame()
lmax = data.frame()
lmin = data.frame()
for (k in seq_along(levels(narrow$cBal))) {
c = levels(narrow$cBal)[k]
agg[[c]] = aggregate(cbind(BPsys, BPdia, HR, IBI, TPR, CardOutput, MAP, SV, AC, ET) ~ ConNam, narrow[narrow$cNum == k, ], FUN = mean)
agg[[c]] = merge(agg[[c]], condStand, by.x = "ConNam", by.y = "nm")
agg[[c]] = agg[[c]][order(agg[[c]][, "qx"]), ]
lmin = rbind(lmin, sapply(agg[[c]][, zQ(BPsys, BPdia, HR, IBI, TPR, CardOutput, MAP, SV, AC, ET)], zByFUN)[4, ])
lmax = rbind(lmax, sapply(agg[[c]][, zQ(BPsys, BPdia, HR, IBI, TPR, CardOutput, MAP, SV, AC, ET)], zByFUN)[5, ])
}
ymax = data.frame(ymax = ceiling(apply(lmax, 2, max)), row.names = measures)
ymin = data.frame(ymin = floor(apply(lmin, 2, min)), row.names = measures)
ylim = cbind(ymin, ymax)
pCol = zQ(blue, black, darkgray, red, brown, darkgreen, purple)
xLbl = agg[[1]][, "ConNam"]
xVal = 1:length(xLbl)
for (i in 1:length(measures)) {
j = i + 1
for (k in seq_along(levels(narrow$cBal))) {
if (k == 1)
plot(xVal, agg[[k]][, j], lty = k, col = pCol[k], type = "l", ylim = c(ylim[j - 1, 1], ylim[j - 1, 2]), xlab = "", ylab = names(agg[[k]][j]), xaxt = "n") else lines(xVal, agg[[k]][, j], lty = k, col = pCol[k])
}
axis(1, at = xVal, labels = FALSE)
text(x = xVal, par("usr")[3] - 0.6, labels = agg[[1]][, "ConNam"], srt = 25, pos = 2, xpd = TRUE, offset = -1)
legend("topleft", legend = levels(narrow$cBal), lty = 1:nlevels(narrow$cBal), col = pCol)
}
Now we're ready to do some repeated measures analyses. As a demonstration, I'll analyze systolic blood pressure for the anger recall condition.
First, I'll construct a data frame with just data for the anger recall conditions. Then, I'll take a random sample of participants to check for possible nonlinear trends over conditions.
library(lattice)
# ***Add demographic info to the longitudinal data (zXtendFrame is my way to merge things)...
narrow = zXtendFrame(narrow, "HNDid", "/prj/hnd/zrdata/w00Demographics.rdata", zQ(Age0, Race, Sex, PovStat))
head(narrow)
HNDid cNum cBal conIdx ConNam datIdx datDur datCum BPsys BPdia HR IBI TPR CardOutput MAP SV AC ET Age0 Race Sex PovStat
1 8031079801 1 AHO 6 AngryRecovery 6 8 21 135.9 80.75 97.91 0.6399 1.04 6.359 101.8 65.83 1.53 0.2599 63 White Women Above
2 8031079801 1 AHO 5 AngrySpeak 4 3 12 170.1 99.72 105.19 0.6000 1.46 5.680 126.6 55.26 1.03 0.2500 63 White Women Above
3 8031079801 1 AHO 4 AngryThink 3 2 9 152.7 90.86 99.75 0.6200 1.24 5.880 114.5 59.48 1.23 0.2599 63 White Women Above
4 8031079801 1 AHO 1 Baseline 1 5 5 146.4 88.66 100.08 0.6299 1.30 5.689 110.7 57.62 1.29 0.2599 63 White Women Above
5 8031079801 1 AHO 9 HappyRecovery 11 8 37 143.2 88.44 98.61 0.6399 1.31 5.409 109.3 55.55 1.29 0.2599 63 White Women Above
6 8031079801 1 AHO 8 HappySpeak 9 3 28 163.0 93.38 101.44 0.6200 1.23 6.270 119.6 62.95 1.17 0.2500 63 White Women Above
varAngry = zQ(1, 4, 5, 6)
angry = narrow[narrow$conIdx %in% varAngry, c(zNamesRange(narrow, "HNDid", "BPsys"), zNamesRange(narrow, "Age0", "PovStat"))]
angry = angry[order(angry$HNDid, angry$conIdx), ]
angry$nSeq = sequence(rle(angry$HNDid)$lengths)
head(angry, n = 15)
HNDid cNum cBal conIdx ConNam datIdx datDur datCum BPsys Age0 Race Sex PovStat nSeq
4 8031079801 1 AHO 1 Baseline 1 5 5 146.4 63 White Women Above 1
3 8031079801 1 AHO 4 AngryThink 3 2 9 152.7 63 White Women Above 2
2 8031079801 1 AHO 5 AngrySpeak 4 3 12 170.1 63 White Women Above 3
1 8031079801 1 AHO 6 AngryRecovery 6 8 21 135.9 63 White Women Above 4
13 8031107801 4 HAO 1 Baseline 1 5 5 139.6 63 White Men Above 1
12 8031107801 4 HAO 4 AngryThink 8 2 25 158.7 63 White Men Above 2
11 8031107801 4 HAO 5 AngrySpeak 9 3 28 165.4 63 White Men Above 3
10 8031107801 4 HAO 6 AngryRecovery 11 8 37 187.0 63 White Men Above 4
22 8031107802 6 OAH 1 Baseline 1 5 5 124.6 53 White Women Above 1
21 8031107802 6 OAH 4 AngryThink 5 2 22 145.8 53 White Women Above 2
20 8031107802 6 OAH 5 AngrySpeak 6 3 25 159.1 53 White Women Above 3
19 8031107802 6 OAH 6 AngryRecovery 8 8 34 139.2 53 White Women Above 4
31 8031117901 5 OHA 1 Baseline 1 5 5 126.1 40 White Men Above 1
30 8031117901 5 OHA 4 AngryThink 10 2 38 118.6 40 White Men Above 2
29 8031117901 5 OHA 5 AngrySpeak 11 3 41 121.6 40 White Men Above 3
# ***Lattice plots...
angry.sample = angry[angry$HNDid %in% sample(angry[angry$conIdx == 1, "HNDid"], 48), ]
angry.sample$ID = factor(angry.sample$HNDid)
angry.sample$nSeqF = factor(angry.sample$nSeq)
zQuick(angry.sample)
[1] 192 16
'data.frame': 192 obs. of 16 variables:
$ HNDid : num 8031079801 8031079801 8031079801 8031079801 8031156201 ...
$ cNum : int 1 1 1 1 6 6 6 6 5 5 ...
$ cBal : Factor w/ 6 levels "AHO","AOH","HOA",..: 1 1 1 1 6 6 6 6 5 5 ...
$ conIdx : num 1 4 5 6 1 4 5 6 1 4 ...
$ ConNam : chr "Baseline" "AngryThink" "AngrySpeak" "AngryRecovery" ...
$ datIdx : int 1 3 4 6 1 5 6 8 1 10 ...
$ datDur : int 5 2 3 8 5 2 3 8 5 2 ...
$ datCum : int 5 9 12 21 5 22 25 34 5 38 ...
$ BPsys : num 146 153 170 136 100 ...
$ Age0 :Class 'labelled' atomic [1:192] 63 63 63 63 53 53 53 53 44 44 ...
.. ..- attr(*, "label")= chr "Initial age"
$ Race : Factor w/ 2 levels "White","AfrAm": 1 1 1 1 1 1 1 1 1 1 ...
..- attr(*, "label")= chr "Race"
$ Sex : Factor w/ 2 levels "Women","Men": 1 1 1 1 2 2 2 2 2 2 ...
..- attr(*, "label")= chr "Sex"
$ PovStat: Factor w/ 2 levels "Above","Below": 1 1 1 1 1 1 1 1 1 1 ...
..- attr(*, "label")= chr "Poverty status"
$ nSeq : int 1 2 3 4 1 2 3 4 1 2 ...
$ ID : Factor w/ 48 levels "8031079801","8031156201",..: 1 1 1 1 2 2 2 2 3 3 ...
$ nSeqF : Factor w/ 4 levels "1","2","3","4": 1 2 3 4 1 2 3 4 1 2 ...
NULL
HNDid cNum cBal conIdx ConNam datIdx datDur datCum BPsys Age0 Race Sex PovStat nSeq ID nSeqF
4 8031079801 1 AHO 1 Baseline 1 5 5 146.4 63 White Women Above 1 8031079801 1
3 8031079801 1 AHO 4 AngryThink 3 2 9 152.7 63 White Women Above 2 8031079801 2
2 8031079801 1 AHO 5 AngrySpeak 4 3 12 170.1 63 White Women Above 3 8031079801 3
1 8031079801 1 AHO 6 AngryRecovery 6 8 21 135.9 63 White Women Above 4 8031079801 4
58 8031156201 6 OAH 1 Baseline 1 5 5 100.3 53 White Men Above 1 8031156201 1
HNDid cNum cBal conIdx ConNam datIdx datDur datCum BPsys Age0 Race Sex PovStat
Min. :8031079801 Min. :1.00 AHO:52 Min. :1.00 Length:192 Min. : 1.00 Min. :2.00 Min. : 5.0 Min. : 97.5 Min. :30.0 White: 64 Women:116 Above:100
1st Qu.:8111347551 1st Qu.:1.00 AOH: 4 1st Qu.:3.25 Class :character 1st Qu.: 2.50 1st Qu.:2.75 1st Qu.: 8.0 1st Qu.:119.2 1st Qu.:39.8 AfrAm:128 Men : 76 Below: 92
Median :8141627601 Median :4.00 HOA:12 Median :4.50 Mode :character Median : 6.00 Median :4.00 Median :22.0 Median :129.0 Median :48.0
Mean :8139222455 Mean :3.75 HAO:40 Mean :4.00 Mean : 6.05 Mean :4.50 Mean :22.4 Mean :133.0 Mean :47.2
3rd Qu.:8211653452 3rd Qu.:5.00 OHA:40 3rd Qu.:5.25 3rd Qu.:10.00 3rd Qu.:5.75 3rd Qu.:37.0 3rd Qu.:143.3 3rd Qu.:53.0
Max. :8224304901 Max. :6.00 OAH:44 Max. :6.00 Max. :13.00 Max. :8.00 Max. :50.0 Max. :197.2 Max. :64.0
NA's :12
nSeq ID nSeqF
Min. :1.00 8031079801: 4 1:48
1st Qu.:1.75 8031156201: 4 2:48
Median :2.50 8031165101: 4 3:48
Mean :2.50 8031467202: 4 4:48
3rd Qu.:3.25 8031654801: 4
Max. :4.00 8031715801: 4
(Other) :168
stripPanel = function(which.panel, factor.levels, ...) {
panel.rect(0, 0, 1, 1, col = "lightgray")
panel.text(x = 0.5, y = 0.5, cex = 0.75, lab = factor.levels[which.panel])
}
xyplot(BPsys ~ nSeqF | ID, angry.sample, type = c("g", "p", "r"), pch = 20, strip = stripPanel, xlab = "Condition")
It appears that at least some participants blood pressure is curvilinear with one inflection over conditions. This means that it's probably a good idea to account for the overall curvilinearity (fixed effect) and the curvilinearity in individual trajectories (random effect). We know that there are order effects based on counterbalancing so we also include a random effect for counterbalancing condition.
library(lme4)
library(multcomp)
(merModel1 = lmer(BPsys ~ Race * nSeq * I(nSeq^2) + ((nSeq + I(nSeq^2)) | HNDid) + (1 | cBal), angry))
Linear mixed model fit by REML ['lmerMod']
Formula: BPsys ~ Race * nSeq * I(nSeq^2) + ((nSeq + I(nSeq^2)) | HNDid) + (1 | cBal)
Data: angry
REML criterion at convergence: 18861
Random effects:
Groups Name Std.Dev. Corr
HNDid (Intercept) 22.87
nSeq 18.71 -0.62
I(nSeq^2) 3.32 0.62 -0.99
cBal (Intercept) 1.14
Residual 6.85
Number of obs: 2408, groups: HNDid, 602; cBal, 6
Fixed Effects:
(Intercept) RaceAfrAm nSeq I(nSeq^2) RaceAfrAm:nSeq RaceAfrAm:I(nSeq^2) nSeq:I(nSeq^2)
144.56 -9.95 -42.39 26.40 14.41 -7.19 -4.15
RaceAfrAm:nSeq:I(nSeq^2)
1.03
cftest(merModel1)
Simultaneous Tests for General Linear Hypotheses
Fit: lmer(formula = BPsys ~ Race * nSeq * I(nSeq^2) + ((nSeq + I(nSeq^2)) |
HNDid) + (1 | cBal), data = angry)
Linear Hypotheses:
Estimate Std. Error z value Pr(>|z|)
(Intercept) == 0 144.558 4.193 34.48 < 2e-16
RaceAfrAm == 0 -9.953 5.208 -1.91 0.056
nSeq == 0 -42.389 6.045 -7.01 0.0000000000023
I(nSeq^2) == 0 26.404 2.621 10.08 < 2e-16
RaceAfrAm:nSeq == 0 14.409 7.559 1.91 0.057
RaceAfrAm:I(nSeq^2) == 0 -7.188 3.277 -2.19 0.028
nSeq:I(nSeq^2) == 0 -4.149 0.347 -11.97 < 2e-16
RaceAfrAm:nSeq:I(nSeq^2) == 0 1.033 0.434 2.38 0.017
(Univariate p values reported)
xVal = 1:4
xLbl = angry[xVal, "ConNam"]
hatModel1 = zMixHat(angry, merModel1, vary = "nSeq=xVal,Race=zQ(White,AfrAm)")
HNDcolors = HNDpltColors()
HNDlabels = HNDpltLabels()
head(hatModel1)
nSeq Race BPsys hat
1 1 White 0 124.4
2 2 White 0 132.2
3 3 White 0 143.0
4 4 White 0 131.9
5 1 AfrAm 0 122.7
6 2 AfrAm 0 130.6
par(las = 1, lwd = 2)
with(hatModel1[hatModel1$Race == "AfrAm", ], plot(nSeq, hat, lty = 1, col = HNDcolors$Race["AfrAm"], ylim = c(100, 150), typ = "l", ylab = "BPsys", xlab = "Condition", xaxt = "n"))
with(hatModel1[hatModel1$Race == "White", ], lines(nSeq, hat, lty = 1, col = HNDcolors$Race["White"]))
axis(1, at = xVal, labels = FALSE)
text(x = xVal, par("usr")[3] - 1, labels = xLbl, pos = 3, xpd = TRUE, offset = -1)
legend("topleft", legend = HNDlabels$Race, col = HNDcolors$Race, lty = 1)