Problem with adaptive version of Math Effort Task


Problem with adaptive version of Math Effort Task

Author
Message
Lingi
Lingi
Associate Member
Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)

Group: Forum Members
Posts: 6, Visits: 23
Hi everyone,

I have a question concerning an modified version of the Math Effort Task which is meant to be adaptive.

Participants have to calculate the sum of 5 digits appearing one after the other on the screen (it is possible to change the number of digits). There are five levels of increasing difficulty depending on the range and the duration of the presentation. What I would like to do is make the task adaptive, so that a correct response increases the difficulty of the next level by one and a wrong response decreases the difficulty of the next level.

What I tried so far works, but the level switch is delayed.

I would be very happy for any suggestions! Thanks a lot!

Here is my script:

<trial numberPresentations>
/ ontrialbegin = [
values.countTotalTrials += 1;
values.countTrialsCurrentLevel += 1;
if (values.currentLevel == 1) {
values.number1 = list.level1.nextvalue;
values.number2 = list.level1.nextvalue;
values.number3 = list.level1.nextvalue;
values.number4 = list.level1.nextvalue;
values.number5 = list.level1.nextvalue;
values.countLevel1 += 1;
} else if (values.currentLevel == 2) {
values.number1 = list.level2.nextvalue;
values.number2 = list.level2.nextvalue;
values.number3 = list.level2.nextvalue;
values.number4 = list.level2.nextvalue;
values.number5 = list.level2.nextvalue;
values.countLevel2 += 1;
} else if (values.currentLevel == 3) {
values.number1 = list.level3.nextvalue;
values.number2 = list.level3.nextvalue;
values.number3 = list.level3.nextvalue;
values.number4 = list.level3.nextvalue;
values.number5 = list.level3.nextvalue;
values.countlevel3 += 1;
} else if (values.currentLevel == 4) {
values.number1 = list.level4.nextvalue;
values.number2 = list.level4.nextvalue;
values.number3 = list.level4.nextvalue;
values.number4 = list.level4.nextvalue;
values.number5 = list.level4.nextvalue;
values.countLevel4 += 1;
} else if (values.currentLevel == 5) {
values.number1 = list.level5.nextvalue;
values.number2 = list.level5.nextvalue;
values.number3 = list.level5.nextvalue;
values.number4 = list.level5.nextvalue;
values.number5 = list.level5.nextvalue;
values.countLevel5 += 1;
};
if (values.nrDigits < 5){
values.number5 = 0;
};
if (values.nrDigits < 4){
values.number4 = 0;
};
if (values.nrDigits < 3){
values.number3 = 0;
};

trial.numberPresentations.insertstimulustime(clearscreen, (0*parameters.ISI + 1*parameters.numberDuration));
trial.numberPresentations.insertstimulustime(text.number2, (1*parameters.numberDuration + 1*parameters.ISI));

if (values.nrDigits > 2){
trial.numberPresentations.insertstimulustime(clearscreen, (1*parameters.ISI + 2*parameters.numberDuration));
trial.numberPresentations.insertstimulustime(text.number3, (2*parameters.numberDuration + 2*parameters.ISI));
};
if (values.nrDigits > 3){
trial.numberPresentations.insertstimulustime(clearscreen, (2*parameters.ISI + 3*parameters.numberDuration));
trial.numberPresentations.insertstimulustime(text.number4, (3*parameters.numberDuration + 3*parameters.ISI));
};
if (values.nrDigits > 4){
trial.numberPresentations.insertstimulustime(clearscreen, (3*parameters.ISI + 4*parameters.numberDuration));
trial.numberPresentations.insertstimulustime(text.number5, (4*parameters.numberDuration + 4*parameters.ISI));
};
]
/ontrialbegin = [
if (values.previouscorrect == 1) {values.currentLevel += 1}
else if (values.previouscorrect == 0 > 1) {values.currentLevel -= 1}
]

/ontrialbegin = [
if (values.correctprevioustrial == 1) {values.numberDuration -= 20}
else if (values.correctprevioustrial == 0) {values.numberDuration += 20}
]
/ stimulustimes = [0 = number1]
/ trialduration = (values.nrDigits*parameters.numberDuration + (values.nrDigits-1)*parameters.ISI)
/ ontrialend = [
trial.numberPresentations.resetstimulusframes();
values.solution = values.number1 + values.number2 + values.number3 + values.number4 + values.number5;
]
/ branch = [
surveypage.response;
]
/ recorddata = false
</trial>

