Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Multivariate adjustment linear mixed models for studies with repeated measurements

    Hi,

    I have a panel data of 30 subjects with 15 longitudinal observations each. These subjects were allocated to receive either the intervention A or B. I have measured a number of plasma biomarkers as continuous outcomes (non-normally distributed, so I use the log10 transformation) and have different covariates which are possible confounders.

    I am using linear mixed models to compute the effect of the intervention on the outcomes at the different time-points. I would like to adjust the models by potential confounders, but I am not sure if the rule that generally applies to multivariate models (1 adjusting variable for every 10 observations or outcomes) applies here. I suppose that a dataset with a large number of observations per subject allows adjusting for more variables. Could you please help me with this?

    My code is:
    xtset id week
    xtmixed log_biomarker confounder1 confouder2 confounder3 confounder4 confouder5 i.week##arm || idnum:, covariance(independent) vce(robust)

    Thanks in advance,

    Sergio

  • #2
    A couple of opinions and a suggestion:

    1. Your regression model makes it look as if you have too many questions chasing after too few data.

    2. A biomarker that's worth its salt won't have a bunch of confounders obscuring its signal.

    3. Do this first:
    Code:
    pause on
    quietly levelsof biomarker_id, local(a_number_of_plasma_biomarkers)
    foreach biomarker_id of local a_number_of_plasma_biomarkers {
        quietly levelsof id if biomarker_id == "`biomarker_id'", local(ids) // or is it idnum?
        foreach patient_id of local ids {
            graph twoway line biomarker week if biomarker_id == "`biomarker_id'" & id == "`patient_id'", sort yscale(log) title("`biomarker_id' `patient_id'")
            pause
        }
    }
    You can take a random sample of the patients in each intervention arm if you don't want to wade through them all. A biomarker whose differential pattern is robust enough to be worth pursuing will show up with just a few representative cases in each treatment group.

    Comment


    • #3
      To Joseph Coveney's excellent advice I will add this.

      Although a sample of 30 is rather small for this, in general, in randomized studies, the covariates will, with high probability, not be associated with the study arm, and therefore cannot confound the effect of treatment on outcome. (You might want to include some covariates anyway to reduce variance, but confounding will generally not be an issue in randomized studies.)

      Comment


      • #4
        Originally posted by Joseph Coveney View Post
        A couple of opinions and a suggestion:

        1. Your regression model makes it look as if you have too many questions chasing after too few data.

        2. A biomarker that's worth its salt won't have a bunch of confounders obscuring its signal.

        3. Do this first:
        Code:
        pause on
        quietly levelsof biomarker_id, local(a_number_of_plasma_biomarkers)
        foreach biomarker_id of local a_number_of_plasma_biomarkers {
        quietly levelsof id if biomarker_id == "`biomarker_id'", local(ids) // or is it idnum?
        foreach patient_id of local ids {
        graph twoway line biomarker week if biomarker_id == "`biomarker_id'" & id == "`patient_id'", sort yscale(log) title("`biomarker_id' `patient_id'")
        pause
        }
        }
        You can take a random sample of the patients in each intervention arm if you don't want to wade through them all. A biomarker whose differential pattern is robust enough to be worth pursuing will show up with just a few representative cases in each treatment group.
        Thanks for this useful loop! Looks fine to me running it.
        I had used "marginsplot" to plot the estimates of the model:

        Code:
        xtset id week
        xtmixed log_biomarker  i.week##arm || idnum:, covariance(independent) vce(robust)
        testparm  week##arm //computes the P of the interaction (week##arm)
        margins week#arm //computes the P value of each estimate
        marginsplot, x(week)
        Last edited by Sergio Serrano; 14 Jan 2019, 23:42.

        Comment


        • #5
          Originally posted by Clyde Schechter View Post
          To Joseph Coveney's excellent advice I will add this.

          Although a sample of 30 is rather small for this, in general, in randomized studies, the covariates will, with high probability, not be associated with the study arm, and therefore cannot confound the effect of treatment on outcome. (You might want to include some covariates anyway to reduce variance, but confounding will generally not be an issue in randomized studies.)
          Totally agree, but, for the record. What would be the case for a non-randomized study? Is the number of confounding variables that can be introduced in the model affected by the number of measurements per individual?

          Thanks a lot.

          Comment


          • #6
            Re #5. It's complicated. If the covariates exhibit a great deal of variation within individual, then the added observations per individual are helpful--not as helpful as more individuals, but still somewhat helpful. But if the within-individual variation is small compared to between-individual variation, then the added observations per individual contribute little additional information and "don't count" for providing adequate support for adding the covariate to the model.

            Comment


            • #7
              Thank you for your useful comments!

              Comment

              Working...
              X