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.