Estadísticas falsas


27

Si va a inventar algunas noticias falsas, querrá fabricar algunos datos para respaldarlas. Ya debe tener algunas conclusiones preconcebidas y desea algunas estadísticas para fortalecer el argumento de su lógica defectuosa. ¡Este desafío debería ayudarte!

Dados tres números de entrada:

  • N - número de puntos de datos
  • μ - media de puntos de datos
  • σ - desviación estándar de puntos de datos, donde μ y σ vienen dados por:

    ingrese la descripción de la imagen aquí

Genere una lista desordenada de números, 𝑥 i , que generaría los N , μ y σ dados .

No voy a ser demasiado exigente con los formatos de E / S, pero sí espero algún tipo de decimales para μ , σ y los puntos de datos de salida. Como mínimo, se deben admitir al menos 3 cifras significativas y una magnitud de al menos 1,000,000. Las carrozas IEEE están bien.

  • N siempre será un número entero, donde 1 ≤ N ≤ 1,000
  • μ puede ser cualquier número real
  • σ siempre será ≥ 0
  • los puntos de datos pueden ser cualquier número real
  • si N es 1, entonces σ siempre será 0.

Tenga en cuenta que la mayoría de las entradas tendrán muchas salidas posibles. Solo necesita dar una salida válida. La salida puede ser determinista o no determinista.

Ejemplos

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]

66
Debería haber agregado una entrada de verdad / falsedad para el valor p, por lo que tendríamos que hacer datos correlacionados o no correlacionados para hacer una copia de seguridad falsa o refutar falsa ahaha.
Urna mágica del pulpo

1
¿Qué significa +vey qué -vesignifica?
CG.

@ChelseaG. Abreviaturas para positivo y negativo . He editado para aclarar.
Trauma digital el

Cuando N = 1, ¿será σ siempre 0 para que sea posible?
xnor

1
Realmente, los pedantes deberíamos usar la desviación estándar de la muestra corregida y no implementar para entradas con N = 1.
Jonathan Allan

Respuestas:


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

Pruébalo en línea! (El código anterior define una función. :.*Se agrega en el enlace para invocar la función).

Las matemáticas

Esto construye los datos simétricamente. Si Nes par, entonces los datos son solo la media más o menos la desviación estándar. Sin embargo, si Nes extraño, entonces abrimos una lata de gusanos, ya que la media tiene que estar presente para que los datos sean simétricos, por lo que las fluctuaciones deben multiplicarse por un cierto factor.

Si nes par

  • La mitad de los datos son μ+σ.
  • La mitad de los datos son μ-σ.

Si nes extraño

  • Un dato es μ.
  • Menos de la mitad de los datos son μ+σ*sqrt(n/(n-1)).
  • Menos de la mitad de los datos son μ-σ*sqrt(n/(n-1)).

6

MATL , 22 bytes

Gracias a @DigitalTrauma por una corrección.

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

Orden de entrada es: N, σ, μ.

Pruébalo en línea!

O vea una versión modificada que también calcule la media y la desviación estándar de los datos producidos, como una verificación.

Explicación

El código se divide en cuatro partes:

  1. :genera la matriz [1 2 ... N]donde Nse toma como entrada implícita.

  2. t&1Zs/divide esos números por su desviación estándar empírica (calculada normalizando por N), y tYm-resta la media empírica de los valores resultantes. Esto asegura que los resultados tengan una media 0empírica y una desviación estándar empírica 1.

  3. *multiplica por σy +agrega μ, ambos tomados como entradas implícitas.

  4. tZN?x3GTrata el caso especial de que N = 1, σ = 0por lo que la salida debe ser μ. Si este es realmente el caso, entonces la desviación estándar empírica calculada en el segundo paso fue 0, la división dio inf, y la multiplicación por σen el tercer paso dio NaN. Entonces, lo que hace el código es: si la matriz obtenida consta de todos los NaNvalores (código tZN?), elimínela ( x) y presione la tercera entrada ( 3G), que es μ.


4

Python , 50 bytes

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

Pruébalo en línea!

Utiliza la siguiente ndistribución de elementos con mean 0y sdev 1:

  • Con probabilidad 1/n(es decir, 1elemento), salida(n-1)**0.5
  • Con probabilidad 1-1/n(es decir, n-1elementos), salida-(n-1)**(-0.5)

Esto se reescala a mean my sdev smediante transformación x->m+s*x. Molesto, n=1da un error de división por cero para un valor inútil, por lo que lo eliminamos haciendo /(n-1%n)**.5, 1%ndando y 0por lo demás.n==11

Puede pensar que (n-1)**.5se puede acortar ~-n**.5, pero la exponenciación ocurre primero.

A defes un byte más largo.

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

3

R, 83 62 53 bytes

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

Si n=1, entonces regresa m(ya scaleque regresaría NA), de lo contrario, escala los datos [1,...,n]para tener una media 0 y una desviación estándar (muestra) 1, por lo que se multiplica por s*sqrt(1-1/n)para obtener la desviación estándar de la población correcta y se suma mal desplazamiento a la media apropiada. ¡Gracias a Dason por presentarme a la función de escala y eliminar esos bytes!

Pruébalo en línea!


¿Puede agregar algunas pruebas en Probar en línea para que su respuesta pueda verificarse fácilmente?
Trauma digital

¡Sí! dame dos minutos.
Giuseppe

Probablemente podría usar en 1:nlugar de rt(n,n)guardar 4 bytes. Y la scalefunción probablemente podría ser útil.
Dason

@Dason - ¡gracias! Aprendí sobre scalecuál es genial.
Giuseppe

1

Jalea , 20 bytes

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

Pruébalo en línea!

Programa completo que toma tres argumentos de línea de comando: n , μ , σ .

¿Cómo?

Crea valores de suelo (n / 2) equidistantes de la media y un valor en la media si n es impar de modo que la desviación estándar sea correcta ...

÷_Ḃ$©$*.;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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.