नकारात्मक मानों को लघुगणक में कैसे बदलें?


12

मैं जानना चाहूंगा कि नकारात्मक मूल्यों को कैसे बदलना है Log(), क्योंकि मेरे पास विषमकोणीय डेटा है। मैंने पढ़ा कि यह सूत्र के साथ काम करता है, Log(x+1)लेकिन यह मेरे डेटाबेस के साथ काम नहीं करता है और मैं परिणाम के रूप में NaN प्राप्त करना जारी रखता हूं। उदाहरण के लिए मुझे यह चेतावनी संदेश मिलता है (मैंने अपना पूरा डेटाबेस नहीं डाला क्योंकि मुझे लगता है कि मेरा एक नकारात्मक मान एक उदाहरण दिखाने के लिए पर्याप्त है):

> log(-1.27+1)
[1] NaN
Warning message:
In log(-1.27 + 1) : NaNs produced
> 

अग्रिम में धन्यवाद

अपडेट करें:

यहाँ मेरे डेटा का एक हिस्टोग्राम है। मैं रासायनिक माप की palaeontological समय श्रृंखला के साथ काम कर रहा हूं, जैसे कि Ca और Zn जैसे चर का अंतर बहुत बड़ा है, फिर मुझे कुछ प्रकार के डेटा मानकीकरण की आवश्यकता है, यही कारण है कि मैं log()फ़ंक्शन का परीक्षण कर रहा हूं । यहाँ छवि विवरण दर्ज करें

यह मेरा कच्चा डेटा है


2
लघुगणक केवल सकारात्मक संख्याओं के लिए परिभाषित किया गया है, और आमतौर पर सकारात्मक डेटा पर एक सांख्यिकीय परिवर्तन के रूप में उपयोग किया जाता है ताकि एक मॉडल इस सकारात्मकता को संरक्षित करे। log(x+1)परिवर्तन के लिए ही परिभाषित किया गया है जाएगा x > -1, के रूप में तो x + 1सकारात्मक है। अपने डेटा को बदलने के लिए लॉग इन करने के लिए अपने कारण को जानना अच्छा होगा।
मैथ्यू ड्र्यू

3
रेंज, माध्य, ऋणात्मक, शून्य और सकारात्मक मानों की आवृत्तियों सहित डेटा के बारे में अधिक बताएं। यह हो सकता है कि लॉग लिंक के साथ एक सामान्यीकृत रैखिक मॉडल डेटा के लिए सबसे अधिक समझ में आता है क्योंकि यह सोचने के लिए उचित है कि माध्य प्रतिक्रिया सकारात्मक है। यह हो सकता है कि आप बिल्कुल भी रूपांतरित न हों।
निक कॉक्स

6
विवरण जोड़ने के लिए धन्यवाद। इस तरह के डेटा के लिए 0 का एक अर्थ (समानता) है जिसका सम्मान किया जाना चाहिए, वास्तव में संरक्षित है । इसके लिए और अन्य कारणों से मैं घन जड़ों का उपयोग करूंगा। व्यवहार में, आपको sign(x) * (abs(x))^(1/3)सॉफ़्टवेयर सिंटैक्स के आधार पर विवरण में कुछ भिन्नता की आवश्यकता होगी । घन जड़ों पर अधिक देखने के लिए जैसे stata-journal.com/sjpdf.html?articlenum=st0223 (esp। Pp.152-3 देखें)। हमने घन चरक का उपयोग एक प्रतिक्रिया चर के विज़ुअलाइज़ेशन में मदद करने के लिए किया जो प्रकृति
निक कॉक्स

8
आप अंतरों के बजाय मूल चर क्यों नहीं बदल रहे हैं ?
whuber

4
आपने गणितीय समस्या हल कर दी। @ व्हिबर के सुझाव या घन जड़ें अभी भी, मुझे लगता है, साथ काम करना आसान होगा, खासकर अगर स्थिर विशुद्ध रूप से अनुभवजन्य है या चर के बीच भिन्न होता है। परिवर्तनों की पसंद के लिए एक अच्छा नियम केवल उन परिवर्तनों का उपयोग करना है जो समान डेटा के लिए काम करेंगे जो आप कल्पना कर सकते हैं। इस प्रकार "काम" के लिए लेकिन विफल हो जाएगा यदि अपने अगले बैच से घिरा था ..x > - 4 - 5log(x+4)x>45
निक कॉक्स

जवाबों:


14

चूंकि लघुगणक केवल सकारात्मक संख्याओं के लिए परिभाषित किया गया है, आप नकारात्मक मानों का लघुगणक नहीं ले सकते। हालाँकि, यदि आप अपने डेटा के लिए बेहतर वितरण प्राप्त करने का लक्ष्य रखते हैं, तो आप निम्नलिखित परिवर्तन लागू कर सकते हैं।

मान लीजिए कि आपने नकारात्मक डेटा तिरछा कर दिया है:

x <- rlnorm(n = 1e2, meanlog = 0, sdlog = 1)
x <- x - 5
plot(density(x))

तब आप अपने डेटा को झूठ में बदलने के लिए पहला परिवर्तन लागू कर सकते हैं :(1,1)

