Смещенные случайные результаты в Excel

787
NL_Derek

На WorldBuilding нам нравится играть на научно-фантастические темы, в том числе «что, если бы было больше двух полов» (примеры здесь, здесь, здесь ). Все хорошо и весело, и я подумал, что у меня есть шанс отточить свои навыки работы с электронными таблицами (я использую Excel 2003).

Я построил таблицу для модели Монте - Карло из трех полов, использующих X и Y хромосом: M эля (YY), F emale (XX) и H ermaphrodite (XY), используя обычный Менделя наследования. Таким образом, MF всегда будет производить H, MH будет производить 50% M и 50% H, FH аналогично, а HH будет производить 25% M, 25% F и 50% H.

Я сделал популяцию в 200, размножаясь в течение 256 поколений, и результаты выглядят разумными, за исключением одного . Я ожидал, что популяция стабилизируется на 50% Н и 25% каждого из М и F, но я последовательно получаю около 54% ​​Н и только 23% М и F. Это не похоже на ошибку Excel, я получаю аналогичные результаты с LibreOffice, а также не зависит от пола «буферных» родителей (см. ниже) или начального распределения.

Электронная таблица доступна здесь (мой личный веб-сайт, конечно же, отказ от ответственности), и я задокументировал это ниже. Похоже, что мои случайные функции IF(RAND()>0.5и CHOOSE(INT(4*RAND()+1)не возвращают 50% и 25%, как предполагалось, но я не знаю, как проверить это напрямую. Я делаю что-то неправильно?

Детали кода

Я кодирую Mэля как 1, Fэмали как 2и Hэрмафродит как 4так, чтобы я мог просто добавить двух родителей. Большинство ячеек (B6: IV205) рассчитывают следующее поколение и содержат (это ячейка B6):

=CHOOSE (A5+A7, // sum of parents  -99, // 1 can't happen  A6, // 2 = MM = don't breed, copy old  4, // 3 = MF -> H  A6, // 4 = FF = don't breed, copy old  IF(RAND()>0.5,1,4), // 5 = MH -> M or H  IF(RAND()>0.5,2,4), // 6 = FH -> F or H  -99, // 7 can't happen  CHOOSE(INT(4*RAND()+1),1,2,4,4) // 8 = HH -> M or F or H or H  )  

В первой строке листа Sheet1 показано количество поколений, во втором, третьем и четвертом - число каждого «пола» в этом поколении (деленное на 2, чтобы получить процент населения в 200 человек). Строки 5 и 206 предоставляют (буферный) родительский элемент для строк 6 и 205. Столбец A создает начальную популяцию на основе значения в A2.

Я использую условное форматирование, чтобы окрасить самцов в синий цвет, самок - в розовый, а гермафродитов - в зеленый; с увеличением 25% и шириной столбца 3 я могу видеть весь диапазон на моем мониторе. На Листе 2 я строю популяции, используя строки 2-3-4 Листа1.

Детали всех ячеек на Листе 1:

A1 "gen1"  B1:IV1 ="g"&COLUMN() // column title  A2 50% // initial hermaphrodite percentage  B2:IV2 =COUNTIF(B6:B205,"=4")/2 // hermaphrodite percentage  A3 ="M:"&COUNTIF(A6:A205,"=1")/2  B3:IV3 =COUNTIF(B6:B205,"=1")/2 // male percentage  A4 ="F:"&COUNTIF(A6:A205,"=2")/2  B4:IV4 =COUNTIF(B6:B205,"=2")/2 // female percentage  A5 4 // lower buffer parent  B5:IV5 =A5 // echo buffer  A6:A205 =IF(RAND()>$A$2,IF(RAND()>0.5,1,2),4) // initial population  B6:IV205 =CHOOSE(A5+A7,-99,A6,4,A6,IF(RAND()>0.5,1,4),IF(RAND()>0.5,2,4),-99,CHOOSE(INT(4*RAND()+1),1,2,4,4))  A206 4 // upper buffer parent  B206:IV206 =A206 // echo buffer  

Конечно, я открыт для советов по всем аспектам моего опуса .

3

1 ответ на вопрос

0
Jonno

I suspect this is not a bug with Excel, but it's correct (at least, as correct as it can be based on random chance.)

The reason for this is not due to the randomness, but instead your probability within this calculation:

=CHOOSE (A5+A7, // sum of parents -99, // 1 can't happen A6, // 2 = MM = don't breed, copy old 4, // 3 = MF -> H A6, // 4 = FF = don't breed, copy old IF(RAND()>0.5,1,4), // 5 = MH -> M or H IF(RAND()>0.5,2,4), // 6 = FH -> F or H -99, // 7 can't happen CHOOSE(INT(4*RAND()+1),1,2,4,4) // 8 = HH -> M or F or H or H ) 

Specifically, your very last situation, HH -> M or F or H or H. This means you have a 50% chance to get H compared to 25% each for M or F, should we be using the result of a HH. As such, a skew towards H over M or F should be expected.

I suspect if you change this part to

CHOOSE(INT(3*RAND()+1),1,2,4) 

you would see the probability you were expecting, but not necessarily what is correct (I haven't actually done the math.)

Вы правы; Я сейчас получаю около 25-25-50%. Спасибо! Теперь я должен выяснить, почему (следите за этим местом, я сообщу). NL_Derek 8 лет назад 0
Ваше последнее предложение правильно. Мое исходное ожидание в 25-25-50% населения, похоже, было неверным. Моя формулировка «ВЫБЕРИТЕ (INT (4 * RAND () + 1), 1,2,4,4)» дает мне 25-25-50% в поколении, но не в популяции; Ваша формулировка "ВЫБЕРИТЕ (INT (3 * RAND () + 1), 1,2,4)" дает мне 33-33-33% в поколении и (вопреки моим ожиданиям) 25-25-50% в Население. Теперь я должен обернуть свой мозг вокруг различий между поколениями и выяснить, что происходит. Я пометил ваш ответ как правильный: это не ошибка Excel, а ошибка NL_Derek ;-) NL_Derek 8 лет назад 0

Похожие вопросы