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

Jeg ved, hvordan man genererer en $ \ pm 1 $ sekvens med gennemsnit $ 0 $.For eksempel i Matlab, hvis jeg vil generere en $ \ pm 1 $ sekvens med længden $ 10000 $, er det:

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

Hvordan genereres dog en $ \ pm 1 $ sekvens med gennemsnit $ 0,05 $, dvs. hvor $ 1 $ er lidt foretrukket?

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

Dit ønskede gennemsnit er givet ved ligning:

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

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

I Python:

x = np. tilfældigt valg ([- 1,1], størrelse = int (1e6), erstat = Sand, p = [.475, .525])

Bevis:

x.mean () 0,050742000000000002

1'000 eksperimenter med 1'000'000 prøver på 1s og -1s: enter image description here

For fuldstændighedens skyld (tip 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 sidst tegning fra ensartet distribution, som foreslået af @ Ł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 de tre ser næsten identiske ud!

EDIT

Et par linjer i Central-sætningen og spredningen af ​​resulterende distributioner.

Først og fremmest følger trækningen af ​​midler faktisk Normalfordeling.

For det andet foretog @Elvis i sin kommentar til dette svar nogle gode beregninger om den nøjagtige spredning af midlerne trukket over 1.000 eksperimenter (circa (0,048; 0,052)), 95% konfidensinterval.

Og dette er resultaterne af simuleringerne for at bekræfte hans resultater:

mn = [] for _ inden for rækkevidde (1000): mn.append ((2 * st.binom (1, .525) .rvs (1000000) - 1). middel ()) np.percentil (mn, [2,5,97,5]) array ([0,0480773, 0,0518703])
Godt job.Min pointe med Bernoulli var at reducere spørgsmålet til en velkendt sandsynlighedsfordeling;fra et 'implementerings'-synspunkt var dit svar og Łukasz' perfekte.
Ingen sjov, din er mest videnskabelig og den bedste!;) Jeg tænkte på Binomial distribution i et halvt sekund, men det var ikke nok til at gøre det til -1 og 1, så jeg lånte din løsning "som den er", tak!
$ \ def \ var {\ text {var}} $ Så med mine notationer, $ \ var (Y) = 4 \ var (X) = 4p (1-p) = 0,9975 $, og standardafvigelsen på $ Y $er $ \ simeq 0,999 $.Når du tager gennemsnittet på $ 10 ^ 6 $ prøver, er standardafvigelsen $ 0,999 \ gange 10 ^ {- 3} $ og 95% af de beregnede midler skal være i intervallet $ 0,05 \ pm 1,96 \ gange 0,999 \ gange 10 ^ {-3} $, det vil sige $ (0,048; 0,052) $.Matematik check ud!;)
Elvis
2017-07-10 15:37:15 UTC
view on stackexchange narkive permalink

En variabel med værdier $ -1 $ og $ 1 $ har formen $ Y = 2X - 1 $ med $ X $ a Bernoulli med parameter $ p $.Dens forventede værdi er $ E (Y) = 2 E (X) - 1 = 2p - 1 $, så du ved, hvordan du får $ p $ (her $ p = 0.525 $).

I R kan du generere Bernoulli-variabler med rbinom (n, størrelse = 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 ensartet fra $ [0,1] $, genkod numre lavere end 0,525 til 1 og hvil til -1.

Derefter er din forventede værdi

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

Jeg er ikke en Matlab-bruger, men jeg antager, at det skal være

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

Du skal generere flere 1'er end -1s.Præcis 5% flere 1'ere, fordi du vil have, at dit gennemsnit er 0,05.Så du øger sandsynligheden for 1s med 2,5% og reducerer -1s med 2,5%.I din kode svarer det til at ændre 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 hvis du vil have et PRÆCIS 0,05 betyder, kan du gøre det svarende til følgende R-kode i MATLAB:

prøve (c (rep (-1, 95 * 50), rep (1, 105 * 50)))
-1 dette svar er forkert!Det eneste, denne kode gør, er, at den tilfældigt tillader den statiske vektor af værdier.Outputtet er ikke tilfældigt!
@Tim Hvorfor fungerer det ikke?Det returnerer en liste med -1 og 1 i en tilfældig rækkefølge med optællinger designet til at sikre et nøjagtigt gennemsnit på 0,05.
@Tim Denne løsning * er * tilfældig.Har du prøvet at køre det gentagne gange?
@whuber dette er den samme som løsning foreslået af Amos Coats, den eneste forskel er permuting af værdierne.Statistiske egenskaber for en sådan prøve vil være deterministiske og konstante.
@Tim Jeg tror, du læser måske nogle uberettigede antagelser i dette spørgsmål, der ikke udtrykkeligt er fremsat.Selvom frekvenserne - og derfor alle øjeblikke - af selve * den ikke-ordnede prøve * vil være konstante, vil et stort udvalg af "statistiske egenskaber" i * serien *, der genereres, variere tilfældigt.Da eksemplet i spørgsmålet genererer en matrix, og arrays ikke er sæt - orden betyder noget i en matrix - synes jeg denne fortolkning er retfærdig (og det belyser spørgsmålet).Den "løsning", der er sendt af Coats, er på den anden side en god vittighed - men SE kan ikke lide sjov.


Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...