Случайный эксперимент биномиального распределения с использованием статистики в python

#python #numpy #statistics #data-science

#python #numpy #Статистика #наука о данных

Вопрос:

Имитируйте случайный эксперимент по подбрасыванию монеты 10000 раз и определите количество орлов.
Подсказка: Определите биномиальное распределение с помощью n = 1 и p = 0.5 .
Используйте функцию binom из scipy.stats.
Установите случайное начальное значение в 1 .
Нарисуйте выборку 10000 элементов из определенного распределения.
Предположим, что значения 0 и 1 представляют орел и решку соответственно.
Подсчитайте количество заголовков и отобразите его. Используйте bincount метод, доступный в numpy .

Я нашел ответ на него, но он был получен не из scipy.stats пакета, как было запрошено, а из случайного пакета. Ниже приведена моя попытка, но ответ не такой, как ожидалось. Пожалуйста, помогите мне исправить мою ошибку.

 import scipy as sp
from scipy import stats
import numpy as np
import random

from scipy.stats import binom
data_binom = binom.rvs(n=1,p=0.5,size=10000)

np.random.seed(1)

#print(data_binom)

y = np.bincount(data_binom)
head = print(y[0])
print(head)
  

Комментарии:

1. head = print(y[0]) — это ваша ошибка. Он присваивает head значение None. Вместо двух последних строк вам нужно что-то вроде: орел = y[0]; решка = y[1]; печать (орел); печать (решка)

2. Привет, Александр. Спасибо, я пробовал это, но это не то, что ожидалось. Пожалуйста, дайте мне знать, если вы обнаружите какую-либо другую двусмысленность.

3. Чего вы ожидали?

4. Я добавил пример кода и удалил ‘random’, чтобы устранить двусмысленность.

Ответ №1:

Похоже, проблема в том, где вы настраиваете начальное значение. В настоящее время вы делаете это, опубликуйте свой выборочный выбор, который в идеале должен быть выполнен раньше, как показано ниже :

 import scipy as sp
from scipy import stats
import numpy as np
from scipy.stats import binom

np.random.seed(1)

data_binom = binom.rvs(n=1,p=0.5,size=10000)
#print(data_binom)

y = np.bincount(data_binom)
head = print(y[0])
print(head)
  

Думаю, это ваш ожидаемый результат. Приветствия!!

Ответ №2:

 from scipy.stats import binom
import numpy as np
b = binom(n=1,p=0.5)
np.random.seed(1)
sample = b.rvs(size=10000)
print(np.count_nonzero(sample==0)) # heads is assumed to be zero
  

Этот код будет работать в вашей среде. Поверьте мне!

Ответ №3:

Я получил то, что ожидал. Не знаете, какой из них head: 4995 или 5005?

 print(y[0])
print(y[1])

4995
5005
  

Вот еще код, объясняющий ваш бросок:

 from scipy.stats import binom
data_binom = binom.rvs(n=1,p=0.5,size=10000)

heads = 0
tails = 0
edges = 0
count = 0

for coin in data_binom:
    count  = 1
    if coin == 1:
        heads  = 1
    elif coin == 0:
        tails  = 1
    else:
        edges  = 1

print("Observed "   str(count)   " of coin tossing with heads "   str(heads)
        ", tails "   str(tails)   ", and edges "   str(edges))
  

Результаты четырех тестов:

 $ python3.7 test.py
Observed 10000 of coin tossing with heads 4989, tails 5011, and edges 0
$ python3.7 test.py
Observed 10000 of coin tossing with heads 5109, tails 4891, and edges 0
$ python3.7 test.py 
Observed 10000 of coin tossing with heads 4968, tails 5032, and edges 0
$ python3.7 test.py 
Observed 10000 of coin tossing with heads 5046, tails 4954, and edges 0
  

Ответ №4:

установите размер binom.rvs = 1, а затем установите вероятность выпадения голов равной .5

 from scipy.stats import binom
flips=binom.rvs(1000,0.5,size=1)
print(flips)
plt.pie([flips,1000])
plt.legend(['heads','tails'])
plt.show()