Bağımsız değişkenler için Box-Cox benzeri bir dönüşüm var mı? Yani, değişkenini optimize eden bir dönüşüm, böylece doğrusal bir modele daha makul bir uyum sağlayacak mı?y~f(x)
Öyleyse, bunu gerçekleştirecek bir işlev var R
mı?
Bağımsız değişkenler için Box-Cox benzeri bir dönüşüm var mı? Yani, değişkenini optimize eden bir dönüşüm, böylece doğrusal bir modele daha makul bir uyum sağlayacak mı?y~f(x)
Öyleyse, bunu gerçekleştirecek bir işlev var R
mı?
Yanıtlar:
John Tukey, ilişkileri doğrusallaştırmak için değişkenlerin ifadelerini bulmak için " üç puanlı yöntemini " savundu .
Keşif Verileri Analizi adlı kitabından bir alıştırma ile örnek göstereceğim . Bunlar, sıcaklığın değiştiği ve buhar basıncının ölçüldüğü bir deneyden elde edilen cıva buhar basıncı verileridir.
pressure <- c(0.0004, 0.0013, 0.006, 0.03, 0.09, 0.28, 0.8, 1.85, 4.4,
9.2, 18.3, 33.7, 59, 98, 156, 246, 371, 548, 790) # mm Hg
temperature <- seq(0, 360, 20) # Degrees C
İlişki kesinlikle doğrusal değildir: şekildeki soldaki panele bakınız.
Bu bir keşif alıştırması olduğundan, etkileşimli olmasını bekliyoruz. Analistin arsada üç "tipik" nokta tanımlayarak başlaması istenir : her iki ucuna yakın biri ve biri ortadaki. Bunu burada yaptım ve kırmızı olarak işaretledim. (Bu alıştırmayı uzun zaman önce ilk yaptığımda farklı puanlar kullandım ancak aynı sonuçlara ulaştım.)
Üç nokta yönteminde, biri - kaba kuvvetle veya başka türlü - koordinatlardan birine uygulandığında - ya y veya x - (a) tipik noktalarını yaklaşık olarak line ve (b), genellikle analist tarafından yorumlanabilecek güçlerin bir "merdiveninden" seçilen "güzel" bir güç kullanır.
Daha sonra ortaya çıkacak nedenlerden ötürü, Box-Cox ailesini, bir "ofset" yaparak, dönüşümlerin formda olması için genişlettim.
R
box.cox <- function(x, parms=c(1,0)) {
lambda <- parms[1]
offset <- parms[2]
if (lambda==0) log(x+offset) else ((x+offset)^lambda - 1)/lambda
}
threepoint <- function(x, y, ladder=c(1, 1/2, 1/3, 0, -1/2, -1)) {
# x and y are length-three samples from a dataset.
dx <- diff(x)
f <- function(parms) (diff(diff(box.cox(y, parms)) / dx))^2
fit <- nlm(f, c(1,0))
parms <- fit$estimate #$
lambda <- ladder[which.min(abs(parms[1] - ladder))]
if (lambda==0) offset = 0 else {
do <- diff(range(y))
offset <- optimize(function(x) f(c(lambda, x)),
c(max(-min(x), parms[2]-do), parms[2]+do))$minimum
}
c(lambda, offset)
}
Üç nokta metodu cıva buharı veri setindeki basınç (y) değerlerine uygulandığında, çizimlerin orta panelini elde ederiz.
data <- cbind(temperature, pressure)
n <- dim(data)[1]
i3 <- c(2, floor((n+1)/2), n-1)
parms <- threepoint(temperature[i3], pressure[i3])
y <- box.cox(pressure, parms)
parms
Sorunun bağlamına benzer bir noktaya ulaştık: herhangi bir nedenden dolayı (genellikle artık varyansı dengelemek için), bağımlı değişkeni yeniden ifade ettik, ancak bağımsız bir değişkenle ilişkinin doğrusal olmadığını tespit ettik. Şimdi , bağımsız değişkeni ilişkiyi doğrusallaştırmak için yeniden ifade etmeye döndük . Bu aynı şekilde yapılır, yalnızca x ve y rollerini tersine çevirir:
parms <- threepoint(y[i3], temperature[i3])
x <- box.cox(temperature, parms)
parms
John Fox'un " buradan çıkma, referanslarla tamamlanma " konusundaki "Regresyon teşhisi" konusundaki slaytlarına, doğrusal olmayanlığı dönüştürme konusunu kısaca tartışan bir göz atın . Güç dönüşümlerini seçmek için Tukey'in “şişkinlik kuralı” nı kapsar (kabul edilen cevap ile ele alınır), fakat aynı zamanda Box-Cox ve Yeo-Johnson dönüşüm ailelerini de belirtir. Slaytların 3.6 Bölümüne bakınız. Aynı yazar tarafından daha resmi bir yaklaşım için bakınız J. Fox, Uygulamalı Regresyon Analizi ve Genelleştirilmiş Doğrusal Modeller, İkinci Baskı (Sage, 2008) .
Buna yardımcı olan gerçek R paketlerine gelince , J. Fox ve S. Weisberg tarafından yazılan araç paketine kesinlikle bir göz atın . Bu pakette J. Fox ve S. Weisberg, Uygulamalı Regresyona Bir R Yardımcısı, İkinci Basım, (Sage, 2011) , bir başka okunması gereken kitap eşlik ediyor . Bu paketi kullanarak basicPower()
(basit güç dönüşümleri), bcPower()
(Box-Cox dönüşümleri) ve yjPower()
(Yeo-Johnson dönüşümleri) başlayabilirsiniz . Ayrıca powerTransform () vardır :
PowerTransform işlevi, tek değişkenli veya çok değişkenli rasgele bir değişkenin normalleştirici dönüşümlerini tahmin etmek için kullanılır.
Bu dönüşümlerin arkasındaki teori ve hesaplamalı yaklaşımlar hakkında daha fazla ayrıntı için her iki kitabı da kontrol edin.
R
ve, bir an için düşününce, bunu nasıl yapacağımı tam olarak bilemiyorum . En lineer dönüşümü sağlamak için hangi kriterleri optimize edersiniz? de görüldüğü gibi, cazip ama burada benim cevap , R 2 , tek başına bir modelin doğrusallık varsayımı memnun olup olmadığını görmek için kullanılamaz. Aklında bazı kriterler var mı?