Hi everybody, I have an experiment examining risky choice behavior where two groups of subjects were unevenly divided across two different MRI scanners while they performed a task. Each subject's data was recorded once and only once on a particular scanner. The table describing the distribution of subjects across the scanner (3TE and 3TW) and groups is below. 3TE 3TW Group1 10 9 Group2 3 18 I'm trying to perform linear mixed effects analysis to determine the effect of group (Group1 and Group2) and task. I can run the lme without problems, however, when I then go to perform a number of contrasts using the contrast package it barfs because of the unequal number of rows in the scanner factor. My question is if there a way for me to specify contrasts (with a package like contrast) in a way that can deal with the fact that one of the factors in my model is unevenly balanced? The code below illustrates the problem I'm having. Any help would be most gratefully appreciated. -------------------------------------------->8------------------------------------------------------------ rm(list=ls()) library(nlme) library(contrast) my.model=structure(list( subject = structure(c(1L, 2L, 3L, 10L, 11L, 12L, 15L, 18L, 20L, 27L, 31L, 34L, 36L, 35L, 33L, 38L, 39L, 37L, 40L, 5L, 6L, 7L, 8L, 13L, 22L, 14L, 21L, 19L, 25L, 23L, 24L, 16L, 28L, 26L, 30L, 9L, 29L, 32L, 17L, 4L, 1L, 2L, 3L, 10L, 11L, 12L, 15L, 18L, 20L, 27L, 31L, 34L, 36L, 35L, 33L, 38L, 39L, 37L, 40L, 5L, 6L, 7L, 8L, 13L, 22L, 14L, 21L, 19L, 25L, 23L, 24L, 16L, 28L, 26L, 30L, 9L, 29L, 32L, 17L, 4L, 1L, 2L, 3L, 10L, 11L, 12L, 15L, 18L, 20L, 27L, 31L, 34L, 36L, 35L, 33L, 38L, 39L, 37L, 40L, 5L, 6L, 7L, 8L, 13L, 22L, 14L, 21L, 19L, 25L, 23L, 24L, 16L, 28L, 26L, 30L, 9L, 29L, 32L, 17L, 4L, 1L, 2L, 3L, 10L, 11L, 12L, 15L, 18L, 20L, 27L, 31L, 34L, 36L, 35L, 33L, 38L, 39L, 37L, 40L, 5L, 6L, 7L, 8L, 13L, 22L, 14L, 21L, 19L, 25L, 23L, 24L, 16L, 28L, 26L, 30L, 9L, 29L, 32L, 17L, 4L, 1L, 2L, 3L, 10L, 11L, 12L, 15L, 18L, 20L, 27L, 31L, 34L, 36L, 35L, 33L, 38L, 39L, 37L, 40L, 5L, 6L, 7L, 8L, 13L, 22L, 14L, 21L, 19L, 25L, 23L, 24L, 16L, 28L, 26L, 30L, 9L, 29L, 32L, 17L, 4L), .Label = c("T0004", "T0005", "T0009", "T0020", "T0026", "T0030", "T0049", "T0050", "T0072", "T0078", "T0079", "T0080", "T0083", "T0085", "T0094", "T0104", "T0105", "T0111", "T0112", "T0113", "T0114", "T0115", "T0119", "T0131", "T0136", "T0141", "T0143", "T0150", "T0152", "T0162", "T0167", "T0196", "T0198", "T0216", "T0217", "T0218", "T0244", "T0245", "T0253", "T0262"), class = "factor"), group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Group1", "Group2"), class = "factor"), task = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L), .Label = c("20outcome", "40outcome", "80outcome", "neg40outcome", "neg80outcome"), class = "factor"), scanner = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("3TE", "3TW"), class = "factor"), fmri = c(-0.0444161854684353, -0.114592373371124, 0.0769545212388039, -0.268393993377686, 0.0290516708046198, -0.0482161603868008, 0.123185224831104, 0.0947600975632668, -0.157943934202194, 0.129291623830795, -0.0649581402540207, 0.0572351925075054, -0.163955569267273, 0.00085166294593364, 0.0297060012817383, -0.0351637043058872, -0.0439938083291054, -0.0113321952521801, 0.0744024813175201, 0.0953737944364548, -0.00487061077728868, -0.0259095914661884, 0.0361779294908047, -0.27682438492775, 0.00985431391745806, 0.130222201347351, -0.0171694327145815, -0.108230642974377, -0.024471502751112, -0.0748439505696297, 0.00296992133371532, -0.113702893257141, -8.38618052512174e-06, -0.134054526686668, 0.0275573581457138, -0.0549034662544727, 0.0316105224192142, 0.0187845807522535, 0.0888368785381317, 0.0392464064061642, 0.00777457281947136, -0.0786111205816269, 0.034312792122364, -0.431242674589157, 0.0550877340137959, -0.0284439660608768, 0.14971898496151, 0.18965645134449, -0.249666750431061, -0.114646390080452, 0.120740003883839, 0.0412555411458015, 0, 0.0195636544376612, 0.0360089540481567, 0.141455665230751, -0.106815293431282, -0.060357641428709, 0, 0.032408569008112, 0.0176739227026701, 0, 0.0896040201187134, -0.340650588274002, 0.298701554536819, 0.0824474170804024, 0.0104535883292556, -0.100377805531025, 0, 0.0286602880805731, 0.055004108697176, -0.149470701813698, -0.0354152917861938, 0.0355890430510044, 0.0701439455151558, 0, -0.0408579632639885, -0.0490981005132198, 0, 0.118443757295609, 0, 0.0385815761983395, -0.0136463027447462, 0.995342969894409, 0.0263149011880159, 0.0687721744179726, -0.0559106767177582, 0, -0.248157367110252, -0.763005673885345, -0.198830619454384, 0.108319185674191, 0.148703306913376, -0.0386029928922653, 0.0344023033976555, 0.225042834877968, 0.0763957425951958, -0.0267908964306116, 0, 0.0849404707551003, -0.22040219604969, 0, 0.198203936219215, 0.156402811408043, -0.170966222882271, 0, 0.113942489027977, -0.0061397822573781, 0.177627995610237, 0.00290966127067804, 0, -0.121305607259274, 0.0242178849875927, 0.288999557495117, 0.151954352855682, 0, -0.00922275241464376, 0.113115973770618, 0, 0.183086037635803, 0.0219641979783773, 0.086994431912899, 0.00716547947376966, -0.156700059771538, -0.0983942002058029, 0.0657249838113785, 0.16248020529747, 0.065130889415741, -0.177818566560745, 0.0923013314604759, -0.338354974985123, 0.168124347925186, 0.126458197832108, -0.140643388032913, -0.0198399741202593, 0.082248218357563, 0.1715097874403, -0.149834543466568, 0, 0.177407532930374, 0.0246455036103725, 0, -0.0490625686943531, -0.0734507888555527, 0.289667189121246, 0.0715472921729088, 0.412098109722137, -0.0883435308933258, 0.0285825077444315, -0.211081445217133, 0.101080782711506, -0.0608764216303825, -0.0586727559566498, -0.188042506575584, -0.0544104352593422, -0.0368366353213787, 0.133244857192039, -0.150556549429893, 0, 0.205774813890457, 0, -0.0538171827793121, -0.0553216300904751, 1.29600214958191, 0.0555772967636585, -0.181610956788063, 0.262428969144821, 0, -0.107578098773956, 0.196385011076927, 0.0106251891702414, 0.218737199902534, 0, -0.198070287704468, -0.142257764935493, 0.277058124542236, 0.033035684376955, -0.104592069983482, 0, -0.0898942425847054, 0.0699265524744987, 0, -0.0476390048861504, 0.181289047002792, 0.146841675043106, 0, 0.0353749208152294, -0.0641172826290131, 0.328668653964996, -0.0261893272399902, -0.0553865134716034, -0.00882275588810444, 0.0129395183175802, 0, 0.128713548183441, 0, -0.203418999910355, 0.0572037324309349, 0, -0.0326705500483513)), .Names = c("subject", "group", "task", "scanner", "fmri"), class = "data.frame", row.names = c(NA, -200L)) ## this is what I really want to be able to do, but without contrast ## complaining about the imbalance in the number of rows cat("### With scanner\n") fixedFormula=as.formula("fmri ~ group * task + scanner") randomFormula = as.formula("random = ~ 1 | subject") mylme = lme(fixed=fixedFormula, random=randomFormula, data=my.model) ## now look at the risky choices (40outcome and 80outcome) versus the ## safe choices (20outcome) con=contrast( mylme, a=list(group="Group1", task=c("40outcome", "80outcome"), scanner=levels(my.model$scanner)), b=list(group="Group1", task="20outcome", scanner=levels(my.model$scanner))) print(con) ## the code below wont execute becasue the contrast call above will ## error out ### not what I want but just to show that it works when scanner is not ### includede in the model cat("### Without scanner\n") fixedFormula=as.formula("fmri ~ group * task") randomFormula = as.formula("random = ~ 1 | subject") mylme = lme(fixed=fixedFormula, random=randomFormula, data=my.model) con=contrast( mylme, a=list(group="Group1", task=c("40outcome", "80outcome")), b=list(group="Group1", task="20outcome")) print(con) Regards, -- Colm G. Connolly, Ph. D. Dept of Psychiatry University of California, San Diego 9500 Gilman Dr. #0738 La Jolla, CA 92093-0738 Tel: +1-858-246-0684