회귀에서 log (0) 항을 피하는 방법


10

다음과 같은 간단한 X 및 Y 벡터가 있습니다.

> 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)

여기에 이미지 설명을 입력하십시오

log of X를 사용하여 회귀를 원합니다. log (0)을 얻지 않으려면 +1 또는 +0.1 또는 +0.00001 또는 +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

모든 경우에 출력이 다릅니다. 회귀에서 log (0)을 피하기 위해 올바른 값은 무엇입니까? 그러한 상황에 대한 올바른 방법은 무엇입니까?

편집 : 내 주요 목표는 로그 용어를 추가하여 회귀 모델의 예측을 향상시키는 것입니다. 예 : lm (Y ~ X + log (X))


4
이들 중 어느 것도 이며 모두 이므로 '정확성'에 대한 개념은 의미가 없습니다. 대해 '정확한'것은 없습니다 . 이들 중 하나를 선택하려면 원하는 속성과 포기할 속성에 대해 더 많이 말해야합니다. 실제로 무엇을 달성하려고합니까? log(x)로그 ( x )log(x+c)log(x)
Glen_b-복지국 모니카

lm (Y ~ X + log (X))를 사용하여 회귀 모델 예측을 개선하고 싶습니다. 이를 위해 log (0)을 피하는 것이 좋습니다?
rnso

5
log (X)를 가질 수 없습니다 . 당신은 이미 그것을 설립했습니다. 실제로 달성하려는 것은 무엇입니까? 당신은 주어진 수없는 로그 (0)를 가지고, 당신은 회귀 나가 무엇을 원하는가? 왜 log (X)를 원하십니까? log (X)를 사용하지 않고 무엇을 견딜 수 있습니까?
Glen_b-복지 모니카

3
여기 과학은 무엇입니까? 해야 할 일에 대한 지침이되어야합니다.
Nick Cox

1
rnso 나는 내가 제기 한 문제 (또는 더 중요한 것은 Nick Cox가 제기 한 문제)를 다루는 내용이나 실제로 여기에 대한 질문에 대한 답을 이끌어 줄만한 것을 보지 못했습니다.
Glen_b-복지국 모니카

답변:


8

상수가 작을수록 특이 치가 클수록 더 많이 생성됩니다. 여기에 이미지 설명을 입력하십시오

따라서 여기서 상수를 정당화하는 것은 어렵습니다. 0에 문제가없는 변환 (예 : 3 차 다항식)을 고려할 수 있습니다.


x + x ^ 2 + x ^ 3은 log (x)와 동일합니까? 로그 값을 사용하려는 이유에 대한 다른 답변의 의견을 참조하십시오.
rnso

2
그것들은 동등하지 않지만 대안입니다.
Maarten Buis

10

대수를 플로팅하려는 이유는 무엇입니까? 변수를 그대로 플롯하면 무엇이 문제입니까?

로그를 사용하는 한 가지 이유는 예를 들어 생성 된 생성 분포가 로그 정규일 때입니다.

또 다른 이유는 숫자가 척도 모수를 나타내거나 곱셈 적으로 사용되는 경우가 있습니다.이 경우 그것들이 놓인 공간은 자연적으로 대수적입니다.

이 두 가지 모두 해당되지 않습니다. 나는 여기에 정답이 아니라고 생각합니다. 먼저 데이터 생성 모델을 만든 다음 데이터와 일치하는 방식으로 데이터를 사용하십시오.

당신이하려는 것은 가능한 한 많은 기능을 추가하여 "매우 적합"하게하는 것입니다. http://en.wikipedia.org/wiki/List_of_mathematical_functions 함수를 추가하지 않는 이유는 무엇 입니까? 아마도 Ackermann 함수와 같이 많은 것들이 말도 안된다고 생각할 것입니다. 왜 말도 안되는거야? 추가 한 입력의 각 기능은 기본적으로 관계에 대한 가설입니다. 가 적용된 Euler의 강인함 수의 함수 라고 상상하기는 어렵습니다 . 이것이 내가 를 함수로 만드는 것에 반대하는 이유 입니다. 이 가설을 설명하지 않으면 나에게도 우스운 것처럼 보입니다.x y 로그 xyxylogx

입력의 기능을 지속적으로 추가하여 얻을 수있는 유일한 것은 아마도 과적 합 된 모델 일 것입니다. 실제로 유효하게 검증 된 모델을 원한다면, 좋은 추측을하고 모델을 학습하기에 충분한 데이터가 있어야합니다. 더 많은 추측을할수록 더 많은 매개 변수를 가질수록 더 많은 데이터가 필요합니다.


로그를 플롯하고 싶지 않습니다. 회귀 분석에서 변수 X를 사용하고 싶습니다. 가장 적합하려면 로그와 다항식을 포함해야한다고 가정합니다. 이를 위해 로그 값이 필요합니다.
rnso

@rnso : 목표 값이 이러한 입력의 곱이라고 상상하고 있습니까? 입력 값이 0 일 때 목표 값이 입력 값과 곱하여 관련되는 것은 매우 이상합니다.
Neil G

제품이 아니라 합계입니다. 나는 공식을 사용하려고합니다 : lm (Y ~ X + log (X))
rnso

1
@rnso : 예,하지만이 로그 용어를 추가하는 것은 라고 말하는 것과 같습니다. 왜 가 0 일 수 있다고 생각 하십니까? x ieyxiwixi
Neil G

1
로그 용어를 생략합니다. 당신은 이미 로그 항의 계수를 가지고 있습니다 : 숫자가 아님
Caleth

3

데이터에 대한 세부 사항은 거의없고 6 개의 관측치만으로는 말하기가 어렵지만 문제는 X가 아닌 Y 변수 (0과 1 사이로 제한됨)에있을 수 있습니다. 2- 모수를 사용하여 다음 방법을 살펴보십시오. drc 패키지의 log-logistic 기능 :

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))))

여기에 이미지 설명을 입력하십시오


1

y 대 x의 도표를 보면, 함수형은 매우 높은 알파를 가진 y = 1-exp (-alpha x) 인 것으로 보입니다. 이것은 단계 함수에 가깝지만이 함수는 아니며이 데이터에 적합하려면 많은 다항식이 필요합니다 (exp (x) = 1 + x + x ^ 2 / 2! +. + x ^ n / n! + ...). 용어를 재정렬하면 exp (-alpha x) = 1-y가됩니다. 지금 로그를 가져 오면 -alpha x = log (1-y)가됩니다. 새 변수 z = log (1-y)를 정의하고 데이터에 가장 적합한 알파를 찾으려고 시도 할 수 있습니다. 여전히 y = 1을 처리하는 방법에 대한 문제가 있습니다. 문제의 맥락을 알지 못하지만 x는 1에 가까워 질 때 y가 무증상 1에 접근하지만 y는 실제로 1에 도달하지 않는다고 생각합니다.

이것에 대해 좀 더 생각해 보면 실제로 데이터가 Weibull 분포 y = 1-exp (-alpha x ^ beta)인지 궁금합니다. 용어를 재정렬하면 베타 log (x) = log (-log (1-y))-logalpha가 표시되고 OLS를 사용하여 알파 및 베타를 얻을 수 있습니다. y = 1 처리 문제는 남아 있습니다.


감사. 좋은 분석.
rnso
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.