Làm thế nào để tránh thuật ngữ log (0) trong hồi quy


10

Tôi có các vectơ X và Y đơn giản sau:

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

nhập mô tả hình ảnh ở đây

Tôi muốn thực hiện hồi quy bằng nhật ký của X. Để tránh nhận nhật ký (0), tôi cố gắng đặt +1 hoặc +0.1 hoặc +0.00001 hoặc +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

Đầu ra là khác nhau trong mọi trường hợp. Giá trị chính xác cần đặt để tránh log (0) trong hồi quy là gì? Phương pháp chính xác cho các tình huống như vậy là gì.

Chỉnh sửa: mục đích chính của tôi là cải thiện dự đoán mô hình hồi quy bằng cách thêm thuật ngữ nhật ký, tức là: lm (Y ~ X + log (X))


4
Không ai trong số họ là , tất cả họ đều là , vì vậy mọi khái niệm về 'tính chính xác' đều vô nghĩa. Không ai trong số họ là 'chính xác' cho . Để lựa chọn giữa chúng, bạn phải nói thêm về những tính chất bạn muốn và những tính chất bạn chuẩn bị từ bỏ. Bạn thực sự đang cố gắng để đạt được điều gì? log ( x + c ) log ( x )log(x)log(x+c)log(x)
Glen_b -Reinstate Monica

Tôi muốn cải thiện dự đoán mô hình hồi quy bằng cách sử dụng lm (Y ~ X + log (X)). Đối với điều này, đề xuất của bạn là gì để tránh đăng nhập (0)?
rnso

5
Bạn không thể nhật ký (X) ở đó; bạn đã thiết lập điều đó Vì vậy, những gì bạn đang thực sự cố gắng để đạt được? Nếu bạn không thể lấy nhật ký (0), bạn muốn thoát khỏi hồi quy nào? Tại sao bạn muốn đăng nhập (X) trong đó? Bạn có thể chịu đựng những gì thay vì có log (X) trong đó?
Glen_b -Reinstate Monica

3
Khoa học ở đây là gì? Nó nên là một hướng dẫn để làm gì.
Nick Cox

1
Tôi không thấy bất cứ điều gì giải quyết các vấn đề mà tôi nêu ra (hoặc quan trọng hơn là Nick Cox nêu ra), cũng không phải bất cứ điều gì sẽ hướng dẫn một câu trả lời cho câu hỏi ở đây.
Glen_b -Reinstate Monica

Câu trả lời:


8

Hằng số càng nhỏ là bạn thêm càng lớn thì ngoại lệ bạn sẽ tạo: nhập mô tả hình ảnh ở đây

Vì vậy, thật khó để biện minh cho bất kỳ hằng số ở đây. Bạn có thể xem xét một phép biến đổi không có vấn đề với 0, ví dụ: đa thức bậc ba.


X + x ^ 2 + x ^ 3 có tương đương với log (x) không? Xin vui lòng xem ý kiến ​​của tôi trong câu trả lời khác cho lý do tại sao tôi đang cố gắng sử dụng các giá trị nhật ký.
rnso

2
Chúng không tương đương nhưng thay thế.
Maarten Buis

10

Tại sao bạn muốn vẽ biểu đồ logarit? Điều gì sai với âm mưu các biến như chúng là?

Một lý do để làm việc với các bản ghi là khi một phân phối tạo giả định là log-normal, chẳng hạn.

Một cách khác là các số biểu thị các tham số tỷ lệ hoặc được sử dụng theo cấp số nhân, trong trường hợp không gian mà chúng nằm là logarit tự nhiên (với cùng lý do Jeffreys trước biến quy mô là logarit).

Cả hai điều này đều không đúng. Tôi nghĩ rằng câu trả lời đúng ở đây là không làm điều đó. Trước tiên, hãy đưa ra một mô hình tạo dữ liệu và sau đó sử dụng dữ liệu của bạn theo cách phù hợp với điều đó.

