Millisecond Forums

Item Probabilities and Cross-Randomization

https://forums.millisecond.com/Topic27511.aspx

By psych101 - 7/25/2019

Hello,

Could someone please give me advice on how to achieve the following, or point me to a relevant forum topic/sample script?

There are three players (player a, b, c) on every trial, and for two of those players, it should always to be a new number counting upward for every trial. For the remaining player c, I would like it to be "Player You" 80% of the time, and for the remaining 20%, another number counting upward just like the first two players.

I have thought about doing it as odd and even number lists, but that doesn't work because of the third player who will sometimes be You, and other times should be another number counting upward. 

/ players_a_odd = 0
/ players_b_even = 0
/ players_c_or_you = 0

<list players_a_odd>
/ items = (1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25,
27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55,
57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85,
87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113,
115, 117, 119, 121, 123, 125, 127, 129, 131, 133, 135, 137,
139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159,
161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183,
185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207,
209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231,
233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255,
257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281)
</list>

<list players_b_even>
/ items = (2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22,
24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48,
50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74,
76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100,
102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122,
124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144,
146, 148, 150, 152,154, 156, 158, 160,162,
164, 166, 168, 170, 172, 174, 176, 178, 180,
182, 184, 186, 188, 190, 192, 194,196, 198,
200, 202, 204, 206, 208, 210, 212, 214, 216,
218, 220, 222, 224, 226, 228, 230,232, 234,
236, 238, 240,242, 244, 246, 248,250, 252,
254, 256, 258, 260, 262, 264, 266,268, 270,
272, 274, 276, 278, 280, 282)
</list>

For the following code, I want it to only use list.players_a_odd.nextvalue or for players_b_even.nextvalue 20% of the time, and I want to make sure that for the trial after this one (if they show the player a value or player b value instead of You) uses a new value for player a or b, depending on which one was selected.

<list players_c_or_you>
/ items = ("You", list.players_a_odd.nextvalue || list.players_b_even.nextvalue)
/ itemprobabilities = (80%, 20%)
</list>

I would also like to randomize the order of the players displayed.
<caption player>
/ caption = "Player <%list.players_a_odd.item(values.players_a_odd)%>,
Player <%list.players_b_even.item(values.players_b_even)%>, 
Player <%list.players_c_or_you.item(values.players_c_or_you)%>"
</caption>

<surveypage numbers>
/ ontrialbegin = [

values.players_a_odd = list.players_a_odd.nextvalue;
values.players_b_even = list.players_b_even.nextvalue;
values.players_c_or_you = list.players_c_or_you.nextvalue;
]
/ questions = [1=distribution_original, distribution_a, distribution_b, Q1_a, Q1_b,]
/ showpagenumbers = false
/ showquestionnumbers = false
/ nextbuttonposition = (40%, 95%)
/ recorddata = true
</surveypage>

I greatly appreciate any help. Thank you
By Dave - 7/25/2019

psych101 - 7/25/2019
Hello,

Could someone please give me advice on how to achieve the following, or point me to a relevant forum topic/sample script?

There are three players (player a, b, c) on every trial, and for two of those players, it should always to be a new number counting upward for every trial. For the remaining player c, I would like it to be "Player You" 80% of the time, and for the remaining 20%, another number counting upward just like the first two players.

I have thought about doing it as odd and even number lists, but that doesn't work because of the third player who will sometimes be You, and other times should be another number counting upward. 

/ players_a_odd = 0
/ players_b_even = 0
/ players_c_or_you = 0

<list players_a_odd>
/ items = (1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25,
27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55,
57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85,
87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113,
115, 117, 119, 121, 123, 125, 127, 129, 131, 133, 135, 137,
139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159,
161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183,
185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207,
209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231,
233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255,
257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281)
</list>

<list players_b_even>
/ items = (2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22,
24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48,
50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74,
76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100,
102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122,
124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144,
146, 148, 150, 152,154, 156, 158, 160,162,
164, 166, 168, 170, 172, 174, 176, 178, 180,
182, 184, 186, 188, 190, 192, 194,196, 198,
200, 202, 204, 206, 208, 210, 212, 214, 216,
218, 220, 222, 224, 226, 228, 230,232, 234,
236, 238, 240,242, 244, 246, 248,250, 252,
254, 256, 258, 260, 262, 264, 266,268, 270,
272, 274, 276, 278, 280, 282)
</list>

For the following code, I want it to only use list.players_a_odd.nextvalue or for players_b_even.nextvalue 20% of the time, and I want to make sure that for the trial after this one (if they show the player a value or player b value instead of You) uses a new value for player a or b, depending on which one was selected.

<list players_c_or_you>
/ items = ("You", list.players_a_odd.nextvalue || list.players_b_even.nextvalue)
/ itemprobabilities = (80%, 20%)
</list>

I would also like to randomize the order of the players displayed.
<caption player>
/ caption = "Player <%list.players_a_odd.item(values.players_a_odd)%>,
Player <%list.players_b_even.item(values.players_b_even)%>, 
Player <%list.players_c_or_you.item(values.players_c_or_you)%>"
</caption>

<surveypage numbers>
/ ontrialbegin = [

values.players_a_odd = list.players_a_odd.nextvalue;
values.players_b_even = list.players_b_even.nextvalue;
values.players_c_or_you = list.players_c_or_you.nextvalue;
]
/ questions = [1=distribution_original, distribution_a, distribution_b, Q1_a, Q1_b,]
/ showpagenumbers = false
/ showquestionnumbers = false
/ nextbuttonposition = (40%, 95%)
/ recorddata = true
</surveypage>

