Hi Peter,

I am not sure why those files crashed your outlook. Please accept my apologies for that. I will use different mechanism to share files in future.

Perfect, changing from structure to cell array resolved that issue. Thanks for that.

Lastly, I performed following steps:

M = struct();

M.alpha = 1;

M.beta  = 16;

M.hE    = 0;

M.hC    = 1/16;

M.Q     = 'single';

 

M.X = [1 1

    1 -1];


PEB3 = spm_dcm_peb({PEB_A; PEB_B}, M);


where my PEB_A is:


PEB_A = 

  struct with fields:

    Snames: {26×1 cell}

    Pnames: {16×1 cell}

      Pind: [16×1 double]

    Xnames: {'Covariate 1'  'Covariate 2'  'Covariate 3'  'Covariate 4'  'Covariate 5'  'Covariate 6'}

         M: [1×1 struct]

        Ep: [16×6 double]

        Eh: -6.2590

        Ch: 0.0041

        Cp: [96×96 double]

        Ce: [16×16 double]

         F: -2.5418e+04


and PEB_B is:


 struct with fields:

    Snames: {26×1 cell}

    Pnames: {16×1 cell}

      Pind: [16×1 double]

    Xnames: {'Covariate 1'  'Covariate 2'  'Covariate 3'  'Covariate 4'  'Covariate 5'  'Covariate 6'}

         M: [1×1 struct]

        Ep: [16×6 double]

        Eh: -6.2465

        Ch: 0.0041

        Cp: [96×96 double]

        Ce: [16×16 double]

         F: -728.5970


Here 'Covariate 1' and 'Covariate 2' for PEB_A and PEB_B represent means over pre- and post-treatment conditions and difference between pre- and post-treatment conditions for group A and group B.

Covariates 3 to 6 are other covariates like age, sex, amount of dose and time since stroke.


My PEB3 looks like:


PEB3 = 

  struct with fields:

    Snames: {2×1 cell}

    Pnames: {1×96 cell}

      Pind: [96×1 double]

    Xnames: {'Covariate 1'  'Covariate 2'}

         M: [1×1 struct]

        Ep: [96×2 double]

        Eh: 0.1460

        Ch: 0.0518

        Cp: [192×192 double]

        Ce: [96×96 double]

         F: -2.6137e+04


Then I ran:

BMA = spm_dcm_peb_bmc(PEB3(1));

spm_dcm_peb_review(BMA,GCM_updated)


As you notice, here I am getting just 2 covariates rather than 4 that we discussed in our previous conversation.

I am not sure what I am doing wrong here, or if something is missing, or I am misunderstanding something.


Thanks.


On Wed, Mar 27, 2019 at 3:30 AM Zeidman, Peter <[log in to unmask]> wrote:

Dear Martin

This turned out to be a simple problem – the function spm_dcm_peb expects a cell array of DCMs or PEBs. However, you gave it a structure array. So, simply change:

 

PEB3 = spm_dcm_peb([PEB_A; PEB_B], M);

 

To:

 

PEB3 = spm_dcm_peb({PEB_A; PEB_B}, M);

 

And it will work fine.

 

Best

Peter

PS the email you sent me with the files crashes my Outlook every time I click on it! Perhaps it would be better to share files through some other mechanism.

 

From: Zeidman, Peter
Sent: 21 March 2019 09:15
To: 'Martin Juneja' <[log in to unmask]>
Cc: [log in to unmask]
Subject: RE: [SPM] Fwd: Defining covariates in DCM M.X matrix

 

Dear Martin

(1). Following your suggestion to model 2x2 design, after I performed following steps:

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

load PEB_G1.mat % from pre-post comparison for group 1

PEB_G1 = PEB;

load PEB_G2.mat % from pre-post comparison for group 2

PEB_G2 = PEB;

 

N = 2;

M = struct();

M.alpha = 1;

M.beta  = 16;

M.hE    = 0;

M.hC    = 1/16;

M.Q     = 'single';

 

M.X = [1 1

    1 -1];

 

fields = {'A'};

PEB3 = spm_dcm_peb([PEB_G1; PEB_G2], M,fields);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 

I am getting following error:

Undefined function or variable 'pC'.

 

Error in spm_find_pC (line 52)

if isstruct(pC)

 

Error in spm_dcm_peb (line 144)

    q = spm_find_pC(DCM,field);                 % parameter indices

 

Error in A_Run_large_DCM_NextLevel (line 21)

PEB3 = spm_dcm_peb([PEB_A; PEB_B], M,fields);

 

Does it resolve it if you remove the ‘fields’ options from the specification of PEB3? Otherwise, please can I check whether you are using the latest release of SPM12, released 14ht November 2018? There were some fixes in there for the PEB-of-PEBs approach. https://www.fil.ion.ucl.ac.uk/spm/software/spm12/

 

(2). Also, as you mentioned that "in this final model, you’ll have parameters quantifying the mean connectivity across all subjects, the group difference in mean connectivity, the mean effect of treatment, and the group difference in the effect of treatment (i.e. the interaction)", I was wondering how we are getting all of these  i.e. mean connectivity across all subjects, the group difference in mean connectivity, the mean effect of treatment, and the group difference in the effect of treatment (i.e. the interaction), because M.X is just [1 1 1-1], which should give me only first two things (i.e., mean connectivity across all subjects and the group difference in mean connectivity only), out of four you mentioned. I apologize if I did not understand this correctly.

 

