PCA ile ortogonal regresyon (toplam en küçük kareler) nasıl yapılır?


29

Her zaman lm()R'de üzerindeki lineer regresyonunu yapmak için kullanırım . Bu işlev , bir katsayısı döndürürx β y = β x .yxβ

y=βx.

Bugün toplam en küçük kareleri öğrendim ve bu princomp()işlevi (temel bileşen analizi, PCA) gerçekleştirmek için kullanılabiliyor. Benim için iyi olmalı (daha doğru). princomp()Gibi bazı testler yaptım :

r <- princomp( ~ x + y)

Benim sorunum: sonuçları nasıl yorumlanır? Regresyon katsayısını nasıl alabilirim? "Katsayı" ile , yakın bir sayı vermek için değerini çarpmak için kullanmam gereken sayısını kastediyorum .x yβxy


Bir an beyler, kafam biraz karıştı. Şuna bakın: zoonek2.free.fr/UNIX/48_R/09.html Buna PCA (Temel Bileşen Analizi, aka "ortogonal regresyon" veya "dik kareler toplamı" veya "toplam en küçük kareler") denir. princomp ile TLS hakkında () Hayır?
Dail

Yok hayır; bunlar iki farklı şey, PCA hakkında wikipedia makalesine bakınız. Burada kullanıldığı gerçeği bir kesmek (ne kadar kesin bilmiyorum ama kontrol edeceğim); Bu yüzden katsayıların karmaşık çıkarımı.

1
İlgili bir soru: stats.stackexchange.com/questions/2691/… ve bir blog yazısına cevaplardan biriyle gönderme yapılır: cerebralmastication.com/2010/09/…
Jonathan

Yanıtlar:


48

Sıradan en küçük kareler - toplam en küçük kareler

İlk önce, sadece bir yordayıcı (bağımsız) değişkeni olan en basit durumunu ele alalım . Kolaylık olması açısından, hem de izin ve ortalanmış, yani kesişme her zaman sıfırdır. Standart OLS regresyonu ile "ortogonal" TLS regresyonu arasındaki fark, PCA'nın en popüler başlığındaki en popüler cevaptan (benim tarafımdan uyarlanan) bu rakamda açıkça gösterilmiştir :x yxxy

OLS ve TLS

OLS, denklemine uyuyor ve gözlemlenen değerler ile öngörülen değerler arasındaki kare mesafeleri minimize ediyor . TLS, noktaları ile kareler arasındaki çizgide uzaklıkları en aza indirerek aynı denklemi sağlar . Bu en basit durumda, TLS satırı 2D verisinin ilk temel bileşenidir. bulmak için PCA'yı noktalarına yapın, yani kovaryans matrisini ve ilk özvektörünü ; sonra .y y ( x , y ), β ( x , y ) 2 × 2 Σy=βxyy^(x,y)β(x,y)2×2Σβ = v y / v xv=(vx,vy)β=vy/vx

Matlab'da:

 v = pca([x y]);    //# x and y are centered column vectors
 beta = v(2,1)/v(1,1);

R'de:

 v <- prcomp(cbind(x,y))$rotation
 beta <- v[2,1]/v[1,1]

Bu arada, ve merkezlenmemiş olsa bile bu doğru eğimi sağlar (çünkü yerleşik PCA işlevleri otomatik olarak merkezleme yapar). kurtarmak için, hesaplayın .y β 0 = ˉ y - β ˉ xxyβ0=y¯βx¯

OLS ve TLS, çoklu regresyon

Bağımlı değişken ve birçok bağımsız değişken verildiğinde (yine hepsi basitlik için merkezlenir), regresyon,OLS, gözlenen değerleri ile öngörülen değerler arasındaki kare hataları en aza indirerek uyumu sağlar . TLS, gözlenen noktaları ile regresyon düzlemi / hiper düzlemi üzerindeki en yakın noktalar arasındaki kare mesafeleri en aza indirerek uyumu sağlar .x i y = β 1 x 1 + + β p x p . y y ( x , y ) R p + 1yxi

y=β1x1++βpxp.
yy^(x,y)Rp+1

Artık "regresyon çizgisi" olmadığını unutmayın! Yukarıdaki denklem bir hiper düzlemi belirtir : iki öngörücü varsa 2B düzlemdir, üç öngörücü varsa 3B hiper düzlem vb. Yukarıdaki çözüm işe yaramaz: TLS çözümünü yalnızca ilk bilgisayarı alarak ( bir çizgi). Yine de, çözüm PCA ile kolayca elde edilebilir.

Daha önce olduğu gibi, PCA noktalarında gerçekleştirilir. Bu , sütunlarında özvektörleri verir . Birinci özvektörler bir tanımlayan boyutlu hiper ihtiyacımız olduğu; son ( sayısı ) özvektör buna diktir. Soru temelini dönüştürmek için nasıl , ilk olarak verilen içine özvektör katsayıları.p + 1 V p p H p + 1 v p + 1 H p β(x,y)p+1VppHp+1vp+1Hpβ

