Çoklu regresyondaki değişken sayısını azaltmak


9

Bir endeks fonunun zaman içindeki davranışını tahmin etmek için çoklu regresyonda kullanılabilecek birkaç yüz finansal değişkenin değerlerinden oluşan büyük bir veri setim var. Mümkün olduğu kadar tahmin gücünü korurken değişkenlerin sayısını on'a kadar azaltmak istiyorum. Eklendi: Orijinal değişkenlerin ekonomik anlamını korumak için azaltılmış değişken kümesinin orijinal değişkenin bir alt kümesi olması gerekir. Bu nedenle, örneğin, orijinal değişkenlerin doğrusal kombinasyonları veya kümeleri ile sonuçlanmamalıyım.

Bunun nasıl yapılacağı hakkında bazı (muhtemelen naif) düşünceler:

  1. Her değişkenle basit bir doğrusal regresyon gerçekleştirin ve en büyük değerine sahip on tanesini seçin . Tabii ki, en iyi on bireysel değişkenin en iyi on grup olacağının garantisi yoktur.R2
  2. Bir ana bileşen analizi yapın ve ilk birkaç ana eksenle en büyük ilişkilendirmeleri olan on orijinal değişkeni bulmaya çalışın.

Hiyerarşik regresyon yapabileceğimi sanmıyorum çünkü değişkenler gerçekten iç içe değil. On değişkenin tüm olası kombinasyonlarını denemek hesaplamaya uygun değildir çünkü çok fazla kombinasyon vardır.

Çoklu regresyondaki değişken sayısını azaltma sorununu çözmek için standart bir yaklaşım var mı?

Standart bir yaklaşım olacağı yeterince yaygın bir sorun gibi görünüyor.

Çok yararlı bir cevap, sadece standart bir yöntemden bahsetmekle kalmaz, aynı zamanda nasıl ve neden çalıştığına da genel bir bakış verir. Alternatif olarak, tek bir standart yaklaşım değil, farklı güçlü ve zayıf yanları olan birden fazla yaklaşım varsa, çok yararlı bir cevap onların artılarını ve eksilerini tartışan olacaktır.

whuber'ın aşağıdaki yorumu son paragraftaki isteğin çok geniş olduğunu gösterir. Bunun yerine, büyük yaklaşımların bir listesini, belki de her birinin çok kısa bir tanımıyla iyi bir cevap olarak kabul ediyorum. Terimler edindikten sonra, her bir detayı kendim bulabilirim.


1
Mike, eğer aşina değilseniz, ESL Bölüm 3'e göz atabilirsiniz . Bağlantıdaki sayfa metnin ücretsiz ve yasal bir PDF'sine işaret ediyor.
kardinal

Orijinal değişkenlerin sadece onunu tutmak mı yoksa orijinal değişkenlerin küçük bir lineer kombinasyonları alt kümesini kullanan yöntemlerle mi ilgileneceğinizi açıklığa kavuşturabilir misiniz (ikincisi geleneksel bir temel bileşenler regresyonu gibi bir şeydir) verecek).
kardinal

3
Bu cevap , yöntem 1'deki (birçok) sorundan somut bir örneğini vermektedir. @ Kardinal'in Frank Harrell'ın cevabına yaptığı bir yorum, yöntem 2'deki sorunun temeline iner: yalnızca bağımsız değişkenlerle yaptığınız her şey, bağımlı değişkenle ilişkiler, risklerin alakasız veya daha kötü olması. Standart veya "kanonik" cevaplar gittikçe, burada bir soru sormak biraz artıları ve eksileri ile eliptik eğriler üzerinde rasyonel noktalar bulmak için tüm yöntemler hakkında bir tartışma istemek gibi :-).
whuber

2
Burada başkaları tarafından belirtildiği gibi, yöntem 1 sorunlara yol açacaktır. Bunun neden doğru olduğuna dair sezgisel olarak erişilebilir bir tedavi / bu yaklaşımla ilgili sorunlardan bir diğerinin açıklaması için şunu okumak isteyebilirsiniz: stats.stackexchange.com/questions/20836/…
gung - Monica'yı

1
İlk fikirdeki sorunların açıklamaları için whuber ve gung'a teşekkürler.
Mike Spivey

Yanıtlar:



6

