Statistiche false


27

Se hai intenzione di inventare alcune notizie false, ti consigliamo di fabbricare alcuni dati per eseguirne il backup. Devi già avere alcune conclusioni preconcette e vuoi alcune statistiche per rafforzare l'argomento della tua logica difettosa. Questa sfida dovrebbe aiutarti!

Dati tre numeri di input:

  • N - numero di punti dati
  • μ - media dei punti dati
  • σ - deviazione standard dei punti dati, dove μ e σ sono dati da:

    inserisci qui la descrizione dell'immagine

Emette un elenco di numeri non ordinati, 𝑥 i , che genererebbe N , μ e σ dati .

Non sarò troppo esigente riguardo ai formati I / O, ma mi aspetto una sorta di decimali per μ , σ e i punti dei dati di output. Come minimo, dovrebbero essere supportate almeno 3 cifre significative e magnitudo di almeno 1.000.000. I galleggianti IEEE vanno bene.

  • N sarà sempre un numero intero, dove 1 ≤ N ≤ 1.000
  • μ può essere qualsiasi numero reale
  • σ sarà sempre ≥ 0
  • i punti dati possono essere qualsiasi numero reale
  • se N è 1, allora σ sarà sempre 0.

Si noti che la maggior parte degli ingressi avrà molte possibili uscite. Devi solo fornire un output valido. L'output può essere deterministico o non deterministico.

Esempi

Input (N, μ, σ) -> Possible Output [list]

2, 0.5, 1.5 -> [1, 2]
5, 3, 1.414 -> [1, 2, 3, 4, 5]
3, 5, 2.160 -> [2, 6, 7]
3, 5, 2.160 -> [8, 4, 3]
1, 0, 0 -> [0]

6
Avremmo dovuto aggiungere un input di verità / falsità per il valore p, quindi avremmo dovuto fare dati sia correlati che non correlati a fake-backup o fake-disprove ahaha.
— Magic Octopus Urn

1
Cosa significa +vee cosa -vesignifica?
— CG.

@ChelseaG. Abbreviazioni per positivo e negativo . Ho modificato per chiarire.
— Trauma digitale

Quando N = 1, σ sarà sempre 0 per renderlo possibile?
— xnor

1
Davvero noi pedanti dovremmo usare la deviazione standard del campione corretta e non implementare per input con N = 1.
— Jonathan Allan,

Risposte:


8

Pyth , 44 35 34 byte

? eA.DhQ2 + eQ * G, -eQJ * E @ hc1thQ2 + eQJ * G, -eQKE + eQK 
.N? eA.DN2+T*G+LT_B*Y@hc1tN2*G+LT_BY
.N? EA.DN2+T*G+LT_B*Y@cNtN2*G+LT_BY

Provalo online! (Il codice sopra definisce una funzione. :.*Viene aggiunto al collegamento per richiamare la funzione.)

La matematica

Questo costruisce i dati simmetricamente. Se Nè pari, i dati sono solo il valore medio più o meno la deviazione standard. Tuttavia, se Nè dispari, allora abbiamo appena aperto una lattina di worm, poiché la media deve essere presente affinché i dati siano simmetrici e quindi le fluttuazioni devono essere moltiplicate per un certo fattore.

Se nè pari

  • La metà dei dati lo sono μ+σ.
  • La metà dei dati lo sono μ-σ.

Se nè dispari

  • Un dato è μ.
  • Meno della metà dei dati lo sono μ+σ*sqrt(n/(n-1)).
  • Meno della metà dei dati lo sono μ-σ*sqrt(n/(n-1)).

6

MATL , 22 byte

Grazie a @DigitalTrauma per una correzione.