I would really appreciate any additional clarification on these two issues.

 

Excellent question. To recap, the vector of second level parameters that your third level GLM is trying to explain are:

 

Group 1 Mean

Group 1 Treatment

Group 2 Mean

Group 2 Treatment

 

There are two parts to the level design matrix. You specify the between-groups design matrix Xb:

 

1 1

1 -1

 

There’s also a within-groups design matrix, specified automatically by the software: Xw = eye(n) where n is the number of effects being brought up from the level below (n=2 in this example – mean and treatment):

 

1 0

0 1

 

The actual design matrix is calculated by: X = kron(Xb, Xw):

 

1  0  1  0

0  1  0  1

1  0 -1  0

0  1  0 -1

 

As you can see, the first regressor (column) is the mean of the group means, the second regressor is the mean of the treatment effects, the third regressor is the difference between group means and the fourth regressor is the difference in treatment effects between groups. You’ll have one parameter estimate for each of these four columns.

 

For more about how the design matrices are specified, please see part 2 of the tutorial paper at https://github.com/pzeidman/dcm-peb-example .

 

Best

Peter

 

Thank you so much once again.

 

On Tue, Mar 19, 2019 at 3:59 AM Zeidman, Peter <[log in to unmask]> wrote:

Dear Martin

On second thoughts, an alternative and potentially more elegant way to model your between-subjects 2x2 design would be to have a 3-level PEB model: DCMs at the first level, group at the second level and treatment at the third level. This would properly account for differences in between-subject variability between groups.

 

For example, say you have DCMs for each group: GCM1 and GCM2. At the second level, model them using:

 

PEB2a = spm_dcm_peb(GCM1, M1);

PEB2b = spm_dcm_peb(GCM2, M2);

 

Where the design matrix for first group, M1.X, has regressors for mean, treatment (pre vs post) and covariates such as age (mean centred within this group). Similarly for the second group. Then, take the mean connectivity and effect of treatment from each group up to the third level:

 

PEB3 = spm_dcm_peb([PEB2a; PEB2b], M3, fields);

 

Where the design matrix M3 has regressors for the mean across both groups and the difference between groups:

 

M3.X = [1 1

1 -1];

 

So, in this final model, you’ll have parameters quantifying the mean connectivity across all subjects, the group difference in mean connectivity, the mean effect of treatment, and the group difference in the effect of treatment (i.e. the interaction). You can use the ‘fields’ option in PEB3 to limit which parameters go up to the third level (i.e. no need for uninteresting covariates such as age).

 

I hope that helps

Peter

 

From: Zeidman, Peter
Sent: 19 March 2019 10:01
To: 'Martin Juneja' <[log in to unmask]>; [log in to unmask]
Subject: RE: [SPM] Fwd: Defining covariates in DCM M.X matrix

 

Dear Martin

You have a 2x2 factorial design at the between-subjects level: treatment (pre vs post) and group (subject set). So to fully encode this in your GLM, you could model the mean (expected by the PEB system to the first column), the two main effects (treatment and group) and their interaction. You could code the main effects as 1s and -1s as you suggest, making sure you mean-correct them, and to generate the interaction regressor you element-wise multiply the mean-corrected main effect regressors.

 

I am interested in determining whether its treatment 'A' which improves effective connectivity within a network for set 1, or its treatment 'B' which improves effective connectivity within a network for set 2.

 

Those are the simple effects – an effect of treatment in group 1 and an effect of treatment in group 2. If that’s all you want, you could just include these in the design matrix as you suggest (and mean correct them) but it doesn’t fully cover your factorial design without the interaction.

 

Q1: Whether I mean center 'age', 'sex', 'amount of dose' and 'time since stroke' from overall sample i.e., from both conditions together, or calculate mean centered values separately for treatments A and B.

 

From the overall sample (for age and sex). Just include non-zero values for dose and time since stroke in the patient group.

 

Q2: For M.X matrix, should I use mean centered 'dose used' values only for post-treatment conditions and put 0's for pre-treatment condition, because there was no dose used during pre-treatment condition? Correct?

Q3: For M.X matrix, should I use mean centered 'time since stroke' only for post-treatment condition and put 0's for pre-treatment condition? Or it will be same values for pre- and post-treatment condition because 'time since stroke' values are same for pre- and post conditions.

 

Yes but note, for every covariate you add, there’s a new parameter added for every DCM connection. So you’ll be using up your degrees of freedom for each new covariate. You might want to keep the number of covariates at a minimum.

 

Q4: If I want to compare connectivity for controls with post-treatment condition, then again should I mean center 'age' and 'sex' from overall sample or separately for controls and patients?

 

I think overall should be fine.

 

Also, should I include 'time since stroke' and 'amount of dose' used also as covariates, which will of course be zeros for controls.

Or there is no need to include 'time since stroke' and 'amount of dose' as covariates because I am comparing controls with patients. If so, I doubt then how to incorporate the variance as the 'amount of dose used' and 'time since stroke' values differ between treatments A and B.

 

See above comments – yes you can model them, but there could be a big cost in terms of model complexity.  

 

Best

Peter