Showing posts with label stats. Show all posts
Showing posts with label stats. Show all posts

Friday, November 22, 2019

Statistical differences between rolling methods

Sean and I have been discussing rolling methods for ability scores, particularly in the context of PCs vs. henchmen. Consider the two following methods for generating a set of abilities (sourced from the 2e PH, p. 13):
  • Method II. Roll 3d6 twice and take the higher of the two values.
  • Method V. Roll 4d6, discard the lowest roll, and add up the other three.
For player characters, I've long employed Method V (4d6 drop lowest) with a caveat that the player can roll up to three sets; if the player discards one set to roll another, the discarded set cannot be used. This gives the player the ability to discard an underwhelming set or swing for the fences to try to attain a great set, but also adds an element of risk, especially if the third and final set (which must be accepted) turns out to be poor.

For most NPCs and hirelings, I employ Method II, which tends to generate more averages sets. I don't use any re-roll caveat for NPCs. They get what they get.

Because, in our campaign, henchmen have the ability to replace fallen PCs over the long-term, we want to make sure we're in agreement on the rolling method to use. Most AD&D players intuitively know that Method V is more likely to generate high scores (15+) than Method II, but what if we evaluate the methods more deeply? Let's say, for example, that we're looking to create a ranger, which requires two scores of 14 or higher and two additional scores of 13 or higher.

I wrote a quick app to generate random sets of ability scores using both methods. Scores within each set are arranged from highest to lowest, with sets that qualify for the ranger class marked with a letter r. Here are results for ten sets of scores for each method:
Method II results (3d6 twice, take higher):
  16  14  13  13  11  11  (r)
  16  13  12  12  10   8
  15  14  13  11   9   8
  16  15  14  12  11  11
  14  14  13  13  12  11  (r)
  13  11  11  11   9   5
  15  15  15  13  12   8  (r)
  15  14  14  12  12   8
  13  12  12  11  10   8
  16  14  14  13  12  11  (r)

Method V results (4d6 drop lowest):
  15  13  13  12  12  12
  14  14  12  10  10   8
  16  13  12  12   9   4
  17  15  13  11  11   7
  14  14  12   9   9   8
  14  14  12  11   8   7
  17  14  13  12  11   7
  15  12  11  10   9   8
  16  14  13  13  10  10  (r)
  15  15  14  13  10   8  (r)

Four rangers for Method II, only two for Method V. This are very small samples sizes, so let's run them again to observe the variance:
Method II results (3d6 twice, take higher):
  13  12  11  11  11   6
  14  13  13  12  12  12
  14  13  13  12  12  11
  17  16  12  11  10   9
  13  13  13  12  11  10
  15  15  12  10   9   8
  17  16  12  11   9   8
  15  14  14  10   9   9
  16  16  15  15  14   9  (r)
  17  13  13  13  12  12

Method V results (4d6 drop lowest):
  15  12  11  11  10   9
  15  14  13  12  12   7
  15  13  11  11  11   9
  16  14  12  11  10   8
  14  14  13  13  12  12  (r)
  15  15  14  13  11  10  (r)
  17  14  14  14  13  11  (r)
  16  16  15  12  10   8
  15  15  14  13  12   5  (r)
  18  14  13  12   9   9

This time, one ranger for Method II, four rangers for Method V (an opposite result). Obviously, we need more data. I'll have the application roll 100 sets for each method and take the averages (rounded down to whole numbers):
Method II averages:
  15  13  12  11  10   9

Method V averages:
  15  14  12  11  10   8

These are actually really close; in fact, the total number of ability points is the same with both methods. Through another few runs, I was able to verify that these exact averages still hold even with a very high (10,000) number of sets.

But the averages don't tell the full story. Again, we know from intuition that there's going to be tangible variance between the methods. If it's not in the total number of points, then where?

For starters, we know that, in order to get stuck with a score of 3 using Method II, we need to roll six 1s in a row. That means 6^6, or one in 46,656 scores. To get equally unlucky with Method V, you only need to roll four straight 1s, or 6^4, which is one in 1,296 scores.

