Ваше желаемое среднее значение определяется уравнением:
N⋅ p - N⋅ ( 1 - р )N= .05
из чего следует, что вероятность 1s
должна быть.525
В Python:
x = np.random.choice([-1,1], size=int(1e6), replace = True, p = [.475, .525])
Доказательство:
x.mean()
0.050742000000000002
1 000 экспериментов с 1 000 000 образцов 1 с и 1 с:
Ради полноты (отзыв на @Elvis):
import scipy.stats as st
x = 2*st.binom(1, .525).rvs(1000000) - 1
x.mean()
0.053859999999999998
1 000 экспериментов с 1 000 000 образцов 1 с и 1 с:
И, наконец, рисование из равномерного распределения, как предлагает @ Łukasz Deryło (также в Python):
u = st.uniform(0,1).rvs(1000000)
x = 2*(u<.525) -1
x.mean()
0.049585999999999998
1 000 экспериментов с 1 000 000 образцов 1 с и 1 с:
Все три выглядят практически одинаково!
РЕДАКТИРОВАТЬ
Пара строк по центральной предельной теореме и разброс полученных в результате распределений.
Прежде всего, ничьи средств действительно следуют нормальному распределению.
Во-вторых, @Elvis в своем комментарии к этому ответу сделал несколько хороших расчетов точного разброса средних значений за 1000 экспериментов (около (0,048; 0,052)), 95% доверительный интервал.
И это результаты моделирования, чтобы подтвердить его результаты:
mn = []
for _ in range(1000):
mn.append((2*st.binom(1, .525).rvs(1000000) - 1).mean())
np.percentile(mn, [2.5,97.5])
array([ 0.0480773, 0.0518703])
Переменная со значениями и имеет вид с a Бернулли с параметром . Его ожидаемое значение , поэтому вы знаете, как получить (здесь ).1 Y = 2 X - 1 X p E ( Y ) = 2 E ( X ) - 1 = 2 p - 1 p p = 0,525−1 1 Y=2X−1 X p E(Y)=2E(X)−1=2p−1 p p=0.525
В R вы можете генерировать переменные Бернулли с
rbinom(n, size = 1, prob = p)
, например,источник
Равномерно сгенерируйте выборок из , перекодируйте числа ниже 0,525 к 1 и оставьте до -1.[ 0 , 1 ]N [0,1]
Тогда ваше ожидаемое значение
Я не пользователь Matlab, но я думаю, что это должно быть
источник
Вам нужно сгенерировать больше 1 с, чем -1 с. Точно, на 5% больше 1, потому что вы хотите, чтобы среднее значение было 0,05. Таким образом, вы увеличиваете вероятность 1 с на 2,5% и уменьшаете -1 с на 2,5%. В вашем коде это эквивалентно изменению
0.5
на0.525
, то есть от 50% до 52,5%источник
На всякий случай, если вы хотите, чтобы значение EXACT 0,05 означало, что вы можете сделать эквивалент следующего кода R в MATLAB:
источник