Regresyonda log (0) teriminden kaçınma


10

Aşağıdaki basit X ve Y vektörleri var:

> X
[1] 1.000 0.063 0.031 0.012 0.005 0.000
> Y
[1] 1.000 1.000 1.000 0.961 0.884 0.000
> 
> plot(X,Y)

resim açıklamasını buraya girin

X günlüğünü kullanarak regresyon yapmak istiyorum. Günlüğü (0) almaktan kaçınmak için +1 veya +0,1 veya +0,00001 veya +0,000000000000001:

> summary(lm(Y~log(X)))
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  NA/NaN/Inf in 'x'
> summary(lm(Y~log(1+X)))

Call:
lm(formula = Y ~ log(1 + X))

Residuals:
       1        2        3        4        5        6 
-0.03429  0.22189  0.23428  0.20282  0.12864 -0.75334 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   0.7533     0.1976   3.812   0.0189 *
log(1 + X)    0.4053     0.6949   0.583   0.5910  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.4273 on 4 degrees of freedom
Multiple R-squared:  0.07838,   Adjusted R-squared:  -0.152 
F-statistic: 0.3402 on 1 and 4 DF,  p-value: 0.591

> summary(lm(Y~log(0.1+X)))

Call:
lm(formula = Y ~ log(0.1 + X))

Residuals:
       1        2        3        4        5        6 
-0.08099  0.20207  0.23447  0.21870  0.15126 -0.72550 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)  
(Intercept)    1.0669     0.3941   2.707   0.0537 .
log(0.1 + X)   0.1482     0.2030   0.730   0.5058  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.4182 on 4 degrees of freedom
Multiple R-squared:  0.1176,    Adjusted R-squared:  -0.103 
F-statistic: 0.5331 on 1 and 4 DF,  p-value: 0.5058

> summary(lm(Y~log(0.00001+X)))

Call:
lm(formula = Y ~ log(1e-05 + X))

Residuals:
       1        2        3        4        5        6 
-0.24072  0.02087  0.08796  0.13872  0.14445 -0.15128 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)     1.24072    0.12046  10.300 0.000501 ***
log(1e-05 + X)  0.09463    0.02087   4.534 0.010547 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.1797 on 4 degrees of freedom
Multiple R-squared:  0.8371,    Adjusted R-squared:  0.7964 
F-statistic: 20.56 on 1 and 4 DF,  p-value: 0.01055

> 
> summary(lm(Y~log(0.000000000000001+X)))

Call:
lm(formula = Y ~ log(1e-15 + X))

Residuals:
        1         2         3         4         5         6 
-0.065506  0.019244  0.040983  0.031077 -0.019085 -0.006714 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)     1.06551    0.02202   48.38 1.09e-06 ***
log(1e-15 + X)  0.03066    0.00152   20.17 3.57e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.04392 on 4 degrees of freedom
Multiple R-squared:  0.9903,    Adjusted R-squared:  0.9878 
F-statistic: 406.9 on 1 and 4 DF,  p-value: 3.565e-05

Çıktı her durumda farklıdır. Regresyonda log (0) kullanmaktan kaçınmak için doğru değer nedir? Bu gibi durumlar için doğru yöntem nedir.

Düzenleme: benim asıl amacım günlük terimi ekleyerek regresyon modelinin tahminini artırmak, yani: lm (Y ~ X + log (X))


4
Bunların hiçbiri , hepsi , yani herhangi bir 'doğruluk' kavramı saçmalık. Bunların hiçbiri için 'doğru' değildir . Aralarında seçim yapmak için, hangi özelliklerden ve hangi özelliklerden vazgeçmeye hazır olduğunuz hakkında daha fazla şey söylemeniz gerekir. Aslında ne elde etmeye çalışıyorsunuz? günlük ( x + c ) günlük ( x )günlük(x)günlük(x+c)günlük(x)
Glen_b

Lm (Y ~ X + log (X)) kullanarak regresyon modelinin öngörüsünü geliştirmek istiyorum. Bunun için log (0) 'dan kaçınmak için tavsiyeniz nedir?
rnso

5
Orada (X) günlüğüne sahip olamazsınız ; bunu zaten kurdunuz. Peki aslında neyi başarmaya çalışıyorsunuz? Eğer Verilen olamaz günlüğü (0) al, regresyon çıkmak istiyorsun? Neden orada log (X) istiyorsun? İçinde log (X) bulundurmak yerine neye tolerans gösterebilirsiniz?
Glen_b

3
Buradaki bilim nedir? Ne yapılması gerektiğine dair bir rehber olmalıdır.
Nick Cox

