평균 로 시퀀스 를 생성하는 방법 은 무엇입니까?


11

평균 으로 시퀀스 를 생성하는 방법을 알고 있습니다. 예를 들어 Matlab에서 길이가 인 시퀀스 를 생성하려면 다음과 같습니다.±10±110000

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

그러나 평균 0.05 , 즉 1 이 약간 선호되는 시퀀스 를 생성하는 방법은 무엇입니까?±10.051

답변:


18

원하는 평균은 방정식으로 제공됩니다.

(1)=.05

이로부터의 확률이 그 이하 1s이어야.525

파이썬에서 :

x = np.random.choice([-1,1], size=int(1e6), replace = True, p = [.475, .525])

증명:

x.mean()
0.050742000000000002

1과 -1의 1'000'000 샘플을 사용한 1'000 실험 : 여기에 이미지 설명을 입력하십시오

완전성을 위해 (@Elvis에 대한 팁) :

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

1과 -1의 1'000'000 샘플을 사용한 1'000 실험 :

여기에 이미지 설명을 입력하십시오

그리고 마지막으로 @ Łukasz Deryło (Python에서도)에서 제안한 바와 같이 균일 분포에서 도출합니다.

u = st.uniform(0,1).rvs(1000000)
x = 2*(u<.525) -1
x.mean()
0.049585999999999998

1과 -1의 1'000'000 샘플을 사용한 1'000 실험 :

여기에 이미지 설명을 입력하십시오

세 가지 모두 거의 동일하게 보입니다!

편집하다

Central의 몇 줄은 정리와 결과 분포의 확산을 제한합니다.

우선, 수단의 추첨은 실제로 정규 분포를 따릅니다.

둘째, @Elvis는이 답변에 대한 논평에서 1,000 회 실험 (약 (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])

좋은 작업. Bernoulli에 대한 나의 요점은 질문을 잘 알려진 확률 분포로 줄이는 것이었다. '구현'관점에서, 당신의 대답과 우카 쉬는 완벽했습니다.
Elvis

농담이 아닙니다. 가장 과학적이며 최고입니다! ;) 나는 0.5 초 동안 Binomial 분포에 대해 생각하고 있었지만 그것이 -1과 1로 전환하기에는 충분하지 않았으므로 솔루션을 "있는 그대로"빌려주었습니다. 감사합니다!
Sergey Bushmanov

1
var(와이)=4var(엑스)=4(1)=0.9975와이0.9991060.999×100.05±1.96×0.999×10(0.048;0.052)

12

11와이=2엑스1엑스이자형(와이)=2이자형(엑스)1=21=0.525

R에서는을 사용하여 Bernoulli 변수를 생성 할 수 있습니다. rbinom(n, size = 1, prob = p)예를 들어

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

5

[0,1]

그런 다음 예상 값은

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

나는 Matlab 사용자는 아니지만 그것이 있어야한다고 생각합니다.

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

3
이것이 역변환 샘플링 을 사용하는 올바른 방법입니다 .

4

-1보다 1을 더 많이 생성해야합니다. 정확히는 평균이 0.05가되기를 원하기 때문에 5 % 더 많은 1입니다. 따라서 1의 확률을 2.5 % 증가시키고 -1을 2.5 % 감소시킵니다. 코드에서 그것은 변화에 상응의 0.50.52550 %에서 52.5 %로 즉,


2

EXACT 0.05를 원할 경우 MATLAB에서 다음 R 코드와 동등한 기능을 수행 할 수 있습니다.

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

-1이 답변이 잘못되었습니다! 이 코드가하는 유일한 것은 값의 정적 벡터를 무작위로 치환한다는 것입니다. 출력은 무작위가 아닙니다!
Tim

2
@Tim 왜 작동하지 않습니까? 정확한 평균 0.05를 보장하도록 설계된 카운트를 사용하여 임의 순서로 -1과 1의 목록을 반환합니다.
ddunn801

1
@Tim이 솔루션 무작위입니다. 반복해서 실행 해 보셨습니까?
whuber

@ whuber 이것은 Amos Coats가 제안한 솔루션과 동일하지만 유일한 차이점은 값을 바꾸는 것입니다. 이러한 샘플의 통계적 특성은 결정적이고 일정합니다.

3
@Tim 나는 당신이 명시 적으로 만들어지지 않은이 질문에 대한 부주의 한 가정을 읽고 있다고 생각합니다. 정렬되지 않은 샘플 자체 의 주파수와 모든 모멘트 가 일정하지만 생성 되는 계열 의 다양한 "통계적 속성" 은 임의로 변합니다. 질문의 예는 배열을 생성하고 배열은 세트가 아니며 배열의 순서 문제 이므로이 해석은 공정한 것으로 생각합니다 (그리고 질문을 밝힙니다). 반면 Coats가 게시 한 "솔루션"은 좋은 농담이지만 ​​SE는 농담을 좋아하지 않습니다.
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.