Gefälschte Statistiken

27

Wenn Sie gefälschte Nachrichten erfinden möchten, sollten Sie einige Daten fabrizieren, um sie zu sichern. Sie müssen bereits einige vorgefasste Schlussfolgerungen haben, und Sie möchten, dass einige Statistiken das Argument Ihrer fehlerhaften Logik verstärken. Diese Herausforderung soll Ihnen helfen!

Bei drei eingegebenen Zahlen:

  • N - Anzahl der Datenpunkte
  • μ - Mittelwert der Datenpunkte
  • σ - Standardabweichung der Datenpunkte, wobei μ und σ gegeben sind durch:

    Bildbeschreibung hier eingeben

Geben Sie eine ungeordnete Liste von Zahlen 𝑥 i aus , die die gegebenen Werte N , μ und σ erzeugen würden .

Ich werde nicht zu wählerisch bei den E / A-Formaten sein, aber ich erwarte eine Art Dezimalstellen für μ , σ und die Ausgabedatenpunkte. Mindestens 3 signifikante Zahlen und eine Größenordnung von mindestens 1.000.000 sollten unterstützt werden. IEEE-Schwimmer sind in Ordnung.

  • N wird immer eine ganze Zahl sein, wobei 1 ≤ N ≤ 1.000 ist
  • μ kann eine beliebige reelle Zahl sein
  • σ wird immer ≥ 0 sein
  • Datenpunkte können eine beliebige reelle Zahl sein
  • wenn N 1 ist, wird σ immer 0 sein.

Beachten Sie, dass die meisten Eingänge viele mögliche Ausgänge haben. Sie müssen nur eine gültige Ausgabe angeben. Die Ausgabe kann deterministisch oder nicht deterministisch sein.

Beispiele

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]
Digitales Trauma
quelle
6
Hätte eine wahrheitsgemäße / falsche Eingabe für den p-Wert hinzufügen sollen, so dass wir entweder korrelierte oder nicht korrelierte Daten erstellen müssten, um entweder eine gefälschte Sicherung oder eine gefälschte Widerlegung durchzuführen, ahaha.
Magic Octopus Urn
1
Was bedeutet +veund -vebedeuten?
CG.
@ ChelseaG. Abkürzungen für positiv und negativ . Ich habe bearbeitet, um zu klären.
Digital Trauma
Wenn N = 1, ist σ immer 0, um dies zu ermöglichen?
xnor
1
In Wirklichkeit sollten wir Pedanten die korrigierte Standardabweichung der Stichprobe verwenden und nicht für Eingaben mit N = 1 implementieren.
Jonathan Allan

Antworten:

8

Pyth , 44 35 34 Bytes

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

Probieren Sie es online! (Der obige Code definiert eine Funktion. Er :.*wird an den Link angehängt, um die Funktion aufzurufen.)

Die Mathematik

Dadurch werden die Daten symmetrisch aufgebaut. Wenn gerade Nist, sind die Daten nur der Mittelwert plus oder minus der Standardabweichung. Wenn Njedoch ungerade ist, haben wir gerade eine Dose Würmer geöffnet, da der Mittelwert vorhanden sein muss, damit die Daten symmetrisch sind, und daher müssen die Schwankungen mit einem bestimmten Faktor multipliziert werden.

Wenn nes gerade ist

  • Die Hälfte der Daten sind μ+σ.
  • Die Hälfte der Daten sind μ-σ.

Wenn nist ungerade

  • Ein Datum ist μ.
  • Weniger als die Hälfte der Daten sind μ+σ*sqrt(n/(n-1)).
  • Weniger als die Hälfte der Daten sind μ-σ*sqrt(n/(n-1)).
Undichte Nonne
quelle
6

MATL , 22 Bytes

Vielen Dank an @DigitalTrauma für eine Korrektur.

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

Eingabereihenfolge ist: N, σ, μ.

Probieren Sie es online!

Oder sehen Sie sich zur Kontrolle eine modifizierte Version an , die auch den Mittelwert und die Standardabweichung der erzeugten Daten berechnet.

Erläuterung

Der Code ist in vier Teile gegliedert:

  1. :generiert das Array, [1 2 ... N]in Ndas implizit eingegangen wird.

  2. t&1Zs/dividiert diese Zahlen durch ihre empirische Standardabweichung (berechnet durch Normalisierung N) und tYm-subtrahiert das empirische Mittel der resultierenden Werte. Dies stellt sicher, dass die Ergebnisse einen empirischen Mittelwert 0und eine empirische Standardabweichung aufweisen 1.

  3. *multipliziert mit σund +addiert μ, beide als implizite Eingaben.

  4. tZN?x3Gbehandelt den Sonderfall , dass N = 1, σ = 0, für die die Ausgabe sollte μ. Wenn dies tatsächlich der Fall ist, dann ist die empirische Standardabweichung in dem zweiten Schritt berechnet wurde 0, gab die Division infund Multiplikation mit σim dritten Schritt gab NaN. Der Code bewirkt also Folgendes: Wenn das erhaltene Array aus allen NaNWerten (Code tZN?) besteht, löschen Sie es ( x) und drücken Sie die dritte Eingabe ( 3G) μ.

Luis Mendo
quelle
4

Python , 50 Bytes

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

Probieren Sie es online!

Verwendet die folgende n-Element-Verteilung mit mean 0und sdev 1:

  • Mit Wahrscheinlichkeit 1/n(dh 1Element) Ausgabe(n-1)**0.5
  • Mit Wahrscheinlichkeit 1-1/n(dh n-1Elemente), Ausgabe-(n-1)**(-0.5)

Dies wird durch Transformation zu mean mund sdev neu skaliert . Dummerweise gibt eine Division durch Null Fehler für einen nutzlosen Wert, so dass wir es weg , indem Sie hacken , mit was für und aus anderen Gründen .sx->m+s*xn=1/(n-1%n)**.51%n0n==11

Man könnte meinen, man (n-1)**.5kann es verkürzen ~-n**.5, aber die Potenzierung geschieht zuerst.

A defist ein Byte länger.

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

R 83 62 53 Bytes

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

Wenn n=1, dann gibt es zurück m(da scalewürde zurück NA), andernfalls skaliert es die Daten [1,...,n]auf Mittelwert 0 und (Stichproben-) Standardabweichung 1, multipliziert also mit s*sqrt(1-1/n), um die korrekte Populationsstandardabweichung zu erhalten, und addiert msie zum entsprechenden Mittelwert. Vielen Dank an Dason für die Einführung in die Skalierungsfunktion und das Löschen dieser Bytes!

Probieren Sie es online!

Giuseppe
quelle
Können Sie in Try It Online einige Tests hinzufügen, damit Ihre Antwort leicht überprüft werden kann?
Digital Trauma
ja! gib mir zwei Minuten.
Giuseppe
Könnte wahrscheinlich nur verwenden 1:nanstelle von rt(n,n)4 Bytes zu speichern. Und die scaleFunktion könnte wahrscheinlich nützlich sein.
Dason
@Dason - danke! Ich habe gelernt, scalewas großartig ist.
Giuseppe
1

Gelee , 20 Bytes

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

Probieren Sie es online!

Vollständiges Programm mit drei Befehlszeilenargumenten: n , μ , σ .

Wie?

Erzeugt Floor- Werte (n / 2) , die gleich weit vom Mittelwert entfernt sind, und einen Wert am Mittelwert, wenn n ungerade ist, sodass die Standardabweichung korrekt ist ...

÷_Ḃ$©$*.;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
quelle