That's a major difference: you're almost 40 times more likely to end up with a score of 3 using Method V (the 4d6 method) compared with Method II (the 3d6-twice method).

Let's see what the distribution of scores is over ten sets of scores using each rolling method:
Method II totals:
   3s:  0
   4s:  0
   5s:  0
   6s:  0
   7s:  0
   8s:  2
   9s:  6
  10s:  4
  11s:  5
  12s:  12
  13s:  7
  14s:  12
  15s:  6
  16s:  6
  17s:  0
  18s:  0

Method V totals:
   3s:  0
   4s:  0
   5s:  0
   6s:  2
   7s:  2
   8s:  2
   9s:  6
  10s:  3
  11s:  3
  12s:  12
  13s:  9
  14s:  5
  15s:  10
  16s:  3
  17s:  3
  18s:  0

That looks reasonable: fewer high but also fewer low scores when using Method II. How about for 1,000 sets?
Method II totals:
   3s:  0
   4s:  2
   5s:  11
   6s:  36
   7s:  101
   8s:  257
   9s:  424
  10s:  629
  11s:  839
  12s:  979
  13s:  926
  14s:  727
  15s:  513
  16s:  313
  17s:  184
  18s:  59

Method V totals:
   3s:  3
   4s:  25
   5s:  51
   6s:  99
   7s:  194
   8s:  269
   9s:  451
  10s:  585
  11s:  697
  12s:  794
  13s:  740
  14s:  737
  15s:  586
  16s:  430
  17s:  240
  18s:  99

Now we're starting to see the numbers at work. A thousand sets contain 6,000 individual scores; we have three scores of 3 using Method V, and none using Method II. Given that we were expecting only one in 46,656 scores with Method II but about one in 1,296 scores with Method V to result in a lowly 3, these results look pretty solid, though our sample sizes are still small enough that we're hitting a fair degree of variance.

Here are the totals for 100,000 sets:
Method II totals:
   3s:  15
   4s:  184
   5s:  1056
   6s:  3819
   7s:  10642
   8s:  24747
   9s:  43524
  10s:  65439
  11s:  84711
  12s:  94523
  13s:  92145
  14s:  72943
  15s:  51490
  16s:  32525
  17s:  16626
  18s:  5611

Method V totals:
   3s:  473
   4s:  1917
   5s:  4722
   6s:  9581
   7s:  17370
   8s:  29011
   9s:  41925
  10s:  56347
  11s:  68252
  12s:  77520
  13s:  79661
  14s:  74389
  15s:  60690
  16s:  43464
  17s:  25012
  18s:  9666

For Method II, fifteen out of 600,000 scores ended up as 3, or one in 40,000, which is very close to the one in 46,656 ratio that we expect to normalize to over the long term. For Method V, we had 473 scores of 3, which is about one in 1,268... extremely close to the normalized ratio of one in 1,296.

If we add up all the scores of 7 or lower, Method II only generated 15,716 while Method V produced a whopping 34,063. If we add up all the scores of 15 or higher, Method II gave us 106,252 while Method V resulted in 138,832.

The takeaways are that you're more than twice as likely to get bad scores (7 or lower) with the 4d6 method, but only about 30% more likely to get high scores (15 and above). Method V, however, is almost twice as likely to generate very high scores (17 or 18), while Method II is far more likely to hit in the average range of 10 through 14.

Finally, here's a plot graph of the 100,000 set results, which makes everything nice and clear:

Click to enlarge

Though Sean and I still haven't decided exactly how to handle scores for a new henchmen, the above data definitely provides the right ammunition to help us make the best decision for our campaign. As an extra bonus, here are score distributions for two additional rolling methods described in the PH, along with an additional graph that charts all four methods.
  • Method I. Roll 3d6 for each score.
  • Method IV. Roll 3d6 twelve times, and take the six highest values.
