Зменшення кількості змінних у множинній регресії


9

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

Деякі (напевно, наївні) думки про те, як це зробити:

  1. Виконайте просту лінійну регресію з кожною змінною та виберіть десять із найбільшими значеннями . Звичайно, немає гарантії, що десять найкращих індивідуальних змінних разом будуть найкращою групою з десяти.R2
  2. Проведіть аналіз основних компонентів і спробуйте знайти десять оригінальних змінних з найбільшими асоціаціями з першими кількома основними осями.

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

Чи існує стандартний підхід для вирішення цієї проблеми зменшення кількості змінних у множинній регресії?

Здається, це була б досить поширеною проблемою, щоб існував стандартний підхід.

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

коментар whuber нижче вказує на те, що запит в останньому абзаці занадто широкий. Натомість я б прийняв як хорошу відповідь перелік основних підходів, можливо, з дуже коротким описом кожного. Коли я отримаю умови, я можу викопати деталі на кожному.


1
Майк, ви можете переглядати розділ 3 ESL , якщо ви не знайомі з ним. Сторінка за наданим посиланням вказує на безкоштовний, законний PDF-текст.
кардинал

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

3
Ця відповідь дає конкретний приклад однієї з (багатьох) проблем методу 1. Коментар @cardinal до відповіді Френка Харрелла доходить до сутності проблеми методом 2: все, що ви робите лише з незалежними змінними, не враховуючи їх відносини до залежної змінної, ризикуючи бути неактуальними або гіршими. Що стосується стандартних або "канонічних" відповідей, запитання про це тут трохи схоже на прохання обговорити всі методи, щоб знайти раціональні точки на еліптичних кривих, з їх плюсами і мінусами :-).
whuber

2
Як зазначають інші, метод 1 призведе до проблем. Для інтуїтивно зрозумілого трактування того, чому це правда / опис ще однієї з проблем цього підходу, ви можете прочитати це: stats.stackexchange.com/questions/20836/…
gung -

1
Дякуємо Уоберу та Гунгу за пояснення проблем із першою ідеєю.
Майк Співі

Відповіді:



6

Спосіб 1 не працює. Метод 2 має надію залежно від того, як ви це зробите. Основні компоненти краще вводити у порядку зменшення, що пояснюється. Більш інтерпретованим підходом є створення змінної кластеризації, а потім зменшення кожного кластера до єдиної оцінки (не використовуючи Y), а потім підгонка до моделі з балами кластера.


+1. Під "змінною кластеризацією" ви маєте на увазі аналіз фактора - це стратегія, яку я можу використовувати (також перед тим, як переглядати y). Я вважаю кластерний аналіз як групування спостережень, а не змінних, але я маю лише поверхневі знання про кластерний аналіз.
gung - Відновіть Моніку

1
Мабуть, не існує жодної апріорної причини вважати, що напрямки максимальної дисперсії предикторів обов'язково сильно корелюються з відповіддю . Можливо, я помиляюся або неправильно зрозумів ваш коментар. Не могли б ви уточнити?
кардинал

1
Крім того, здається, що ОП не (цілком) описує регресію основних компонентів у своєму Методі 2.
кардинал

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

1
Змінна кластеризація пов'язана з факторним аналізом, але є більш простою. Змінні групуються за тим, як вони співвідносяться між собою. Дивіться varclusфункцію в Hmiscпакеті R або PROC VARCLUS в SAS. Зменшення даних може допомогти при зміні змінних, якщо ви проявляєте обережність; ви можете видалити цілий кластер, якщо такий єП-значення 0,3. З основними компонентами є такі методи, як зменшення акумулятора, коли ви по суті наближаєте ПК до підмножини змінних.
Френк Харрелл

3

У розділі 5 «Робота з даними з R» автор показує деякі способи вибору найбільш корисних прогнозів. (У контексті біоінформатики, де кожен зразок ряду містить 12 000+ стовпців!)

Він спочатку використовує деякі фільтри на основі статистичного розподілу. Наприклад, якщо у вас є півдесятка прогнозів, які мають аналогічне середнє значення і sd, ви можете піти, просто зберігаючи один з них.

Потім він показує, як використовувати випадковий ліс, щоб знайти, які з них є найбільш корисними прогнозами. Ось автономний абстрактний приклад. Ви можете бачити, що у мене є 5 хороших прогнозів, 5 поганих. Код показує, як просто тримати найкращі 3.

set.seed(99)

d=data.frame(
  y=c(1:20),
  x1=log(c(1:20)),
  x2=sample(1:100,20),
  x3=c(1:20)*c(11:30),
  x4=runif(20),
  x5=-c(1:20),
  x6=rnorm(20),
  x7=c(1:20),
  x8=rnorm(20,mean=100,sd=20),
  x9=jitter(c(1:20)),
  x10=jitter(rep(3.14,20))
  )

library(randomForest)
rf=randomForest(y~.,d,importance=T)
print(importance(rf))
#         %IncMSE IncNodePurity
# x1  12.19922383    130.094641
# x2  -1.90923082      6.455262
# ...

i=importance(rf)
best3=rownames(i)[order(i[,"%IncMSE"],decreasing=T)[1:3]]
print(best3)
#[1] "x1" "x5" "x9"

reduced_dataset=d[,c(best3,'y')]

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

Ось код, використовуючи ті самі вибіркові дані, що і вище, для вибору 3 з 10 стовпців:

library(Hmisc)
d_without_answer=d[,names(d)!='y']
vc=varclus(as.matrix(d_without_answer))
print(cutree(vc$hclust,3))
# x1  x2  x3  x4  x5  x6  x7  x8  x9 x10 
#  1   2   1   3   1   1   1   2   1   3 

Мої вибіркові дані взагалі не відповідають такому підходу, оскільки у мене є 5 хороших прогнозів і 5 - це лише шум. Якщо все 10 провісників були трохи корелюють з y, і мали хороший шанс стати ще краще , коли використовуються разом (що цілком можливо , у фінансовій сфері), то це може бути хорошим підходом.


2

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


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