Sıfırlar dahil olmak üzere negatif olmayan verileri nasıl dönüştürmeliyim?


191

Olumlu verilerim çok eğrilmişse, genellikle günlükleri alırım. Fakat sıfır içeren, eğri, negatif olmayan verilerle ne yapmalıyım? Kullanılan iki dönüşüm gördüm:

  • ile eşleşen düzgün bir özelliğe sahip olan log ( x + 1 ) .kütük(x+1)
  • burada c tahmin edilir veya çok küçük bir pozitif değer olarak ayarlanır.kütük(x+c)

Başka yaklaşımlar var mı? Bir yaklaşımı diğerlerine tercih etmenin iyi bir nedeni var mı?


19
Ben de cevaplarının yanı sıra diğer bazı malzemelerden bazılarını özetledik robjhyndman.com/researchtips/transformations
Rob Hyndman

5
stat.stackoverflow'u dönüştürmenin ve tanıtmanın mükemmel yolu!
Robin Girard,

Evet, @robingirard 'a katılıyorum (Rob'ın blog yazısı nedeniyle şimdi buraya geldim)!
Ellie Kesselman

Ayrıca sola sansürlü verilere uygulama için (şu anki soruda olduğu gibi, bir yer değiştirmeyle karakterize edilebilir), istatistik.stackexchange.com/questions/39042/… 'e bakınız .
whuber

2
En baştan dönüşüm amacını belirtmeden dönüşümün nasıl yapıldığını sormak garip görünüyor. Durum nedir? Dönüştürmek neden gerekli? Neyi başarmaya çalıştığınızı bilmiyorsak, nasıl makul bir şey önerebilir ? (Açıkçası, bir normallik haline dönüşmeyi ümit edemez, çünkü kesin sıfırların (sıfır olmayan) bir olasılığının varlığı, dağılımdaki sıfırda bir artış anlamına gelir, bu da hiçbir dönüşümü ortadan kaldıramaz - sadece onu hareket ettirebilir.)
Glen_b

Yanıtlar:


55

Bana göre, en uygun dönüşüm seçiminin model ve bağlam üzerinde olması şart.

'0' noktası, her biri farklı şekilde ele alınması gereken çeşitli nedenlerden kaynaklanabilir:

  • Kısaltma (Robin örneğinde olduğu gibi): Uygun modeller kullanın (örneğin, karışımlar, hayatta kalma modelleri vb.)
  • Eksik veriler: Uygunsa verileri / Bırakma gözlemlerini uygulayın.
  • Doğal sıfır noktası (örneğin, gelir düzeyleri; işsiz bir kişinin sıfır geliri var): Gerektiği gibi dönüştürün
  • Ölçüm cihazının hassasiyeti: Belki de verilere küçük bir miktar ekler misiniz?

Sıfırlarınız olduğunda evrensel, “doğru” bir dönüşüm olmadığından şüphelendiğimden gerçekten bir cevap vermiyorum.


6
Soruma verdiğim her cevap yararlı bilgiler sağladı ve hepsini oyladım. Ancak yalnızca bir yanıt seçebilirim ve Srikant'ın en iyi genel bakış IMO'sunu sunar.
Rob Hyndman,

2
Ayrıca, sıfır şişirilmiş modeller (ekstra sıfırlar ve bazı sıfırlara önem veriyorsunuz: bir karışım modeli) ve engelli modeller (sıfırlar ve sıfır olmayanları umursuyorsunuz: başlangıçtaki sansürlü bir modele sahip iki aşamalı bir model).
Wayne,

82

Hiç kimse ters hiperbolik sinüs dönüşümünden bahsetmedi. Yani bütünlüğü için buraya ekliyorum.

Bu Box-Cox dönüşümü için bir alternatif ve şu şekilde tanımlanmıştır nerede θ > 0 . Herhangi bir θ değeri için sıfır, sıfıra eşlenir. İki parametreli BC dönüşümünde olduğu gibi kaymaya izin veren iki parametreli bir versiyon da vardır.