:t&1Zs/tYm-*+tZN?3G9L(

Ordine di ingresso è: N, σ, μ.

Provalo online!

Oppure vedi una versione modificata che calcola anche la deviazione media e standard dei dati prodotti, come un controllo.

Spiegazione

Il codice è diviso in quattro parti:

  1. :genera l'array [1 2 ... N]dove Nviene preso come input implicito.

  2. t&1Zs/divide quei numeri per la loro deviazione standard empirica (calcolata normalizzando per N) e tYm-sottrae la media empirica dei valori risultanti. Ciò garantisce che i risultati abbiano una media 0empirica e una deviazione standard empirica 1.

  3. *si moltiplica per σe +aggiunge μ, entrambi presi come input impliciti.

  4. tZN?x3Ggestisce il caso particolare che N = 1, σ = 0per la quale l'uscita dovrebbe essere μ. Se questo è davvero il caso, allora la deviazione standard empirica calcolata nel secondo passaggio è stata 0, la divisione ha dato infe moltiplicato per σnel terzo passaggio ha dato NaN. Quindi il codice fa ciò: se l'array ottenuto è costituito da tutti i NaNvalori (code tZN?), eliminalo ( x) e invia il terzo input ( 3G), che è μ.


4

Python , 50 byte

lambda n,m,s:[m+s*(n-1)**.5]+[m-s/(n-1%n)**.5]*~-n

Provalo online!

Utilizza la seguente ndistribuzione di elementi con media 0e sdev 1:

  • Con probabilità 1/n(cioè 1elemento), output(n-1)**0.5
  • Con probabilità 1-1/n(cioè n-1elementi), output-(n-1)**(-0.5)

Questo è ridimensionato per significare me sdev strasformando x->m+s*x. Fastidiosamente, n=1dà una divisione per zero per un valore inutile, così abbiamo hack via facendo /(n-1%n)**.5, con 1%ndando 0per n==1e 1altrimenti.

Potresti pensare che (n-1)**.5può essere abbreviato ~-n**.5, ma l'espiazione avviene per prima.

A defè un byte più lungo.

def f(n,m,s):a=(n-1%n)**.5;print[m+s*a]+[m-s/a]*~-n

3

R, 83 62 53 byte

function(n,m,s)`if`(n>1,scale(1:n)*s*sqrt(1-1/n)+m,m)

Se n=1, quindi restituisce m(poiché scaleritornerebbe NA), altrimenti ridimensiona i dati [1,...,n]in modo che abbiano la media 0 e (campione) la deviazione standard 1, quindi si moltiplica s*sqrt(1-1/n)per ottenere la deviazione standard corretta della popolazione e aggiunge il mpassaggio alla media appropriata. Grazie a Dason per avermi fatto conoscere la funzione di ridimensionamento e aver eliminato quei byte!

Provalo online!


Puoi aggiungere alcuni test in Provalo online in modo che la tua risposta possa essere facilmente verificata?
— Trauma digitale

Sì! dammi due minuti.
— Giuseppe,

Probabilmente potrebbe semplicemente utilizzare 1:ninvece di rt(n,n)salvare 4 byte. E la scalefunzione potrebbe probabilmente essere utile.
— Dason,

@Dason - grazie! Ho imparato scalequale è fantastico.
— Giuseppe,

1

Gelatina , 20 byte

÷_Ḃ$©$*.;N$ṁ®;0ṁ⁸×⁵+

Provalo online!

Programma completo che accetta tre argomenti della riga di comando: n , μ , σ .

Come?

Crea valori floor (n / 2) equidistanti dalla media e un valore nella media se n è dispari in modo che la deviazione standard sia corretta ...

÷_Ḃ$©$*.;N$ṁ®;0ṁ⁸×⁵+ - Main link: n, μ (σ expected as third input, the 5th command argument)
   $                 - last two links as a monad:
 _                   -   n minus:
  Ḃ                  -     n mod 2            i.e. n-1 if n is odd, n if n is even
    ©                - copy value to register
÷                    - n divided by that
       .             - literal 0.5
      *              - exponentiate = (n / (n - (n mod 2))) ^ 0.5
                     -        i.e. 1 if n is even; or (n/(n-1))^0.5 if n is odd
         $           - last two links as a monad:
        N            -   negate
       ;             -   concatenate   i.e. [1,-1] or [(n/(n-1))^0.5,-(n/(n-1))^0.5]
            ®        - recall value from register
           ṁ         - mould the list like something of that length
             ;0      - concatenate a zero
                ⁸    - link's left argument, n
               ṁ     - mould the list like something of length n (removes the zero for even n)
                  ⁵  - fifth command argument, third program argument (σ)
                 ×   - multiply (vectorises)
                   + - add μ (vectorises)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.