Here are the side-by-side averages of all four methods:
Method II averages:
  15  13  12  11  10   9

Method V averages:
  15  14  12  11  10   8

Method I averages:
  14  12  11   9   8   6

Method IV averages:
  15  13  12  12  11  10

...along with the score distributions of the two new methods:
Method I totals:
   3s:  2817
   4s:  8353
   5s:  16620
   6s:  27915
   7s:  41657
   8s:  58653
   9s:  68882
  10s:  74966
  11s:  74945
  12s:  69277
  13s:  58329
  14s:  41804
  15s:  27916
  16s:  16701
  17s:  8340
  18s:  2825

Method IV totals:
   3s:  0
   4s:  0
   5s:  0
   6s:  1
   7s:  129
   8s:  2063
   9s:  14860
  10s:  50573
  11s:  98940
  12s:  123988
  13s:  114935
  14s:  83276
  15s:  55540
  16s:  33591
  17s:  16596
  18s:  5508

...and the final graph depicting all four methods:

Click to enlarge

(If you made it to the end of this post, congratulations!)

Sunday, February 18, 2018

Class distributions, part 3 (modeling a society)

Part 1
Part 2

From the 2e DMG, p. 17:
Only a few people actually attain any character level. Not every soldier who fights in a war becomes a fighter. Not every urchin who steals an apple from the marketplace becomes a thief. The characters with classes and levels have them because they are in some way special. 
It's common sense, and there are numerous passages to support, that only a fraction of people in an AD&D society are classified as adventurers. Most are normal folk, perhaps trained in some vocation, with some of them being stronger, hardier, or more intelligent than even many PCs. What if we wanted to find out, given a population, how many of each class should really be present?

Let's go back to the original "fall through" algorithm that classifies everyone either as having a single class or being non-classed. When we ran the numbers previously, we said that any qualifying person was assigned to a class; the only individuals not assigned a class were those who didn't qualify.

Ultimately, that's not realistic. There should be factors other than ability scores at play in an actual society: age, alignment and training considerations, desire, upbringing, and so forth.

We determined, rolling 3d6 in order, that slightly more than one in every thousand individuals would qualify to be a paladin, based on ability scores alone. But consider what else is required: the person would need to be of sufficient age, of proper alignment and disposition, willing to adhere to the strictness of the paladin's code, and raised under conditions that would allow for the training needed to ascend the ranks of the class. What percent of those meeting the paladin's ability score requirements would also conform to the above? Ten percent? Five percent? Less?

Let's suppose, very generously, that for any individual meeting the ability requirements for a particular class, there's only a 50% chance of the class actually being attained. I can adjust the algorithm to work as it did previously, but to reject half the sets of scores that qualify for each class. In other words, half of those who would otherwise meet the paladin requirements fall through and check for the "easier" classes instead. Some will end up being bards, druids, or fighters. Others will end up having no class at all.
*** Rolling method: 3d6 (in order) ***
*** Population: 100
Results...
   Pal: 0 (0%)
   Rgr: 0 (0%)
   Brd: 0 (0%)
   Drd: 0 (0%)
   Ftr: 39 (39%)
   Thf: 26 (26%)
   Clr: 14 (14%)
   Mge: 12 (12%)
   Nil: 9 (9%)
******************

*** Population: 20000
Results...
   Pal: 15 (0%)
   Rgr: 20 (0%)
   Brd: 107 (1%)
   Drd: 322 (2%)
   Ftr: 7254 (36%)
   Thf: 4457 (22%)
   Clr: 2845 (14%)
   Mge: 1827 (9%)
   Nil: 3153 (16%)
******************
As we still have far more "classed" individuals than non-classed, the 50% reject rate is not nearly enough. And perhaps some classes should have lower percentages than others? The paladin's non-ability requirements are such that members of this class should be rare indeed. Rangers, bards, and druids all have alignment (and to some extent environmental) restrictions. Fighters should be more common, requiring only martial training and permitted to be any alignment. Thieves can't be lawful good, and lock-picking can't be learned on a whim. Clerics and mages require access to religion and magic.

