У меня есть следующие простые векторы 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. Чтобы избежать получения журнала (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))
r
regression
lognormal
rnso
источник
источник
Ответы:
Чем меньше константа, которую вы добавляете, тем больше выброс, который вы создадите:
Так что здесь трудно обосновать какую-либо константу. Вы можете рассмотреть преобразование, которое не имеет проблем с 0, например, многочлен третьего порядка.
источник
Почему вы хотите построить логарифмы? Что плохого в построении переменных как есть?
Одна из причин работы с журналами, например, когда предполагаемое генерирующее распределение является нормальным для журнала.
Другой способ состоит в том, что числа представляют параметры масштаба или используются мультипликативно, и в этом случае пространство, в котором они лежат, является естественно логарифмическим (по той же причине, что предшествующее Джеффрису значение переменной масштаба является логарифмическим).
Ни то, ни другое. Я думаю, что правильный ответ здесь не делай этого. Сначала создайте модель генерации данных, а затем используйте ваши данные в соответствии с этим.
Похоже, то, что вы пытаетесь сделать, - это добавить как можно больше функций входов, чтобы получить «идеальное соответствие». Почему бы вам не добавить ни одну из этих функций: http://en.wikipedia.org/wiki/List_of_matumatic_functions ? О, вы, наверное, думаете, что многие из них смешны, например, функция Аккермана. Почему они смешные? Каждая функция ввода, которую вы добавляете, является вашей гипотезой об отношениях. Каждому из нас трудно представить, что - это функция Сложного Эйлера, примененная к . Вот почему я против того, чтобы была функцией . Мне кажется одинаково смешным, если вы не объясните мне эту гипотезу.х у лог хy x y logx
Вероятно, единственное, что вы собираетесь получить, постоянно добавляя функции входов, - это переопределенная модель. Если вы хотите модель, которая на самом деле хорошо проверяет, вы должны сделать хорошие предположения и иметь достаточно данных, чтобы изучить модель. Чем больше предположений вы сделаете, тем больше у вас будет параметров, тем больше данных вам потребуется.
источник
Трудно сказать с таким небольшим количеством деталей о ваших данных и только шестью наблюдениями, но, возможно, ваша проблема заключается в вашей переменной Y (ограниченной между нулем и единицей), а не в вашем X. Взгляните на следующий подход, используя двухпараметрический Логистическая функция из пакета drc :
источник
Если посмотреть на график зависимости y от x, то функциональная форма выглядит так: y = 1 - exp (-альфа x) с очень высокой альфа. Это близко, но не совсем пошаговая функция, и вам понадобится большое количество полиномов, чтобы соответствовать этим данным (подумайте в терминах exp (x) = 1 + x + x ^ 2/2! +. + X ^ n / п! + ...). Переставляя члены, мы получаем exp (-alpha x) = 1-y. Если вы сейчас берете логи, это дает -alpha x = log (1-y). Вы можете определить новую переменную z = log (1-y) и попытаться найти альфу, которая лучше всего соответствует данным. У вас все еще есть вопрос, как справиться с y = 1. Я не знаю контекста вашей проблемы, но у меня сложилось впечатление, что вам придется думать о том, что y асимптотически приближается к 1, когда x приближается к 1, но y никогда не достигает 1.
Подумав об этом еще немного, мне интересно, действительно ли данные получены из распределения Вейбулла y = 1 - exp (-alpha x ^ beta). Переставляя термины, мы получаем beta log (x) = log (-log (1-y)) - log (альфа), и мы можем использовать OLS для получения альфы и беты. Проблема обработки y = 1 остается.
источник