f(y,θ)=SİNH-1(θy)/θ=kütük[θy+(θ2y2+1)1/2]/θ,
θ>0θBurbidge, Magee ve Robb (1988) , tahmini de dahil olmak üzere IHS dönüşümünü tartışmaktadır .θ

IHS dönüşümü, negatif değerler ve sıfırlar da dahil olmak üzere tüm gerçek satırda tanımlanan verilerle çalışır. Büyük değerleri için ne olursa olsun değerinin, bir log gibi davranır İçeride ISTV melerin RWMAIWi'nin (0 hariç). Olarak sınırlayıcı durumda İçeride ISTV melerin RWMAIWi'nin 0 verir f ( y , θ ) y .yθθ0f(y,θ)y

Bana öyle geliyor ki, IHS dönüşümünün olduğundan daha iyi bilinmesi gerekiyor.


1
İçin iyi bir alternatif gibi görünüyor / lojistik dönüşümleritbirnh
Kundakçı

1
IHS hakkında bazıları aynı fikirde görünmüyor
kjetil b halvorsen

3
Bu makale ters hiperbolik sinüs değil, ters sinüs dönüşümü ile ilgilidir.
Bryan

42

Değişken regresyonda bağımsız bir faktör olarak kullanıldığında yararlı bir yaklaşım, onu iki değişkenle değiştirmektir: biri sıfır olup olmadığını, diğeri ise orijinal değişkenin değeri mi yoksa yeniden ifadesinin mi olduğu logaritması gibi. Bu teknik Hosmer ve Lemeshow'un lojistik regresyon kitabında (ve başka yerlerde eminim) tartışılmaktadır . Orijinal değişkenin pozitif kısmının kesilmiş olasılık grafikleri, uygun bir yeniden ifadeyi tanımlamak için yararlıdır. ( Örnekler için https://stats.stackexchange.com/a/30749/919 adresindeki analize bakınız .)

Değişken lineer bir modelde bağımlı olan olduğunda, sansürlü regresyon ( Tobit gibi ) faydalı olabilir ve tekrar başlatılan logaritma ihtiyacını ortadan kaldırabilir. Bu teknik ekonometristler arasında yaygındır.


1
Verileri sıfır şişirilmiş bir Poisson olarak modellemek bu yaklaşımın özel bir örneği midir?
David LeBauer 13:12

4
@David, benzer görünse de öyle değildir, çünkü ZIP, bağımsız değişkenin değil, bağımlı değişkenin bir modelidir .
whuber

1
@whuber Bu teknik Hosmer ve Lemeshow'un lojistik regresyon kitabında tartışılmıştır. Bu tekniği hangi bölümde tartıştıklarını bilmek için bir şansınız olabilir mi? Onların kitabına bakıyorum, ancak doğru sayfayı bulamıyorum ...
landroni

1
@landroni H&L o zamanlar aklımda taze idi, bu yüzden bu kitapta bu konuyla ilgili bir şeyler olduğuna eminim . (Bazı çok büyük regresyon modelleri geliştirmek için ona danışmıştım ve bağımsız değişkenlerin çoğunun bu şekilde ele alınması gerekiyordu.) Ancak referansı bu noktada da bulamıyorum. Ayrıntıları araştırmanız durumunda, bu yazı hakkında sonraki yazılarda yazdım. Bir site aramasında gösterilen iki tanesi istatistik.stackexchange.com/questions/6563 ve stats.stackexchange.com/questions/4831 adresindedir .
whuber

1
@landroni Evet, eşdeğerdir, aynı şekilde herhangi bir ikili değişkenin tüm sayısal kodlamaları eşdeğerdir. Tercümanlık yapmak için en uygun olanı seçin.
whuber

37

Vardiyalı kütük dönüşümleri Box-Cox dönüşümlerinin özel durumlarındandır :