I don't have a perfect way to arrive at these values, so to start, I'm just going to make them up:
  • Paladin - 5%
  • Ranger - 10%
  • Bard - 10%
  • Druid- 10%
  • Fighter - 20%
  • Thief - 15%
  • Cleric - 10%
  • Mage - 10%
The above should be read as "Only five percent of individuals qualifying to be a paladin will attain the class." I'm still using a fall-through procedure: those that qualify for a class but get rejected by the percentage check still have a chance to be something else.

Here are the results for populations of 100 and 20,000:
*** Rolling method: 3d6 (in order) ***
*** Population: 100
Results...
   Pal: 0 (0%)
   Rgr: 0 (0%)
   Brd: 0 (0%)
   Drd: 1 (1%)
   Ftr: 17 (17%)
   Thf: 11 (11%)
   Clr: 7 (7%)
   Mge: 4 (4%)
   Nil: 60 (60%)
******************

*** Population: 20000
Results...
   Pal: 2 (0%)
   Rgr: 4 (0%)
   Brd: 15 (0%)
   Drd: 58 (0%)
   Ftr: 2892 (14%)
   Thf: 1945 (10%)
   Clr: 1105 (6%)
   Mge: 1087 (5%)
   Nil: 12892 (64%)
******************
These numbers look OK at the top, but the core classes feel too highly represented. 36% of a population isn't going to have class levels. The problem may be that very few individuals can qualify for a class like paladin or ranger to begin with, so it stands to reason that a larger cut of these prodigies will end up rising to their potential, despite the narrower requirements. I'll leave the numbers for the "hard" classes unchanged but reduce the core classes to:
  • Fighter - 3%
  • Thief - 2%
  • Cleric - 1%
  • Mage - 1%
Results:
*** Rolling method: 3d6 (in order) ***
*** Population: 100
Results...
   Pal: 0 (0%)
   Rgr: 0 (0%)
   Brd: 1 (1%)
   Drd: 0 (0%)
   Ftr: 1 (1%)
   Thf: 1 (1%)
   Clr: 1 (1%)
   Mge: 1 (1%)
   Nil: 95 (95%)
******************

*** Population: 20000
Results...
   Pal: 1 (0%)
   Rgr: 5 (0%)
   Brd: 18 (0%)
   Drd: 67 (0%)
   Ftr: 447 (2%)
   Thf: 296 (1%)
   Clr: 143 (1%)
   Mge: 137 (1%)
   Nil: 18886 (94%)
******************
This looks a lot better. Only one in twenty receives a character class, with a single party worth of adventurers servicing a small hamlet. The prevalence of spellcasters still feels high, but these numbers are usable for modeling a population in a campaign. I don't want to worry about fractional percentages at this point.

I hope this series of posts was interesting for anyone who ends up reading. I certainly think it's something I may use in my games going forward.

Saturday, February 17, 2018

More on class ability score requirements

Building off the previous post, let's look at the numbers from a different angle. The algorithm I created was designed to simulate the class eligibility of an actual D&D population. If the results given by the model feel too generous, you can divide by a factor that represents the percentage of inhabitants that even get a crack at having ability scores assigned. This could account for age distribution across the populace and enforce the notion that only a subset of people are worthy of becoming adventurers. Even at less than 1% of total, 26 individuals with paladin-eligible ability scores in a city of 20,000 may feel like too many.

Another thing to be mindful of is that, based on the algorithm, all thieves have strength of 8 or lower, all clerics have strength and dexterity of 8 or lower, and all mages have 8 or lower in strength, dexterity, and wisdom. This is flawed, so while the algorithm can be used to derive the distribution of classes within a population, it shouldn't be used to make assumptions about the ability scores of any one individual.

