Примусовий набір чисел до гауссової кривої дзвону


9

( Це стосується мого питання програмування щодо переповнення стека : Алгоритм Гауссова крива Белла (Python та / або C #) .)

На Answers.com я знайшов такий простий приклад:

  1. Знайдіть середнє арифметичне (середнє) => Сума всіх значень у множині, поділене на кількість елементів у множині
  2. Знайдіть суму квадратів усіх значень у множині
  3. Розділіть вихід (2) на кількість елементів у наборі
  4. Віднімаємо середній квадрат (1) від результату (3)
  5. Візьміть квадратний корінь результату (4)

Приклад: Встановити A = {1,3,4,5,7}

  1. (1 + 3 + 4 + 5 + 7) / 5 = 4
  2. (1 * 1 + 3 * 3 + 4 * 4 + 5 * 5 + 7 * 7) = 1 + 9 + 16 + 25 + 49 = 100
  3. 100/5 = 20
  4. 20 - 4 * 4 = 20-16 = 4
  5. SQRT (4) = 2

(Це відбувається з публікації на wiki.answers.com .)

Тепер, з огляду на все це, як я можу встановити вищезазначені дані до кривої дзвіночки (наприклад, кредитна оцінка), яка становить від 200 до 800. Очевидно, що число 5 у вищевказаному наборі було б 500. Але тоді яка формула для визначення того, що 3 повинні бути в одній шкалі. Навіть незважаючи на те, що оригінальний набір A = {1,3,4,5,7} не є кривою дзвону, я хочу примусити його перетворитись у криву дзвону.

Уявіть, це десятки людей. Наступного місяця бали можуть змінитись так: Встановити A2={1,2,4,5,9}(один хлопець втрачає очко, а топ-хлопець набирає ще два бали - багаті збагачуються, а бідні бідніють). Тоді, можливо, в комплект входить новий хлопець: Набір A3={1,2,4,5,8,9}.


2
Якщо ваш час змінюється час, неможливо встановити його на ту саму криву дзвона. Припустимо, у вас є набірA={1,2,3,4}, тож 4 ​​має бути 800, але якщо прийде нове спостереження 5, то воно повинно стати 800.
mpiktas

1
Ласкаво просимо до CrossValidated, NealWalters. Ви можете виявити, що поширеною відповіддю на запитання статиста "Як це зробити" є "Чому ти хочеш це зробити?"
onestop

@onestop - дивіться моє посилання на попередній пост. У школі я пам’ятаю почуття вчителів, які оцінювали «на кривій». Тож незалежно від того, який бал ви отримали на тесті, лише певний відсоток людей отримав би кожну оцінку. Я поняття не маю, як працюють кредитні бали, але це дуже схоже на те, що я імітую. Я даю людям очки, наприклад, коли вони погашають кредит. Але деякі люди будуть погашати десятки позик. Я хочу конденсувати свої дикі точки в набір нормалізованих точок.
NealWalters

читаючи ваш останній коментар, мені цікаво, який підхід найкраще: дайте, наприклад, 1 бал за кожну виплачену позику, інші бали за інші речі, а потім спробуйте приручити величезний бал наприкінці, або, можливо, зробіть щось більш значуще з кожним компонентом, який складає остаточний рахунок? Наприклад, якщо ви даєте бали за виплачені позики, ви можете розрахувати свої позики, виплачені з позики (LPO), як журнал (1 + NumberOfLoansPaidOff). Тож хтось із погашеними нульовими позиками отримує LPO 0, хтось із 3 погашеними позиками отримує LPO 1,1, а хтось із 100 погашеними позиками отримує LPO 4,6. Шапка LPO о 5.
Уейн

Відповіді:


13

Масштабований діапазон , наприклад, від 200 до 800 (для SAT, наприклад ), - це лише зміна одиниць вимірювання . (Це працює так само, як і зміна температури за Фаренгейтом, ніж температура Цельсія.)

Середнє значення 500 призначене для відповідності середньому значенню даних. Діапазон призначений відповідати приблизно 99,7% даних, коли дані відповідають нормальному розподілу ("Крива дзвона"). Він гарантовано включити 8/9 даних ( нерівність Чебишева ).

У цьому випадку формула 1-5 обчислює стандартне відхилення даних. Це просто нова одиниця вимірювання для вихідних даних. Потрібно відповідати 100 одиницям у новій шкалі. Тому для перетворення вихідного значення в масштабоване значення,

  • Віднімаємо середнє.

  • Розділіть на стандартне відхилення.

  • Помножте на 100.

  • Додайте 500.

Якщо результат лежить поза діапазоном [200,800] ви можете або використовувати його як є, або "затиснути" його до діапазону, округлюючи до 200, до 800.

У прикладі , використовуючи дані{1,3,4,5,7}, в середньому є 4 і SD є 2. Тому після масштабування,1 стає (14)/2100+500=350. Весь масштабований набір даних, обчислений аналогічно, є{350,450,500,550,650}.

Коли вихідні дані поширюються чітко ненормальним способом, потрібен інший підхід . Ви більше не обчислюєте середній або SD. Замість цього поставте всі бали в порядку, від 1-го (найменшого) доnго (найбільший). Це їхні ряди . Перетворити будь-який рангiв його відсоток (i1/2)/n. (У прикладі,n=5 і дані вже в ранговому порядку i=1,2,3,4,5. Тому їх відсотки є1/10,3/10,5/10,7/10,9/10, часто пишеться рівнозначно як 10%,30%і т.д.) Відповідає будь-якому відсотку (між 0 і 1, обов'язково) - це нормальний квантил . Він обчислюється з нормальною квантильною функцією , яка тісно пов'язана з функцією помилки . (Прості числові наближення є простими для коду.) Її значення, які, як правило, становитимуть від -3 до 3, повинні бути перераховані (як і раніше) до діапазону[200,800]. Зробіть це, спочатку помноживши звичайний квантил на 100, а потім додавши 500.

Нормальна квантильна функція доступна в багатьох обчислювальних платформах, включаючи електронні таблиці (наприклад, норми Excel, Inv ). Наприклад, нормальні кванти (або "нормальні показники") для даних{1,3,4,5,7} є {372,448,500,552,628}.

Цей підхід " нормального оцінювання " завжди дасть бали від 200 до 800, коли у вас є 370 або менше значень. Якщо у вас 1111 або менше значень, усі, крім найвищих і найнижчих, матимуть бали від 200 до 800.


+1, я видалила свою відповідь, оскільки ваша була набагато краща і зробила мою застарілою :)
mpiktas

Де ви отримуєте 5 в 1-5? 4 - середня величина. Чи має бути 1-4? Я тестую сьогодні з Python, ще раз дякую.
NealWalters

@NealWalters Вибачте, це був ковзання пальця. Я це виправив зараз, щоб він читав (1-4) / 2 * 100 + 500.
whuber

4

Ви можете спробувати такий підхід - нормалізуйте свій набір даних для діапазону між значеннями -1 та +1 таким чином:

(individual_valuemin_of_all_valuesmax_of_all_valuesmin_of-all_values0.5)2.
Це перетворить кожне значення у вашому наборі даних у значення від -1 до +1, при цьому фактичні максимальні та мінімальні значення будуть встановлені на +1 та -1 відповідно, а потім скинуть ці значення +1 та -1 у +0,9999 і -0,9999 (необхідні для наступних розрахунків.)

Потім застосуйте Трансформацію Фішера до кожного з перерахованих вище нормованих значень, щоб "примусити" його приблизно відповідати нормальному розподілу, а потім "ненормалізувати" кожне з цих значень Трансформації Фішера для діапазону значень між 200 і 800 таким чином:

Fish_valuemin_all_Fish_valuesmax_all_Fish_valuesmin_all_Fish_values600+200
Максимальне значення Fisher Transform буде встановлено рівно 800, мінімальне значення Fisher Transform буде встановлено рівно 200, а всі інші значення будуть лежати між цими двома крайнощами, відповідно до приблизного нормального розподілу.

Посилаючись на своє початкове запитання про SO та питання масштабованості, перевагою цього підходу є те, що за умови, що будь-яка нова точка даних сама по собі не є новим максимумом або мінімумом для набору даних у цілому, ви можете застосувати вищезазначені обчислення до нової точки даних щоб отримати його бал від 200 до 800, не зачіпаючи жодного з існуючих балів оригінального набору даних. Якщо нова точка даних - це новий максимум або мінімум, вам доведеться перерахувати бали за весь набір даних за допомогою цього нового «нормалізуючого» максимального або мінімального значення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.