Page 1 of 1

Ngene questions

PostPosted: Mon Dec 04, 2023 4:54 pm
by Nik
Dear all,

Clara and I have a research group and are currently using Ngene. We would have a couple of questions to which we did not find clear answers in the forum or the manual:

1. We want to estimate Willingness to Pay for Chocolate Bars and would want to create a survey with D-efficient designs. Our attribute levels are are ranging from 3-4. We were unsure as to whether we should use ";eff = (mnl, wtfp(ref1)) ;wtp = ref1(*/b1)" or ";eff = (mnl, d)" and what benefit using wtp would generate.

2. Since we want to maximize d-efficiency, we would want to use 48 generated choices & split them in 4 blocks. How do we portray them in Ngene in the right order (currently, we have 1 design for block 3, then one for block 2 etc.) & how would we deploy that in Html so that we have 1 website and each respondent gets randomly assigned to a block?

3. How can we collect the data/which format is acceptable to analyse results in Ngene?

4. What can be analysed in Ngene afterwards?

5. Is it possible to change design formats for the whole project? E.g. changing fields names from "1" to "Mars chocolate bar"? We currently have to redo the formatting each time we change the syntax.

6. How can we deploy the "No choice" option? We added another alts & did not give it any utility but it does not appear in an extra column - in fact, it is not shown at all.

I would be grateful for any hint, best regards Nik :)

Re: Ngene questions

PostPosted: Mon Dec 04, 2023 5:43 pm
by Michiel Bliemer
First of all, Ngene is a tool to generate experimental designs, it is not a tool for data collection or data analysis. For data collection, you can use SurveyEngine or another tool that supports choice experiments. For data analysis, you can use Apollo, Biogeme, or Nlogit.

1. I recommend using ;eff = (mnl,d) because this is most common and minimises standard errors of the parameter estimates, i.e. it minimises se(beta). Using ;wtp minimises the standard errors of WTP estimates, i.e. it minimises se(beta1/betac).

2 & 3. For the data collection I recommend using SurveyEngine. You can copy and paste the Ngene design into SurveyEngine using design coding. I refer to the support of SurveyEngine. I believe you can also use the Choice Based Conjoint module in Qualtrics or you can program your own javascript code. To estimate choice models, you can use free software (Apollo or Biogeme) or commercial software (Nlogit). The data format for Apollo & Biogeme is similar, but is different for Nlogit. I refer to the manuals of these softwares.

4. Ngene is not a data analysis tool, it is an experimental design generation tool.

5. In a design in Ngene you can find a Syntax tab. After you have applied scenario formatting, the syntax is appended with formatting syntax such as in the syntax below. You can use this syntax to edit directly without the need to reformat all scenarios again.

6. In the scenario formatting editor, you can right-click on the grid and add a column to the right for the opt-out alternative.

Note that the formatted scenarios are ONLY for you as an analyst to quickly inspect the design. These formatted scenarios are not meant to be used to collect data. Instead, you format all choice tasks in a survey tool like SurveyEngine, where you can also add images etc.

Code: Select all
design
;alts = policyA*, policyB*, sq*
;rows = 8
;eff = (mnl,d)
;alg = mfederov
;require:
sq.flooding = 5, sq.recycling = 0, sq.quality = 0, sq.tax = 25
;model:
U(policyA) = b_flood[0.1]             * flooding[5,10,15,20]  ? years between floodings
           + b_recycle.dummy[0.3]     * recycling[1,0]        ? 0 = no (base), 1 = yes
           + b_quality.dummy[0.3|0.5] * quality[1,2,0]        ? 0 = low (base), 1 = medium, 2 = high
           + b_tax[-0.005]            * tax[25,50,75,100]     ? annual stormwater land tax ($)
           /
U(policyB) = b_flood   * flooding
           + b_recycle * recycling
           + b_quality * quality
           + b_tax     * tax
           /
U(sq)      = b_sq[0]
           + b_flood   * flooding
           + b_recycle * recycling
           + b_quality * quality
           + b_tax     * tax
;formatTitle = 'Scenario <scenarionumber>'
;formatTableHeader = 'All residents and land owners pay a stormwater charge in Sydney. Which of the following options would have your preference&?'
;formatTableDimensions = 4, 6
;formatChoices = choice
;formatTable:
1,1 = '' /
1,2 = 'Flood mitigation' /
1,3 = 'Recycle stormwater' /
1,4 = 'Water quality' /
1,5 = 'Annual land tax' /
1,6 = 'Preferred option&:' /
2,1 = 'Policy A' /
2,2 = '<policya.flooding>' /
2,3 = '<policya.recycling>' /
2,4 = '<policya.quality>' /
2,5 = '<policya.tax>' /
2,6 = '<choice>' /
3,1 = 'Policy B' /
3,2 = '<policyb.flooding>' /
3,3 = '<policyb.recycling>' /
3,4 = '<policyb.quality>' /
3,5 = '<policyb.tax>' /
3,6 = '<choice>' /
4,1 = 'Current' /
4,2 = '<sq.flooding>' /
4,3 = '<sq.recycling>' /
4,4 = '<sq.quality>' /
4,5 = '<sq.tax>' /
4,6 = '<choice>'
;formatTableStyle:
1,1 = 'default' /
1,2 = 'headingattribute' /
1,3 = 'headingattribute' /
1,4 = 'headingattribute' /
1,5 = 'headingattribute' /
1,6 = 'headingattribute' /
2,1 = 'heading1' /
2,2 = 'body1' /
2,3 = 'body1' /
2,4 = 'body1' /
2,5 = 'body1' /
2,6 = 'choice1' /
3,1 = 'heading2' /
3,2 = 'body2' /
3,3 = 'body2' /
3,4 = 'body2' /
3,5 = 'body2' /
3,6 = 'choice2' /
4,1 = 'heading3' /
4,2 = 'body3' /
4,3 = 'body3' /
4,4 = 'body3' /
4,5 = 'body3' /
4,6 = 'choice3'
;formatStyleSheet = Bone.css
;formatAttributes:
policya.flooding(5=Flooding occurs once every # years, 10=Flooding occurs once every # years, 15=Flooding occurs once every # years, 20=Flooding occurs once every # years) /
policya.recycling(1=Yes, 0=No) /
policya.quality(1=Medium, 2=High, 0=Low) /
policya.tax(25=A&$ #, 50=A&$ #, 75=A&$ #, 100=A&$ #) /
policyb.flooding(5=Flooding occurs once every # years, 10=Flooding occurs once every # years, 15=Flooding occurs once every # years, 20=Flooding occurs once every # years) /
policyb.recycling(1=Yes, 0=No) /
policyb.quality(1=Medium, 2=High, 0=Low) /
policyb.tax(25=A&$ #, 50=A&$ #, 75=A&$ #, 100=A&$ #) /
sq.flooding(5=Flooding occurs once every # years, 10=Flooding occurs once every # years, 15=Flooding occurs once every # years, 20=Flooding occurs once every # years) /
sq.recycling(1=Yes, 0=No) /
sq.quality(1=Medium, 2=High, 0=Low) /
sq.tax(25=A&$ #, 50=A&$ #, 75=A&$ #, 100=A&$ #)
$



Michiel