Ich habe folgende einfache X- und Y-Vektoren:
> 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)
Ich möchte eine Regression mit dem Protokoll von X durchführen. Um zu vermeiden, dass das Protokoll (0) angezeigt wird, versuche ich, +1 oder +0.1 oder +0.00001 oder +0.000000000000001 zu setzen:
> 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
Die Ausgabe ist in allen Fällen unterschiedlich. Was ist der richtige Wert, um log (0) in der Regression zu vermeiden? Was ist die richtige Methode für solche Situationen.
Bearbeiten: Mein Hauptziel ist es, die Vorhersage des Regressionsmodells durch Hinzufügen eines logarithmischen Terms zu verbessern, dh: lm (Y ~ X + log (X))
r
regression
lognormal
rnso
quelle
quelle
Antworten:
Je kleiner die Konstante ist, die Sie hinzufügen, desto größer ist der Ausreißer, den Sie erstellen:
Daher ist es schwierig, hier eine Konstante zu rechtfertigen. Sie könnten eine Transformation in Betracht ziehen, die kein Problem mit Nullen hat, beispielsweise ein Polynom dritter Ordnung.
quelle
Warum möchten Sie Logarithmen zeichnen? Was ist falsch daran, die Variablen so zu zeichnen, wie sie sind?
Ein Grund für die Arbeit mit Protokollen besteht beispielsweise darin, dass eine angenommene generierende Verteilung logarithmisch normal ist.
Ein anderer wäre, dass die Zahlen Skalenparameter darstellen oder multiplikativ verwendet werden. In diesem Fall ist der Raum, in dem sie liegen, natürlich logarithmisch (aus demselben Grund, aus dem Jeffreys vor einer Skalenvariablen logarithmisch ist).
Beides ist nicht der Fall. Ich denke, die richtige Antwort hier ist, es nicht zu tun. Überlegen Sie sich zunächst ein datengenerierendes Modell und verwenden Sie Ihre Daten dann in einer Weise, die mit dieser übereinstimmt.
Es hört sich so an, als würden Sie versuchen, so viele Funktionen der Eingänge wie möglich hinzuzufügen, damit Sie eine "gute Passform" erhalten. Warum fügen Sie keine der folgenden Funktionen hinzu: http://en.wikipedia.org/wiki/List_of_mathematical_functions ? Oh, Sie denken wahrscheinlich, dass viele davon lächerlich sind, wie die Ackermann-Funktion. Warum sind sie lächerlich? Jede Funktion der Eingabe, die Sie hinzufügen, ist im Wesentlichen Ihre Hypothese einer Beziehung. Es fällt uns beiden schwer, uns vorzustellen, dass eine Funktion von Eulers Totientenfunktion ist, die auf angewendet wird . Deshalb bin ich dagegen, dass eine Funktion von . Es erscheint mir ebenso lächerlich, wenn Sie mir diese Hypothese nicht erklären.x y log xy x y logx
Wahrscheinlich ist das einzige, was Sie durch kontinuierliches Hinzufügen von Funktionen der Eingänge erhalten, ein überpassendes Modell. Wenn Sie ein Modell wünschen, das tatsächlich gut validiert werden kann, müssen Sie gute Vermutungen anstellen und über genügend Daten verfügen, um ein Modell zu lernen. Je mehr Vermutungen Sie anstellen, je mehr Parameter Sie haben, desto mehr Daten benötigen Sie.
quelle
Es ist schwer mit so wenigen Details zu Ihren Daten und nur sechs Beobachtungen zu sagen, aber vielleicht liegt Ihr Problem in Ihrer Y-Variablen (zwischen Null und Eins begrenzt) und nicht in Ihrem X. Sehen Sie sich den folgenden Ansatz mit den zwei Parametern an log-logistische Funktion aus dem DRC- Paket:
quelle