Як уникнути терміну журналу (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. Щоб уникнути отримання журналу (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

Вихід у всіх випадках різний. Яке правильне значення слід поставити, щоб уникнути журналу (0) в регресії? Який правильний метод для таких ситуацій.

Редагувати: моя головна мета - покращити прогнозування регресійної моделі шляхом додавання терміна журналу, тобто: lm (Y ~ X + log (X))


4
Жоден з них не є , вони всі , тому будь-яке поняття "правильність" є нісенітницею. Жоден з них не є "правильним" для . Щоб вибрати між ними, вам доведеться сказати більше про те, які властивості ви хочете та якими властивостями ви готові відмовитись. Чого ви насправді намагаєтесь досягти? log ( x + c ) log ( x )журнал(х)журнал(х+c)журнал(х)
Glen_b -Встановіть Моніку

Я хочу покращити прогнозування регресійної моделі за допомогою lm (Y ~ X + log (X)). Для цього, що б ви рекомендували уникати журналу (0)?
rnso

5
Ви не можете мати журнал (X) там; Ви це вже встановили. То чого ви насправді намагаєтесь досягти? Оскільки ви не можете прийняти журнал (0), що ви хочете вийти з регресії? Чому ви хочете там увійти (X)? Що ти можеш терпіти замість того, щоб там (X) входив?
Glen_b -Встановіть Моніку

3
Яка тут наука? Це має бути керівництвом щодо того, що робити.
Нік Кокс

1
rnso я там не бачу нічого, що стосується питань, які я піднімаю (або, що ще важливіше, того, що піднімав Нік Кокс), а також нічого, що могло б надати відповідь на питання тут.
Glen_b -Встановіть Моніку

Відповіді:


8

Чим менша константа полягає в тому, що ви додаєте більше, тим більше ви створюєте: введіть тут опис зображення

Так що тут важко виправдати будь-яку константу. Ви можете розглянути перетворення, яке не має проблем з 0, наприклад, поліном третього порядку.


Чи х + х ^ 2 + х ^ 3 еквівалентно log (x)? Будь ласка, дивіться мої коментарі в іншій відповіді, чому я намагаюся використовувати значення журналу.
rnso

2
Вони не рівнозначні, але альтернативні.
Маартен Буїс

10

Чому ви хочете побудувати логарифми? Що поганого в побудові графічних змінних?

Однією з причин роботи з журналами є, наприклад, коли передбачуваний генеруючий розподіл є нормальним для журналу, наприклад.

Іншим було б те, що числа представляють параметри масштабу або використовуються мультиплікативно; в цьому випадку простір, в якому вони лежать, є природним чином логарифмічним (з тієї ж причини, що Джеффрі перед змінною шкалою є логарифмічною).

Жодне з цих випадків не відбувається. Я думаю, що правильної відповіді тут не робити цього. Спочатку придумайте модель генерування даних, а потім використовуйте свої дані таким чином, що відповідає цьому.

ухужурналх

Напевно, єдине, що ви збираєтеся отримати, постійно додаючи функції входів, - це переоснащена модель. Якщо ви хочете, щоб модель насправді добре перевіряла, вам потрібно добре розгадати і мати достатньо даних, щоб вивчити модель. Чим більше ви здогадуєтесь, тим більше параметрів у вас буде, тим більше даних вам знадобиться.


Я не хочу складати журнали. Я хочу використовувати змінну X в регресії. Для найкращого пристосування я припускаю, що ми повинні включати журнал, а також поліноми. Для цього мені потрібні значення журналу.
rnso

@rnso: Отже, ви уявляєте, що цільове значення є продуктом цих входів? Дуже дивно, що цільове значення мультипликативно пов'язане з входами, коли вхід може дорівнювати нулю.
Ніл Г

Не товар, а сума. Я намагаюся використовувати формулу: lm (Y ~ X + log (X))
rnso

1
еухiшiхi

1
ви пропускаєте термін журналу. У вас уже є коефіцієнт терміна журналу: Не число
Калето

3

Важко сказати, маючи так мало деталей про ваші дані та лише шість спостережень, але, можливо, ваша проблема полягає у вашій змінній Y (обмеженій між нулем та одиницею), а не у вашій X. Погляньте на наступний підхід, використовуючи двопараметричний лого-логістична функція з пакету drc :

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 vs x, функціональна форма видається y = 1 - exp (-alpha 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.

Думаючи про це ще раз, мені цікаво, чи дані насправді з розподілу Weibull y = 1 - exp (-alpha x ^ beta). Переставляючи умови, ми отримуємо бета-лог (x) = log (-log (1-y)) - log (альфа), і ми можемо використовувати OLS для отримання альфа та бета-версії. Проблема обробки y = 1 залишається.


Дякую. Хороший аналіз.
rnso
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.