Fałszywe statystyki

27

Jeśli masz zamiar wymyślić fałszywe wiadomości, zechcesz sfabrykować niektóre dane, aby je utworzyć. Musisz już mieć pewne z góry ustalone wnioski i chcesz, aby niektóre statystyki wzmocniły argumenty o swojej wadliwej logice. To wyzwanie powinno ci pomóc!

Biorąc pod uwagę trzy liczby wejściowe:

  • N - liczba punktów danych
  • μ - średnia punktów danych
  • σ - standardowe odchylenie punktów danych, gdzie μ i σ są podane przez:

    wprowadź opis zdjęcia tutaj

Wyprowadza nieuporządkowaną listę liczb 𝑥 i , która wygenerowałaby dane N , μ i σ .

Nie będę zbyt wybredny co do formatów I / O, ale oczekuję pewnego rodzaju miejsc po przecinku dla μ , σ i punktów danych wyjściowych. Jako minimum należy wspierać co najmniej 3 znaczące liczby i wielkość co najmniej 1 000 000. Pływaki IEEE są w porządku.

  • N zawsze będzie liczbą całkowitą, gdzie 1 ≤ N ≤ 1000
  • μ może być dowolną liczbą rzeczywistą
  • σ zawsze będzie wynosić ≥ 0
  • punktami danych może być dowolna liczba rzeczywista
  • jeśli N wynosi 1, to σ będzie zawsze wynosić 0.

Zauważ, że większość wejść będzie miała wiele możliwych wyników. Musisz podać tylko jeden prawidłowy wynik. Wynik może być deterministyczny lub niedeterministyczny.

Przykłady

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]
Cyfrowa trauma
źródło
6
Powinienem był dodać wartość true / falsy dla wartości p, więc musielibyśmy tworzyć albo skorelowane, albo nieskorelowane dane, albo w celu fałszywej kopii zapasowej, albo fałszywego-obalenia Ahaha.
Magic Octopus Urn
1
Co znaczy +vei co -veoznacza?
CG.
@ChelseaG. Skróty dla pozytywnych i negatywnych . Zredagowałem, aby wyjaśnić.
Cyfrowa trauma
Gdy N = 1, czy σ zawsze będzie 0, aby było to możliwe?
xnor
1
Naprawdę my, pedanci, powinniśmy stosować skorygowane odchylenie standardowe próbki i nie wdrażać dla danych wejściowych z N = 1.
Jonathan Allan,

Odpowiedzi:

8

Pyth , 44 35 34 bajtów

? 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

Wypróbuj online! (Powyższy kod definiuje funkcję. :.*Jest dodawany do łącza w celu wywołania funkcji).

Matematyka

Konstruuje to dane symetrycznie. Jeśli Njest parzyste, to dane są tylko średnią plus lub minus odchylenie standardowe. Jeśli jednak Njest nieparzyste, właśnie otworzyliśmy puszkę robaków, ponieważ średnia musi być obecna, aby dane były symetryczne, a więc fluktuacje należy pomnożyć przez pewien współczynnik.

Jeśli njest parzysty

  • Połowa danych to μ+σ.
  • Połowa danych to μ-σ.

Jeśli njest dziwne

  • Jednym punktem odniesienia jest μ.
  • Mniej niż połowa danych to μ+σ*sqrt(n/(n-1)).
  • Mniej niż połowa danych to μ-σ*sqrt(n/(n-1)).
Leaky Nun
źródło
6

MATL , 22 bajty

Dzięki @DigitalTrauma za korektę.

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

Kolejność wejściowy jest: N, σ, μ.

Wypróbuj online!

Lub zobacz zmodyfikowaną wersję, która oblicza również średnią i standardowe odchylenie wytworzonych danych, jako kontrolę.

Wyjaśnienie

Kod podzielony jest na cztery części:

  1. :generuje tablicę, w [1 2 ... N]której Nprzyjmuje się jako niejawne dane wejściowe.

  2. t&1Zs/dzieli te liczby przez ich empiryczne odchylenie standardowe (obliczone przez normalizację N) i tYm-odejmuje średnią empiryczną uzyskanych wartości. Zapewnia to, że wyniki mają średnią 0empiryczną i empiryczne odchylenie standardowe 1.

  3. *mnoży się przez σi +dodaje μ, oba wzięte jako dane niejawne.

  4. tZN?x3Gobsługuje szczególny przypadek, że N = 1, σ = 0dla których wyjście powinno być μ. Jeśli tak rzeczywiście jest, to empiryczne odchylenie standardowe obliczone w drugim etapie było 0, podział dał inf, a pomnożenie przez σw trzecim kroku dał NaN. Tak więc kod działa: jeśli uzyskana tablica zawiera wszystkie NaNwartości (kod tZN?), usuń ją ( x) i wciśnij trzecie wejście ( 3G), które jest μ.

Luis Mendo
źródło
4

Python , 50 bajtów

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

Wypróbuj online!

Używa następującego nrozkładu -elementów ze średnią 0i sdev 1:

  • Z prawdopodobieństwem 1/n(tj. 1Elementem) wyjście(n-1)**0.5
  • Z prawdopodobieństwem 1-1/n(tj. n-1Elementy), wyjście-(n-1)**(-0.5)

Przekształca się to na średnie mi sdev spoprzez transformację x->m+s*x. Irytujące, n=1daje błąd dzielenia przez zero dla bezużytecznej wartości, więc hakujemy go, wykonując /(n-1%n)**.5, 1%ndając 0za n==1i 1nie.

Można by pomyśleć, że (n-1)**.5można go skrócić ~-n**.5, ale potęgowanie następuje najpierw.

A defjest o jeden bajt dłuższy.

def f(n,m,s):a=(n-1%n)**.5;print[m+s*a]+[m-s/a]*~-n
xnor
źródło
3

R, 83 62 53 bajty

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

Jeśli n=1, to zwraca m(ponieważ scalewróciłoby NA), w przeciwnym razie skaluje dane, [1,...,n]aby uzyskać średnią 0 i (próbka) odchylenie standardowe 1, więc mnoży przez, s*sqrt(1-1/n)aby uzyskać prawidłowe odchylenie standardowe populacji, i dodaje mdo przesunięcia do odpowiedniej średniej. Dzięki Dason za zapoznanie mnie z funkcją skalowania i usunięcie tych bajtów!

Wypróbuj online!

Giuseppe
źródło
Czy możesz dodać kilka testów w Try It Online, aby Twoja odpowiedź mogła być łatwo zweryfikowana?
Cyfrowa trauma
tak! daj mi dwie minuty.
Giuseppe,
Prawdopodobnie może po prostu użyć 1:nzamiast rt(n,n)zapisać 4 bajty. Ta scalefunkcja może być prawdopodobnie przydatna.
Dason,
@Dason - dzięki! Dowiedziałem się, scaleco jest świetne.
Giuseppe,
1

Galaretka , 20 bajtów

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

Wypróbuj online!

Pełny program przyjmujący trzy argumenty wiersza poleceń: n , μ , σ .

W jaki sposób?

Tworzy wartości podłogi (n / 2) w równej odległości od średniej i wartości średniej, jeśli n jest nieparzyste, tak że odchylenie standardowe jest prawidłowe ...

÷_Ḃ$©$*.;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)
Jonathan Allan
źródło