回帰で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)

ここに画像の説明を入力してください

Xのlogを使用して回帰を実行したいと思います。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)log(x+c)log(x)

lm(Y〜X + log(X))を使用して回帰モデルの予測を改善したい。このため、log(0)を回避するための推奨事項は何ですか?
rnso

5
そこでlog(X)を持つことはできません。あなたはすでにそれを確立しました。では、実際に何を達成しようとしているのですか?あなたが考えることができないログ(0)を取る、何を回帰のうち取得したいですか?なぜそこにlog(X)が欲しいのですか?そこでlog(X)を使用する代わりに、何を許容できますか?
Glen_b-2015

3
ここの科学は何ですか?それは何をすべきかのガイドになるはずです。
Nick Cox

1
rnso私が提起する問題(またはもっと重要なこととして、Nick Coxが提起した問題)に対処するものは何も見当たらず、実際、ここでの質問への回答を導くものは何もありません。
Glen_b-2015

回答:


8

定数が小さいほど、追加する外れ値が大きくなるため、作成します。 ここに画像の説明を入力してください

したがって、ここで定数を正当化することは困難です。たとえば、3次多項式など、0で問題のない変換を検討する場合があります。


x + x ^ 2 + x ^ 3はlog(x)と同等ですか?ログ値を使用しようとしている理由については、他の回答のコメントを参照してください。
rnso

2
それらは同等ではなく代替です。
Maarten Buis

10

なぜ対数をプロットするのですか?変数をそのままプロットすることの何が問題になっていますか?

ログを使用する理由の1つは、想定される生成分布が対数正規である場合などです。

もう1つは、数値がスケールパラメータを表すか、または乗法的に使用されることです。その場合、それらが存在する空間は自然対数です(スケール変数の前のジェフリーズが対数であるのと同じ理由で)。

これらはどちらも当てはまりません。ここでの正しい答えはそれをしないことだと思います。最初にデータ生成モデルを考え出し、次にそれと一致する方法でデータを使用します。

yxylogx

おそらく、入力の関数を継続的に追加することによって得られる唯一のものは、過剰適合モデルです。実際に適切に検証されるモデルが必要な場合は、適切な推測を行い、モデルを学習するのに十分なデータが必要です。推測が多ければ多いほど、必要なパラメーターが多くなり、必要なデータも多くなります。


ログをプロットしたくない。変数Xを回帰で使用したい。最適を得るには、対数と多項式も含める必要があると思います。そのためにログ値が必要です。
rnso

@rnso:では、ターゲット値がこれらの入力の積であると想像していますか?入力がゼロになる可能性があるときに、ターゲット値が入力に乗法的に関連するのは非常に奇妙です。
Neil G

製品ではなく合計。私は数式を使用しようとしています:lm(
Y〜X

1
eyxiwixi

1
ログ用語を省略します。あなたはすでに

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に到達しないことを考えると私の印象です。

これについてもう少し考えると、データが実際にはワイブル分布y = 1-exp(-alpha x ^ beta)からのものであるのかと思います。用語を並べ替えると、ベータlog(x)= log(-log(1-y))-log(alpha)が得られ、OLSを使用してアルファとベータを得ることができます。y = 1の処理の問題は残っています。


ありがとう。良い分析。
rnso
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.