Turning the page, what if the DM is less interested in simulating a population and more interested in knowing the odds of meeting class requirements using a specific rolling method? The code can be changed a little to generate these numbers. Here's a sampling of 100 individuals across the same two rolling methods. Instead of stopping when a set of scores meets the requirements for a class, we continue checking to figure out all character classes for which the scores are eligible.
*** Rolling method: 3d6 (in order) ***
*** Population: 100
Results...
   Pal: 0 (0%)
   Rgr: 0 (0%)
   Brd: 0 (0%)
   Drd: 2 (2%)
   Ftr: 71 (71%)
   Thf: 67 (67%)
   Clr: 71 (71%)
   Mge: 82 (82%)
   Nil: 100 (100%)
******************
*** Rolling method: 4d6 drop lowest (in order) ***
*** Population: 100
Results...
   Pal: 0 (0%)
   Rgr: 7 (7%)
   Brd: 4 (4%)
   Drd: 4 (4%)
   Ftr: 89 (89%)
   Thf: 85 (85%)
   Clr: 85 (85%)
   Mge: 90 (90%)
   Nil: 100 (100%)
Here are the results against a population size of 20,000:
*** Rolling method: 3d6 (in order) ***
*** Population: 20000
Results...
   Pal: 26 (0%)
   Rgr: 28 (0%)
   Brd: 183 (1%)
   Drd: 658 (3%)
   Ftr: 14884 (74%)
   Thf: 14815 (74%)
   Clr: 14751 (74%)
   Mge: 14811 (74%)
   Nil: 20000 (100%)
******************
*** Rolling method: 4d6 drop lowest (in order) ***
*** Population: 20000
Results...
   Pal: 314 (2%)
   Rgr: 608 (3%)
   Brd: 1451 (7%)
   Drd: 2896 (14%)
   Ftr: 17935 (90%)
   Thf: 18040 (90%)
   Clr: 17884 (89%)
   Mge: 17911 (90%)
   Nil: 20000 (100%)
******************
This gets us closer to the "truth"; look at how the percentages for the four core classes (which all have statistically the same requirements) begin to normalize.

Now let's change the algorithm further to arrange each set of scores optimally. It actually gets a lot easier to be a paladin when the 17 doesn't need to fall in a specific slot. Ranger proves the most difficult class when rolling 3d6 but allowing the scores to be rearranged. 4d6, however, makes the ranger's 13s and 14s easier to hit, so paladin again becomes the hardest.
*** Rolling method: 3d6 (arranged to taste) ***
*** Population: 20000
Results...
   Pal: 1127 (6%)
   Rgr: 718 (4%)
   Brd: 4535 (23%)
   Drd: 7811 (39%)
   Ftr: 19997 (100%)
   Thf: 19997 (100%)
   Clr: 19997 (100%)
   Mge: 19997 (100%)
   Nil: 20000 (100%)
******************
*** Rolling method: 4d6 drop lowest (arranged to taste) ***
*** Population: 20000
Results...
   Pal: 5476 (27%)
   Rgr: 6108 (31%)
   Brd: 13734 (69%)
   Drd: 15592 (78%)
   Ftr: 20000 (100%)
   Thf: 20000 (100%)
   Clr: 20000 (100%)
   Mge: 20000 (100%)
   Nil: 20000 (100%)
Using the 3d6 method, only three sets out of 20,000 failed to get even a single 9. No set failed to get at least one 9 using the 4d6 method.

Lastly, here's the same experiment with the population upped to one million:
*** Rolling method: 3d6 (arranged to taste) ***
*** Population: 1000000
Results...
   Pal: 57141 (6%)
   Rgr: 36272 (4%)
   Brd: 227410 (23%)
   Drd: 387935 (39%)
   Ftr: 999699 (100%)
   Thf: 999699 (100%)
   Clr: 999699 (100%)
   Mge: 999699 (100%)
   Nil: 1000000 (100%)
