Як зменшити прогнози правильний шлях для логістичної регресійної моделі


9

Тож я читав деякі книги (або їх частини) про моделювання (Ф. Гаррелл «Стратегії моделювання регресії» серед інших), оскільки зараз у мене ситуація полягає в тому, що мені потрібно зробити логістичну модель, засновану на даних бінарних відповідей. У моєму наборі даних є як безперервні, категоричні, так і двійкові дані (предиктори). В основному у мене зараз близько 100 прогнокторів, що, очевидно, занадто багато для хорошої моделі. Крім того, багато з цих прогнозів є спорідненими, оскільки вони часто базуються на одній метриці, хоча і дещо відрізняються.

У будь-якому випадку, те, що я читав, використовуючи одноманітну регресію та поетапні методи - це найгірші речі, які ви можете зробити, щоб зменшити кількість прогнозів. Я думаю, що техніка LASSO є цілком нормальною (якщо я це правильно зрозумів), але очевидно, ви просто не можете використовувати це на 100 прогнозах і думаєте, що користі з цього не вийде.

То які тут мої варіанти? Чи справді мені просто треба сісти, поговорити з усіма моїми керівниками та розумними людьми на роботі, і дійсно думати про те, якими можуть / повинні бути топ-5 найкращих прогнозів (ми можемо помилятися) чи який підхід я повинен вважаєте замість цього?

І так, я також знаю, що ця тема активно обговорюється (в Інтернеті та в книжках), але іноді здається трохи непосильною, коли ти щось нове у цій галузі моделювання.

Редагувати:

Перш за все, мій обсяг вибірки становить 1 000 пацієнтів (що в моїй галузі багато), і з них є між 70-170 позитивних відповідей (тобто 170 відповідей та приблизно 900 відсутніх відповідей в одному з випадків) . В основному ідея полягає в тому, щоб передбачити токсичність після променевої обробки. У мене є деякі перспективні дані бінарного відгуку (тобто токсичності, або у вас є (1), або у вас немає (0)), і тоді у мене є кілька типів показників. Деякі показники залежать від пацієнта, наприклад, вік, використовувані наркотики, обсяг органів та цілей, діабет тощо, і тоді я маю певні показники лікування на основі модельованого поля лікування для цілі. З цього я можу знайти кілька предикторів, що часто має велике значення в моїй галузі, оскільки більшість токсичності сильно корелює з кількістю одержуваної радіації (ідози). Так, наприклад, якщо я лікую пухлину легенів, є ризик уразити серце якоюсь дозою. Тоді я можу підрахувати, скільки x-обсягу серця отримує x-доза, наприклад " t просто вибрати один для початку (хоча саме це намагалися, звичайно, минулі експерименти, і те, що я хотів би зробити також), тому що мені потрібно точно "знати", на якій ступені насправді існує велика кореляція між серцевою токсичністю. та об'ємна доза (знову ж таки, як приклад, є інші подібні показники, де застосовується та ж стратегія). Так, так, приблизно так виглядає мій набір даних. Деякі різні показники та деякі показники, які дещо схожі. t просто вибрати один для початку (хоча саме це намагалися, звичайно, минулі експерименти, і те, що я хотів би зробити також), тому що мені потрібно точно "знати", на якій ступені насправді існує велика кореляція між серцевою токсичністю. та об'ємна доза (знову ж таки, як приклад, є інші подібні показники, де застосовується та ж стратегія). Так, так, приблизно так виглядає мій набір даних. Деякі різні показники та деякі показники, які дещо схожі. s майже як виглядає мій набір даних Деякі різні показники та деякі показники, які дещо схожі. s майже як виглядає мій набір даних Деякі різні показники та деякі показники, які дещо схожі.

Тоді я хочу зробити передбачувальну модель, тому я можу сподіватися передбачити, які пацієнти матимуть ризик отримати якусь токсичність. Оскільки дані відповіді є двійковими, головна моя ідея, звичайно, була використовувати логістичну модель регресії. Принаймні так робили інші люди у моїй галузі. Однак, переглядаючи багато цих робіт, де це вже було зроблено, деякі з них просто здаються неправильними (принаймні, читаючи такі специфічні книги моделювання, як Ф. Харрел). Багато хто використовує однофакторний регресійний аналіз для вибору прогнозів і використовує їх у багатовимірному аналізі (річ, яку не рекомендується, якщо я не помиляюсь), а також багато хто використовує поетапні методи зменшення кількості предикторів. Звичайно, це не все погано. Багато хто використовує LASSO, PCA, крос-валідацію, завантажувальну програму тощо, але ті, які я переглянув,

