Violation of equality of means in bivariate cholesky model

Posted on
No user picture. YiTan Joined: 10/08/2014
Hi,

I ran the saturated bivariate submodels to check whether the assumptions of equality of means and variance were met, and I noticed something quite interesting: although the submodels were significantly different from the saturated full model when I constrained the means across twins and zygosity, the submodel which constrained means and variances across twins and zygosity was not significantly different from the saturated full model. Are there any possible explanations for this? And can I still go ahead and run the bivariate cholesky models even though the equal means assumption is violated?

Thanks and best regards,
Yi

Replied on Mon, 07/20/2015 - 16:37
Picture of user. AdminHunter Joined: 03/01/2013

Hi Yi,

I want to make sure I understand the question. Say you have these three models

  • Sat: full saturated model without constraints
  • SatM: saturated model with means equal across twins and zygosity
  • SatMV: saturated model with means and variances equal across twins and zygosity

Are you saying you found Sat and SatM were different, but Sat and SatMV were not different?

Replied on Tue, 07/21/2015 - 00:47
No user picture. YiTan Joined: 10/08/2014

In reply to by AdminHunter

Hi Hunter,

Yes, that's right. Here's the output I got:

> # ------------------------------------------------------------------------------
> # RUN SATURATED SUBMODELS
>
> # Constrain expected Means to be equal across twin order
> eqMeansTwinModel <- mxModel( twinSatModel, name="eqMeTwins" )
> for (i in 1:nv) {
+ eqMeansTwinModel <- omxSetParameters( eqMeansTwinModel, label=c(laMeMZ[nv+i],laMeMZ[i]), free=TRUE, values=svMe[i], newlabels=laMeMZ[i] )
+ eqMeansTwinModel <- omxSetParameters( eqMeansTwinModel, label=c(laMeDZ[nv+i],laMeDZ[i]), free=TRUE, values=svMe[i], newlabels=laMeDZ[i] ) }
> eqMeansTwinFit <- mxRun( eqMeansTwinModel, intervals=T )
Running eqMeTwins

> # Constrain expected Means to be equal across twin order and zygosity
> eqMeansZygModel <- mxModel( eqMeansTwinModel, name="eqMeZyg" )
> for (i in 1:nv) {
+ eqMeansZygModel <- omxSetParameters( eqMeansZygModel, label=c(laMeMZ[i],laMeDZ[i]), free=TRUE, values=svMe[i], newlabels=laMeMZ[i] ) }
> eqMeansZygFit <- mxRun( eqMeansZygModel, intervals=T )
Running eqMeZyg

> # Print Comparative Fit Statistics
> SatNested <- list(eqMeansTwinFit, eqMeansZygFit)
> tableFitStatistics(twinSatFit, SatNested)
Name ep -2LL df AIC diffLL diffdf p
Model 1 : twinSat 28 1104.54 275 554.54 - - -
Model 2 : eqMeTwins 24 1114.98 279 556.98 10.44 4 0.03
Model 3 : eqMeZyg 22 1122.33 281 560.33 17.78 6 0.01

> # Constrain expected Variances to be equal across twin order (and all the means as well..)
> eqVarsTwinModel <- mxModel( eqMeansZygModel, name="eqThTwins" )
> for (i in 1:nv) {
+ #making cov[1,1]=cov[3,3];cov[2,2]=cov[4,4]
+ eqVarsTwinModel <- omxSetParameters( eqVarsTwinModel, label=c(paste("covMZ_",nv+i,"_",nv+i,sep=""),paste("covMZ_",i,"_",i,sep="")),
+ free=TRUE, values=svVa[i], newlabels=paste("covMZ_",i,"_",i,sep="") )
+ eqVarsTwinModel <- omxSetParameters( eqVarsTwinModel, label=c(paste("covDZ_",nv+i,"_",nv+i,sep=""),paste("covDZ_",i,"_",i,sep="")),
+ free=TRUE, values=svVa[i], newlabels=paste("covDZ_",i,"_",i,sep="") ) }
> eqVarsTwinFit <- mxRun( eqVarsTwinModel, intervals=T )

Running eqThTwins
> eqVarsTwinSumm <- summary( eqVarsTwinFit )

> tableFitStatistics(twinSatFit, eqVarsTwinFit)
Name ep -2LL df AIC diffLL diffdf p
Model 1 : twinSat 28 1104.54 275 554.54 - - -
Model 2 : eqThTwins 18 1122.49 285 552.49 17.94 10 0.06

Replied on Thu, 08/13/2015 - 17:40
Picture of user. mhunter Joined: 07/31/2009

In reply to by YiTan

It looks like the eqThTwins-twinSat comparison is just barely not significant. The fit of eqThTwins is essentially the same as eqMeZyg, but eqThTwins uses fewer free parameters. Right now you're comparing everything to the saturated model: a vs b, a vs c, a vs d. If it were me I'd rather compare nested models in sequence: a vs b, b vs c, c vs d. For the results you reported, it would look like this.

Name ep -2LL df AIC diffLL diffdf p
Model 1 : twinSat 28 1104.54 275 554.54 - - -
Model 2 : eqMeTwins 24 1114.98 279 556.98 10.44 4 0.03
Model 3 : eqMeZyg 22 1122.33 281 560.33 7.35 2 0.025
Model 4 : eqThTwins 18 1122.49 285 552.49 0.16 4 0.99

This would suggest you lose important information going from twinSat to eqMeTwins; and going from eqMeTwins to eqMeZyg; but don't lose important information going from eqMeZyg to eqThTwins.

Replied on Fri, 08/28/2015 - 06:31
No user picture. YiTan Joined: 10/08/2014

In reply to by mhunter

Thank you Michael for your helpful explanation. Given that I lose important information from twinSat to eqMeTwins, will I still be able to run bivariate ACE model then? Or are there some changes I need to make to the model?
Replied on Fri, 03/03/2017 - 10:33
No user picture. ps779 Joined: 02/26/2017

Hi Yi,
I'm relatively new to this area and your last question to Michael caught my eye. What answer did you find this? I imagine that the bivariate ACE models would not be appropriate to run in this scenario, but wonder what strategies you found when trying to deal with this?
Cheers
Pradeep