Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Generate random number as condition

  • Pernelle
  • Pernelle's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
5 years 7 months ago - 5 years 7 months ago #173812 by Pernelle
Generate random number as condition was created by Pernelle
In my survey, I have 12 hidden questions that generate a random number between 1 and 4 which determine which of the four subquestions in the 12 following questions will be displayed to the participant.
To do this, I use a hidden question of the type:
if(DispRec1 >= 1, DispRec1, floor(rand(1, 4.9999)))

and then in the following question, each subquestion has a condition of the type:
((( ! is_empty(321522X4X36.NAOK) && (321522X4X36.NAOK == 2))))


I have collected data from more than 1000 participants so far, and I realise that the 4th condition is largely underrepresented (so the number 4 is not generated as often as the 1, 2, and 3).
Do you know why and how to solve this?

Note that I now use Version 3.7.3+180516, but I developed it in a previous version, where I was advised to use " 4.9999" for the last randomly generated number. Maybe that is the problem, in version 3?

Thank you.
Last edit: 5 years 7 months ago by Pernelle.
The topic has been locked.
More
5 years 7 months ago #173814 by jelo
Replied by jelo on topic Generate random number as condition
Without having the complete survey (LSS export) it looks impossible to me to check for issues.
Perhaps someone will invest the time to ask questions without looking at the actual survey, but the chances will be narrow.

You generate random numbers with hidden equation question
E.g. DispRec1 is:
if(DispRec1 >= 1, DispRec1, floor(rand(1, 4.9999)))

And if you look at the saved values, you see 1-3 way more often than 4?

Which PHP version and OS is used? You can >>>click<<< on the LimeSurvey version number at the bottom to get a window with more infos about your installation.

The meaning of the word "stable" for users
www.limesurvey.org/forum/development/117...ord-stable-for-users
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
5 years 7 months ago #173819 by tpartner
Replied by tpartner on topic Generate random number as condition
Why are you using floor()? Why not simply rand(1, 4)?

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The topic has been locked.
More
5 years 7 months ago #173820 by jelo
Replied by jelo on topic Generate random number as condition

tpartner wrote: Why are you using floor()? Why not simply rand(1, 4)?

You're right for PHP, but I still find the common floor approach (used for non integer rand functions) in the manual. E.g. manual.limesurvey.org/Expression_Manager...e_Question_Per_Group

At the outset, in Group 0, five hidden Equation questions, called ask1-ask5, are populated. Each one has the value of {floor(rand(1,6.9999))} in the question text field


BTW: Starting with PHP 7.1 rand() should be delivering a good quality of random numbers.

The meaning of the word "stable" for users
www.limesurvey.org/forum/development/117...ord-stable-for-users
The topic has been locked.
  • Pernelle
  • Pernelle's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
5 years 7 months ago #173821 by Pernelle
Replied by Pernelle on topic Generate random number as condition
Thank you both for your quick reactions.

Here is the LSS survey structure.

I used floor because I found this in the manual, indeed.

Regarding my system configuration:


LimeSurvey version
3.7.3
LimeSurvey build
180516
Operating system
Linux ks01.sl-services.be 4.9.58-xxxx-std-ipv6-64 #1 SMP Mon Oct 23 11:35:59 CEST 2017 x86_64
PHP version
7.0.22-0ubuntu0.16.04.1
Web server name
survey2.sl-services.be
Web server software
Apache
Web server info
Database driver
mysql
Database driver version
mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $
Database server info
Uptime: 9958600 Threads: 1 Questions: 9808849 Slow queries: 0 Opens: 167322 Flush tables: 1 Open tables: 416 Queries per second avg: 0.984
Database server version
Uptime: 9958600 Threads: 1 Questions: 9808849 Slow queries: 0 Opens: 167322 Flush tables: 1 Open tables: 416 Queries per second avg: 0.984
The topic has been locked.
  • Pernelle
  • Pernelle's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
5 years 7 months ago #173822 by Pernelle
Replied by Pernelle on topic Generate random number as condition
"And if you look at the saved values, you see 1-3 way more often than 4?"

--> that's right
The topic has been locked.
More
5 years 7 months ago #173824 by jelo
Replied by jelo on topic Generate random number as condition

Pernelle wrote: "And if you look at the saved values, you see 1-3 way more often than 4?"
--> that's right

Without seeing the complete survey, I would say "It's the way it is".

In percentage, what distribution is on the 12 random generator questions?

1 more than 2 more than 3 more than 4.

The meaning of the word "stable" for users
www.limesurvey.org/forum/development/117...ord-stable-for-users
The topic has been locked.
  • Pernelle
  • Pernelle's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
5 years 7 months ago - 5 years 7 months ago #173825 by Pernelle
Replied by Pernelle on topic Generate random number as condition
Overall, the distribution of the four numbers generated over the 12 stimuli for all the participants are:

1: 413 (30%)
2: 389 (29%)
3: 373 (27%)
4: 188 (14%)

--> You can see that 1, 2, and 3 have similar frequencies, but 4 is much lower
Last edit: 5 years 7 months ago by Pernelle.
The topic has been locked.
  • Pernelle
  • Pernelle's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
5 years 7 months ago #173950 by Pernelle
Replied by Pernelle on topic Generate random number as condition
I realised that the frequencies I reported above were for only a subset of the sample. But the actual frequencies are very similar (and as unbalanced, hence as problematic):

1: 3781 (28%)
2: 3775 (28%)
3: 3710 (28%)
4: 8388 (16%)
The topic has been locked.
More
5 years 7 months ago - 5 years 7 months ago #173955 by jelo
Replied by jelo on topic Generate random number as condition
Why is 8338 16% and 3710 28%? How do you get these numbers?

Without seeing the complete survey to investigate I have nothing to add.
If it's not an issue in the survey structure (still can trigger a bug in LimeSurvey), it's an issue around PHP.

The meaning of the word "stable" for users
www.limesurvey.org/forum/development/117...ord-stable-for-users
Last edit: 5 years 7 months ago by jelo.
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
5 years 7 months ago - 5 years 7 months ago #173972 by Joffm
Replied by Joffm on topic Generate random number as condition
Hi,

First I tried to check if there is an issue with your formula.
In a small test survey I entered 100 answers.
With your formula: floor(rand(1,4.999)) I got

and with simple:rand(1,4) I got


So, it is not the worst distribution and there is no difference between the formulas.

But then looking into the programming: I found this:
In both Chinese languages there is:

{if(DispRec1>=1,DispRec1,floor(rand(1,3.9999)))}





So it's just a typo on your side.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 5 years 7 months ago by Joffm.
The following user(s) said Thank You: f_funke
The topic has been locked.
More
5 years 7 months ago #173976 by jelo
Replied by jelo on topic Generate random number as condition
Upps. Sorry, just overlooked that the LSS export was attached. Nice catch, Joffm.

The meaning of the word "stable" for users
www.limesurvey.org/forum/development/117...ord-stable-for-users
The topic has been locked.

Lime-years ahead

Online-surveys for every purse and purpose