Щодо вибору особливостей, то, мабуть, зараз я там перебуваю. Як вибрати / знайти правильні прогнози, які слід використовувати у своїй моделі? Я спробував ці універсальні / ступінчасті підходи, але щоразу думаю: "Навіщо це робити, якщо це неправильно?". Але, можливо, це хороший спосіб показати, принаймні, врешті-решт, як "хороша модель", зроблена правильним шляхом, йде проти "поганої моделі", зробленої не так. Тож я, мабуть, міг би зробити це дещо неправильним шляхом, для чого мені потрібна допомога - це напрямок робити це правильно.

Вибачте за редагування, і це так довго.

EDIT 2: лише короткий приклад того, як виглядають мої дані:

'data.frame':   1151 obs. of  100 variables:
 $ Toxicity              : Factor w/ 2 levels "0","1": 2 1 1 1 1 1 1 1 1 1 ...
 $ Age                   : num  71.9 64 52.1 65.1 63.2 ...
 $ Diabetes              : Factor w/ 2 levels "n","y": 1 1 1 1 1 1 1 1 1 1 ...
 $ Risk.Category         : Ord.factor w/ 3 levels "LOW"<"INTERMEDIATE"<..: 1 1 1 1 2 1 1 1 1 3 ...
 $ Organ.Volume.CC       : num  136.1 56.7 66 136.6 72.8 ...
 $ Target.Volume.CC      : num  102.7 44.2 58.8 39.1 56.3 ...
 $ D1perc                : num  7961 7718 7865 7986 7890 ...
 $ D1.5CC                : num  7948 7460 7795 7983 7800 ...
 $ D1CC                  : num  7996 7614 7833 7997 7862 ...
 $ D2perc                : num  7854 7570 7810 7944 7806 ...
 $ D2.5CC                : num  7873 7174 7729 7952 7604 ...
 $ D2CC                  : num  7915 7313 7757 7969 7715 ...
 $ D3perc                : num  7737 7379 7758 7884 7671 ...
 $ D3.5CC                : num  7787 6765 7613 7913 7325 ...
 $ D3CC                  : num  7827 6953 7675 7934 7480 ...
 $ D4perc                : num  7595 7218 7715 7798 7500 ...
 $ D5perc                : num  7428 7030 7638 7676 7257 ...
 $ DMEAN                 : num  1473 1372 1580 1383 1192 ...
 $ V2000CGY              : num  24.8 23.7 25.9 22.3 19.3 ...
 $ V2000CGY_CC           : num  33.7 13.4 17.1 30.4 14 ...
 $ V2500CGY              : num  22.5 21.5 24 20.6 17.5 ...
 $ V2500CGY_CC           : num  30.7 12.2 15.9 28.2 12.7 ...
 $ V3000CGY              : num  20.6 19.6 22.4 19.1 15.9 ...
 $ V3000CGY_CC           : num  28.1 11.1 14.8 26.2 11.6 ...
 $ V3500CGY              : num  18.9 17.8 20.8 17.8 14.6 ...
 $ V3500CGY_CC           : num  25.7 10.1 13.7 24.3 10.6 ...
 $ V3900CGY              : num  17.5 16.5 19.6 16.7 13.6 ...
 $ V3900CGY_CC           : num  23.76 9.36 12.96 22.85 9.91 ...
 $ V4500CGY              : num  15.5 14.4 17.8 15.2 12.2 ...
 $ V4500CGY_CC           : num  21.12 8.18 11.76 20.82 8.88 ...
 $ V5000CGY              : num  13.9 12.8 16.4 14 11 ...
 $ V5000CGY_CC           : num  18.91 7.25 10.79 19.09 8.03 ...
 $ V5500CGY              : num  12.23 11.14 14.84 12.69 9.85 ...
 $ V5500CGY_CC           : num  16.65 6.31 9.79 17.33 7.17 ...
 $ V6000CGY              : num  10.56 9.4 13.19 11.34 8.68 ...
 $ V6000CGY_CC           : num  14.37 5.33 8.7 15.49 6.32 ...
 $ V6500CGY              : num  8.79 7.32 11.35 9.89 7.44 ...
 $ V6500CGY_CC           : num  11.96 4.15 7.49 13.51 5.42 ...
 $ V7000CGY              : num  6.76 5.07 9.25 8.27 5.86 ...
 $ V7000CGY_CC           : num  9.21 2.87 6.1 11.3 4.26 ...
 $ V7500CGY              : num  4.61 2.37 6.22 6.13 4 ...
 $ V7500CGY_CC           : num  6.27 1.34 4.11 8.38 2.91 ...
 $ V8000CGY              : num  0.7114 0.1521 0.0348 0.6731 0.1527 ...
 $ V8000CGY_CC           : num  0.9682 0.0863 0.023 0.9194 0.1112 ...
 $ V8200CGY              : num  0.087 0 0 0 0 ...
 $ V8200CGY_CC           : num  0.118 0 0 0 0 ...
 $ V8500CGY              : num  0 0 0 0 0 0 0 0 0 0 ...
 $ V8500CGY_CC           : num  0 0 0 0 0 0 0 0 0 0 ...
 $ n_0.02                : num  7443 7240 7371 7467 7350 ...
 $ n_0.03                : num  7196 6976 7168 7253 7112 ...
 $ n_0.04                : num  6977 6747 6983 7055 6895 ...
 $ n_0.05                : num  6777 6542 6811 6871 6693 ...
 $ n_0.06                : num  6592 6354 6649 6696 6503 ...
 $ n_0.07                : num  6419 6180 6496 6531 6325 ...
 $ n_0.08                : num  6255 6016 6350 6374 6155 ...
 $ n_0.09                : num  6100 5863 6211 6224 5994 ...
 $ n_0.1                 : num  5953 5717 6078 6080 5840 ...
 $ n_0.11                : num  5813 5579 5950 5942 5692 ...
 $ n_0.12                : num  5679 5447 5828 5809 5551 ...
 $ n_0.13                : num  5551 5321 5709 5681 5416 ...
 $ n_0.14                : num  5428 5201 5595 5558 5285 ...
 $ n_0.15                : num  5310 5086 5485 5439 5160 ...
 $ n_0.16                : num  5197 4975 5378 5324 5039 ...
 $ n_0.17                : num  5088 4868 5275 5213 4923 ...
 $ n_0.18                : num  4982 4765 5176 5106 4811 ...
 $ n_0.19                : num  4881 4666 5079 5002 4702 ...
 $ n_0.2                 : num  4783 4571 4985 4901 4597 ...
 $ n_0.21                : num  4688 4478 4894 4803 4496 ...
 $ n_0.22                : num  4596 4389 4806 4708 4398 ...
 $ n_0.23                : num  4507 4302 4720 4616 4303 ...
 $ n_0.24                : num  4421 4219 4636 4527 4210 ...
 $ n_0.25                : num  4337 4138 4555 4440 4121 ...
 $ n_0.26                : num  4256 4059 4476 4355 4035 ...
 $ n_0.27                : num  4178 3983 4398 4273 3951 ...
 $ n_0.28                : num  4102 3909 4323 4193 3869 ...
 $ n_0.29                : num  4027 3837 4250 4115 3790 ...
 $ n_0.3                 : num  3955 3767 4179 4039 3713 ...
 $ n_0.31                : num  3885 3699 4109 3966 3639 ...
 $ n_0.32                : num  3817 3633 4041 3894 3566 ...
 $ n_0.33                : num  3751 3569 3975 3824 3496 ...
 $ n_0.34                : num  3686 3506 3911 3755 3427 ...
 $ n_0.35                : num  3623 3445 3847 3689 3361 ...
 $ n_0.36                : num  3562 3386 3786 3624 3296 ...
 $ n_0.37                : num  3502 3328 3725 3560 3233 ...
 $ n_0.38                : num  3444 3272 3666 3498 3171 ...
 $ n_0.39                : num  3387 3217 3609 3438 3111 ...
 $ n_0.4                 : num  3332 3163 3553 3379 3053 ...
 $ n_0.41                : num  3278 3111 3498 3321 2996 ...
 $ n_0.42                : num  3225 3060 3444 3265 2941 ...
 $ n_0.43                : num  3173 3010 3391 3210 2887 ...
 $ n_0.44                : num  3123 2961 3339 3156 2834 ...
 $ n_0.45                : num  3074 2914 3289 3103 2783 ...
 $ n_0.46                : num  3026 2867 3239 3052 2733 ...
 $ n_0.47                : num  2979 2822 3191 3002 2684 ...
 $ n_0.48                : num  2933 2778 3144 2953 2637 ...
 $ n_0.49                : num  2889 2734 3097 2905 2590 ...