******************
*** Rolling method: 4d6 drop lowest (arranged to taste) ***
*** Population: 1000000
Results...
   Pal: 270407 (27%)
   Rgr: 305016 (31%)
   Brd: 689606 (69%)
   Drd: 782784 (78%)
   Ftr: 999998 (100%)
   Thf: 999998 (100%)
   Clr: 999998 (100%)
   Mge: 999998 (100%)
   Nil: 1000000 (100%)
******************
The percentages are basically unchanged, though two unlucky players failed to qualify for any class by rolling 4d6.

While this data does little to simulate a population, it might be a great tool for DMs who want to influence the likelihood of players achieving certain class requirements by choosing a specific rolling method.

Friday, February 16, 2018

Class distribution over population size

This is an experiment I've wanted to try for a little while now. In an actual settlement populated by individuals having ability scores generated by the classic "3d6 in order" rolling method, how many would qualify for the various classes?

To obtain some data, I wrote a simple program that rolls sets of ability scores X number of times, based on the desired population size. Each "person" is evaluated based on the minimum ability requirements for the standard AD&D classes and assigned to the "best" class for which the individual qualifies.

In this context, "best" can be interpreted as "hardest," or most stringent ability requirements. The algorithm I implemented is a "fall through," such that each set of scores is "tested" for the most difficult class (paladin) first. If the scores fail to meet the requirements, they get tested for the next most difficult class (ranger), and so on.

When we get down to the four basic classes, which each require a 9 in the prime requisite and nothing else, they're ordered like this:
  • Fighter
  • Thief
  • Cleric
  • Mage
This means that, if an individual qualifies for a fighter, they're a fighter. If not, but they qualify for a thief, they're a thief. Then cleric, then mage. This allows mages, clerics, and thieves to be proportionally rare compared to fighters, even though the requirements for all four are statistically the same.

Here are the results for a hamlet with a population of 100:
*** Population: 100
Results...
   Pal: 0 (0%)
   Rgr: 0 (0%)
   Brd: 0 (0%)
   Drd: 3 (3%)
   Ftr: 73 (73%)
   Thf: 19 (19%)
   Clr: 3 (3%)
   Mge: 2 (2%)
   Nil: 0 (0%)
No paladins, rangers, or bards. Two mages, three clerics, nineteen thieves, and 73 fighters. "Nil" is for scores that qualify for no class at all (ouch).

Of course, in a "real" AD&D village, most of the population would be non-classed (i.e., 0-level villagers). So it's important to read these numbers as representing the top end of the population's potential, rather than an actual class distribution. Most of the "fighters" are likely to be simple common folk with a strength score of 9 or higher. There's also the fact that the population would be spread across different age groups: a five-year-old with a 17 charisma isn't going to be a paladin (at least, not yet).

Here's another hamlet:
*** Population: 100
Results...
   Pal: 1 (1%)
   Rgr: 1 (1%)
   Brd: 1 (1%)
   Drd: 4 (4%)
   Ftr: 72 (72%)
   Thf: 15 (15%)
   Clr: 3 (3%)
   Mge: 2 (2%)
   Nil: 1 (1%)
Similar distribution, but this village could have a paladin, a ranger, and a bard among its inhabitants. Of note, I think druid, of all the classes, feels "easier" to qualify for than it should. In terms of realism, druid should have a similar rarity to the three classes above it. The bard's requirements are clearly much harder to meet, even though both include a 15 charisma. Remember that only those that make druids but also fail to make bards are assigned to be druids.

Let's take a look at a small town of 500 residents:
*** Population: 500
Results...
   Pal: 1 (0%)
   Rgr: 0 (0%)
   Brd: 6 (1%)
   Drd: 13 (3%)
   Ftr: 354 (71%)
   Thf: 104 (21%)
   Clr: 15 (3%)
   Mge: 6 (1%)
   Nil: 1 (0%)
