Help! How to divide readers into five equal groups

Quick question for those more computer-savvy than I am. Can you help me divide readers into five roughly equal groups (it's for this week's Casual Friday). In the past, I've relied on the "what month is your birthday in" question, but it won't work when I need five groups.

Surely there's a simple javascript out there that would automatically return a random number from 1 to 5. I've done a few searches, but most of the scripts I could find have been too complicated, requiring user input. I just want the number to be automatically generated according to my specifications.

If you know how to do this, please email me (remove dashes!), or just let me know in the comments.

More like this

Thanks to everyone who participated in the unscientific survey on commenting. The results are back, and I'd like to share them with you. As many of you have noticed, we've been talking about comments a lot here lately, both at BioE and on Sb in general. There's also a big session on online civility…
This is a repost of a review that is timely, given this week's focus on setting up your Linux server and changing all your computers over to Linux and so on. I started this discussion a while back, and now it is time to continue it. The Bourne Again Shell, bash, is the default command-line shell…
Theory 1: "The Internet exists to make me look smart." --John Scalzi A question for folks more computer-savvy than I: Whenever I cut and paste quotes from some other page into the editing window on Movable Type, quote marks and dashes get mangled into non-standard characters. They look just fine…
Last week NIST anounced the winner of its Cryptographic Hash Function Competition. After five years of review and many rounds of discussion and elimination, the winner is a hash function called Keccak, and its developers deserve many congratulations. It's a shame hash functions aren't better known…

Just ask the day of the month their birthday is.

1.1st thru 6th
2. 7th thru 12th
3. 13th thru 18th
4. 19th thru 24th
5. 25th thru 31st

Last group may be a little off, but short Feb. acts as a counterweight.

How about:

function random( numGroups )
{
return Math.round( (numGroups - 1) * Math.random() ) + 1;
}

Just specify how many groups you want and it will return an integer between 1 and numGroups.

By Fletcher Chambers (not verified) on 10 Nov 2006 #permalink

How about making alphabetical list of them and dividing the list in 5 parts, starting from A?

Fletcher, your suggestion came in while I was responding to chezjake. I will try your suggestion too, but I'm not sure I can get that to work within survey monkey.

On second thought, because rounding would creating unequal groups on the ends, try this one instead:

function random( numGroups )
{
var num = Math.round( numGroups * Math.random() );

return num == 0 ? numGroups : num;
}

By Fletcher Chambers (not verified) on 10 Nov 2006 #permalink

Since you asked for javascript, I thought you meant you wanted javascript. Here is one way you could use the function in the body of your HTML:


<p>
Presenting a number between 1 and 5:
<script language="javascript">
function random( numGroups )
{
var num = Math.round( numGroups * Math.random() );

return num == 0 ? numGroups : num;
}

document.write( random( 5 ) );
</script>
</p>

The users browsers would need to have javascript turned on for it to work.

By Fletcher Chambers (not verified) on 10 Nov 2006 #permalink

And to show my cognitive psychology ignorance...
Notice how I read your question and focused very quickly on "He wants a javascript function." While the others went straight to "How else can we solve the problem without using birth month?".

By Fletcher Chambers (not verified) on 10 Nov 2006 #permalink

This is actually an interesting question... how many ways can you fairly split a random population of people?

Some non-programming methods:

Use birth-month to split into six groups but then discard one group or tell one group to go away.

Ask them what state they live in, which can then be divided into 5 groups (this assumes your readership is randomly geographically distributed, which it may or may not be.)

Ask them the last number of their zip code, or phone number, or social security number, all of which should be randomly distributed, won't reveal anything personal, and can be easily split into five groups.

Ask them to select the closest match they are to a list of five hair or eye colors.

Ask them to roll a five sided dice! (More relistically, a six-sided dice until a number one through five come up.)

Ask them to flip a coin five times and count the number of heads (this wouldn't really work because it would require too much work and would be normally distributed around 2-3, but if you even need to fake a normally distributed population...)

Either ask them to input the minute-value from the current time (i.e. 6 from 4:26) The computer could do that but I'm assuming your technical solution doesn't work.

(Simple:) Ask them to pick a number 1-5.

(More interestingly...) Show them a picture of you with your hand behind your back and saw "Guess how many fingers I am holding up?"

Cognitive Science question: Would there be any difference in bias between the last two methods? I think the first method would have a "favorite number bias" if that matters, but maybe pose the question differently and it wouldn't? What about picking a letter, does that have a bias?

Hope these suggestions help! Most should be fairly random.

By Joshua Blake (not verified) on 10 Nov 2006 #permalink

You offer some interesting suggestions, Joshua, but some of them don't appear to meet the criteria of random assignment. First, you assume readership is wholly American, which is not the case. Questions based on geographical state, ZIP code, and SSN exclude non-Americans as written. Second, hair and eye color are not evenly distributed. I'm also not sure how close "pick a number between one and five" would come to being random and even. You point out this potential shortcoming yourself.

The dice idea and a modified coin idea could produce the desired result, but they require actual effort on the part of participants (not to mention props -- perhaps I could roll a Boggle cube?). Many people would be eager to participate nonetheless, but I'm certain this complicating factor would diminish the pool of participants.

You did make one excellent suggestion that I never would have considered: time. Every potential participant has a computer. Computers display the time. I think your idea to ask participants to enter the last digit of the time would produce a tolerably even and certainly random distribution. If I'm ever faced with a similar dilemma, I will definitely be using your concept.

Libby and Joshua:

What's really interesting about the time thing is that that's actually the way most "random" number generators in computer science work. I think it's highly likely (though I'm not positive on the specifics of javascript) that the Math.random() function Fletcher used draws its randomizer seed from the millisecond value of a computer's time. Of course, Math.random() does a bunch of funky stuff to that value, but the time's the 'seed' off of which the randomization is built.

Cool stuff!

Libby,

Thanks for your critiques. I am aware that some of my suggestions were American-biased, like states, but as I mentioned in my intro sentence, I was approaching the question like a brain teaser so I threw out almost anything I could think of. Several of the biased ones could be adapted using a similar concept. Almost everyone responding to an online survey would have a phone number, even in other countries.

That is true that among certain populations hair color is not even (Asians have mostly black hair I believe.) It was just another idea.

And Jen, you are correct about Math.random() using time to seed the random algorithm. The reason the algorithm does other stuff instead of just using the time value itself (for thoes who don't know) is that often programs will need a whole series of random numbers, and since they run so quickly it is highly likely the numbers generated (from the timestamp) will be the same or in order. It only works in this case because we just need a single value.

I am a computer programmer but wanted to think of non-computer ways to randomize a population.

I'd still like to see an experiment or study on randomness of "pick a number" methods.

By Joshua Blake (not verified) on 10 Nov 2006 #permalink

Doh!

I just realized that Survey Monkey has a "randomize choices" feature. So actually all I would have had to do was randomize the choices, then ask respondents to pick the first choice.

Last digit of phone number, SSN, time, whatever. No realistic worries about privacy if they don't give you the whole thing.

Here's a simple one. How about using the birthdays of the respondents - not according to months, but according to the number of days in the year (365) divided by five (or 73 days).

Using the handy day of year table at http://www.mbari.org/staff/coletti/doytable.html

Group 1 would then be for those whose birthdays fall from Jan 1 through Mar 14.

Group 2 would be Mar 15 through May 26

Group 3 would be May 27 through Aug 7

Group 4 would be Aug 8 through Oct 19, and

Group 5 would be Aug 9 through Dec 31

No computer algorithm needed. Cheers.

By Uranius pelican (not verified) on 12 Nov 2006 #permalink