І якщо я запускаю table(data$Toxicity)результат, це:

> table(data$Toxicity)
   0    1 
1088   63 

Знову ж таки, це стосується одного типу токсичності. У мене є ще 3 інших.


1
Що ви прагнете зробити? Передбачення чи умовивід чи щось інше?
Стефан Коласа

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

"Мені справді просто треба сісти, поговорити з людьми і справді думати про / обґрунтовувати провісників топ-росіян?" Пекло ні, інтуїція - це відправна точка, але саме тому існують методи вибору функцій; Результати багатьох експериментів перемагають інтуїцію.
smci

1
@smci вибачте за незрозумілість. Тож у моєму полі (променева онкологія) ми складаємо плани лікування, які в основному є 3D-зображенням розподілу радіації / дози навколо цілі. На жаль, цього неможливо зробити, не потрапивши хоча б на невелику кількість здорової тканини. Отже, з цієї тривимірної карти я можу, наприклад, отримати інформацію про те, наскільки великий об'єм отримує x-кількість випромінювання / дози. Але як ви можете собі уявити, я можу "запитати" такими кроками, як "скільки радіації отримує 1% від об'єму цієї структури", а потім 2%, 3%. В принципі, значення будуть дещо подібними.
Денвер Данг

1
@smci, якщо прогнозування є метою ОП, то співвідношення не повинно викликати занепокоєння. Висока кореляція між змінними справді викликає велике занепокоєння при спробі інтерпретації змінних, що входять до моделі.
Студент