I greatly appreciate any help. Thank you

> for two of those players, it should always to be a new number counting upward for every trial.

What is that supposed to mean. Please be more precise and give a concrete example.

> For the remaining player c, I would like it to be "Player You" 80% of the time, and for the remaining 20%, another number counting upward just like the first two players.

Why don't you set up either (1) two trials -- one "you" one "not you" -- and then sample those trials randomly in the desired proportions (80% to 20%), or (2) do the same thing on the item level (i.e. set up a <list> containing 80% "you", 20% "not you", sample the type of trial from the list /ontrialbegin and adjust the rest as needed with conditional logic?

> I would also like to randomize the order of the players displayed.

Then set up three <captions> -- one per "player" -- and randomize their order / positions.

By psych101 - 7/25/2019


Hi Dave,
>> for two of those players, it should always to be a new number counting upward for every trial. 
       > What is that supposed to mean. Please be more precise and give a concrete example.

Apologies for not being more clear. There are three players per trial, and sometimes "you" are a player and sometimes you are not a player. Each player will be listed as "Player #" on each trial. The numbers will be consecutive numbers, starting from Player 1 to the Player number for the total amount of trials. If "player you" is not involved in a trial, then the players will be three consecutive numbers; if "player you" is involved in a trial, there is just two consecutive numbers, and "Player you". 
 As an example:
  • Trial 1:  Player 1, Player 2, Player You; 
  • Trial 2: Player 3, Player You (with randomization for order), Player 4
  • Trial 3: Player 5, player 6, player 7
Due to this, my previous method of creating a list with odd numbers and a list with even numbers was problematic, since the 20% of trials would need to use a number from one of those lists, which may interfere with the consecutive numbering of players. Do you know how I should go about this? I understand that creating two new trials (one with you, one without) could work, but I'm not sure how to go about that and maintain the consecutive player numbers. 

Thank you
By Dave - 7/25/2019

psych101 - 7/25/2019

Hi Dave,
>> for two of those players, it should always to be a new number counting upward for every trial. 
       > What is that supposed to mean. Please be more precise and give a concrete example.
  • Trial 1:  Player 1, Player 2, Player You; 
  • Trial 2: Player 3, Player You (with randomization for order), Player 4
  • Trial 3: Player 5, player 6, player 7
Due to this, my previous method of creating a list with odd numbers and a list with even numbers was problematic, since the 20% of trials would need to use a number from one of those lists, which may interfere with the consecutive numbering of players. Do you know how I should go about this? I understand that creating two new trials (one with you, one without) could work, but I'm not sure how to go about that and maintain the consecutive player numbers. 

Thank you

Thanks for the clarification. This should actually be very, very straightfforward. All you need is a single list, set to sequential selection. On "you" trials, sample two values from the list (one for player A, one for player B, none for player C). On "not you" trials, sample three consecutive values from the list, one each for player A, B, and C. I don't see how or why you would need multiple odd/even lists or any other complicated hoops.

<values>
/ trialtype = ""

/ player_a = 0
/ player_b = 0
/ player_c = 0

/ ax = 0%
/ bx = 0%
/ cx = 0%
</values>

// 1 = "you"
// 2 = "not you"
<list trialtype>
/ items = (1, 0)
/ poolsize = 10
/ itemprobabilities = (0.8; 0.2)
</list>

<list playervalues>
/ poolsize = 22
/ selectionmode = sequence
/ selectionrate = always
</list>

<surveypage mypage>
/ ontrialbegin = [
values.trialtype = list.trialtype.nextvalue;
values.player_a = list.playervalues.nextindex;
values.player_b = list.playervalues.nextindex;
if (values.trialtype == 1) {
values.player_c = "you"
} else {
values.player_c = list.playervalues.nextindex;
};
]
/ ontrialbegin = [
values.ax = list.xpos.nextvalue;
values.bx = list.xpos.nextvalue;
values.cx = list.xpos.nextvalue;
]
/ questions = [1=a; 2=b; 3=c; 4=somequestion; 5=debug]
/ showpagenumbers = false
/ showquestionnumbers = false
</surveypage>

<caption a>
/ caption = "Player A = <%values.player_a%>"
/ position = (values.ax, 20%)
</caption>

<caption b>
/ caption = "Player B = <%values.player_b%>"
/ position = (values.bx, 20%)
</caption>

<caption c>
/ caption = "Player C = <%values.player_c%>"
/ position = (values.cx, 20%)
</caption>

<list xpos>
/ items = (20%, 40%, 60%)
/ selectionrate = always
</list>

<radiobuttons somequestion>
/ options = ("A", "B", "C")
/ orientation = horizontalequal
/ position = (50%, 50%)
/ defaultresponse = "A"
/ required = false
</radiobuttons>

<caption debug>
/ caption = "Trialtype = <%values.trialtype%>"
/ position = (50%, 10%)
</caption>


<block myblock>
/ trials = [1-10 = mypage]
</block>

<data>
/ columns = (date time subject group blocknum blockcode trialnum trialcode response latency correct
values.trialtype values.player_a values.player_b values.player_c values.ax values.bx values.cx)
/ separatefiles = true
</data>

By psych101 - 7/25/2019

Thank you for your help, Dave. I greatly appreciate it.