Dear Michiel,
Thanks for you prompt reply.
As you suggested, I removed some interactions that I had in my original ngene model specification and ran the model (in Apollo) to obtain priors. Below is the output:
- Code: Select all
Estimates:
Estimate s.e. t.rat.(0) p(1-sided) Rob.s.e. Rob.t.rat.(0) p(1-sided)
asc_DrugA 0.000000 NA NA NA NA NA NA
b_CERT_very_low 0.000000 NA NA NA NA NA NA
b_CERT_low 0.404195 0.276399 1.4624 0.07182 0.296966 1.3611 0.086744
b_CERT_moderate 1.206697 0.320756 3.7620 8.427e-05 0.372031 3.2435 5.9028e-04
b_CERT_high 1.705627 0.450533 3.7858 7.661e-05 0.554702 3.0749 0.001053
b_WAIT -0.028868 0.041982 -0.6876 0.24584 0.042642 -0.6770 0.249211
b_LIFExWAIT 1.5080e-04 0.001103 0.1368 0.44561 0.001071 0.1407 0.444037
b_QOL_light_workxWAIT 0.011200 0.012144 0.9222 0.17820 0.011151 1.0044 0.157600 [?]
b_QOL_comp_disabledxWAIT 0.014339 0.012937 1.1084 0.13385 0.012188 1.1765 0.119696 [?]
b_BENEFIT_smallxWAIT -0.024892 0.013533 -1.8394 0.03293 0.015589 -1.5967 0.055161 [?]
b_BENEFIT_substantialxWAIT 0.002079 0.011952 0.1740 0.43094 0.012302 0.1690 0.432881 [?]
b_QOL_light_workxCERT_very_low -0.096430 0.356192 -0.2707 0.39330 0.315712 -0.3054 0.380017 [?]
b_QOL_comp_disabledxCERT_very_low 0.447222 0.340265 1.3143 0.09437 0.325787 1.3727 0.084916 [?]
b_QOL_light_workxCERT_high 0.406101 0.348976 1.1637 0.12227 0.351122 1.1566 0.123722 [?]
b_QOL_comp_disabledxCERT_high -0.248969 0.316094 -0.7876 0.21545 0.374766 -0.6643 0.253239 [?]
b_BENEFIT_smallxCERT_very_low -0.378522 0.382386 -0.9899 0.16111 0.403617 -0.9378 0.174167 [?]
b_BENEFIT_substantialxCERT_very_low -0.383123 0.354293 -1.0814 0.13977 0.389200 -0.9844 0.162463 [?]
b_BENEFIT_smallxCERT_high -0.117946 0.348369 -0.3386 0.36747 0.383841 -0.3073 0.379316 [?]
b_BENEFIT_substantialxCERT_high -0.767797 0.346004 -2.2190 0.01324 0.335874 -2.2860 0.011128 [?]
In the output above, I am quite happy with my beta's for main effects (they are the expected signs (+ve/-ve) and magnitude relative to each other (preference order makes sense). I have included these in my ngene Bayesian efficient design as normally distributed Bayesian priors (b1 below). I am also mostly happy with the estimates for one of the interactions (LIFExWAIT) as it is the expected sign, as you have suggested in previous posts, I have included this as a uniform distributions Bayesian prior with a lower bound of 0 so ngene doesn't take draws with a negative estimate (b2 below).
With the remaining interactions (marked with a [?] in my output above), I am not sure what is the best way to proceed. Because they are interactions between categorical variables with multiple levels, it is difficult to interpret whether they should be +ve/-ve and I don't think it would be appropriate to at this stage because they are not straightforward.
*To avoid making an error in adding Bayesian priors, would you agree that the following approach would work for those which I am uncertain of:*
- For those interactions with small beta's close to 0 (+ve or -ve), input as normally distributed priors around 0 with a quite large SE estimate e.g. 0.3 so ngene considers a wide variety of draws for these parameters? - see i6-i8 below.
- For the interactions with quite large beta's (e.g., with BENEFIT - the bottom four (i12 to i15 below) are all negative between -0.3 and -0.7) even though I don't know whether these estimates are reliable, include them anyway? They have not changed much in modelling when removing interactions (always same sign and quite large in magnitude) so hope for the best? Is there a way I could make this approach a bit less risky?
For reference, I have tried out my suggested approach in ngene and is coded as follows. I seem to get reasonable sp estimates and can't see anything immediately wrong with the choice tasks it creates
- Code: Select all
;model(m2):
U(DrugA) = c1
+ b1.dummy[(n,0.4,0.3)|(n,1.2,0.4)|(n,1.7,0.6)] * CERT[1,2,3,0]
+ b2[n,-0.03,0.04] * WAIT[0,0.5,1,2]
+ i3[(u,-0.005,0)] * WAIT * LIFE[0.5,1,2,3]
+ i4[(n,0.01,0.01)] * WAIT * QOL.dummy[0]
+ i5[(n,0.01,0.01)] * WAIT * QOL.dummy[3]
+ i6[(n,0,0.3)] * WAIT * BENEFIT.dummy[0]
+ i7[(n,0,0.3)] * WAIT * BENEFIT.dummy[2]
+ i8[(n,0,0.3)] * CERT.dummy[0] * QOL.dummy[0]
+ i9[(n,0.45,0.33)] * CERT.dummy[0] * QOL.dummy[3]
+ i10[(n,0.4,0.35)] * CERT.dummy[3] * QOL.dummy[0]
+ i11[(n,-0.25,0.37)] * CERT.dummy[3] * QOL.dummy[3]
+ i12[(n,-0.38,0.4)] * CERT.dummy[0] * BENEFIT.dummy[0]
+ i13[(n,-0.38,0.39)] * CERT.dummy[0] * BENEFIT.dummy[2]
+ i14[(n,-0.12,0.38)] * CERT.dummy[3] * BENEFIT.dummy[0]
+ i15[(n,-0.77,0.34)] * CERT.dummy[3] * BENEFIT.dummy[2]
Thanks in advance again!
Rob
Full ngene code with restrictions etc in case useful:
- Code: Select all
design
;alts(m1) = DrugA*, DrugB*
;alts(m2) = DrugA*, DrugB*
;rows = 40
;block= 4
;eff = m2(mnl,d,median)
;bdraws = halton(200)
;alg = mfederov
;reject:
DrugA.LIFE = 0.5 and DrugA.WAIT = 0.5,
DrugA.LIFE = 0.5 and DrugA.WAIT = 1,
DrugA.LIFE = 0.5 and DrugA.WAIT = 2,
DrugA.LIFE = 1 and DrugA.WAIT = 1,
DrugA.LIFE = 1 and DrugA.WAIT = 2,
DrugA.LIFE = 2 and DrugA.WAIT = 2,
DrugB.LIFE = 0.5 and DrugB.WAIT = 0.5,
DrugB.LIFE = 0.5 and DrugB.WAIT = 1,
DrugB.LIFE = 0.5 and DrugB.WAIT = 2,
DrugB.LIFE = 1 and DrugB.WAIT = 1,
DrugB.LIFE = 1 and DrugB.WAIT = 2,
DrugB.LIFE = 2 and DrugB.WAIT = 2
;require:
DrugA.LIFE = DrugB.LIFE,
DrugA.QOL = DrugB.QOL,
DrugA.BENEFIT = DrugB.BENEFIT
;model(m1):
U(DrugA) = c1
+ b1.dummy[0|0|0] * QOL[1,2,3,0]
+ b2 * LIFE[0.5,1,2,3]
+ b3.dummy[0.0001|0.0002] * BENEFIT[1,2,0]
+ b4.dummy[0.0001|0.0002|0.0003] * CERT[1,2,3,0]
+ b5[-0.0001] * WAIT[0,0.5,1,2]
/
U(DrugB) = b1.dummy[0|0|0] * QOL[1,2,3,0]
+ b2 * LIFE[0.5,1,2,3]
+ b3.dummy[0.0001|0.0002] * BENEFIT[1,2,0]
+ b4.dummy[0.0001|0.0002|0.0003] * CERT[1,2,3,0]
+ b5[-0.0001] * WAIT[0,0.5,1,2]
;model(m2):
U(DrugA) = c1
+ b1.dummy[(n,0.4,0.3)|(n,1.2,0.4)|(n,1.7,0.6)] * CERT[1,2,3,0]
+ b2[n,-0.03,0.04] * WAIT[0,0.5,1,2]
+ i3[(u,-0.005,0)] * WAIT * LIFE[0.5,1,2,3]
+ i4[(n,0.01,0.01)] * WAIT * QOL.dummy[0]
+ i5[(n,0.01,0.01)] * WAIT * QOL.dummy[3]
+ i6[(n,0,0.3)] * WAIT * BENEFIT.dummy[0]
+ i7[(n,0,0.3)] * WAIT * BENEFIT.dummy[2]
+ i8[(n,0,0.3)] * CERT.dummy[0] * QOL.dummy[0]
+ i9[(n,0.45,0.33)] * CERT.dummy[0] * QOL.dummy[3]
+ i10[(n,0.4,0.35)] * CERT.dummy[3] * QOL.dummy[0]
+ i11[(n,-0.25,0.37)] * CERT.dummy[3] * QOL.dummy[3]
+ i12[(n,-0.38,0.4)] * CERT.dummy[0] * BENEFIT.dummy[0]
+ i13[(n,-0.38,0.39)] * CERT.dummy[0] * BENEFIT.dummy[2]
+ i14[(n,-0.12,0.38)] * CERT.dummy[3] * BENEFIT.dummy[0]
+ i15[(n,-0.77,0.34)] * CERT.dummy[3] * BENEFIT.dummy[2]
/
U(DrugB) = b1.dummy[(n,0.4,0.3)|(n,1.2,0.4)|(n,1.7,0.6)] * CERT[1,2,3,0]
+ b2[n,-0.03,0.04] * WAIT[0,0.5,1,2]
+ i3[(u,-0.005,0)] * WAIT * LIFE[0.5,1,2,3]
+ i4[(n,0.01,0.01)] * WAIT * QOL.dummy[0]
+ i5[(n,0.01,0.01)] * WAIT * QOL.dummy[3]
+ i6[(n,0,0.3)] * WAIT * BENEFIT.dummy[0]
+ i7[(n,0,0.3)] * WAIT * BENEFIT.dummy[2]
+ i8[(n,0,0.3)] * CERT.dummy[0] * QOL.dummy[0]
+ i9[(n,0.45,0.33)] * CERT.dummy[0] * QOL.dummy[3]
+ i10[(n,0.4,0.35)] * CERT.dummy[3] * QOL.dummy[0]
+ i11[(n,-0.25,0.37)] * CERT.dummy[3] * QOL.dummy[3]
+ i12[(n,-0.38,0.4)] * CERT.dummy[0] * BENEFIT.dummy[0]
+ i13[(n,-0.38,0.39)] * CERT.dummy[0] * BENEFIT.dummy[2]
+ i14[(n,-0.12,0.38)] * CERT.dummy[3] * BENEFIT.dummy[0]
+ i15[(n,-0.77,0.34)] * CERT.dummy[3] * BENEFIT.dummy[2]
$