Відповіді:


4

Деякі відповіді, які ви отримали про те, що вибір функції "push" є поза основою.

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

Вміст інформації у вашому наборі даних є надто низьким, щоб будь-який алгоритм вибору функцій був надійним.


Перш за все, дякую, що знайшли час для коментарів. По-друге, якщо я не помиляюсь, навчання без нагляду - це коли ви не використовуєте (або не маєте) конкретної відповіді змінних (-ів) відповідей (тобто 1 або 0) і змушуєте комп'ютер "здогадатися "як розподілити розподіл. Але наскільки я знаю, логістична регресія (і лінійна) контролюється? Тож ти рекомендуєш відмовитися від цієї методології? З одного боку, мені подобається ця ідея, але з іншого - логістична та прогресивна регресія - це те, як майже кожен папір для моделювання в моєму полі (дані, схожі на мої) робив дотепер.
Денвер Данг

Тож чи не я б тут не виходив на кінцівку, чи просто треба вважати, що всі інші робили це "неправильно"?
Денвер Данг

3
Не всі, але більшість людей, безумовно, роблять це неправильно. Це було головним мотиватором написання стратегій регресійного моделювання . Метою скорочення даних є зменшення кількості контрольованого навчання, яке вимагає зробити логістичну регресію. Наприклад, ви можете зменшити 100 функцій кандидата, щоб ефективно оцінити 5 кластерних балів, тоді доведеться оцінити лише 5 параметрів + перехоплення.
Френк Харрелл

2
Як ви ставитесь до моделей із різним коефіцієнтом у цьому випадку (як я додав у своїй відповіді)?
Бен Болкер

@FrankHarrell це звучить досить цікаво. Але вибачте, що запитуєте, чому під наглядом навчається погано або хоча б дещо погано, як це виглядає, як ви це маєте на увазі?
Денвер Данг

8

