วิธีหลีกเลี่ยงคำ 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 เพื่อหลีกเลี่ยงการบันทึก (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
ไม่มีของพวกเขาคือ , พวกเขาทั้งหมด , ดังนั้นความคิดใด ๆ เกี่ยวกับ 'ความถูกต้อง' มีเรื่องไร้สาระ ไม่มีของพวกเขา 'ถูกต้อง' สำหรับ(x) ในการเลือกระหว่างพวกเขาคุณจะต้องพูดเพิ่มเติมเกี่ยวกับคุณสมบัติที่คุณต้องการและคุณสมบัติที่คุณเตรียมไว้ให้ คุณพยายามทำอะไรให้สำเร็จ บันทึก( x + c ) บันทึก( x )เข้าสู่ระบบ(x)เข้าสู่ระบบ(x+)เข้าสู่ระบบ(x)
Glen_b -Reinstate Monica

ฉันต้องการปรับปรุงการทำนายแบบจำลองการถดถอยโดยใช้ lm (Y ~ X + log (X)) สำหรับสิ่งนี้คำแนะนำของคุณที่จะหลีกเลี่ยงการบันทึก (0) คืออะไร?
rnso

5
คุณไม่สามารถมีการเข้าสู่ระบบ (X) มี; คุณยอมรับแล้ว ดังนั้นสิ่งที่คุณพยายามที่จะบรรลุจริง? เนื่องจากคุณไม่สามารถใช้บันทึก (0) คุณต้องการออกจากการถดถอยอย่างไร ทำไมคุณต้องการบันทึก (X) ในนั้น คุณทนอะไรได้แทนที่จะมี log (X) ในนั้น
Glen_b -Reinstate Monica

3
วิทยาศาสตร์คืออะไรที่นี่? ควรเป็นแนวทางในการทำ
Nick Cox

1
rnso ฉันไม่เห็นสิ่งใดที่มีที่อยู่ในประเด็นที่ฉันยกขึ้น (หรือที่สำคัญกว่านั้นคือนิคคอคส์ที่เลี้ยงดู) หรืออะไรก็ตามที่จะเป็นแนวทางในการตอบคำถามที่นี่
Glen_b -Reinstate Monica

คำตอบ:


8

ค่าคงที่ที่น้อยลงคือคุณเพิ่มค่าที่ใหญ่กว่าที่คุณจะสร้าง: ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นจึงเป็นการยากที่จะพิสูจน์ค่าคงที่ที่นี่ คุณอาจพิจารณาการแปลงที่ไม่มีปัญหากับ 0 ตัวอย่างเช่นพหุนามลำดับที่สาม


x + x ^ 2 + x ^ 3 เทียบเท่ากับ log (x) หรือไม่ โปรดดูความคิดเห็นของฉันในคำตอบอื่น ๆ สำหรับสาเหตุที่ฉันพยายามใช้ค่าบันทึก
rnso

2
พวกเขาจะไม่เทียบเท่า แต่ทางเลือก
Maarten Buis

10

ทำไมคุณต้องการลงจุดลอการิทึม มีอะไรผิดปกติกับการวางแผนตัวแปรตามที่เป็น?

เหตุผลหนึ่งในการทำงานกับบันทึกคือเมื่อมีการสมมติว่าการกระจายสร้างเป็นบันทึกปกติตัวอย่างเช่น

อีกประการหนึ่งคือตัวเลขแสดงถึงพารามิเตอร์ของสเกลหรือมีการใช้คูณในกรณีที่พื้นที่ที่พวกเขานอนนั้นเป็นลอการิทึมตามธรรมชาติ

ทั้งสองกรณีนี้ ฉันคิดว่าคำตอบที่ถูกต้องที่นี่คือไม่ทำ ก่อนอื่นมาพร้อมกับรูปแบบการสร้างข้อมูลแล้วใช้ข้อมูลของคุณในลักษณะที่สอดคล้องกับที่

YxYเข้าสู่ระบบx

อาจเป็นสิ่งเดียวที่คุณจะได้รับจากการเพิ่มฟังก์ชั่นของอินพุตอย่างต่อเนื่องคือโมเดลที่มีการติดตั้งมากเกินไป หากคุณต้องการแบบจำลองที่ใช้งานได้จริงคุณต้องทำการเดาและมีข้อมูลเพียงพอที่จะเรียนรู้แบบจำลอง ยิ่งคุณคาดเดาได้มากเท่าไหร่คุณก็ยิ่งมีพารามิเตอร์มากเท่านั้นและยิ่งต้องการข้อมูลมากขึ้นเท่านั้น


ฉันไม่ต้องการลงจุดบันทึก ฉันต้องการใช้ตัวแปร X ในการถดถอย เพื่อให้ได้ขนาดที่เหมาะสมที่สุดฉันคิดว่าเราควรรวม log และ polynomials ด้วย เพื่อที่ฉันต้องการค่าบันทึก
rnso

@rnso: ดังนั้นคุณจินตนาการว่ามูลค่าเป้าหมายเป็นผลิตภัณฑ์ของอินพุตเหล่านี้หรือไม่ มันแปลกมากสำหรับค่าเป้าหมายที่เกี่ยวข้องกับอินพุตคูณด้วยอินพุตอาจเป็นศูนย์
Neil G

ไม่ใช่ผลิตภัณฑ์ แต่เป็นผลรวม ฉันพยายามที่จะใช้สูตร: LM (Y ~ X + เข้าสู่ระบบ (X))
rnso

1
อีY~ΠxผมWผมxผม

1
คุณละเว้นคำบันทึก คุณมีสัมประสิทธิ์ของบันทึกการใช้งานอยู่แล้ว: ไม่ใช่ตัวเลข
Caleth

3

เป็นการยากที่จะพูดด้วยรายละเอียดเล็ก ๆ น้อย ๆ เกี่ยวกับข้อมูลของคุณและการสังเกตเพียงหกครั้ง แต่ปัญหาของคุณอาจอยู่ในตัวแปร Y ของคุณ (มีค่าระหว่างศูนย์ถึงหนึ่ง) และไม่ใช่ใน X ของคุณลองดูวิธีต่อไปนี้โดยใช้พารามิเตอร์สองตัว ฟังก์ชั่น log-logistic จากแพ็คเกจ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 / n! + ... ) การจัดเรียงคำใหม่เราจะได้รับประสบการณ์ (-alpha x) = 1-y หากคุณใช้บันทึกตอนนี้สิ่งนี้จะให้ -alpha x = log (1-y) คุณสามารถกำหนดตัวแปรใหม่ z = log (1-y) และลองค้นหาอัลฟาที่เหมาะกับข้อมูลมากที่สุด คุณยังคงมีปัญหาวิธีจัดการกับ y = 1 ฉันไม่ทราบบริบทของปัญหาของคุณ แต่ความประทับใจของฉันคือคุณจะต้องคิดถึง y asymptotically ใกล้ 1 เป็น x เข้าหา 1 แต่ y ไม่ถึง 1 จริง ๆ

ลองคิดดูอีกครั้งฉันสงสัยว่าข้อมูลนั้นมาจากการแจกแจงแบบ Weibull y = 1 - exp (-alpha x ^ beta) หรือไม่ การจัดเรียงคำศัพท์ใหม่เราจะได้รับการบันทึกเบต้า (x) = บันทึก (-log (1-y)) - บันทึก (อัลฟ่า) และเราสามารถใช้ OLS เพื่อรับอัลฟ่าและเบต้า ปัญหาของการจัดการ y = 1 ยังคงอยู่


ขอบคุณ การวิเคราะห์ที่ดี
rnso
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.