by johnr » Thu Apr 12, 2018 9:38 am
Hi Kate
1. Sample size is 360 respondents
This is fine. Most empirical studies have a budgetary limit on the number of respondents possible.
2. Experiment has 3 attributes: Season (harvest, lean), Mold (moldy, clean), and Price (90,100,125,150,200,250).
Again, this theoretically fine, however you should note that the levels are not equidistant (100 – 90 = 10; 250 – 200 = 50). From an optimal experimental design perspective there is no issue with this, however empirically, there were some studies in the very early days of choice modelling that suggested that this may empirically influence the model results (I’m looking for the references now). A lot has changed this then, so it may have been related to how they did designs/estimation back then, or it may be a real phenomenon – I haven’t seen anything recent on this, so I cannot say one way or the other. It is just something to keep in mind. Don’t be overly worried however. We see this all the time without issues arising.
3. We want to give respondents two blocks of choice sets, where the season is held constant in each block (e.g. we ask mold:price choice sets all for the lean season then all for the harvest season). Moldiness will be communicated with a visual image (a photo of moldy or clean maize), with the choice set shown as two side-by-side images each with a price under the photo.
Why not generate two separate designs. The MNL model assumes that you can sum the components of the model that make up the VC matrix. Hence, if the constraints are not possible, you can generate two separate designs, one for each treatment.
4. We are going to estimate willingness-to-pay for clean (not moldy) maize in each season.
You can usually always generate WTP estimates, even if you optimise on another criterion. The WTP is in a linear utility function simply the ratio of two parameters. This is where you have gone wrong. By putting a zero prior on price, and dividing by price, you are dividing by zero, which is undefined. The software cannot find a design because the optimisation criteria it is returning when computing the wtp estimate is not defined. If you want to optimise on wtp, the denominator in the calculation cannot be zero.
5. We have no prior studies to estimate the coefficients but expect a positive sign on the moldy/clean (coded 0 for moldy and 1 for clean), and a negative sign on price but don't have even a sign hypothesis for the coefficient on season (coded 1 for harvest, 0 for lean). I don't know how to put in a signed hypothesis without a value as the priors so my draft code below has put 0 for all.
This is a common misunderstanding. A zero prior is not the same as not knowing the sign of the parameter, though it is often stated in this way. If you are optimising based on setting the prior to zero, then you are saying that the population parameter is zero (which it is true strictly has no positive or negative sign), not that it could be positive or could be negative. Zero is no different to say -0.1 – you are saying that you believe the parameter is -0.1, not -0.2 or 0.1, but -0.1. If your prior is 0, then you are saying you believe the parameter is 0. This is not the same as saying, it could be positive, or it could be negative – you are saying it is zero. Strictly speaking, if you want to allow for the possibility of either sign, then you should apply Bayesian priors that span either side of zero.
Here are two possible design approaches (first is where you give same questions to both groups) and the second gives different designs to each group. Note that this requires that you also add a no choice (for the harvest group – it is one for all alternatives so a constant across alternatives with no variation which causes problems). Let us think about other possible solutions, but this is a start.
Design
;alts(harvest) = alt1, alt2, alt3
;alts(mold) = alt1, alt2, alt3
;rows = 12
;eff = F1(mnl,d)
;Fisher(F1) = des1(harvest[0.5],mold[0.5])
;model(harvest):
U(alt1) = b2[-0.1] * A.covar[1] + b3[-0.1] * B[0,1] + b4[-0.005] * C[90,100,125,150,200,250] /
U(alt2) = b2 * A.covar[1] + b3 * B[0,1] + b4 * C[90,100,125,150,200,250]
;model(mold):
U(alt1) = b2[-0.1] * A.covar[0] + b3[-0.1] * B[0,1] + b4[-0.005] * C[90,100,125,150,200,250] /
U(alt2) = b2 * A.covar[0] + b3 * B[0,1] + b4 * C[90,100,125,150,200,250] $
Design
;alts(harvest) = alt1, alt2, alt3
;alts(mold) = alt1, alt2, alt3
;rows = 12
;eff = F1(mnl,d)
;Fisher(F1) = des1(harvest[0.5]) + des2(mold[0.5])
;model(harvest):
U(alt1) = b2[-0.1] * A.covar[1] + b3[-0.1] * B[0,1] + b4[-0.005] * C[90,100,125,150,200,250] /
U(alt2) = b2 * A.covar[1] + b3 * B[0,1] + b4 * C[90,100,125,150,200,250]
;model(mold):
U(alt1) = b2[-0.1] * A.covar[0] + b3[-0.1] * B[0,1] + b4[-0.005] * C[90,100,125,150,200,250] /
U(alt2) = b2 * A.covar[0] + b3 * B[0,1] + b4 * C[90,100,125,150,200,250] $