While in the Single Factorial Experimental Design only one property of the stimulus is varied (e.g., whether a product carries an “organic” seal or not), in the multi-factorial design multiple properties are manipulated (e.g., organic seal and price). The combinations of the individual characteristics are also referred to as “vignette” or “cell” (e.g. “bio/price value”).
A special case of multifactorial designs is conjoint analysis, in which respondents must choose (multiple times) between two or more vignettes. Since conjoint analyses can be designed very differently, they are not covered in this guide.
Tip: To understand the PHP codes below, read the chapters Introduction to PHP code and Introduction to arrays.
Tip: For multifactorial designs with quasi-experimental factors, see Randomization per Block.
As an example, the following is a two-factor design in which respondents are presented with a product. The two manipulated factors are….
This results in 6 vignettes or cells in the complete design:
Considering these 6 vignettes as 6 manifestations of a factor, any multifactorial design can be translated into a single factorial design. For the implementation in SoSci Survey, it is now important how the experimental treatment (the stimulus) is designed:
The following procedure is suitable for the technical implementation:
put()
.Exactly what content you store in the randomizer depends on what stimulus you want to present at the end. However, it is advisable to store at least the individual factor specifications and a description of the vignette:
1 = 1, 1, no organic seal and cheap 2 = 1, 2, no organic seal and medium price 3 = 1, 3, no organic seal and expensive 4 = 2, 1, organic seal visible and cheap 5 = 2, 2, organic seal visible and medium price 6 = 2, 3, organic seal visible and expensive
The comma can be used to separate the different details per vignette so that they can be stored separately in the data set and used separately in the PHP code.
Additional information about the vignettes can also be deposited. For example, a product photo could be stored for the (non-)presence of an organic seal and a price indication for the price:
1 = 1, 1, product_nob.jpg, "7,50 €", no organic seal and cheap 2 = 1, 2, product_nob.jpg, "9,95 €", no organic seal and medium price 3 = 1, 3, product_nob.jpg, "17,95 €", no organic seal and expensive 4 = 2, 1, product_bio.jpg, "7,50 €", organic seal visible and cheap 5 = 2, 2, product_bio.jpg, "9,95 €", organic seal visible and medium price 6 = 2, 3, product_bio.jpg, "17,95 €", organic sela visible and expensive
Please note the quotation marks around the price quote. These are necessary because a comma is used in the price quote itself. If you want to use a quotation mark within a specification, put a typographic ('
and ') or two normal quotation marks (
""
) instead.
Tip: How to create a random generator, read in more detail under Single Factorial Experimental Design.
The internal variables are a question type which creates additional variables in the dataset. Please create a new question of the type “internal variables” in the data set. Within this question you create as many variables (items) as you have provided columns in the random generator.
In the above example, there are 5 columns, corresponding to 5 variables:
In the following, two PHP functions are used to copy the information stored in the vignette as Comma-Separated-Values (CSV) into the internal variables:
[["1", "3", "product_nos.jpg", "17,95 €", "no organic seal and expensive"]
If the random generator has the identifier “RG01” and the 5 internal variables were created in the question “RG02”, then the following PHP code copies the values into individual variables.
putList('RG02', value('RG01', 'csv'));
Here the same functionality is again divided into two steps for the sake of clarity:
$content = value('RG01', 'csv'); putList('RG02', $content);
Note: In order for the PHP code to access the drawn random number or tuple with the value()
function, the random draw must already have occurred. This means that the random generator must be placed above the PHP code or on a previous page of the questionnaire when composing the questionnaire.
The presentation of the stimulus works as explained in the Randomization with PHP-Code manual or the instructions linked there.
You can use all internal variables for this, in which you have stored the values by means of putList()
. So, for example, to display the appropriate image depending on the first factor, you can use the file name in variable RG02_03
:
replace('%bild%', value('RG02_03')); html('<div><img src="%image%§ alt=""></div>');
Of course, you can also swap the HTML code into a text (here e.g. “TX01”) and insert the placeholder %image%
directly using show()
:
show('TX01', [ '%image%' => value('RG02_03') ]);
It would also be possible to work with the numeric code in RG02_01
and depending on it to include one of two texts (for example “TX02” and “TX03”) where you have stored the HTML code to display one of the images respectively.
if (value('RG02_01') == 1) { text('TX02'); } else { text('TX03'); }
Of course, you can also implement the second factor by using placeholders. In the following example, for example, the HTML code for the image and below it the price would be stored in the text “TX04”:
<div style="width: 400px; max-width: 100%; border: 1px solid #CCCCCC; margin: 2em 0;"> <div style="margin: 0 auto 1em"> <img src="%image%" alt="Produkt" style="max-width: 100%;"> </div> <div style="margin: 0 auto 0; font-size: 120%"> %price% </div> </div>
You would include this text “TX04” with the drawn vignette in the questionnaire as follows:
show('TX04', [ '%image%' => value('RG02_03'), '%price%' => value('RG02_04') ]);