Як створити послідовність


11

Я знаю, як генерувати послідовність із середнім . Наприклад, у Matlab, якщо я хочу створити послідовність довжиною , це:0 ± 1 10000±10±110000

2*(rand(1, 10000, 1)<=.5)-1

Однак як створити послідовність із середнім значенням , тобто з трохи кращим?0,05 1±10.051

Відповіді:


18

Бажане середнє значення задається рівнянням:

NpN(1p)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 зразками 1s і -1s: введіть тут опис зображення

Для повноти (підказка шапки до @Elvis):

import scipy.stats as st
x = 2*st.binom(1, .525).rvs(1000000) - 1
x.mean()
0.053859999999999998

1'000 експериментів із 1'000'000 зразками 1s і -1s:

введіть тут опис зображення

І нарешті, виходячи з рівномірного розподілу, як це запропонував @ Ł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 зразками 1s і -1s:

введіть тут опис зображення

Всі три виглядають практично однаково!

EDIT

Пара рядків на центральній граничній теоремі та поширення отриманих розподілів.

Перш за все, залучення засобів дійсно слідують нормальному розподілу.

По-друге, @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])

Хороша робота. Моя думка з Бернуллі полягала в тому, щоб звести питання до добре відомого розподілу ймовірностей; з точки зору „впровадження”, ваша відповідь та Łukasz були ідеальними.
Елвіс

Не жартуйте, ваше - найнаучніше і найкраще! ;) Я думав про біноміальний розподіл на півсекунди, але цього було недостатньо, щоб перетворити його на -1 та 1, тому я запозичив ваше рішення "як є", дякую!
Сергій Бушманов

1
Отже, з моїх позначень , а стандартне відхилення - . Коли ви берете середнє значення на зразків, стандартне відхилення становить а 95% обчислених засобів має знаходитись в інтервалі , тобто . Математична перевірка! ;)var(Y)=4var(X)=4p(1p)=0.9975Y0.9991060.999×1030.05±1.96×0.999×103(0.048;0.052)
Елвіс

12

Змінна зі значеннями і має вигляд з a Бернуллі з параметром . Очікуване його значення - , тому ви знаєте, як отримати (тут ).1 Y = 2 X - 1 X p E ( Y ) = 2 E ( X ) - 1 = 2 p - 1 p p = 0,52511Y=2X1XpE(Y)=2E(X)1=2p1pp=0.525

У R ви можете генерувати змінні Бернуллі за допомогою rbinom(n, size = 1, prob = p), наприклад,

x <- rbinom(100, 1, 0.525)
y <- 2*x-1

5

Згенеруйте зразків рівномірно , перекодуйте числа нижче 0,525 до 1 та відпочинок до -1.N[0,1]

Тоді очікуване вами значення

10.525+(1)(10.525)=0.5250.475=0.05

Я не користувач Matlab, але я думаю, що це буде

2*(rand(1, 10000, 1)<=.525)-1

3
Це правильний спосіб використання вибірки зворотного перетворення тут.
Тім

4

Вам потрібно генерувати більше 1s ніж -1s. Точно на 5% більше 1-го, тому що ви хочете, щоб ваше значення було 0,05. Отже, ви збільшуєте ймовірність 1s на 2,5% і зменшуєте -1s на 2,5%. У коді це еквівалентно зміни 0.5до 0.525, тобто з 50% до 52,5%


2

На всякий випадок, якщо ви хочете РЕЖИМИ 0,05, ви можете зробити еквівалент наступному коду R в MATLAB:

sample(c(rep(-1, 95*50), rep(1, 105*50)))

-1 ця відповідь неправильна! Єдине, що робить цей код - це випадкове перестановка статичного вектора значень. Вихід не випадковий!
Тім

2
@Tim Чому це не працює? Він повертає список -1 і 1 у випадковому порядку з підрахунками, розробленими для забезпечення точного середнього значення 0,05.
ddunn801

1
@Tim Це рішення є випадковим. Ви намагалися запустити його неодноразово?
whuber

@whuber це те саме, що рішення, запропоноване Amos Coats, єдина відмінність - перестановка значень. Статистичні властивості такого зразка будуть детермінованими та постійними.
Тім

3
@Tim, я думаю, ви можете прочитати деякі необґрунтовані припущення щодо цього питання, які прямо не зроблені. Хоча частоти - і, отже, всі моменти - самого невпорядкованого зразка будуть постійними, велика різноманітність «статистичних властивостей» серії, що формується, буде змінюватися випадковим чином. Оскільки приклад у запитанні генерує масив, а масиви не є множинами - упорядковуйте питання в масиві - я вважаю, що це тлумачення є справедливим (і воно висвітлює питання). З іншого боку, "рішення", яке опублікував Коутс, - це гарний жарт - але SE не жартує.
whuber
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.