Spørsmål:
Hvordan genererer jeg en $ \ pm 1 $ sekvens med gjennomsnittlig $ 0,05 $?
Ka-Wa Yip
2017-07-10 14:53:32 UTC
view on stackexchange narkive permalink

Jeg vet hvordan jeg skal generere en $ \ pm 1 $ sekvens med gjennomsnittlig $ 0 $.For eksempel i Matlab, hvis jeg vil generere en $ \ pm 1 $ sekvens med lengde $ 10000 $, er det:

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

Hvordan genererer jeg imidlertid en $ \ pm 1 $ sekvens med gjennomsnittlig $ 0,05 $, dvs. hvor $ 1 $ er litt foretrukket?

Fem svar:
Sergey Bushmanov
2017-07-10 15:05:30 UTC
view on stackexchange narkive permalink

Ønsket gjennomsnitt er gitt ved ligning:

$ \ frac {N \ cdot p - N \ cdot (1-p)} {N} = .05 $

hvorfra følger at sannsynligheten for 1s skal være .525

I Python:

  x = np.vilkårlig.valg ([- 1,1], størrelse = int (1e6), erstatt = True, p = [.475, .525])
 

Bevis:

  x.mean ()
0,050742000000000002
 

1000 eksperimenter med 1 000 000 prøver på 1 og 1 sek: enter image description here

For fullstendighetens skyld (hattips til @Elvis):

  importer scipy.stats som st
x = 2 * st.binom (1, .525) .rvs (1000000) - 1
x.mean ()
0,053859999999999998
 

1'000 eksperimenter med 1'000'000 prøver på 1s og -1s:

enter image description here

Og til slutt å tegne fra uniformfordeling, som foreslått av @ Łukasz Deryło (også i Python):

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

1'000 eksperimenter med 1'000'000 prøver på 1s og -1s:

enter image description here

Alle tre ser nesten identiske ut!

EDIT

Et par linjer på sentralbegrensningsteorem og spredning av resulterende distribusjoner.

Først og fremst følger trekk av midler faktisk Normalfordeling.

For det andre gjorde @Elvis i sin kommentar til dette svaret noen fine beregninger på den nøyaktige spredningen av midlene trukket over 1000 eksperimenter (circa (0,048; 0,052)), 95% konfidensintervall.

Og dette er resultatene av simuleringene, for å bekrefte resultatene hans:

  mn = []
for _ innen rekkevidde (1000):
    mn.append ((2 * st.binom (1, .525) .rvs (1000000) - 1) .mean ())
np.percentil (mn, [2.5,97.5])
matrise ([0,0480773, 0,0518703])
 
Fin jobb.Poenget mitt med Bernoulli var å redusere spørsmålet til en kjent sannsynlighetsfordeling;fra et 'implementerings' synspunkt var svaret ditt og Łukasz 'perfekte.
Ingen tull, din er mest vitenskapelig og den beste!;) Jeg tenkte på Binomial-distribusjon i et halvt sekund, men det var ikke nok til å gjøre det til -1 og 1, så jeg lånte løsningen din "som den er", takk!
$ \ def \ var {\ text {var}} $ Så med notasjonene mine, $ \ var (Y) = 4 \ var (X) = 4p (1-p) = 0,9975 $, og standardavviket på $ Y $er $ \ simeq 0,999 $.Når du tar gjennomsnittet på $ 10 ^ 6 $ prøver, er standardavviket $ 0,999 \ ganger 10 ^ {- 3} $ og 95% av de beregnede midlene skal være i intervallet $ 0,05 \ pm 1,96 \ ganger 0,999 \ ganger 10 ^ {-3} $, det vil si $ (0,048; 0,052) $.Matematikk sjekk ut!;)
Elvis
2017-07-10 15:37:15 UTC
view on stackexchange narkive permalink

En variabel med verdiene $ -1 $ og $ 1 $ har formen $ Y = 2X - 1 $ med $ X $ a Bernoulli med parameteren $ p $.Den forventede verdien er $ E (Y) = 2 E (X) - 1 = 2p - 1 $, så du vet hvordan du får $ p $ (her $ p = 0.525 $).

I R kan du generere Bernoulli-variabler med rbinom (n, size = 1, prob = p) , så for eksempel

  x <- rbinom (100, 1, 0.525)
y <- 2 * x-1
 
Łukasz Deryło
2017-07-10 15:01:19 UTC
view on stackexchange narkive permalink

Generer $ N $ -prøver jevnt fra $ [0,1] $, kod tallene lavere enn 0,525 til 1 og hvil til -1.

Da er den forventede verdien din

$ 1 \ cdot 0.525 + (-1) \ cdot (1-0.525) = 0.525 - 0.475 = 0.05 $

Jeg er ikke Matlab-bruker, men jeg antar at det burde være

  2 * (rand (1, 10000, 1) < = .525) -1
 
Det er en riktig måte å bruke [inverse transform sampling] (https://stats.stackexchange.com/questions/184325/how-does-the-inverse-transform-method-work/184337#184337) her inne.
Aksakal
2017-07-11 00:52:14 UTC
view on stackexchange narkive permalink

Du må generere mer 1s enn -1s.Nøyaktig 5% flere 1-er fordi du vil at gjennomsnittet ditt skal være 0,05.Så du øker sannsynligheten for 1s med 2,5% og reduserer -1s med 2,5%.I koden din tilsvarer det å endre 0.5 til 0.525 , dvs. fra 50% til 52.5%

ddunn801
2017-07-10 23:50:38 UTC
view on stackexchange narkive permalink

Bare i tilfelle du vil ha et Nøyaktig 0,05 betyr at du kan gjøre tilsvarende R-koden i MATLAB:

  -prøve (c (rep (-1, 95 * 50), rep (1, 105 * 50)))
 
-1 dette svaret er feil!Det eneste denne koden gjør er at den tilfeldig tillater den statiske vektoren av verdier.Produksjonen er ikke tilfeldig!
@Tim Hvorfor fungerer det ikke?Den returnerer en liste med -1 og 1 i tilfeldig rekkefølge med teller designet for å sikre et nøyaktig gjennomsnitt på 0,05.
@Tim Denne løsningen * er * tilfeldig.Har du prøvd å kjøre den gjentatte ganger?
@whuber dette er den samme som løsningen foreslått av Amos Coats, den eneste forskjellen er permuting av verdiene.Statistiske egenskaper for et slikt utvalg vil være deterministisk og konstant.
@Tim Jeg tror du leser noen uberettigede forutsetninger om dette spørsmålet som ikke er uttrykkelig gjort.Selv om frekvensene - og dermed alle øyeblikkene - av selve * den uordnede prøven * vil være konstant, vil et stort utvalg av "statistiske egenskaper" til * serien * som genereres variere tilfeldig.Siden eksemplet i spørsmålet genererer en matrise, og matriser ikke er mengder - orden betyr noe i en matrise - tror jeg denne tolkningen er rettferdig (og den belyser spørsmålet)."Løsningen" som Coats har lagt ut, er derimot en god vits - men SE liker ikke å tulle.


Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 3.0-lisensen den distribueres under.
Loading...