The percentages begin to normalize with a higher population size. (Also, the previous hamlet was fairly lucky to have both a ranger and a paladin.) Here's a city of 20,000:
*** Population: 20000
Results...
   Pal: 25 (0%)
   Rgr: 31 (0%)
   Brd: 166 (1%)
   Drd: 625 (3%)
   Ftr: 14197 (71%)
   Thf: 3606 (18%)
   Clr: 969 (5%)
   Mge: 272 (1%)
   Nil: 109 (1%)
Now the "true" percentages become clearer still. At this sample size we greatly reduce the chance of outliers.

One thing I wondered before doing this was, which class requirements between paladin and ranger are more difficult to meet? Paladins definitely feel like they should be rarer; since both classes have stringent yet different requirements, what happens when we roll the 20,000-person city but allow individuals that qualify for both classes to be rangers instead of paladins?
*** Population: 20000
Results...
   Rgr: 39 (0%)
   Pal: 26 (0%)
   Brd: 180 (1%)
   Drd: 599 (3%)
   Ftr: 14255 (71%)
   Thf: 3618 (18%)
   Clr: 972 (5%)
   Mge: 224 (1%)
   Nil: 87 (0%)
The numbers are really close, so we might want a higher sampling still to root this out. Here are results for both class orderings at population size 1,000,000:
*** Population: 1000000
Results...
   Rgr: 1804 (0%)
   Pal: 1352 (0%)
   Nil: 996844 (100%)
*** Population: 1000000
Results...
   Pal: 1380 (0%)
   Rgr: 1754 (0%)
   Nil: 996866 (100%)
Still very close, implying that characters who qualify for both classes are exceedingly rare (maybe around one in 20,000). This also shows that the paladin's requirements are statistically harder to meet than the ranger's, since we end up with fewer paladins regardless of which class is favored. Makes sense, since there's only a 1-in-54 chance of even hitting on a 17 charisma, let alone the paladin's additional requirements.

I'll go back to giving paladins the benefit of the overlap. Now let's adjust the rolling method. Here are two hamlets, the first using "3d6 in order," the second using "4d6 drop lowest" (but still in order):
*** Rolling method: 3d6 (in order) ***
*** Population: 100
Results...
   Pal: 1 (1%)
   Rgr: 0 (0%)
   Brd: 1 (1%)
   Drd: 5 (5%)
   Ftr: 60 (60%)
   Thf: 23 (23%)
   Clr: 6 (6%)
   Mge: 2 (2%)
   Nil: 2 (2%)
****************** 
*** Rolling method: 4d6 drop lowest (in order) ***
*** Population: 100
Results...
   Pal: 2 (2%)
   Rgr: 5 (5%)
   Brd: 3 (3%)
   Drd: 12 (12%)
   Ftr: 67 (67%)
   Thf: 9 (9%)
   Clr: 2 (2%)
   Mge: 0 (0%)
   Nil: 0 (0%)
******************
Those are large percentage gains in the difficult classes, and not even a single set of scores falls all the way through to mage. This effect shows me that the 4d6 method should probably be reserved for PCs and significant NPCs only, not the general populace.

Finally, let's blow this up to a 20,000-person sampling:
*** Rolling method: 4d6 drop lowest (in order) ***
*** Population: 20000
Results...
   Pal: 308 (2%)
   Rgr: 535 (3%)
   Brd: 1241 (6%)
   Drd: 1738 (9%)
   Ftr: 14395 (72%)
   Thf: 1568 (8%)
   Clr: 189 (1%)
   Mge: 21 (0%)
   Nil: 5 (0%)
Interestingly, the fighter percentage actually looks like it's preserved from the 3d6 method. Even though many more characters qualify for the classes above fighter, the 9 strength requirement is also easier to hit for anyone that falls through the upper ranks. In the end, we have fewer sets trickling down to thief, cleric, and mage (around 9% total, as opposed to 24% with the 3d6 method).

Keep in mind that the 4d6 method employed by most DMs allows the player to rearrange the ability scores, making any class much easier to qualify for compared to keeping the rolls in order. I'm sure there are more experiments I can run with this code, but I'll cut it off here for now. Interested to hear any thoughts or ideas.