Підроблена статистика


27

Якщо ви збираєтеся вигадувати якісь фальшиві новини, вам потрібно сфабрикувати деякі дані, щоб їх створити. У вас вже повинні бути заздалегідь зроблені висновки, і ви хочете, щоб статистика посилила аргумент вашої помилкової логіки. Цей виклик повинен вам допомогти!

Дано три вхідні числа:

  • N - кількість точок даних
  • μ - середнє значення точок даних
  • σ - стандартне відхилення точок даних, де μ і σ задані:

    введіть тут опис зображення

Виведіть не упорядкований список чисел 𝑥 i , який би генерував задані N , μ та σ .

Я не буду надто вибагливим щодо форматів вводу-виводу, але я очікую якихось десяткових знаків для μ , σ та точок даних вихідних даних. Як мінімум, слід підтримувати принаймні 3 значущі цифри та величину не менше 1 000 000. IEEE поплавці просто чудові.

  • N завжди буде цілим числом, де 1 ≤ N ≤ 1000
  • μ може бути будь-яким реальним числом
  • σ завжди буде ≥ 0
  • Точками даних може бути будь-яка реальна кількість
  • якщо N дорівнює 1, то σ завжди буде дорівнює 0.

Зауважте, що більшість входів матиме багато можливих виходів. Вам потрібно дати лише один дійсний вихід. Вихід може бути детермінованим або недетермінованим.

Приклади

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
Якщо слід додати правду / хибний вхід для p-значення, тож нам доведеться внести корельовані або некорельовані дані або в підроблені резервні копії, або в підроблені спростування ахаха.
Magic Octopus Urn

1
Що означає +veі що -veозначає?
КГ.

@ChelseaG. Скорочення позитивного та негативного . Я відредагував, щоб уточнити.
Цифрова травма

Коли N = 1, чи завжди σ буде 0, щоб це стало можливим?
xnor

1
Дійсно, ми, педанти, повинні використовувати виправлене зразкове стандартне відхилення і не застосовувати для входів з N = 1.
Джонатан Аллан

Відповіді:


8

Pyth , 44 35 34 байт

? 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

Спробуйте в Інтернеті! (Код вище визначає функцію. :.*Додається до посилання для виклику функції.)

Математика

Це будує дані симетрично. Якщо Nпарне, то дані - це лише середній плюс або мінус стандартного відхилення. Однак, якщо Nце не дивно, ми просто відкрили банку з хробаками, оскільки середнє значення повинно бути присутнім для даних, щоб вони були симетричними, і тому коливання мають бути помножені на певний коефіцієнт.

Якщо nрівне

  • Половина даних є μ+σ.
  • Половина даних є μ-σ.

Якщо nнепарно

  • Одна дата - це μ.
  • Менше половини даних є μ+σ*sqrt(n/(n-1)).
  • Менше половини даних є μ-σ*sqrt(n/(n-1)).

6

MATL , 22 байти

Дякуємо @DigitalTrauma за виправлення.

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

Вхідний замовлення: N, σ, μ.

Спробуйте в Інтернеті!

Або дивіться модифіковану версію, яка також обчислює середнє та стандартне відхилення отриманих даних, як перевірку.

Пояснення

Код розділений на чотири частини:

  1. :генерує масив, [1 2 ... N]де Nприймається як неявний вхід.

  2. t&1Zs/ділить ці числа на їх емпіричне стандартне відхилення (обчислюється нормалізуючи N) і tYm-віднімає емпіричне середнє від отриманих значень. Це забезпечує, що результати мають емпіричне середнє 0та емпіричне стандартне відхилення 1.

  3. *множиться на σі +додає μ, обидва взяті як неявні входи.

  4. tZN?x3Gобробляє особливий випадок , який N = 1, σ = 0для якого вихід повинен бути μ. Якщо це дійсно так, то емпіричне стандартне відхилення, обчислене на другому кроці, було 0діленням infі множенням σна третій крок дало NaN. Отже, що робить код: якщо отриманий масив складається з усіх NaNзначень (код tZN?), видаліть його ( x) і натисніть третій вхід ( 3G), який є μ.


4

Пітон , 50 байт

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

Спробуйте в Інтернеті!

Використовується такий nрозподіл 0елементів із середнім значенням та sdev 1:

  • З вірогідністю 1/n(тобто 1елементом) вивести(n-1)**0.5
  • З вірогідністю 1-1/n(тобто n-1елементами), виведіть-(n-1)**(-0.5)

Це змінено на значення mі sdev sшляхом перетворення x->m+s*x. Прикро, n=1дає поділ на нуль для марного значення, тому ми зламувати його геть, роблячи /(n-1%n)**.5, з 1%nдаючи 0для n==1і в 1іншому випадку.

Ви (n-1)**.5можете подумати, що їх можна скоротити ~-n**.5, але спочатку це відбувається.

A def- на один байт довше.

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

3

R, 83 62 53 байт

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

Якщо n=1тоді він повертається m(оскільки scaleповернеться NA), інакше він масштабує дані, [1,...,n]мають середнє значення 0 та (вибірки) стандартного відхилення 1, тому він множується s*sqrt(1-1/n)на отримання правильного стандартного відхилення сукупності та додає mдля зміщення на відповідне середнє значення. Завдяки Dason за те, що він познайомив мене з функцією масштабу та скинув ці байти!

Спробуйте в Інтернеті!


Чи можете ви додати кілька тестів у програмі " Спробуйте онлайн", щоб відповідь була легко перевірена?
Цифрова травма

так! дай мені дві хвилини.
Джузеппе

Можливо, можливо, просто використовувати 1:nзамість того, rt(n,n)щоб зберегти 4 байти. І scaleфункція, можливо, може бути корисною.
Дейсон

@Dason - дякую! Я дізнався про те, scaleщо чудово.
Джузеппе

1

Желе , 20 байт

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

Спробуйте в Інтернеті!

Повна програма, що приймає три аргументи командного рядка: n , μ , σ .

Як?

Створює значення підлоги (n / 2), рівновіддалених від середнього, і значення середнього, якщо n непарне, таке, що стандартне відхилення є правильним ...

÷_Ḃ$©$*.;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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.