<surveypage response>
/ questions = [1 = response]
/ fontstyle = ("Arial", 3.5%, true, false, false, false, 5, 1)
/ itemfontstyle = ("Arial", 3%, true, false, false, false, 5, 1)
/ responsefontstyle = ("Arial", 2.5%, false, false, false, false, 5, 1)
/ timeout = parameters.RW
/ showbackbutton = false
/ showmousecursor = true
/ showpagenumbers = false
/ showquestionnumbers = false
/ ontrialend = [
values.response = textbox.response.response;
if (monkey.monkeymode && replace(0,1) == 1){
values.response = values.solution;
};
if (values.response == values.solution) {
values.correct = 1;
} else {
values.correct = 0;
};
if (values.response == values.solution) {
values.correctcount += 1;
} else {
values.correctcount -= 1;
};
if (values.currentLevel == 1) {
values.countcorrectLevel1 += values.correct;
} else if (values.currentLevel == 2) {
values.countcorrectLevel2 += values.correct;
} else if (values.currentLevel == 3) {
values.countcorrectLevel3 += values.correct;
} else if (values.currentLevel == 4) {
values.countcorrectLevel4 += values.correct;
} else if (values.currentLevel == 5) {
values.countcorrectLevel5 += values.correct;
};
values.rt = surveypage.response.latency;
]

/ontrialend = [if (values.response == values.solution) values.previouscorrect = 1 else values.previouscorrect = 0]

/ branch = [
trial.getReady;
]
/ nextbuttonposition = (45%, 70%)
/ finishlabel = "submit"
/ recorddata = true
</surveypage>

Dave
Dave
Supreme Being
Supreme Being (374K reputation)Supreme Being (374K reputation)Supreme Being (374K reputation)Supreme Being (374K reputation)Supreme Being (374K reputation)Supreme Being (374K reputation)Supreme Being (374K reputation)Supreme Being (374K reputation)Supreme Being (374K reputation)

Group: Administrators
Posts: 8.8K, Visits: 36K
Lingi - Monday, March 19, 2018
Hi everyone,

I have a question concerning an modified version of the Math Effort Task which is meant to be adaptive.

Participants have to calculate the sum of 5 digits appearing one after the other on the screen (it is possible to change the number of digits). There are five levels of increasing difficulty depending on the range and the duration of the presentation. What I would like to do is make the task adaptive, so that a correct response increases the difficulty of the next level by one and a wrong response decreases the difficulty of the next level.

What I tried so far works, but the level switch is delayed.

I would be very happy for any suggestions! Thanks a lot!

Here is my script:

<trial numberPresentations>
/ ontrialbegin = [
values.countTotalTrials += 1;
values.countTrialsCurrentLevel += 1;
if (values.currentLevel == 1) {
values.number1 = list.level1.nextvalue;
values.number2 = list.level1.nextvalue;
values.number3 = list.level1.nextvalue;
values.number4 = list.level1.nextvalue;
values.number5 = list.level1.nextvalue;
values.countLevel1 += 1;
} else if (values.currentLevel == 2) {
values.number1 = list.level2.nextvalue;
values.number2 = list.level2.nextvalue;
values.number3 = list.level2.nextvalue;
values.number4 = list.level2.nextvalue;
values.number5 = list.level2.nextvalue;
values.countLevel2 += 1;
} else if (values.currentLevel == 3) {
values.number1 = list.level3.nextvalue;
values.number2 = list.level3.nextvalue;
values.number3 = list.level3.nextvalue;
values.number4 = list.level3.nextvalue;
values.number5 = list.level3.nextvalue;
values.countlevel3 += 1;
} else if (values.currentLevel == 4) {
values.number1 = list.level4.nextvalue;
values.number2 = list.level4.nextvalue;
values.number3 = list.level4.nextvalue;
values.number4 = list.level4.nextvalue;
values.number5 = list.level4.nextvalue;
values.countLevel4 += 1;
} else if (values.currentLevel == 5) {
values.number1 = list.level5.nextvalue;
values.number2 = list.level5.nextvalue;
values.number3 = list.level5.nextvalue;
values.number4 = list.level5.nextvalue;
values.number5 = list.level5.nextvalue;
values.countLevel5 += 1;
};
if (values.nrDigits < 5){
values.number5 = 0;
};
if (values.nrDigits < 4){
values.number4 = 0;
};
if (values.nrDigits < 3){
values.number3 = 0;
};

trial.numberPresentations.insertstimulustime(clearscreen, (0*parameters.ISI + 1*parameters.numberDuration));
trial.numberPresentations.insertstimulustime(text.number2, (1*parameters.numberDuration + 1*parameters.ISI));

if (values.nrDigits > 2){
trial.numberPresentations.insertstimulustime(clearscreen, (1*parameters.ISI + 2*parameters.numberDuration));
trial.numberPresentations.insertstimulustime(text.number3, (2*parameters.numberDuration + 2*parameters.ISI));
};
if (values.nrDigits > 3){
trial.numberPresentations.insertstimulustime(clearscreen, (2*parameters.ISI + 3*parameters.numberDuration));
trial.numberPresentations.insertstimulustime(text.number4, (3*parameters.numberDuration + 3*parameters.ISI));
};
if (values.nrDigits > 4){
trial.numberPresentations.insertstimulustime(clearscreen, (3*parameters.ISI + 4*parameters.numberDuration));
trial.numberPresentations.insertstimulustime(text.number5, (4*parameters.numberDuration + 4*parameters.ISI));
};
]
/ontrialbegin = [
if (values.previouscorrect == 1) {values.currentLevel += 1}
else if (values.previouscorrect == 0 > 1) {values.currentLevel -= 1}
]

/ontrialbegin = [
if (values.correctprevioustrial == 1) {values.numberDuration -= 20}
else if (values.correctprevioustrial == 0) {values.numberDuration += 20}
]
/ stimulustimes = [0 = number1]
/ trialduration = (values.nrDigits*parameters.numberDuration + (values.nrDigits-1)*parameters.ISI)
/ ontrialend = [
trial.numberPresentations.resetstimulusframes();
values.solution = values.number1 + values.number2 + values.number3 + values.number4 + values.number5;
]
/ branch = [
surveypage.response;
]
/ recorddata = false
</trial>

<surveypage response>
/ questions = [1 = response]
/ fontstyle = ("Arial", 3.5%, true, false, false, false, 5, 1)
/ itemfontstyle = ("Arial", 3%, true, false, false, false, 5, 1)
/ responsefontstyle = ("Arial", 2.5%, false, false, false, false, 5, 1)
/ timeout = parameters.RW
/ showbackbutton = false
/ showmousecursor = true
/ showpagenumbers = false
/ showquestionnumbers = false
/ ontrialend = [
values.response = textbox.response.response;
if (monkey.monkeymode && replace(0,1) == 1){
values.response = values.solution;
};
if (values.response == values.solution) {
values.correct = 1;
} else {
values.correct = 0;
};
if (values.response == values.solution) {
values.correctcount += 1;
} else {
values.correctcount -= 1;
};
if (values.currentLevel == 1) {
values.countcorrectLevel1 += values.correct;
} else if (values.currentLevel == 2) {
values.countcorrectLevel2 += values.correct;
} else if (values.currentLevel == 3) {
values.countcorrectLevel3 += values.correct;
} else if (values.currentLevel == 4) {
values.countcorrectLevel4 += values.correct;
} else if (values.currentLevel == 5) {
values.countcorrectLevel5 += values.correct;
};
values.rt = surveypage.response.latency;
]

/ontrialend = [if (values.response == values.solution) values.previouscorrect = 1 else values.previouscorrect = 0]

/ branch = [
trial.getReady;
]
/ nextbuttonposition = (45%, 70%)
/ finishlabel = "submit"
/ recorddata = true
</surveypage>

If you have several /ontrialbegin attributes in a <trial>, they are executed in the order given, top to bottom. I.e. it seems to me that you'll want to have

]
/ontrialbegin = [
if (values.previouscorrect == 1) {values.currentLevel += 1}
else if (values.previouscorrect == 0 > 1) {values.currentLevel -= 1}
]