z <- (x - min(x)) / (max(x) - min(x)) * 2 - 1
z <- z[-min(z)]
z <- z[-max(z)]
min(z); max(z)

और अंत में उलटा हाइपरबोलिक स्पर्शरेखा लागू करें:

t <- atanh(z)
plot(density(t))

अब, आपका डेटा लगभग सामान्य रूप से वितरित दिखता है। इसे फिशर ट्रांसफॉर्मेशन भी कहा जाता है।


9
आपने तत्काल गणितीय समस्या हल कर दी। लेकिन मुझे नहीं लगता कि सांख्यिकीय परिणामों की सबसे अधिक संभावना उपभोक्ताओं के बारे में सोचने के लिए आसान इसे खोजने होगा के रूप में एक प्रतिक्रिया पैमाने और मॉडलिंग में आपको यह सोचने की आवश्यकता होगी कि त्रुटि संरचना क्या समझती है। यह पैमाने अनुभवजन्य न्यूनतम और अधिकतम के लिए संवेदनशील होगा। atanh[(xmin(x))/(max(x)min(x))]
निक कॉक्स

2
@NickCox आप बिल्कुल सही हैं। हो सकता है कि अगर ओपी अपनी समस्या के बारे में अधिक जानकारी जोड़ते हैं, तो हम एक वैकल्पिक समाधान निकाल सकते हैं!
स्टोचज़ेथाई

मेरी पहली टिप्पणी में आंतरिक तर्क वह नहीं है जिसे रूपांतरित किया जा रहा है, लेकिन मेरी टिप्पणी की भावना मुझे अप्रभावित है।
निक कॉक्स

प्रिय @stochazesthai आपके विस्तृत विवरण के लिए धन्यवाद, लेकिन मैं आपके कोड को अपने डेटा पर लागू नहीं कर सकता। मैंने अपने प्रश्न को अंत में अपने कच्चे डेटा के लिंक के साथ अद्यतन किया।
डार्विन पीसी

बयान z <- z[-max(z)]और z <- z[-min(z)]अनुचित रूप zसे एक ही मूल्य के लिए नीचे हटना । साथ ही सामान्य फ़ंक्शन न्यूनतम और अधिकतम मूल्यों के लिए atanh(((x - min(x)) / (max(x) - min(x))))उत्पादन करता Infहै x
मैक्स गनीस

-1

इसे एक लॉग स्केल में बदलने के लिए, पहले पॉजिटिव नंबर का लॉग ढूंढें, फिर इसे अपने साइन से गुणा करें, निम्न कोड को ऐसा करना चाहिए।

transform_to_log_scale <- function(x){
    if(x==0){
        y <- 1
    } else {
        y <- (sign(x)) * (log(abs(x)))
    }
        y 
    }

उपरोक्त उदाहरण का उपयोग करके हम निम्नलिखित तिरछे वितरण की साजिश कर सकते हैं

x <- rlnorm(n = 1e2, meanlog = 0, sdlog = 1)
x <- x - 5
plot(density(x))

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

इस प्रकार के रूपांतर कार्य का उपयोग करने के बाद, हमें एक वितरण मिलता है जो अधिक 'सामान्य' दिखता है

plot(density(sapply(x,FUN=transform_logs_scale)))

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


3
(1) अधिकांश प्रोग्रामिंग लैंग्वेज ( Rशामिल) साइनम फ़ंक्शन को लागू करती हैं (जो नकारात्मक संख्या के लिए -1, सकारात्मक संख्या के लिए 1 और शून्य के लिए 0)। इसका उपयोग करना अधिक अभिव्यंजक और तेज होगा। (२) आपका प्रस्ताव उन सचित्र आंकड़ों की तरह विश्लेषण करने के लिए एक गरीब है, क्योंकि इसमें शून्य पर भारी असंतोष है!
whuber

साइन इन करने के लिए धन्यवाद, मुझे इसके बारे में पता नहीं था, आश्चर्य है कि इसे कैसे लागू किया जाता है
yosemite_k

3
इसके विभिन्न तरीके हैं। कई प्रोसेसर आर्किटेक्चर में कई ऑपरेशन के बाद एक साइन बिट सेट किया जाता है, इसलिए इसका उपयोग किया जा सकता है। आईईईई डबल सटीक फ़्लोटिंग पॉइंट प्रतिनिधित्व में, संकेत एक बिट का निरीक्षण करके पाया जा सकता है (प्लस एक सच्चे शून्य के लिए एक और त्वरित परीक्षण)। भविष्य कहनेवाला शाखाओं में बँटवारे वाले वास्तुशिल्प आदि में, यह आम तौर पर शाखा में न होने के कारण बहुत अधिक कुशल है यदि संभव हो, तो यही कारण है कि साइनम के अंतर्निहित संस्करण का उपयोग करना एक महत्वपूर्ण कम्प्यूटेशनल लाभ हो सकता है। संयोग से, y <- 1जब मनमाना दिखता है तो सेटिंग - यह वास्तव में एक सांख्यिकीय विश्लेषण को पेंच कर सकता है। x=0
whuber
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.