Statistik Palsu

27

Jika Anda akan membuat beberapa berita palsu, Anda ingin membuat beberapa data untuk mendukungnya. Anda harus sudah memiliki beberapa kesimpulan yang terbentuk sebelumnya dan Anda ingin beberapa statistik memperkuat argumen dari logika Anda yang salah. Tantangan ini seharusnya membantu Anda!

Diberikan tiga nomor input:

  • N - jumlah titik data
  • μ - rata-rata titik data
  • σ - standar deviasi titik data, di mana μ dan σ diberikan oleh:

    masukkan deskripsi gambar di sini

Keluarkan daftar angka yang tidak terurut, 𝑥 i , yang akan menghasilkan N , μ , dan σ yang diberikan .

Saya tidak akan terlalu pilih-pilih tentang format I / O, tapi saya berharap beberapa desimal untuk μ , σ , dan poin data output. Minimal, setidaknya 3 angka penting dan besarnya setidaknya 1.000.000 harus didukung. IEEE mengapung baik-baik saja.

  • N akan selalu berupa bilangan bulat, di mana 1 ≤ N ≤ 1.000
  • μ dapat berupa bilangan real apa pun
  • σ akan selalu menjadi ≥ 0
  • titik data dapat berupa bilangan real apa pun
  • jika N adalah 1, maka σ akan selalu menjadi 0.

Perhatikan bahwa sebagian besar input akan memiliki banyak kemungkinan keluaran. Anda hanya perlu memberikan satu output yang valid. Outputnya mungkin deterministik atau non-deterministik.

Contohnya

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]
Trauma Digital
sumber
6
Seharusnya menambahkan input truey / falsy untuk p-value sehingga kita harus membuat data yang berkorelasi atau non-berkorelasi untuk cadangan palsu atau ahaha palsu-palsu.
Magic Gurita Guci
1
Apa +vedan apa -veartinya?
CG.
@ChelseaG. Singkatan untuk positif dan negatif . Saya telah mengedit untuk menjelaskan.
Digital Trauma
Ketika N = 1, apakah σ selalu 0 untuk membuatnya mungkin?
xnor
1
Benar-benar kami pedant harus menggunakan standar deviasi sampel yang dikoreksi dan tidak menerapkan untuk input dengan N = 1.
Jonathan Allan

Jawaban:

8

Pyth , 44 35 34 byte

? 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

Cobalah online! (Kode di atas mendefinisikan fungsi. :.*Ditambahkan pada tautan untuk menjalankan fungsi.)

Matematika

Ini membangun data secara simetris. Jika Ngenap, maka data hanyalah rata-rata plus atau minus dari standar deviasi. Namun, jika Nganjil, maka kami baru saja membuka sekaleng cacing, karena rerata harus ada agar data menjadi simetris, sehingga fluktuasi harus dikalikan dengan faktor tertentu.

Jika nada

  • Setengah dari data adalah μ+σ.
  • Setengah dari data adalah μ-σ.

Jika naneh

  • Satu datum adalah μ.
  • Kurang dari setengah data μ+σ*sqrt(n/(n-1)).
  • Kurang dari setengah data μ-σ*sqrt(n/(n-1)).
Biarawati Bocor
sumber
6

MATL , 22 byte

Terima kasih kepada @DigitalTrauma untuk koreksi.

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

Agar input: N, σ, μ.

Cobalah online!

Atau lihat versi modifikasi yang juga menghitung rata-rata dan standar deviasi dari data yang dihasilkan, sebagai cek.

Penjelasan

Kode ini dibagi menjadi empat bagian:

  1. :menghasilkan array di [1 2 ... N]mana Ndiambil sebagai input implisit.

  2. t&1Zs/membagi angka-angka itu dengan standar deviasi empirisnya (dihitung normalisasi dengan N), dan tYm-kurangi rata-rata empiris dari nilai yang dihasilkan. Ini memastikan bahwa hasilnya memiliki mean 0empiris dan standar deviasi empiris 1.

  3. *dikalikan σdan +ditambah μ, keduanya diambil sebagai input implisit.

  4. tZN?x3Gmenangani kasus khusus yang N = 1, σ = 0, yang output harus μ. Jika memang demikian halnya, maka deviasi standar empiris yang dihitung pada langkah kedua adalah 0, divisi memberi inf, dan mengalikan dengan σpada langkah ketiga memberi NaN. Jadi yang dilakukan oleh kode adalah: jika array yang diperoleh terdiri dari semua NaNnilai (kode tZN?), hapus ( x) dan tekan input ketiga ( 3G), yaitu μ.

Luis Mendo
sumber
4

Python , 50 byte

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

Cobalah online!

Gunakan ndistribusi -element berikut dengan mean 0dan sdev 1:

  • Dengan probabilitas 1/n(mis1 elemen), output(n-1)**0.5
  • Dengan probabilitas 1-1/n(yaitu n-1elemen), output-(n-1)**(-0.5)

Ini mdiscalcal ulang ke mean dan sdev sdengan mentransformasikannya x->m+s*x. Menyebalkan, n=1memberikan pembagian dengan kesalahan nol untuk nilai yang tidak berguna, jadi kami meretasnya dengan melakukan /(n-1%n)**.5, dengan 1%nmemberi 0untukn==1 dan 1sebaliknya.

Anda mungkin berpikir (n-1)**.5 dapat dipersingkat menjadi ~-n**.5, tetapi eksponensial terjadi terlebih dahulu.

A deflebih panjang satu byte.

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

R, 83 62 53 byte

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

Jika n=1 , maka ia mengembalikan m(karena scaleakan kembali NA), jika tidak maka skala data [1,...,n]untuk memiliki rata-rata 0 dan (sampel) standar deviasi 1, sehingga itu dikalikan dengan s*sqrt(1-1/n)untuk mendapatkan standar deviasi populasi yang benar, dan menambah mbergeser ke rata-rata yang sesuai. Terima kasih kepada Dason karena memperkenalkan saya pada fungsi skala dan menjatuhkan byte-byte itu!

Cobalah online!

Giuseppe
sumber
Bisakah Anda menambahkan beberapa tes di Try It Online sehingga jawaban Anda dapat dengan mudah diverifikasi?
Trauma Digital
ya! beri saya dua menit.
Giuseppe
Mungkin hanya bisa menggunakan 1:nalih-alih rt(n,n)menyimpan 4 byte. Dan scalefungsinya mungkin bisa bermanfaat.
Dason
@ Alasan - terima kasih! Saya belajar tentang scalemana yang bagus.
Giuseppe
1

Jelly , 20 byte

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

Cobalah online!

Program lengkap mengambil tiga argumen baris perintah: n , μ , σ .

Bagaimana?

Menciptakan nilai lantai (n / 2) berjarak sama dari nilai rata-rata dan nilai pada nilai rata-rata jika n ganjil sehingga standar deviasi benar ...

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