/ontrialbegin = [
if (values.correctprevioustrial == 1) {values.numberDuration -= 20}
else if (values.correctprevioustrial == 0) {values.numberDuration += 20}
]

at the very _top_ *before* you do all the other stuff that _depends_ on the current level.

<trial numberPresentations>
]
/ontrialbegin = [
if (values.previouscorrect == 1) {values.currentLevel += 1}
else if (values.previouscorrect == 0 > 1) {values.currentLevel -= 1}
]

/ontrialbegin = [
if (values.correctprevioustrial == 1) {values.numberDuration -= 20}
else if (values.correctprevioustrial == 0) {values.numberDuration += 20}
]

/ ontrialbegin = [
values.countTotalTrials += 1;
values.countTrialsCurrentLevel += 1;
if (values.currentLevel == 1) {
values.number1 = list.level1.nextvalue;
values.number2 = list.level1.nextvalue;
values.number3 = list.level1.nextvalue;
values.number4 = list.level1.nextvalue;
values.number5 = list.level1.nextvalue;
values.countLevel1 += 1;
} else if (values.currentLevel == 2) {
values.number1 = list.level2.nextvalue;
values.number2 = list.level2.nextvalue;
values.number3 = list.level2.nextvalue;
values.number4 = list.level2.nextvalue;
values.number5 = list.level2.nextvalue;
values.countLevel2 += 1;
} else if (values.currentLevel == 3) {
values.number1 = list.level3.nextvalue;
values.number2 = list.level3.nextvalue;
values.number3 = list.level3.nextvalue;
values.number4 = list.level3.nextvalue;
values.number5 = list.level3.nextvalue;
values.countlevel3 += 1;
} else if (values.currentLevel == 4) {
values.number1 = list.level4.nextvalue;
values.number2 = list.level4.nextvalue;
values.number3 = list.level4.nextvalue;
values.number4 = list.level4.nextvalue;
values.number5 = list.level4.nextvalue;
values.countLevel4 += 1;
} else if (values.currentLevel == 5) {
values.number1 = list.level5.nextvalue;
values.number2 = list.level5.nextvalue;
values.number3 = list.level5.nextvalue;
values.number4 = list.level5.nextvalue;
values.number5 = list.level5.nextvalue;
values.countLevel5 += 1;
};
if (values.nrDigits < 5){
values.number5 = 0;
};
if (values.nrDigits < 4){
values.number4 = 0;
};
if (values.nrDigits < 3){
values.number3 = 0;
};

trial.numberPresentations.insertstimulustime(clearscreen, (0*parameters.ISI + 1*parameters.numberDuration));
trial.numberPresentations.insertstimulustime(text.number2, (1*parameters.numberDuration + 1*parameters.ISI));

if (values.nrDigits > 2){
trial.numberPresentations.insertstimulustime(clearscreen, (1*parameters.ISI + 2*parameters.numberDuration));
trial.numberPresentations.insertstimulustime(text.number3, (2*parameters.numberDuration + 2*parameters.ISI));
};
if (values.nrDigits > 3){
trial.numberPresentations.insertstimulustime(clearscreen, (2*parameters.ISI + 3*parameters.numberDuration));
trial.numberPresentations.insertstimulustime(text.number4, (3*parameters.numberDuration + 3*parameters.ISI));
};
if (values.nrDigits > 4){
trial.numberPresentations.insertstimulustime(clearscreen, (3*parameters.ISI + 4*parameters.numberDuration));
trial.numberPresentations.insertstimulustime(text.number5, (4*parameters.numberDuration + 4*parameters.ISI));
};
]
/ stimulustimes = [0 = number1]
/ trialduration = (values.nrDigits*parameters.numberDuration + (values.nrDigits-1)*parameters.ISI)
/ ontrialend = [
trial.numberPresentations.resetstimulusframes();
values.solution = values.number1 + values.number2 + values.number3 + values.number4 + values.number5;
]
/ branch = [
surveypage.response;
]
/ recorddata = false
</trial>

Lingi
Lingi
Associate Member
Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)Associate Member (102 reputation)

Group: Forum Members
Posts: 6, Visits: 23

This was very helpful! Problem solved! Thanks!

GO


Reading This Topic


Login
Existing Account
Email Address:


Password:


Social Logins

Select a Forum....






Millisecond Forums


Search