1
Burada ortaya koyduğum (veya daha da önemlisi, Nick Cox'un gündeme getirdiği) konuları ele alan hiçbir şey görmüyorum, gerçekten de buradaki soruya cevap verecek bir şey görmüyorum.
Glen_b

Yanıtlar:


8

Sabit ne kadar küçükse, aykırı değer o kadar büyük olur: resim açıklamasını buraya girin

Bu yüzden burada herhangi bir sabiti haklı çıkarmak zor. 0'larda sorun olmayan bir dönüşümü düşünebilirsiniz, örneğin üçüncü dereceden bir polinom.


X + x ^ 2 + x ^ 3 (x) günlüğüne eşdeğer mi? Günlük değerlerini neden kullanmaya çalıştığım için lütfen diğer yanıttaki yorumlarıma bakın.
rnso

2
Eşdeğer değil, alternatiflerdir.
Maarten Buis

10

Neden logaritmaları çizmek istiyorsunuz? Değişkenleri oldukları gibi çizmenin nesi yanlış?

Günlüklerle çalışmanın bir nedeni, örneğin, varsayılan bir üretim dağıtımı log-normal olduğundadır.

Bir diğeri, sayıların ölçek parametrelerini temsil etmesi veya çarpma olarak kullanılmasıdır, bu durumda içinde bulundukları alan doğal olarak logaritmiktir (aynı nedenle ölçek değişkeninden önceki Jeffreys logaritmiktir).

Bunların hiçbiri durum böyle değil. Sanırım burada doğru cevap bunu yapma. Önce veri üreten bir model geliştirin ve ardından verilerinizi bununla tutarlı bir şekilde kullanın.

yxygünlükx

Muhtemelen girişlerin işlevlerini sürekli olarak ekleyerek elde edeceğiniz tek şey, fazla donanımlı bir modeldir. Gerçekten iyi doğrulanmış bir model istiyorsanız, iyi tahminler yapmanız ve bir modeli öğrenmek için yeterli veriye sahip olmanız gerekir. Ne kadar çok tahmin yaparsanız, o kadar fazla parametreye sahip olursunuz, o kadar fazla veriye ihtiyacınız olur.


Günlükleri çizmek istemiyorum. Regresyonda X değişkenini kullanmak istiyorum. En iyi uyumu elde etmek için, log ve polinomları da dahil etmeliyiz. Bunun için günlük değerlerine ihtiyacım var.
rnso

@rnso: Yani hedef değerin bu girdilerin bir ürünü olduğunu mu düşünüyorsunuz? Giriş sıfır olduğunda, hedef değerin girişlerle çarpımlanması çok gariptir.
Neil G

Ürün değil toplam. Formülü kullanmaya çalışıyorum: lm (Y ~ X + log (X))
rnso

1
ey~Πxbenwbenxben

1
günlük terimini atlarsınız. Günlük terim katsayısına zaten sahipsiniz: Sayı Değil
Caleth

3

Verileriniz hakkında çok az ayrıntı ve yalnızca altı gözlemle söylemek zor, ancak sorununuz Y değişkeninizde (sıfır ile bir arasında sınırlı) ve X'inizde yatıyor. İki parametreyi kullanarak aşağıdaki yaklaşıma bir göz atın drc paketinden log-logistic işlevi :

X<-c(1.000, 0.063, 0.031, 0.012, 0.005, 0.000)
Y<-c(1.000, 1.000, 1.000, 0.961, 0.884, 0.000)

library(drc)
mod1<-drm(Y ~ X, fct=LL.2())
summary(mod1)

#Model fitted: Log-logistic (ED50 as parameter) with lower limit at 0 and upper limit at 1 (2 parms)
#
#Parameter estimates:
#  
#  Estimate  Std. Error     t-value p-value
#b:(Intercept) -1.5131e+00  1.4894e-01 -1.0159e+01  0.0005
#e:(Intercept)  1.3134e-03  1.8925e-04  6.9401e+00  0.0023
#
#Residual standard error:
#  
#  0.005071738 (4 degrees of freedom)  

plot(X,Y)
lines(seq(0, 1, 0.001), predict(mod1, data.frame(X=seq(0, 1, 0.001))))

resim açıklamasını buraya girin


1

Y ve x grafiğine bakıldığında, fonksiyonel form çok yüksek bir alfa ile y = 1 - exp (-alfa x) gibi görünüyor. Bu bir adım işlevine yakındır, ancak bir adım işlevine yakın değildir ve bu verilere uyması için çok sayıda polinom gerekir (exp (x) = 1 + x + x ^ 2/2! +. + X ^ n / n! + ...). Şartları yeniden düzenleyerek, exp (-alpha x) = 1-y alırız. Günlükleri şimdi alırsanız, bu -alpha x = log (1-y) değerini verir. Yeni bir z = log (1-y) değişkeni tanımlayabilir ve verilere en iyi uyan alfa bulmayı deneyebilirsiniz. Hala y = 1 ile nasıl başa çıkacağınız konusunda bir sorununuz var. Sorununuzun bağlamını bilmiyorum ama benim izlenimim, x'in 1'e yaklaşmasıyla y'yi asimptotik olarak 1'e yaklaşmanız ve y'nin asla 1'e ulaşması gerektiğini düşünmeniz.

Bunu biraz daha düşünerek, verinin aslında bir Weibull dağılımından mı olduğunu merak ediyorum y = 1 - exp (-alpha x ^ beta). Terimleri yeniden düzenleyerek, beta log (x) = log (-log (1-y)) - log (alfa) elde ederiz ve alfa ve beta almak için OLS'u kullanabiliriz. Y = 1 kullanımı sorunu devam etmektedir.


Teşekkürler. İyi analiz.
rnso
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.