Fake Statistics


27

Si vous allez inventer de fausses nouvelles, vous voudrez fabriquer des données pour les sauvegarder. Vous devez déjà avoir des conclusions préconçues et vous voulez des statistiques pour renforcer l'argument de votre logique défectueuse. Ce défi devrait vous aider!

Étant donné trois numéros d'entrée:

  • N - nombre de points de données
  • μ - moyenne des points de données
  • σ - écart type des points de données, où μ et σ sont donnés par:

    entrez la description de l'image ici

Produire une liste non ordonnée de nombres, 𝑥 i , qui générerait les N , μ et σ donnés .

Je ne vais pas être trop pointilleux sur les formats d'E / S, mais je m'attends à une sorte de décimales pour μ , σ et les points de données de sortie. Au minimum, au moins 3 chiffres significatifs et une magnitude d'au moins 1 000 000 devraient être pris en charge. Les flotteurs IEEE sont très bien.

  • N sera toujours un entier, où 1 ≤ N ≤ 1000
  • μ peut être n'importe quel nombre réel
  • σ sera toujours ≥ 0
  • les points de données peuvent être n'importe quel nombre réel
  • si N est 1, alors σ sera toujours 0.

Notez que la plupart des entrées auront de nombreuses sorties possibles. Il vous suffit de donner une sortie valide. La sortie peut être déterministe ou non déterministe.

Exemples

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
Nous aurions dû ajouter une entrée véridique / fausse pour la valeur de p , nous devions donc créer des données corrélées ou non corrélées pour une fausse sauvegarde ou une fausse réfutation ahaha.
Urne de poulpe magique

1
Que signifie +veet -vesignifie?
CG.

@ChelseaG. Abréviations pour positif et négatif . J'ai édité pour clarifier.
Digital Trauma

Lorsque N = 1, σ sera-t-il toujours 0 pour le rendre possible?
xnor

1
Vraiment, nous, les pédants, devrions utiliser l'écart-type de l'échantillon corrigé et ne pas implémenter pour les entrées avec N = 1.
Jonathan Allan

Réponses:


8

Pyth , 44 35 34 octets

? 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

Essayez-le en ligne! (Le code ci-dessus définit une fonction. :.*Est ajouté sur le lien pour appeler la fonction.)

Les maths

Cela construit les données symétriquement. Si Nest pair, alors les données ne sont que la moyenne plus ou moins l'écart-type. Cependant, si Nc'est étrange, alors nous venons d'ouvrir une boîte de vers, car la moyenne doit être présente pour que les données soient symétriques, et donc les fluctuations doivent être multipliées par un certain facteur.

Si nc'est encore

  • La moitié des données le sont μ+σ.
  • La moitié des données le sont μ-σ.

Si nest étrange

  • Une donnée est μ.
  • Moins de la moitié des données le sont μ+σ*sqrt(n/(n-1)).
  • Moins de la moitié des données le sont μ-σ*sqrt(n/(n-1)).

6

MATL , 22 octets

Merci à @DigitalTrauma pour une correction.

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

Ordre d' entrée est: N, σ, μ.

Essayez-le en ligne!

Ou consultez une version modifiée qui calcule également la moyenne et l'écart type des données produites, à titre de vérification.

Explication

Le code est divisé en quatre parties:

  1. :génère le tableau [1 2 ... N]Nest pris comme entrée implicite.

  2. t&1Zs/divise ces nombres par leur écart-type empirique (normalisé calculé par N) et tYm-soustrait la moyenne empirique des valeurs résultantes. Cela garantit que les résultats ont une moyenne 0empirique et un écart-type empirique 1.

  3. *multiplie par σet +ajoute μ, tous deux pris comme entrées implicites.

  4. tZN?x3Ggère le cas spécial qui N = 1, σ = 0pour lequel la sortie doit être μ. Si c'est effectivement le cas, alors l'écart-type empirique calculé dans la deuxième étape était 0, la division a donné infet multiplié par σdans la troisième étape NaN. Ainsi, le code fait: si le tableau obtenu est composé de toutes les NaNvaleurs (code tZN?), supprimez-le ( x) et appuyez sur la troisième entrée ( 3G), qui est μ.


4

Python , 50 octets

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

Essayez-le en ligne!

Utilise la ndistribution des éléments suivante avec moyenne 0et sdev 1:

  • Avec probabilité 1/n(ie 1élément), sortie(n-1)**0.5
  • Avec probabilité 1-1/n(ie n-1éléments), sortie-(n-1)**(-0.5)

Ceci est redimensionné pour signifier met sdev spar transformation x->m+s*x. Chose ennuyeuse, n=1donne une division par zéro erreur pour une valeur inutile, donc nous la piratons en faisant /(n-1%n)**.5, en 1%ndonnant 0pour n==1et 1autrement.

Vous pourriez penser que cela (n-1)**.5peut être raccourci ~-n**.5, mais l'exponentiation se produit en premier.

A defest un octet de plus.

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

3

R, 83 62 53 octets

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

Si n=1, alors il retourne m(puisque scalereviendrait NA), sinon il met à l'échelle les données [1,...,n]pour avoir la moyenne 0 et (échantillon) l'écart-type 1, donc il multiplie par s*sqrt(1-1/n)pour obtenir l'écart-type de population correct, et ajoute mpour passer à la moyenne appropriée. Merci à Dason de m'avoir présenté la fonction de mise à l'échelle et de supprimer ces octets!

Essayez-le en ligne!


Pouvez-vous ajouter des tests dans Try It Online pour que votre réponse soit facilement vérifiée?
Digital Trauma

oui! donnez-moi deux minutes.
Giuseppe

Pourrait probablement utiliser 1:nau lieu de rt(n,n)pour enregistrer 4 octets. Et la scalefonction pourrait probablement être utile.
Dason

@Dason - merci! J'ai appris scalece qui est génial.
Giuseppe

1

Gelée , 20 octets

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

Essayez-le en ligne!

Programme complet prenant trois arguments de ligne de commande: n , μ , σ .

Comment?

Crée des valeurs de plancher (n / 2) équidistantes de la moyenne et une valeur à la moyenne si n est impair de telle sorte que l'écart-type est correct ...

÷_Ḃ$©$*.;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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.