y(λ1,λ2)={(y+λ2)λ1-1λ1ne zaman λ10kütük(y+λ2)ne zaman λ1=0

Bunlar negatif değerler için genişletilmiş formlardır, ancak sıfır içeren veriler için de geçerlidir. Box ve Cox (1964), için maksimum olasılık kullanarak uygun değerleri bulmak için bir algoritma sunmaktadır . Bu size nihai dönüşümü sağlar. λ

Box-Cox dönüşümlerini tercih etmenin bir nedeni, lineer model için varsayımları sağlamak üzere geliştirilmeleridir. Verileriniz normale dönüştürülemese bile, tahmini hala simetrik bir dağılıma yol açtığını göstermek için yapılan bazı çalışmalar var .λ

Bunun sizin verilerinize ne kadar iyi hitap ettiğinden emin değilim, çünkü sadece sizin belirttiğiniz log dönüşümü olan olabilir, ancak başka bir dönüşümün gerçekleşip gerçekleşmediğini görmek için gerekli λ değerlerini tahmin etmeye değer olabilir uygun.λ=(0,1)λ

R'de, boxcox.fitpaketteki işlev geoRsizin için parametreleri hesaplar.


hmm, lateksi "yeni davaları kabul et" seçeneğine getiremiyor. : - /
ars

@ars, eşdeğerleri başlangıç ​​durumlarını kullanmaları için düzelttim. İnşallah süreçteki eş anlamlıları çözmedim.

1
@Rob: Ah, özür dilerim. Diggle'ın geoR'si gitmek için bir yol - fakat lambda2=TRUEargümanlarda belirtin boxcox.fit. (Ayrıca cevabı güncelledi.)
ars

3
@ gd047: İşte güzel bir referans: elevatorlady.ca/doc/refcard/expressions.html
ars

6
Bu işleve ne olduğunu merak eden herkes için, şimdi buna çağrıldı boxcoxfit.
Stragu

19

Tamamen farklı bir soru olduğu için bu sıfır!

Çoklu doğrusal regresyonda sıfırlarla nasıl baş edileceğini düşünürken, gerçekte kaç tane sıfırımız olduğunu düşünmeye meyilliyim.

Sadece birkaç tane sıfır

Oldukça geniş bir veri kümesinde tek bir sıfıra sahipsem:

  1. Noktayı kaldırın, kütükleri alın ve modele uyun
  2. c

c

Bu prosedürü biraz daha az kaba yapabilir ve arco'nun cevabında açıklanan vardiya ile boxcox yöntemini kullanabilirsiniz.

Çok sayıda sıfır

Veri setimde çok sayıda sıfır varsa, bu, basit doğrusal regresyonun iş için en iyi araç olmadığını gösterir. Bunun yerine, karışım modellemesi gibi bir şey kullanırdım (Srikant ve Robin tarafından önerildiği gibi).


15

Hızlı ve kirli bir şey istiyorsanız neden kare kök kullanmıyorsunuz?


7
Ve sık sık, küp kök dönüşümü iyi çalışır ve sıfır ve negatiflere izin verir. Küp kökünün, örneğin ölçümün bir birim hacmi veya bir birim hacim başına partikül sayısı olması durumunda özellikle iyi çalıştığını gördüm. Küp kökü onu doğrusal bir boyuta dönüştürür. Daha esnek bir yaklaşım ise, küp kökü veya karekökü üzerine sınırlı bir kübik spline (doğal spline) uyarak varsayılan formdan biraz ayrılmaya izin vermektir.
Frank Harrell

2
+1. Küp kökleriyle ilgili küçük bir makale için, bkz. Stata-journal.com/article.html?article=st0223 (Bu, 2014 yılının ilk çeyreğinden itibaren ücretsiz bir .pdf olacaktır.)
Nick Cox

2
Sıfırın karekökü sıfırdır, bu nedenle yalnızca sıfır olmayan değerler dönüştürülür. Sıfır şişirilmişse başakla başa çıkmak için hiçbir şey yapmaz ve eğer gruplar halinde her biri farklı miktarda sıfır varsa ciddi sorunlara neden olabilir. Başka bir deyişle, eğer bazı gruplar çok fazla sıfıra sahipse ve diğerleri azsa, bu dönüşüm pek çok şeyi olumsuz yönde etkileyebilir. En büyük varyansa sahip olan grupta (en az sıfır değerine sahip olan), hemen hemen tüm değerler dönüştürülüyor. Buna karşılık, en çok sıfıra sahip olanlar, değerlerin çoğunu dönüştürmez. Bu, hangi grubun en büyük varyansa sahip olduğunu değiştirebilir.
D_Williams

@D_Williams tarafından tarif edilen durumda hiçbir değişim söz konusu değildir. Karışım modelleri (bu iş parçasında başka bir yerde bahsedilen) muhtemelen bu durumda iyi bir yaklaşım olacaktır.
mkt

10

Sürekli verileriniz olduğunu varsayıyorum.

Veri eklerseniz sıfırları bu size bazı verilerin özel yönüne bağlı olabilir sıfıra sayısında ani bir artış anlamına geliyor. Örneğin rüzgar enerjisinde, 2 m / s'nin altındaki rüzgar sıfır güç üretiyor (buna kesme denir) ve rüzgârın üstündeki (yaklaşık bir şey) 25 m / s de sıfır güç üretiyor (güvenlik nedeniyle kesme denir) . Üretilen rüzgar enerjisinin dağılımı sürekli gözükse de, sıfırda bir yükselme var.

Benim çözümüm: Bu durumda, sıfırın başak bir karışımıyla ve sürekli dağılımın bir bölümü için kullanmayı planladığınız modeli (westo) kullanarak çalışarak sıfırları ayrı ayrı ele almanızı öneririm.


9

@RobHyndman tarafından verilen cevap ile formdaki negatif değerlere uzatılmış log-plus-one dönüşümünün karşılaştırılması:

T(x)=işaret(x)kütük(|x|+1)
r = -1000:1000

l = sign(r)*log1p(abs(r))
l = l/max(l)
plot(r, l, type = "l", xlab = "Original", ylab = "Transformed", col = adjustcolor("red", alpha = 0.5), lwd = 3)

#We scale both to fit (-1,1)
for(i in exp(seq(-10, 100, 10))){
  s = asinh(i*r)

  s = s / max(s)
  lines(r, s, col = adjustcolor("blue", alpha = 0.2), lwd = 3)
}
legend("topleft", c("asinh(x)", "sign(x) log(abs(x)+1)"), col = c("blue", "red"), lty = 1)

θθ1θ0

görüntü tanımını buraya girin


θx=0


8

İki parametreli fit Box-Cox önerildiği için, burada girdi verilerine uyması için bazı R'ler, üzerinde rasgele bir işlev çalıştırması (örneğin, zaman serisi tahmini) ve sonra ters çevrilmiş çıkışı döndürür:

# Two-parameter Box-Cox function
boxcox.f <- function(x, lambda1, lambda2) {
  if (lambda1!=0) {
    return(((x + lambda2) ^ lambda1 - 1) / lambda1)
  } else {
    return(log(x + lambda2))
  }
}

# Two-parameter inverse Box-Cox function
boxcox.inv <- function(x, lambda1, lambda2) {
  if (lambda1!=0) {
    return((lambda1 * x + 1) ^ (1 / lambda1) - lambda2)
  } else {
    return(exp(x) - lambda2)
  }
}

# Function to Box-Cox transform x, apply function g, 
# and return inverted Box-Cox output y
boxcox.fit.apply <- function(x, g) {
  require(geoR)
  require(plyr)

  # Fit lambdas
  t <- try(lambda.pair <- boxcoxfit(x, lambda2=T)$lambda)

  # Estimating both lambdas sometimes fails; if so, estimate lambda1 only
  if (inherits(t, "try-error")) {
    lambda1 <- boxcoxfit(x)$lambda
    lambda2 <- 0
  } else {
    lambda1 <- lambda.pair[1]
    lambda2 <- lambda.pair[2]
  }
  x.boxcox <- boxcox.f(x, lambda1, lambda2)

  # Apply function g to x.boxcox. This should return data similar to x (e.g. ts)
  y <- aaply(x.boxcox, 1, g)

  return(boxcox.inv(y, lambda1, lambda2))
}

5

Y’nin her bir Amerikan’ın belirli bir yılda yeni bir arabaya harcadığı para olduğunu düşünün (toplam satın alma fiyatı). Y 0'da yükselir; 0 ila yaklaşık 12,000 arasında hiçbir değere sahip olmayacak; ve çoğunlukla gençlerin, yirmili ve otuzlu yaşların diğer değerlerini alacaktır. Öngörüler, böyle bir satın alma işlemi yapmak için ihtiyaç ve / veya ilgi seviyesi için vekiller olacaktır. Alım yapmayan bireyler için ihtiyaç veya ilginin sıfır olduğu söylenemez; Bu ölçeklerde, satın almayanlar, alıcılara Y'den daha yakın olacaklar, hatta Y'nin bilediği gibi. Buna benzer ancak sağlık bakımında böyle bir durumda, test seti / eğitim seti çapraz değerlemesi ile değerlendirilen en doğru tahminlerin artan sırada elde edildiğini buldum.

  1. Y'nin ikili versiyonunda lojistik regresyon,
  2. Y'deki OLS,
  3. Y üzerindeki Ordinal regresyon (PLUM) 5 kategoride (alıcıları 4 eşit büyüklükte gruba ayırmak için),
  4. Y üzerindeki multinomyal lojistik regresyon 5 kategoriye ayrılmıştır,
  5. Y'nin (10) kütüğündeki OLS (küp kökünü denemeyi düşünmedim) ve
  6. Y üzerindeki OLS, 5 kategoriye ayrılmıştır.

Bazıları, sürekli bağımlı bir değişkenin sınıflandırılmasında geri tepecektir. Ancak bazı bilgileri feda etse de, kategorilere ayırmak durumun altta yatan önemli bir yönünü eski haline getirerek yardımcı oluyor gibi görünüyor - yine, "sıfırların" geri kalanına Y'nin gösterdiğinden çok daha fazla benzer olması.


4
Ayrıca iki modele de ayırabilirsiniz: bir araba satın alma olasılığı (ikili yanıt) ve bir satın alma verilen aracın değeri. Bu, birçok alandaki standart uygulamadır, örn. Sigorta, kredi riski, vb.
Hong Ooi,

1
@HongOoi - Bu yaklaşımın ne zaman uygulanıp uygulanamayacağı hakkında herhangi bir okuma önerebilir misiniz?
rolando2

4

Burada tartışılan Yeo-Johnson güç dönüşümü , Box Cox güç dönüşümünün gücünden yararlanırken sıfırları ve negatifleri ele almak için tasarlanmış mükemmel özelliklere sahiptir. Sıfırlar veya negatif verilerle uğraşırken genellikle buna giderim.

Yeo-Johnson'ın neden tercih edildiğini göstermek için artıları / eksileri olan dönüşümlerin bir özetini burada bulabilirsiniz.

Giriş

Artıları: Olumlu verilerle iyi yapar.

Eksileri: Sıfırları işlemez.

> log(0)
[1] -Inf

Günlük Artı 1

Artıları: Artı 1 ofseti, pozitif verilere ek olarak sıfırları kullanma yeteneği sağlar.

Eksileri: Olumsuz verilerle başarısız

> log1p(-1)
[1] -Inf
> log1p(-2)
[1] NaN
Warning message:
In log1p(-2) : NaNs produced

Kare kök

Artıları: Sıfırları ve pozitif verileri işleyebilecek bir güç dönüşümü kullanır.

Eksileri: Olumsuz verilerle başarısız

> sqrt(-1)
[1] NaN
Warning message:
In sqrt(-1) : NaNs produced

Kutu Cox

R Kodu:

box_cox <- function(x, lambda) {

    eps <- 0.00001
    if (abs(lambda) < eps)
        log(x)
    else
        (x ^ lambda - 1) / lambda

}

Artıları: Ölçekli güç dönüşümleri sağlar

Eksileri: Sıfırlar ve negatiflerle ilgili sorunlardan muzdarip (yani sadece pozitif verileri idare edebilir).

> box_cox(0, lambda = 0)
[1] -Inf
> box_cox(0, lambda = -0.5)
[1] -Inf
> box_cox(-1, lambda = 0.5)
[1] NaN

Yeo Johnson

R Kodu:

yeo_johnson <- function(x, lambda) {

    eps <- .000001
    not_neg <- which(x >= 0)
    is_neg  <- which(x < 0)

    not_neg_trans <- function(x, lambda) {
        if (abs(lambda) < eps) log(x + 1)
        else ((x + 1) ^ lambda - 1) / lambda
    }

    neg_trans <- function(x, lambda) {
        if (abs(lambda - 2) < eps) - log(-x + 1)
        else - ((-x + 1) ^ (2 - lambda) - 1) / (2 - lambda)
    }

    x[not_neg] <- not_neg_trans(x[not_neg], lambda)

    x[is_neg] <- neg_trans(x[is_neg], lambda)

    return(x)

}

Artıları: Olumlu, sıfır ve olumsuz verileri işleyebilir.

Eksileri: Hiç düşünemiyorum. Özellikler Box-Cox'a çok benzer, ancak sıfır ve negatif verileri işleyebilir.

> yeo_johnson(0, lambda = 0)
[1] 0
> yeo_johnson(0, lambda = -0.5)
[1] 0
> yeo_johnson(-1, lambda = 0.5)
[1] -1.218951

1
Yeo – Johnson için eksileri: pozitif ve negatifler için ve lambda'nın her iki tarafındaki değerler için karmaşık, ayrı bir dönüşüm, sihirli ayar değeri (epsilon; ve lambda nedir?). Ölçekli güç dönüşümleri gerektirmediğiniz sürece (Box-Cox'ta olduğu gibi) Firebug'un cevabında gösterilen basit negatif genişletilmiş log dönüşümü ile karşılaştırıldığında hiçbir belirgin avantaj yoktur.
Konrad Rudolph

