Have an idea?

Visit Sawtooth Software Feedback to share your ideas on how we can improve our products.

Determine CBC exercise based on response to prior question

Hi,

I’m scripting a survey where I have two separate CBCs. The respondents will only see one of these; which one is determined by their response to a prior question (single choice matrix), where the category which receives the highest score will be used in the CBC exercise. So far, so good – I’ve set up a skip logic from the last question before the CBCs which moves respondents to the correct CBC, and each CBC has a skip logic at the end to skip to the first question after the CBCs, in order to avoid having the respondents answering both.

However, in the event that the respondent rates both categories equally, I would like them to be randomly assigned to either CBC. As it is now, they simply get the first CBC exercise and skip the second. I tried using randomized blocks, one for each CBC (plus extra questions), but I’m then faced with the following error message:
“Error: Question 'CBIM9' - Skip Logic - Skipping to a question that is involved in a randomized block requires the "Skip To" question be the first question of the first block of the Randomized Block Set.”
The way I interpret this is that I can’t have both the previously described skip logic and the randomized blocks, since I don’t want to have every respondent skip to the first question in the first block, but rather be randomly distributed. Is there any way around this?

Furthermore, and I don’t know if this is even possible, but ideally I would like for the block randomization to take into account how many respondents have answered the CBC exercises, in order to get an even distribution among the two CBCs. Is this possible? If so, how do I do it?
asked Jun 14 by Niclas
Just a few comments ...

Are you using "<End of Block>" as the Skip To question? If not, try that.

The short answer to even distribution is yes, it is possible.

You can distribute any question / blocks of questions to be displayed according to a set proportion by using quotas (which act as counters).

You could setup a constructed list that determines the question (or block of questions) to be shown.

I'm using this example as a way of explaining.

Assume I had this Perl Script in my constructed list ...
Note: this constructed list uses "BlockList" as the parent list and BlockList consists of 2 codes: 1-show first block and 2-show 2nd block.
Begin Unverified Perl 
 
 if (VALUE("Q1")>VALUE("Q2"))
  {  
   ADD("BlockList",1);
  }

 elsif (VALUE("Q2")>VALUE("Q1"))
  {  
   ADD("BlockList",2);
  }

 elsif ((VALUE("Q1")==VALUE("Q2"))&&(QUOTACELLCOMPLETES("QTCBC",2)>QUOTACELLCOMPLETES("QTCBC",1)))
  {  
   ADD("BlockList",1);
  }
 elsif ((VALUE("Q1")==VALUE("Q2"))&&(QUOTACELLCOMPLETES("QTCBC",1)>QUOTACELLCOMPLETES("QTCBC",2)))
  {  
   ADD("BlockList",2);
  }
  
End Unverified

The above conditions say ...
if Q1> Q2, show block1
if Q2> Q1, show block2
if Q1= Q2 and the current count for block2>the current count for block1, show block1
if Q1= Q2 and the current count for block1>the current count for block2, show block2

You would have to setup a quota question (in the code I called QTCBC) that simply counts the number of times each block is shown. Set the targets high to prevent quota failure.

The conditions would be ...
Block 1-ListValue(BlockConList,1)=1
Block 2-ListValue(BlockConList,1)=2

I have assumed the constructed list is called "BlockConList".

When setting up your randomised blocks, you would select the "Use Constructed List" method and click "BlockConList" as the constructed list.

So in summary:

1/ Your quota question counts the question blocks shown by looking at the first value selected in the constructed list.
2/ The constructed list applies the selection rules.
3/ Your randomised block uses the constructed list to display the correct block of questions.

Hopefully that helps.

1 Answer

0 votes
Quotas are often a quick fix for this.  Create a quota with two cells, where the logic should be similar to your skip logic.  For simplicity's sake, let's say instead of a Matrix you just had two variables: A and B

The logic for cell 1(A conjoint) would be: A >=B

The logic for cell 2 (B conjoint) would be: B>=A

Set the limits on the cells to something big, like 1,000 so neither one will fill up.  Then, change the quota settings to check for cell membership randomly.  This will roll the dice for each respondent on whether the logic for Cell 1 or Cell 2 is checked first.  If they are equal, then that randomization determines which cell they go into.  If they are not equal, then they would only qualify for the appropriate cell.

Then, base your skip logic on quota cell assignment.

Bonus is that checking randomly actually does a weighted check, so if one cell is more full than the other, it has a higher probability of being checked first.  It's not a true least-fill quota system, though.
answered Jun 15 by Brian McEwan Gold Sawtooth Software, Inc. (37,085 points)
...