Dikkate biz set halinde tüm ve tek , daha sonra örneğin, vektör altdüzlem yatmaktadır . Öte yandan, öğesinin dik olduğunu biliyoruz. Yani nokta ürünleri sıfır olmalıdır:ı k x k = 1 , Y = β k ( 0 , ... , 1 , ... , β k ) Hxi=0ikxk=1y^=βk

(0,,1,,βk)H
v p + 1 = ( v 1 , ... , v p + 1 )H
vp+1=(v1,,vp+1)H
vk+βkvp+1=0βk=vk/vp+1.

Matlab'da:

 v = pca([X y]);    //# X is a centered n-times-p matrix, y is n-times-1 column vector
 beta = -v(1:end-1,end)/v(end,end);

R'de:

 v <- prcomp(cbind(X,y))$rotation
 beta <- -v[-ncol(v),ncol(v)] / v[ncol(v),ncol(v)]

Yine, bu, ve merkezlenmemiş olsa bile doğru eğim sağlar (çünkü yerleşik PCA işlevleri otomatik olarak merkezleme yapar). kurtarmak için, hesaplayın .xyβ0=y¯x¯β

Akıl sağlığı kontrolü olarak, bu çözümün yalnızca tahmincisi olması durumunda öncekiyle çakıştığını unutmayın . Aslında, o zaman uzayı 2B'dir ve bu nedenle, ilk PCA özvektörünün ikinci (son) bir ile ortogonal olduğu göz önüne alındığında, .x(x,y)vy(1)/vx(1)=vx(2)/vy(2)

TLS için kapalı form çözümü

Şaşırtıcı bir şekilde, için kapalı bir form denklemi olduğu ortaya çıkıyor . Aşağıdaki tartışma Sabine van Huffel'in "Toplam en küçük kareler" kitabından alınmıştır (bölüm 2.3.2).β

Let ve merkezli veri matrisler olabilir. Son PCA özvektörü , kovaryans matrisinin bir özvektörü olup, bir özdeğer . Bir özvektör ise, öyleyse . Özvektör denklemini yazmak: Xyvp+1[Xy]σp+12vp+1/vp+1=(β1)

(XXXyyXyy)(β1)=σp+12(β1),
ve ürünü solda hesaplarsak hemen şunu tanıdık OLS ifadesini kesinlikle hatırlatıyor
βTLS=(XXσp+12I)1Xy,
βOLS=(XX)1Xy.

Çok değişkenli çoklu regresyon

Aynı formül çok değişkenli duruma genelleştirilebilir, ancak çok değişkenli TLS'nin ne yaptığını tanımlamak için bile bazı cebir gerektirir. TLS'deki Wikipedia'ya bakın . Çok değişkenli OLS regresyonu, her bir bağımlı değişken için bir çok değişkenli OLS regresyonuna eşittir, ancak TLS durumunda öyle değildir.


1
R bilmiyorum, ama yine de ileride referans olması için R parçacıkları sağlamak istedim. Burada R konusunda uzman birçok insan var. Lütfen gerekirse snippet'leri düzenlemek için çekinmeyin! Teşekkür ederim.
amip diyor Reinstate Monica

Güzel yazı, ancak vektörün hiper gerçeğini neyin garanti ettiğini sorabilirsem ? (0,,1,,βk)
JohnK

@JohnK, tam olarak neyin belirsiz olduğundan emin değilim. Yazdığım gibi, tüm izin dışında sıfıra eşit olması . O zaman bunu , . Dolayısıyla nokta , denklemi tarafından tanımlanan hiper . x k = 1 y = β j x j y = β k1 = β k ( 0 , , 1 , β k ) y = β j x jxixk=1y=βjxjy=βk1=βk(0,,1,βk)y=βjxj
amip diyor Reinstate Monica

Bu kısmı yanlış okudum gibi görünüyor ama şimdi açık. Açıklama için de teşekkürler.
JohnK

2
R'de, daha büyük vektörler için çok daha hızlı olduğu için "eigen (cov (cbind (x, y))) $ vectors" yerine "prcomp (cbind (x, y)) $ döndürme" tercihini tercih edebilirsiniz .
Thomas Browne

9

Burada bulunan saf GNU Octave uygulamasına dayanarak, bunun gibi bir şey olabilir (tuz tanesi, geç).

tls <- function(A, b){

  n <- ncol(A)
  C <- cbind(A, b)

  V <- svd(C)$v
  VAB <- V[1:n, (n+1):ncol(V)]
  VBB <- V[(n+1):nrow(V), (n+1):ncol(V)]
  return(-VAB/VBB)
}

4

princompçalışırken ana bileşen analizi yerine, toplam en küçük kareler regresyon. Bildiğim kadarıyla hiçbir R fonksiyonu veya TLS yapan paket yok; MethComp'ta en çok Deming regresyon var .
Yine de, lütfen buna büyük olasılıkla değmeyeceği bir öneri olarak davranın.


MethComp paketindeki Deming'in TLS olduğunu düşünüyorum - fark nedir?
mark999

X ve y üzerindeki hataların oranını vermelisiniz; saf TLS bunu optimize eder.
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.