प्रतिगमन में लॉग (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)

यहां छवि विवरण दर्ज करें

मैं एक्स के लॉग का उपयोग करके प्रतिगमन करना चाहता हूं। लॉग (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)log(x+c)log(x)

मैं lm (Y ~ X + log (X)) का उपयोग करके प्रतिगमन मॉडल की भविष्यवाणी में सुधार करना चाहता हूं। इसके लिए लॉग (0) से बचने के लिए आपकी सिफारिश क्या होगी?
rnso

5
आप नहीं कर सकते है लॉग (एक्स) वहाँ; आपने पहले ही स्थापित कर लिया है। तो आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं? यह देखते हुए कि आप लॉग (0) नहीं ले सकते हैं , आप प्रतिगमन से बाहर क्या करना चाहते हैं? आप वहां लॉग (X) क्यों चाहते हैं? वहां लॉग (X) होने के बजाय आप क्या सहन कर सकते हैं?
Glen_b -Reinstate मोनिका

3
यहाँ विज्ञान क्या है? यह एक गाइड होना चाहिए कि क्या करना है।
निक कॉक्स

1
rnso मुझे वहां कुछ भी नहीं दिखाई देता है जो उन मुद्दों को संबोधित करता है जो मैं उठाता हूं (या अधिक महत्वपूर्ण रूप से, एक निक कॉक्स ने उठाया), और न ही वास्तव में ऐसा कुछ भी जो यहां प्रश्न के उत्तर का मार्गदर्शन करेगा।
Glen_b -Reinstate मोनिका

जवाबों:


8

आप जितना छोटा स्थिरांक जोड़ेंगे, उतना ही बड़ा यह होगा कि आप बनाएंगे: यहां छवि विवरण दर्ज करें

इसलिए यहां किसी भी स्थिरांक को सही ठहराना कठिन है। आप एक परिवर्तन पर विचार कर सकते हैं जिसमें 0 के साथ कोई समस्या नहीं है, उदाहरण के लिए एक तीसरा क्रम बहुपद।


क्या x + x ^ 2 + x ^ 3 लॉग (x) के बराबर है? कृपया मेरी टिप्पणियों को अन्य उत्तर में देखें कि मैं लॉग मानों का उपयोग करने का प्रयास क्यों कर रहा हूं।
rnso

2
वे समकक्ष नहीं बल्कि विकल्प हैं।
मार्टेन बुइस

10

आप लॉगरिदम की साजिश क्यों करना चाहते हैं? चरों की साजिश रचने में गलत क्या है?

लॉग के साथ काम करने का एक कारण यह है कि जब माना गया वितरण वितरण लॉग-सामान्य है, उदाहरण के लिए।

एक और यह होगा कि संख्या पैमाने के मापदंडों का प्रतिनिधित्व करती है या गुणक का उपयोग किया जाता है, जिस स्थिति में वे झूठ बोलते हैं वह स्वाभाविक रूप से लघुगणक है (एक ही कारण से कि जेफरी एक पैमाने चर से पहले लघुगणकीय है)।

इनमें से कोई भी मामला नहीं है। मुझे लगता है कि यहां सही उत्तर नहीं है। पहले डेटा-जनरेट करने वाले मॉडल के साथ आते हैं, और फिर अपने डेटा का उपयोग उस तरीके से करते हैं जो उसके अनुरूप है।

yxylogx

संभवतः केवल एक चीज जो आप लगातार इनपुट के कार्यों को जोड़कर प्राप्त करने जा रहे हैं, वह एक ओवरफेड मॉडल है। यदि आप ऐसा मॉडल चाहते हैं जो वास्तव में अच्छी तरह से मान्य हो, तो आपको अच्छे अनुमान लगाने की जरूरत है और एक मॉडल को सीखने के लिए पर्याप्त डेटा होना चाहिए। जितना अधिक आप अनुमान लगाते हैं, आपके पास जितने अधिक पैरामीटर होंगे, उतने अधिक डेटा की आवश्यकता होगी।


मैं लॉग प्लॉट नहीं करना चाहता। मैं प्रतिगमन में चर X का उपयोग करना चाहता हूं। सबसे अच्छा फिट होने के लिए, मुझे लगता है कि हमें लॉग और पॉलीओनियल को भी शामिल करना चाहिए। उसके लिए मुझे लॉग वैल्यू चाहिए।
rnso

@rnso: तो आप कल्पना कर रहे हैं कि लक्ष्य मान इन निविष्टियों का एक उत्पाद है? जब इनपुट शून्य हो सकता है तो यह लक्ष्य मान के लिए इनपुट से संबंधित होने के लिए बहुत अजीब है।
नील जी

उत्पाद नहीं बल्कि योग। मैं सूत्र का उपयोग करने की कोशिश कर रहा हूं: lm (Y ~ X + log (X))
rnso

1
eyxiwixi

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 बनाम x के कथानक को देखते हुए, कार्यात्मक रूप y = 1 - exp (-alpha x) प्रतीत होता है, एक बहुत ही उच्च अल्फा के साथ। यह काफी करीब है, लेकिन यह एक चरणीय कार्य नहीं है और इस डेटा को फिट करने के लिए आपको बड़ी संख्या में बहुपद की आवश्यकता होगी (एक्सप (x) = 1 + x + x ^ 2/2! + + + X ^ n / के संदर्भ में सोचें) n! + ...)। शब्दों को पुनर्व्यवस्थित करते हुए, हम exp (-alpha x) = 1-y प्राप्त करते हैं। यदि आप अब लॉग लेते हैं, तो यह -alpha x = log (1-y) देता है। आप एक नया चर z = लॉग (1-y) परिभाषित कर सकते हैं और उस अल्फ़ा को खोजने का प्रयास कर सकते हैं जो डेटा को सबसे अच्छी तरह फिट करता है। आपके पास अभी भी समस्या है कि आप y = 1. को कैसे संभाल सकते हैं। मुझे आपकी समस्या का संदर्भ नहीं पता है, लेकिन मेरी धारणा यह है कि आपको y asymptotically 1 दृष्टिकोण के रूप में x दृष्टिकोण 1 के बारे में सोचना होगा और y वास्तव में कभी 1 तक नहीं पहुंचता है।

इसके बारे में कुछ और सोचकर, मुझे आश्चर्य होता है कि क्या डेटा वास्तव में एक वेइबल वितरण y = 1 - ऍक्स्प (-ल्पा x ^ बीटा) से है। शब्दों को पुनर्व्यवस्थित करने पर, हमें बीटा लॉग (x) = लॉग (-log (1-y)) - लॉग (अल्फा) मिलता है और हम अल्फा और बीटा प्राप्त करने के लिए OLS का उपयोग कर सकते हैं। Y = 1 से निपटने का मुद्दा बना हुआ है।


धन्यवाद। अच्छा विश्लेषण।
rnso
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.