Homogeneous pivoted design

This forum is for posts that specifically focus on Ngene.

Moderators: Andrew Collins, Michiel Bliemer, johnr

Homogeneous pivoted design

Postby nkrucien » Sat Mar 19, 2022 6:40 pm

Dear Ngene team!

As this is my first post of the forum, I would like to thank you for having developed such a brilliant software! Ngene made a difference in my research activities!

I am trying to generate a pivoted design – The optimization/search seems to work fine, but the results look strange. Ngene only gives me content for the 1st sub-design and then only columns full of zeroes for the other sub-designs. I’ve tried to generate both a homogeneous and heterogeneous pivoted design and in both cases I still face the same issue.

I’ve installed the latest version of Ngene (1.3) but it did not made a difference.

Below is the code for the homogeneous design – This is a DCE with 3 options per task, one of them being an opt-out/fixed choice option (referred as “nomed” in the code). Only 1 attribute is pivoted (“hotflash”) such that the hypothetical treatment options (“opta” and “optb”) should represent improvements relative to the opt-out option. I initially went for 4 population segments (referred as seg1-seg4).

Am I missing something obvious or is it a bug?

Design
;alts(seg1) = nomed, opta, optb
;alts(seg2) = nomed, opta, optb
;alts(seg3) = nomed, opta, optb
;alts(seg4) = nomed, opta, optb
;rows = 30
;block = 3, minsum
;eff = fish(mnl,d)
;alg = mfederov(stop=noimprov(240mins))
;require:
nomed.vaginal = 2,
nomed.cancer = 3,
nomed.heart = 3,
nomed.fracture = 1
;fisher(fish) = design1(seg1[0.25], seg2[0.25], seg3[0.25], seg4[0.25])
;model(seg1):
U(nomed) = b1[-0.0075]*hotflash.ref[4] + b3.dummy[0.03]*vaginal[1,2] + b4.dummy[0.03|0.0225]*cancer[1,2,3] + b5.dummy[0.03|0.0133]*heart[1,2,3] + b6.dummy[-0.03|-0.015]*fracture[3,2,1] /
U(opta) = b1*hotflash.piv[-90%,-70%,-50%,0%] + b2.dummy[0.03]*delay[1,2] + b3*vaginal + b4*cancer + b5*heart + b6*fracture /
U(optb) = b1*hotflash.piv[-90%,-70%,-50%,0%] + b2*delay + b3*vaginal + b4*cancer + b5*heart + b6*fracture
;model(seg2):
U(nomed) = b1[-0.0021]*hotflash.ref[15] + b3.dummy[0.03]*vaginal[1,2] + b4.dummy[0.03|0.0225]*cancer[1,2,3] + b5.dummy[0.03|0.0133]*heart[1,2,3] + b6.dummy[-0.03|-0.015]*fracture[3,2,1] /
U(opta) = b1*hotflash.piv[-90%,-70%,-50%,0%] + b2.dummy[0.03]*delay[1,2] + b3*vaginal + b4*cancer + b5*heart + b6*fracture /
U(optb) = b1*hotflash.piv[-90%,-70%,-50%,0%] + b2*delay + b3*vaginal + b4*cancer + b5*heart + b6*fracture
;model(seg3):
U(nomed) = b1[-0.0013]*hotflash.ref[26] + b3.dummy[0.03]*vaginal[1,2] + b4.dummy[0.03|0.0225]*cancer[1,2,3] + b5.dummy[0.03|0.0133]*heart[1,2,3] + b6.dummy[-0.03|-0.015]*fracture[3,2,1] /
U(opta) = b1*hotflash.piv[-90%,-70%,-50%,0%] + b2.dummy[0.03]*delay[1,2] + b3*vaginal + b4*cancer + b5*heart + b6*fracture /
U(optb) = b1*hotflash.piv[-90%,-70%,-50%,0%] + b2*delay + b3*vaginal + b4*cancer + b5*heart + b6*fracture
;model(seg4):
U(nomed) = b1[-0.0009]*hotflash.ref[37] + b3.dummy[0.03]*vaginal[1,2] + b4.dummy[0.03|0.0225]*cancer[1,2,3] + b5.dummy[0.03|0.0133]*heart[1,2,3] + b6.dummy[-0.03|-0.015]*fracture[3,2,1] /
U(opta) = b1*hotflash.piv[-90%,-70%,-50%,0%] + b2.dummy[0.03]*delay[1,2] + b3*vaginal + b4*cancer + b5*heart + b6*fracture /
U(optb) = b1*hotflash.piv[-90%,-70%,-50%,0%] + b2*delay + b3*vaginal + b4*cancer + b5*heart + b6*fracture $
nkrucien
 
Posts: 1
Joined: Sat Mar 19, 2022 2:50 am

Re: Homogeneous pivoted design

Postby Michiel Bliemer » Sun Mar 20, 2022 10:29 am

I looked at the syntax and do not see anything obvious being wrong. The syntax runs, but as you said, design2-design4 have all zeros. I am not sure why it happens, it may be a bug and I have reported it to our technical team to look into it.

Note that in a homogeneous design, design2-design4 are identical to design1 (which is reported in Ngene) except for the reference levels of hotflash, so you can easily construct them yourself.

For generating heterogeneous designs, it is not possible to reconstruct them from design1. Note that you could consider generating them as separate designs, which is similar to (but not identical to) generating heterogeneous designs.

Once I know more I will report back.

Michiel
Michiel Bliemer
 
