- Posts: 5
- Thank you received: 0
Welcome to the LimeSurvey Community Forum
Ask the community, share ideas, and connect with other LimeSurvey users!
problems randomising survey using rand().
- zz07
- Topic Author
- Offline
- New Member
Less
More
11 years 9 months ago - 11 years 9 months ago #82187
by zz07
problems randomising survey using rand(). was created by zz07
Hi,
I have a survey (build Version 1.92+ Build 120608) with two sets of question groups. Each set contains 5 question groups. I want to randomise whether a participant is shown set 1 or set 2, but they are never shown both.
I have done this by creating both sets of question groups, and including an introduction group for the survey that is shown to everyone. In this introduction I have a question (equation type) which states rand(1,2), which I called 'random'.
For each question group in set 1 I have put (random==1) for relevance, and (random==2) for set 2.
This is the problem - the survey often displays the wrong set of questions. If 'random' is 2, it will display set 1. If 'random' is 1, it will also display set 1.
But if I change random to rand(2,2), it always (correctly) displays set 2 only. And if it is rand(1,1) it will always (also correctly) display set 1 only. So it seems that the relevance sections on the sets are not the problem.
I tried changing the relevance expression for set 1 to '(random == 1) and (random != 2)' or '(random != 2)', which should produce the same behaviour. But in fact it means that whenever random is 1, it displays set 2, and when random is 2, it still displays set 2.
I make sure to delete the cookies from my browser, just in case that is causing the problem - but it appears to have no effect.
I created a second survey as a test. I created 5 question groups, and gave each a different relevance equation - so question group 1 was (random==1) and question group 5 was (random==5). I created the same introduction question group and a 'rand(1,5)' equation question. Essentially the question group shown did not match the 'random' number generated. While only 1 group was ever shown, it was always a different group to the 'random' variable created.
Does anyone know why this is happening and of a solution to randomly showing 1 of 2 sets of questions?
I am currently using XAMPP while I design the survey.
Thank you very much for your help and feedback. I can upload the lss file if helpful.
I have a survey (build Version 1.92+ Build 120608) with two sets of question groups. Each set contains 5 question groups. I want to randomise whether a participant is shown set 1 or set 2, but they are never shown both.
I have done this by creating both sets of question groups, and including an introduction group for the survey that is shown to everyone. In this introduction I have a question (equation type) which states rand(1,2), which I called 'random'.
For each question group in set 1 I have put (random==1) for relevance, and (random==2) for set 2.
This is the problem - the survey often displays the wrong set of questions. If 'random' is 2, it will display set 1. If 'random' is 1, it will also display set 1.
But if I change random to rand(2,2), it always (correctly) displays set 2 only. And if it is rand(1,1) it will always (also correctly) display set 1 only. So it seems that the relevance sections on the sets are not the problem.
I tried changing the relevance expression for set 1 to '(random == 1) and (random != 2)' or '(random != 2)', which should produce the same behaviour. But in fact it means that whenever random is 1, it displays set 2, and when random is 2, it still displays set 2.
I make sure to delete the cookies from my browser, just in case that is causing the problem - but it appears to have no effect.
I created a second survey as a test. I created 5 question groups, and gave each a different relevance equation - so question group 1 was (random==1) and question group 5 was (random==5). I created the same introduction question group and a 'rand(1,5)' equation question. Essentially the question group shown did not match the 'random' number generated. While only 1 group was ever shown, it was always a different group to the 'random' variable created.
Does anyone know why this is happening and of a solution to randomly showing 1 of 2 sets of questions?
I am currently using XAMPP while I design the survey.
Thank you very much for your help and feedback. I can upload the lss file if helpful.
Last edit: 11 years 9 months ago by zz07.
The topic has been locked.
- TMSWhite
- Offline
- LimeSurvey Community Team
Less
More
- Posts: 84
- Thank you received: 21
11 years 9 months ago #82233
by TMSWhite
If you depend upon LimeSurvey or the support team, please give generously to our 2012 fundraiser .
Replied by TMSWhite on topic problems randomising survey using rand().
The most likely reason is that the rand() function is called each time the page is visited AND each time it is validated. Did you follow the recommendations of
this example
, which shows how to ensure that rand() is only called once during the survey?
If you depend upon LimeSurvey or the support team, please give generously to our 2012 fundraiser .
- Expression Manager (EM):
Documentation
|
Sample Surveys
|
How Tos
|
Show Logic File
|
Upgrading to 1.92+ - Excel Style for Survey Structure Import/Export
The topic has been locked.
- Mazi
- Offline
- Official LimeSurvey Partner
11 years 9 months ago #82234
by Mazi
Best regards/Beste Grüße,
Dr. Marcel Minke
Need Help? We offer professional Limesurvey support: survey-consulting.com
Contact: marcel.minke(at)survey-consulting.com
Replied by Mazi on topic problems randomising survey using rand().
Your approach matches the suggested solution at this blog post at
www.limesurvey-consulting.com
:
How to randomly show 1 of X questions at a Limesurvey survey
Only difference I can see is that the quotes are missing: ((randnumber=="1"))
...but this should make no difference.
You can test if this is fixed at the latest version by testing our online demo which always runs the latest Limesurvey version.
Username: admin
Password: test
If you can reproduce the problem there please report back and attach your survey for testing.
Only difference I can see is that the quotes are missing: ((randnumber=="1"))
...but this should make no difference.
You can test if this is fixed at the latest version by testing our online demo which always runs the latest Limesurvey version.
Username: admin
Password: test
If you can reproduce the problem there please report back and attach your survey for testing.
Best regards/Beste Grüße,
Dr. Marcel Minke
Need Help? We offer professional Limesurvey support: survey-consulting.com
Contact: marcel.minke(at)survey-consulting.com
The topic has been locked.
- TMSWhite
- Offline
- LimeSurvey Community Team
Less
More
- Posts: 84
- Thank you received: 21
11 years 9 months ago #82235
by TMSWhite
If you depend upon LimeSurvey or the support team, please give generously to our 2012 fundraiser .
Replied by TMSWhite on topic problems randomising survey using rand().
Mazi-
The blog post isn't quite accurate. The equation for "randnumber" should be:
Otherwise, the random value will change with each page, and even each time you try to validate the entered data.
The blog post isn't quite accurate. The equation for "randnumber" should be:
Code:
{if(randnumber>0,randnumber,rand(1,2))}
Otherwise, the random value will change with each page, and even each time you try to validate the entered data.
If you depend upon LimeSurvey or the support team, please give generously to our 2012 fundraiser .
- Expression Manager (EM):
Documentation
|
Sample Surveys
|
How Tos
|
Show Logic File
|
Upgrading to 1.92+ - Excel Style for Survey Structure Import/Export
The following user(s) said Thank You: kaled_fr
The topic has been locked.
- zz07
- Topic Author
- Offline
- New Member
Less
More
- Posts: 5
- Thank you received: 0
11 years 9 months ago #82249
by zz07
Replied by zz07 on topic problems randomising survey using rand().
Hi,
Thank you both for the replies.
I looked at the example you (TMSWhite) suggested - I missed that one before.
I changed the equation expression to {if(random>=1, random, (rand(1,2)))} and now everything works fine. So you were right about it running the rand() multiple times.
Thanks very much. Very helpful.
Thank you both for the replies.
I looked at the example you (TMSWhite) suggested - I missed that one before.
I changed the equation expression to {if(random>=1, random, (rand(1,2)))} and now everything works fine. So you were right about it running the rand() multiple times.
Thanks very much. Very helpful.
The topic has been locked.
- Mazi
- Offline
- Official LimeSurvey Partner
11 years 9 months ago #82252
by Mazi
Best regards/Beste Grüße,
Dr. Marcel Minke
Need Help? We offer professional Limesurvey support: survey-consulting.com
Contact: marcel.minke(at)survey-consulting.com
Replied by Mazi on topic problems randomising survey using rand().
Thanks for the hint, Tom.
I think I had set it up the way explained at the blog and it worked fine. Is that related to the survey mode?
Because I think since the question is only called once (if you disable the back button) and thus the created random number is fixed?
How can the value change if I just use an ((randnumber=="2")) relevance at several questions?
I think I had set it up the way explained at the blog and it worked fine. Is that related to the survey mode?
Because I think since the question is only called once (if you disable the back button) and thus the created random number is fixed?
How can the value change if I just use an ((randnumber=="2")) relevance at several questions?
Best regards/Beste Grüße,
Dr. Marcel Minke
Need Help? We offer professional Limesurvey support: survey-consulting.com
Contact: marcel.minke(at)survey-consulting.com
The topic has been locked.
- jkautto
- Offline
- New Member
Less
More
- Posts: 12
- Thank you received: 0
6 years 2 months ago - 6 years 2 months ago #162307
by jkautto
Replied by jkautto on topic problems randomising survey using rand().
Apparently this is still an issue with limesurvey 2.73, after 5 years or so? To pick a random question one MUST use the trick
{if (num>=1,num,rand(1,N))}
in order to make sure there is ONLY ONE random number generated per page.
I find that when using simple "{rand(1,N)}" the numbers in the response table are INCORRECT and there is no way to actually know which questions were shown to a participant (i.e., data is useless).
Can someone please verify that this trick is still the best way to go with 2.73?
ADDITION: My random questions have type "Text display", so no responses are stored in the result table. However, generated random numbers are stored and they are needed to find out visible texts.
{if (num>=1,num,rand(1,N))}
in order to make sure there is ONLY ONE random number generated per page.
I find that when using simple "{rand(1,N)}" the numbers in the response table are INCORRECT and there is no way to actually know which questions were shown to a participant (i.e., data is useless).
Can someone please verify that this trick is still the best way to go with 2.73?
ADDITION: My random questions have type "Text display", so no responses are stored in the result table. However, generated random numbers are stored and they are needed to find out visible texts.
Last edit: 6 years 2 months ago by jkautto.
The topic has been locked.
- tpartner
- Offline
- LimeSurvey Community Team
Less
More
- Posts: 10634
- Thank you received: 3698
6 years 2 months ago #162319
by tpartner
Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Replied by tpartner on topic problems randomising survey using rand().
Yes, this is the correct way to load a random number.
Sorry, I have no clue what you are asking in the "Addition".
Sorry, I have no clue what you are asking in the "Addition".
Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The following user(s) said Thank You: jkautto
The topic has been locked.
- jkautto
- Offline
- New Member
Less
More
- Posts: 12
- Thank you received: 0
6 years 2 months ago - 6 years 2 months ago #162323
by jkautto
Replied by jkautto on topic problems randomising survey using rand().
Thanks! That's really all I needed. I didn't have any other questions.
In my addition I just wanted to point out that "text display" is special as it does not store any data into response table. You REALLY need to store correct random values. With other question types even the simple {rand(1,N)} might suffice.
In my addition I just wanted to point out that "text display" is special as it does not store any data into response table. You REALLY need to store correct random values. With other question types even the simple {rand(1,N)} might suffice.
Last edit: 6 years 2 months ago by jkautto.
The topic has been locked.
- tpartner
- Offline
- LimeSurvey Community Team
Less
More
- Posts: 10634
- Thank you received: 3698
6 years 2 months ago #162329
by tpartner
Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Replied by tpartner on topic problems randomising survey using rand().
Yeah, this may be a good opportunity to use the custom question templates available in 3.x - based on a numeric-input. I'll play with that and report back.
Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The topic has been locked.
- FeCanever
- Offline
- New Member
Less
More
- Posts: 11
- Thank you received: 3
5 years 2 months ago #179364
by FeCanever
Replied by FeCanever on topic problems randomising survey using rand().
I have 8 study conditions, and have created 8 questions groups with a couple of questions each. I've been able to set up the question randomization inside each group (I need that) , but still haven't been able to set up the condition assignment so that each participant gets assigned a condition and is presented with one group of questions.
I have created an initial equation question and have inserted in the question field: if(random >= 1, random, (rand(1, 2)))
I then added ((random == 1)) and ((random == 2)) to the relevance field in each of the group settings. None of the group questions appears when I click to preview survey.
Should I add ((random == 1)) to each of the questions relevance box? Or is there a way of linking the assigned condition directly to the question group?
I'd really appreciate if anyone could help me out with that.
I have created an initial equation question and have inserted in the question field: if(random >= 1, random, (rand(1, 2)))
I then added ((random == 1)) and ((random == 2)) to the relevance field in each of the group settings. None of the group questions appears when I click to preview survey.
Should I add ((random == 1)) to each of the questions relevance box? Or is there a way of linking the assigned condition directly to the question group?
I'd really appreciate if anyone could help me out with that.
The topic has been locked.
- tpartner
- Offline
- LimeSurvey Community Team
Less
More
- Posts: 10634
- Thank you received: 3698
5 years 2 months ago #179377
by tpartner
Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Replied by tpartner on topic problems randomising survey using rand().
It seems to me that the equation in question code "random" should be:
Then in the relevance field for group-1:
In the relevance field for group-2:
And so on...
Code:
if(random >= 1, random, rand(1, 8))
Then in the relevance field for group-1:
Code:
random == 1
In the relevance field for group-2:
Code:
random == 2
And so on...
Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The topic has been locked.