Como gerar uma sequência de


11

Eu sei como gerar uma seqüência ±1 com média 0 . Por exemplo, no Matlab, se eu quiser gerar uma sequência ±1 de comprimento 10000 , é:

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

No entanto, como gerar uma sequência ±1 com média de 0.05 , ou seja, com 1 sendo ligeiramente preferido?

Respostas:


18

Sua média desejada é dada pela equação:

NpN(1p)N=.05

da qual resulta que a probabilidade da 1sdeve ser.525

Em Python:

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

Prova:

x.mean()
0.050742000000000002

1'000 experimentos com 1'000'000 amostras de 1s e -1s: insira a descrição da imagem aqui

Por uma questão de perfeição (dica para @Elvis):

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

1'000 experimentos com 1'000'000 amostras de 1s e -1s:

insira a descrição da imagem aqui

E, finalmente, utilizando uma distribuição uniforme, como sugerido por @ Łukasz Deryło (também, em Python):

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

1'000 experimentos com 1'000'000 amostras de 1s e -1s:

insira a descrição da imagem aqui

Todos os três parecem praticamente idênticos!

EDITAR

Duas linhas no teorema do limite central e a propagação das distribuições resultantes.

Antes de tudo, os empates de meios seguem a Distribuição Normal.

Segundo, @Elvis em seu comentário a esta resposta fez alguns cálculos agradáveis ​​sobre a distribuição exata das médias traçadas em mil e mil experiências (cerca de (0,048; 0,052)), intervalo de confiança de 95%.

E estes são resultados das simulações, para confirmar seus resultados:

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])

Bom trabalho. Meu argumento com os Bernoulli era reduzir a questão a uma distribuição de probabilidade bem conhecida; do ponto de vista da 'implementação', sua resposta e Łukasz 'foram perfeitos.
Elvis

Sem brincadeira, o seu é o mais científico e o melhor! ;) Eu estava pensando na distribuição binomial por meio segundo, mas isso não foi suficiente para transformá-la em -1 e 1, então peguei emprestada sua solução "como está", obrigado!
Sergey Bushmanov

1
Assim, com minhas notações, , e o desvio padrão de é . Quando você calcula a média em amostras, o desvio padrão é e 95% das médias calculadas devem estar no intervalo , que é . Confira a matemática! ;)var(Y)=4var(X)=4p(1p)=0.9975Y0.9991060.999×1030.05±1.96×0.999×103(0.048;0.052)
Elvis

12

Uma variável com valores e tem a forma com a Bernoulli com o parâmetro . Seu valor esperado é1 Y = 2 X - 1 X p E ( Y ) = 2 E ( X ) - 1 = 2 p - 111Y=2X1XpE(Y)=2E(X)1=2p1pp=0.525

Em R você pode gerar variáveis ​​de Bernoulli com rbinom(n, size = 1, prob = p), portanto, por exemplo

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

5

N[0,1]

Então o seu valor esperado é

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

Não sou usuário do Matlab, mas acho que deve ser

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

3
Essa é uma maneira correta de empregar amostragem de transformação inversa aqui.
Tim

4

Você precisa gerar mais 1s que -1s. Precisamente, 5% mais 1s porque você deseja que sua média seja 0,05. Portanto, você aumenta a probabilidade de 1s em 2,5% e diminui -1s em 2,5%. No seu código, é equivalente a mudar 0.5para 0.525, ou seja, de 50% para 52,5%


2

Caso deseje um valor EXATO 0,05, você pode fazer o equivalente ao seguinte código R no MATLAB:

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

-1 esta resposta está errada! A única coisa que esse código faz é permitir aleatoriamente o vetor estático de valores. A saída não é aleatória!
Tim

2
@ Tim Por que não funciona? Ele retorna uma lista de -1 e 1 em uma ordem aleatória com contagens projetadas para garantir uma média exata de 0,05.
ddunn801

1
@ Tim Esta solução é aleatória. Você já tentou executá-lo repetidamente?
whuber

@whuber é a mesma solução sugerida por Amos Coats, a única diferença é permutar os valores. As propriedades estatísticas dessa amostra serão determinísticas e constantes.
Tim

3
@ Tim Acho que você pode estar lendo algumas suposições injustificadas nesta questão que não são explicitamente feitas. Embora as frequências - e, portanto, todos os momentos - da própria amostra não ordenada sejam constantes, uma grande variedade de "propriedades estatísticas" da série gerada variará aleatoriamente. Como o exemplo na pergunta gera uma matriz, e as matrizes não são conjuntos - a ordem importa em uma matriz - acho que essa interpretação é justa (e ilumina a pergunta). A "solução" postada pela Coats, por outro lado, é uma boa piada - mas a SE não gosta de brincar.
whuber
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.