Posts: 1705
Joined: Tue Mar 31, 2009 4:13 pm

Re: Homogeneous pivoted design

Postby Michiel Bliemer » Sun Mar 20, 2022 10:37 am

Oh one issue I see is that b1 has a different prior across different segments. That means it is a different parameter and hence it is a different model. It is not theoretically possible to add Fisher information matrices for different models that have different parameters.You will need to use the same priors in a pivot design. Note that this does not resolve the issue though, design2-design4 still have zeros for some reason.

Only when using model averaging you can use different models, e.g. you can simultaneously optimise for estimating two different models with two different priors, but model averaging cannot be combined with pivot designs.

Michiel
Michiel Bliemer
 
Posts: 1705
Joined: Tue Mar 31, 2009 4:13 pm

Re: Homogeneous pivoted design

Postby Michiel Bliemer » Mon Mar 21, 2022 11:34 am

I spoke to our technical team and they mentioned that the specification of multiple models is not compatible with the modified Federov algorithm and therefore can produce unexpected results. This incompability is not mentioned for the ;fisher command in the manual, so this is an omission in the manual.

To resolve the issue, you will need to use the default swapping algorithm, see syntax below. You used constraints to set the levels of status quo alternative nomed, but without the modified Federov algorithm it is not possible to use these constraints. Instead, you can simply omit the dummy coded attributes in the status quo alternative where the level is set to the base level. Since 2 is the base for vaginal, 3 is the base for cancer, 3 is the base for heart, and 1 is the base for fracture, all these attributes in nomed result in 0 utility and therefore omitting them from the utility function makes no difference.

In the syntax below, I have given the same prior to b1 since otherwise I think the syntax would not make sense. But you may be able to run the syntax with different priors.

Code: Select all
Design
;alts(seg1) = nomed, opta, optb
;alts(seg2) = nomed, opta, optb
;alts(seg3) = nomed, opta, optb
;alts(seg4) = nomed, opta, optb
;rows = 30
;block = 3, minsum
;eff = fish(mnl,d)
;fisher(fish) = design1(seg1[0.25], seg2[0.25], seg3[0.25], seg4[0.25])

;model(seg1):
U(nomed) = b1[-0.0075]            * hotflash.ref[4]
         /
U(opta)  = b1                     * hotflash.piv[-90%,-70%,-50%,0%]
         + b2.dummy[0.03]         * delay[1,2]
         + b3.dummy[0.03]         * vaginal[1,2]
         + b4.dummy[0.03|0.0225]  * cancer[1,2,3]
         + b5.dummy[0.03|0.0133]  * heart[1,2,3]
         + b6.dummy[-0.03|-0.015] * fracture[3,2,1]
         /
U(optb)  = b1                     * hotflash.piv[-90%,-70%,-50%,0%]
         + b2                     * delay         
         + b3                     * vaginal
         + b4                     * cancer
         + b5                     * heart
         + b6                     * fracture

;model(seg2):
U(nomed) = b1[-0.0075]            * hotflash.ref[15]
         /
U(opta)  = b1                     * hotflash.piv[-90%,-70%,-50%,0%]
         + b2.dummy[0.03]         * delay[1,2]
         + b3.dummy[0.03]         * vaginal[1,2]
         + b4.dummy[0.03|0.0225]  * cancer[1,2,3]
         + b5.dummy[0.03|0.0133]  * heart[1,2,3]
         + b6.dummy[-0.03|-0.015] * fracture[3,2,1]
         /
U(optb)  = b1                     * hotflash.piv[-90%,-70%,-50%,0%]
         + b2                     * delay         
         + b3                     * vaginal
         + b4                     * cancer
         + b5                     * heart
         + b6                     * fracture

;model(seg3):
U(nomed) = b1[-0.0075]            * hotflash.ref[26]
         /
U(opta)  = b1                     * hotflash.piv[-90%,-70%,-50%,0%]
         + b2.dummy[0.03]         * delay[1,2]
         + b3.dummy[0.03]         * vaginal[1,2]
         + b4.dummy[0.03|0.0225]  * cancer[1,2,3]
         + b5.dummy[0.03|0.0133]  * heart[1,2,3]
         + b6.dummy[-0.03|-0.015] * fracture[3,2,1]
         /
U(optb)  = b1                     * hotflash.piv[-90%,-70%,-50%,0%]
         + b2                     * delay         
         + b3                     * vaginal
         + b4                     * cancer
         + b5                     * heart
         + b6                     * fracture

;model(seg4):
U(nomed) = b1[-0.0075]            * hotflash.ref[37]
         /
U(opta)  = b1                     * hotflash.piv[-90%,-70%,-50%,0%]
         + b2.dummy[0.03]         * delay[1,2]
         + b3.dummy[0.03]         * vaginal[1,2]
         + b4.dummy[0.03|0.0225]  * cancer[1,2,3]
         + b5.dummy[0.03|0.0133]  * heart[1,2,3]
         + b6.dummy[-0.03|-0.015] * fracture[3,2,1]
         /
U(optb)  = b1                     * hotflash.piv[-90%,-70%,-50%,0%]
         + b2                     * delay         
         + b3                     * vaginal
         + b4                     * cancer
         + b5                     * heart
         + b6                     * fracture
$


Michiel
Michiel Bliemer
 
Posts: 1705
Joined: Tue Mar 31, 2009 4:13 pm


Return to Choice experiments - Ngene

Who is online

Users browsing this forum: Bing [Bot], Google [Bot] and 8 guests

cron