1

Regresyon modellerinde sıfır kütüğüyle nasıl başa çıkılacağına açıklık getirmek için, insanların pratikte yaptıkları en iyi çözümü ve ortak hataları açıklayan bir pedagojik makale yazdık. Ayrıca, bu sorunla başa çıkmak için yeni bir çözüm bulduk.

Makaleyi buraya tıklayarak bulabilirsiniz: https://ssrn.com/abstract=3444996

kütük(y)=βkütük(x)+εβyx

YY+c>0

Makalemizde, çok küçük sabitleri eklemenin aslında en yüksek önyargıyı sağladığı bir örnek veriyoruz. Önyargı ifadesinin türetilmesini sağlıyoruz.

Aslında, Poisson Sözde Maksimum Olabilirlik (PPML) bu konuda iyi bir çözüm olarak kabul edilebilir. Bir aşağıdaki süreci göz önünde bulundurmalıdır:

yben=birbentecrübe(α+xben'β)E(birben|xben)=1

βbirbenyben=0E(birben|xben)=1E(yben-tecrübe(α+xben'β)|xben)=0

Σben=1N-(yben-tecrübe(α+xben'β))xben'=0

yben=0

β

kütük(yben+tecrübe(α+xben'β))=xben'β+ηben

Bu tahmin edicinin tarafsız olduğunu ve herhangi bir standart istatistiksel yazılım ile GMM ile tahmin edilebileceğini gösteriyoruz. Örneğin, Stata ile yalnızca bir kod satırı yürütülerek tahmin edilebilir.

Bu makalenin yardımcı olacağını umarız ve sizden geri bildirim almak isteriz.

Christophe Bellégo ve Louis-Daniel Pape CREST - Ekolojik Politeknik - ENSAE

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.