Estatísticas falsas


27

Se você for inventar algumas notícias falsas, precisará fabricar alguns dados para fazer backup deles. Você já deve ter algumas conclusões preconcebidas e deseja algumas estatísticas para reforçar o argumento de sua lógica defeituosa. Este desafio deve ajudá-lo!

Dados três números de entrada:

  • N - número de pontos de dados
  • μ - média dos pontos de dados
  • σ - desvio padrão dos pontos de dados, em que μ e σ são dados por:

    insira a descrição da imagem aqui

Emita uma lista não ordenada de números, 𝑥 i , que geraria os N , μ e σ fornecidos .

Não vou ser muito exigente quanto aos formatos de E / S, mas espero algum tipo de casas decimais para μ , σ e os pontos de dados de saída. No mínimo, devem ser apoiados pelo menos três números significativos e uma magnitude de pelo menos 1.000.000. Os flutuadores IEEE estão bem.

  • N sempre será um número inteiro, onde 1 ≤ N ≤ 1.000
  • μ pode ser qualquer número real
  • σ sempre será ≥ 0
  • pontos de dados podem ser qualquer número real
  • se N for 1, σ sempre será 0.

Observe que a maioria das entradas terá muitas saídas possíveis. Você só precisa fornecer uma saída válida. A saída pode ser determinística ou não determinística.

Exemplos

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
Deveria ter adicionado uma entrada de verdade / falsidade para o valor-p, para que tivéssemos que criar dados correlacionados ou não correlacionados para backup falso ou reprovação ahaha.
Urna Mágica do Polvo

1
O que significa +vee -vesignifica?
CG.

@ChelseaG. Abreviações para positivo e negativo . Eu editei para esclarecer.
Digital Trauma

Quando N = 1, σ sempre será 0 para tornar isso possível?
Xnor

1
Realmente nós pedantes devemos usar o desvio padrão da amostra corrigido e não implementar para entradas com N = 1.
Jonathan Allan

Respostas:


8

Pitão , 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

Experimente online! (O código acima define uma função. :.*É anexado no link para invocar a função.)

As matemáticas

Isso constrói os dados simetricamente. Se Nfor par, os dados são apenas a média mais ou menos o desvio padrão. No entanto, se Nfor ímpar, acabamos de abrir uma lata de worms, pois a média precisa estar presente para que os dados sejam simétricos e, portanto, as flutuações precisam ser multiplicadas por um determinado fator.

Se né par

  • Metade dos dados são μ+σ.
  • Metade dos dados são μ-σ.

Se né ímpar

  • Um dado é μ.
  • Menos da metade dos dados são μ+σ*sqrt(n/(n-1)).
  • Menos da metade dos dados são μ-σ*sqrt(n/(n-1)).

6

MATL , 22 bytes

Obrigado a @DigitalTrauma por uma correção.

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

Ordem de entrada é: N, σ, μ.

Experimente online!

Ou veja uma versão modificada que também calcula a média e o desvio padrão dos dados produzidos, como uma verificação.

Explicação

O código é dividido em quatro partes:

  1. :gera a matriz [1 2 ... N]onde Né tomada como entrada implícita.

  2. t&1Zs/divide esses números pelo desvio padrão empírico (normalizado calculado por N) e tYm-subtrai a média empírica dos valores resultantes. Isso garante que os resultados tenham média 0empírica e desvio padrão empírico 1.

  3. *multiplica σe +adiciona μ, ambos tomados como entradas implícitas.

  4. tZN?x3Gtrata o caso especial que N = 1, σ = 0para o qual a saída deve ser μ. Se esse for realmente o caso, o desvio padrão empírico calculado no segundo passo foi 0a divisão cedida infe multiplicada pelo σterceiro passo citado NaN. Então, o que o código faz é: se a matriz obtida consistir em todos os NaNvalores (código tZN?), exclua-a ( x) e pressione a terceira entrada ( 3G), que é μ.


4

Python , 50 bytes

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

Experimente online!

Usa a seguinte ndistribuição de elementos com mean 0e sdev 1:

  • Com probabilidade 1/n(ou seja, 1elemento), saída(n-1)**0.5
  • Com probabilidade 1-1/n(isto é, n-1elementos), saída-(n-1)**(-0.5)

Isso é redimensionado para mean me sdev spela transformação x->m+s*x. Irritantemente, n=1dá uma divisão por erro zero para um valor inútil, para que cortá-lo para longe, fazendo /(n-1%n)**.5com 1%nque dá 0para n==1e 1de outra forma.

Você pode pensar que (n-1)**.5pode ser reduzido ~-n**.5, mas a exponenciação acontece primeiro.

A defé um byte mais longo.

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)

Se n=1, em seguida, ele retorna m(como scaleretornaria NA), caso contrário, ele escala os dados [1,...,n]para ter média 0 e (amostra) desvio padrão 1, para que ele se multiplique s*sqrt(1-1/n)para obter o desvio padrão da população correto e adicione ma mudança para a média apropriada. Agradeço a Dason por me apresentar a função scale e soltar esses bytes!

Experimente online!


Você pode adicionar alguns testes no Try It Online para que sua resposta possa ser facilmente verificada?
Digital Trauma

Sim! me dê dois minutos.
27417 Giuseppe

Provavelmente poderia usar apenas em 1:nvez de rt(n,n)salvar 4 bytes. E a scalefunção provavelmente poderia ser útil.
Dason

@Dason - obrigado! Eu aprendi sobre o scaleque é ótimo.
Giuseppe

1

Gelatina , 20 bytes

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

Experimente online!

Programa completo usando três argumentos de linha de comando: n , μ , σ .

Quão?

Cria valores de piso (n / 2) equidistantes da média e um valor na média se n for ímpar, de modo que o desvio padrão esteja correto ...

÷_Ḃ$©$*.;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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.