+1 для "іноді здається трохи непосильним". Це дійсно залежить (як чітко заявляє Гаррелл; див. Розділ в кінці глави 4), чи хочете ви це зробити

  • підтверджуючий аналіз ( знизити складність передбачувача до розумного рівня, не дивлячись на відповіді, за PCA чи міркуваннями предметної області чи ...
  • прогнозний аналіз (використовувати відповідні методи пеналізації). Лассо міг би добре працювати зі 100 прогнозами, якщо у вас досить великий вибірки. Вибір функцій буде нестабільним, але це нормально, якщо все, що вам цікаво, це прогнозування. У мене є особисті переваги підхідних підходів, що технічно не "вибирають функції" (тому що вони ніколи не зводять жодного параметра до нуля), але все, що працює ...

    Вам доведеться використовувати перехресну перевірку, щоб вибрати ступінь штрафу, що зруйнує вашу здатність робити висновки (будувати довірчі інтервали за прогнозами), якщо ви не використовуєте передові високовимірні методи виводу (наприклад, Dezeure et al 2015 ; I ще НЕ пробував ці підходи , але вони , здається розумним ...)

  • дослідницький аналіз: веселіться, будьте прозорі та чесні, не цитуйте жодних p-значень.

Для конкретного випадку використання, який ви описали зараз (купка ваших прогнозів, по суті, являє собою кумулятивний розподіл дози, отриманої різними фракціями серця), ви, можливо, захочете розглянути моделі з різним коефіцієнтом (трохи важко шукати) , яка в основному відповідає рівній кривій для ефекту CDF (вони можуть бути реалізовані в mgcvпакеті R ).


Мій вибірковий зразок становить +1000, і залежно від того, яка змінна відповідь (у мене 4), у мене від 75 до 170 позитивних (або негативних, залежно від того, як ви це дивитесь) відповідей +1000. Я не знаю, чи це полегшує щось, тобто я можу відхилити кілька кроків, оскільки набір зразків досить великий (принаймні, в моєму полі).
Денвер Данг

Чи перехресна перевірка знищить можливість робити висновки? Можливо. Я думаю, що можна перезапуститись до перехресної перевірки, щоб отримати довірчі інтервали для прогнозів. Це може бути здійснено з 1000 спостережень.
JTH

висновок після вибору дійсно важкий; якщо ви використовуєте цілий набір даних для налаштування гіперпараметрів (наприклад, сили пеналізації), то ви опинилися в тій же ситуації. Вам доведеться окреслити підхід до завантаження + CV, перш ніж я можу сказати, чи вважаю я, що це може
спрацювати

0

Існує багато різних підходів. Що я рекомендував би спробувати кілька простих, у такому порядку:

  • Регуляризація L1 (зі збільшенням штрафу; чим більший коефіцієнт регуляризації, тим більше можливостей буде усунено)
  • Рекурсивне усунення функцій ( https://scikit-learn.org/stable/modules/feature_selection.html#recursive-feature-elimination ) - видаляє функції поступово, усуваючи функції, пов’язані з найменшими коефіцієнтами моделі (припускаючи, що вони найменші важливо один раз; очевидно, тут дуже важливо нормалізувати вхідні функції)
  • Вибір послідовних функцій ( http://rasbt.github.io/mlxtend/user_guide/feature_selection/SequentialFeatureSelector/ ) - видаляє функції, залежно від того, наскільки вони важливі для прогнозованої продуктивності

1
Я вважаю, що всі три ці методи будуть визнані нестабільними.
Френк Харрелл

це залежить від того, як ви визначите нестабільну. На практиці ви зазвичай використовуєте якусь перехресну валідацію, наприклад, k-fold або остаточно-один-out та оцінюйте на основі загальної дисперсії продуктивності + (також методу 1SE), яку ви в кінцевому підсумку вибираєте.
resnet

Завантаження та перехресна перевірка лише підтверджують деякий прогнозний індекс для процесу генерування моделі. Це призводить до хорошої оцінки цього індексу для моделі, обраної за допомогою цього процесу, але не забезпечує комфорту для структури моделі, яка була розроблена одного разу, тобто загальної моделі. Подивіться на вибрану структуру (тобто вибрані функції) по всьому переймеру, щоб побачити мінливість.
Френк Харрелл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.