Nghe có vẻ như những gì bạn đang cố gắng làm là thêm càng nhiều chức năng của đầu vào càng tốt để bạn có được "sự phù hợp tuyệt vời". Tại sao bạn không thêm bất kỳ chức năng nào trong số này: http://en.wikipedia.org/wiki/List_of_mathologists_fifts ? Ồ, bạn có thể nghĩ rằng nhiều trong số đó là vô lý, như chức năng Ackermann. Tại sao họ vô lý? Mỗi chức năng của đầu vào bạn thêm về cơ bản là giả thuyết về mối quan hệ của bạn. Thật khó để một trong hai chúng ta có thể tưởng tượng rằng là một hàm của hàm toàn phần của Euler được áp dụng cho . Đây là lý do tại sao tôi chống lại là một chức năng của . Nó có vẻ vô lý với tôi trừ khi bạn giải thích giả thuyết này cho tôi.x y log xyxylogx

Có lẽ điều duy nhất bạn sẽ nhận được bằng cách liên tục thêm các chức năng của đầu vào là một mô hình quá mức. Nếu bạn muốn một mô hình thực sự xác nhận tốt, bạn cần dự đoán tốt và có đủ dữ liệu để tìm hiểu một mô hình. Bạn càng đoán nhiều, bạn càng có nhiều tham số, bạn càng cần nhiều dữ liệu.


Tôi không muốn vẽ nhật ký. Tôi muốn sử dụng biến X trong hồi quy. Để có được sự phù hợp nhất, tôi cho rằng chúng ta nên bao gồm log và cả đa thức. Cho rằng tôi cần các giá trị đăng nhập.
rnso

@rnso: Vì vậy, bạn đang tưởng tượng rằng giá trị mục tiêu là sản phẩm của những đầu vào này? Thật kỳ lạ khi giá trị đích liên quan đến các đầu vào nhân lên khi đầu vào có thể bằng không.
Neil G

Không phải sản phẩm mà là tổng hợp. Tôi đang cố gắng sử dụng công thức: lm (Y ~ X + log (X))
rnso

1
@rnso: có, nhưng thêm các thuật ngữ nhật ký đó giống như nói rằng , và tại sao bạn lại nghĩ rằng nếu có thể bằng 0? x ieyxiwixi
Neil G

1
bạn bỏ qua thuật ngữ đăng nhập. Bạn đã có hệ số của thuật ngữ nhật ký: Không phải là Số
Caleth

3

Thật khó để nói với rất ít chi tiết về dữ liệu của bạn và chỉ có sáu quan sát, nhưng có lẽ vấn đề của bạn nằm ở biến Y của bạn (giới hạn giữa 0 và 1) chứ không phải trong X. Hãy xem cách tiếp cận sau bằng cách sử dụng tham số hai chức năng log-logistic từ gói 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))))

nhập mô tả hình ảnh ở đây


1

Nhìn vào biểu đồ của y vs x, dạng hàm có vẻ là y = 1 - exp (-alpha x), với chỉ số alpha rất cao. Điều này gần với nhưng không hoàn toàn là một hàm bước và bạn sẽ cần một số lượng lớn các đa thức để phù hợp với dữ liệu này (nghĩ theo thuật ngữ exp (x) = 1 + x + x ^ 2/2! +. + X ^ n / n! + ...). Sắp xếp lại các điều khoản, chúng tôi nhận được exp (-alpha x) = 1-y. Nếu bạn lấy nhật ký ngay bây giờ, điều này sẽ cho -alpha x = log (1-y). Bạn có thể xác định một biến mới z = log (1-y) và cố gắng tìm alpha phù hợp nhất với dữ liệu. Bạn vẫn có vấn đề về cách xử lý y = 1. Tôi không biết bối cảnh của vấn đề của bạn nhưng ấn tượng của tôi là bạn sẽ phải suy nghĩ về cách tiếp cận 1 không có triệu chứng khi x tiếp cận 1 và y thực sự không bao giờ đạt đến 1.

Nghĩ về điều này thêm nữa, tôi tự hỏi liệu dữ liệu có thực sự từ phân phối Weibull y = 1 - exp (-alpha x ^ beta) không. Sắp xếp lại các thuật ngữ, chúng tôi nhận được bản ghi beta (x) = log (-log (1-y)) - log (alpha) và chúng tôi có thể sử dụng OLS để nhận alpha và beta. Vấn đề xử lý y = 1 vẫn còn.


Cảm ơn. Phân tích tốt.
rnso
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.