Yöntem 1 çalışmıyor. Yöntem 2, bunu nasıl yaptığınıza bağlı olarak umutludur. Temel bileşenleri, açıklanan azalan varyans sırasına göre girmek daha iyidir. Daha yorumlanabilir bir yaklaşım, değişken kümeleme yapmak, daha sonra her kümeyi tek bir puana (Y kullanmadan) indirgemek ve ardından küme puanlarına sahip bir model yerleştirmektir.


+1. "Değişken kümeleme" ile faktör analizi mi demek istersiniz - bu benim kullanabileceğim bir stratejidir (y'ye bakmadan önce). Kümeleme analizini değişkenlerden ziyade gözlemleri gruplama olarak düşünüyorum, ancak küme analizleri hakkında sadece yüzeysel bilgiye sahibim.
gung - Monica'yı eski durumuna döndürün

1
Öngörücülerin azami sapma yönlerinin mutlaka yanıtla yüksek derecede ilişkili olduğuna inanmak için a priori bir neden var gibi görünmüyor . Belki yanılıyorum ya da yorumunuzu yanlış anladım. Açıklığa kavuşturabilir misiniz?
kardinal

1
Ayrıca, OP'nin Yöntem 2'deki temel bileşenler regresyonunu (oldukça) tanımlamamış gibi görünmektedir
kardinal

Orijinal yazımda tam olarak net değildim, ancak orijinal değişkenlerin bir alt kümesine ihtiyacım var . Dolayısıyla, düz bir temel bileşen analizi veya kümeleme aslında peşimde olduğum şey değil.
Mike Spivey

1
Değişken kümeleme faktör analizi ile ilgilidir, ancak daha basittir. Değişkenler birbirleriyle nasıl ilişkilendiklerine göre gruplandırılır. Bkz varclusR fonksiyonu Hmiscpaketi veya SAS PROC VARCLUS. Biraz dikkat ederseniz, veri azaltma değişkenlerin alt kümelenmesine yardımcı olabilir; değeri 0.3 ise tüm kümeyi kaldırabilirsiniz . Temel bileşenlerle, PC'leri temel olarak bileşen değişkenlerinin bir alt kümesiyle yaklaşık olarak tahmin ettiğiniz pil azaltma gibi teknikler vardır. P
Frank Harrell

3

R ile Veri Madenciliği'nin 5. bölümünde yazar, en faydalı yordayıcıları seçmek için bazı yollar gösterir. (Her örnek satırının 12.000'den fazla sütuna sahip olduğu biyoinformatik bağlamında!)

Önce istatistiksel dağılıma dayalı bazı filtreler kullanıyor. Örneğin, benzer bir ortalamaya ve sd'ye sahip yarım düzine öngörücünüz varsa, bunlardan birini tutarak kaçabilirsiniz.

Daha sonra hangilerinin en faydalı tahmin ediciler olduğunu bulmak için rastgele bir ormanın nasıl kullanılacağını gösterir. İşte bağımsız bir soyut örnek. Gördüğünüz gibi 5 iyi tahmincim var, 5 kötü tahmincim var. Kod en iyi nasıl korunacağını gösterir 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')]

Yazarın son yaklaşımı, benzer tahmin edicileri, örneğin 30 gruba kümelemek için hiyerarşik bir kümeleme algoritması kullanmaktır. Eğer 30 farklı tahminci istiyorsanız, o zaman bu 30 grubun her birini rastgele seçersiniz.

10 sütunun 3'ünü seçmek için yukarıdakiyle aynı örnek verileri kullanan bazı kodlar şunlardır:

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 

Örnek verilerim bu yaklaşıma hiç uymuyor, çünkü 5 iyi prediktör ve 5 tane gürültü var. 10 belirleyiciler hafifçe ile ilişki olsaydı y, ve (mali alanda oldukça mümkündür ki) birlikte kullanıldığında daha iyi olma şansı vardı, o zaman bu iyi bir yaklaşım olabilir.


2

Parametre vektörünün bir normunu en aza indiren bir çözüm seçerek LASSO gibi en küçük kareleri düzenleyen bir yöntem kullanmayı düşünebilirsiniz. Bunun, uygulamada parametre vektöründeki sıfır olmayan giriş sayısını en aza indirme etkisine sahip olduğu ortaya çıktı. LASSO bazı istatistiksel çevrelerde popüler olmasına rağmen, sıkıştırma algılama dünyasında ilgili diğer birçok yöntem düşünülmüştür.


Teşekkürler. LASSO'ya bakacağım. (Referans kardinal
veride
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.