आर

2012-12-23 9 views
6

मैं चर जिसका रेंज के घनत्व प्लॉट करने के लिए चाहते हैं के साथ लॉग पैमाने पर चर घनत्व बदलने निम्नलिखित है:आर

Min. :-1214813.0 
1st Qu.:  1.0 
Median :  40.0 
Mean :  303.2 
3rd Qu.:  166.0 
Max. : 1623990.0 

रैखिक रेंज में एक लंबा कॉलम में घनत्व परिणाम की साजिश [0,1000] , सकारात्मक अनंतता और नकारात्मक अनंतता की ओर दो बहुत लंबी पूंछ के साथ। इसलिए, मैं वैरिएबल को लॉग स्केल में बदलना चाहता हूं, ताकि मैं देख सकूं कि माध्य के आसपास क्या हो रहा है। उदाहरण के लिए, मैं की तरह कुछ के बारे में सोच रहा हूँ:

log_values = c(-log10(-values[values<0]), log10(values[values>0])) 

जिसमें परिणाम:

Min. 1st Qu. Median Mean 3rd Qu. Max. 
-6.085 0.699 1.708 1.286 2.272 6.211 

इस के साथ मुख्य समस्या यह तथ्य यह है कि यह 0 मूल्यों को शामिल नहीं करता है। बेशक, मैं 0 से values[values>=0]+1 के साथ सभी मानों को दूर कर सकता हूं, लेकिन यह डेटा में कुछ विरूपण पेश करेगा।

इस चर को लॉग पैमाने पर बदलने का एक स्वीकार्य और वैज्ञानिक रूप से ठोस तरीका क्या होगा?

+0

कैसे दो भूखंडों बनाने के बारे में: enter image description here

एक्स में बहुत बड़ा मूल्यों के साथ

? एक पूरी श्रृंखला के लिए, दूसरा केंद्र खंड के साथ दूसरा। – Andrie

+0

हां, मैंने इसके बारे में सोचा था, लेकिन मैं सोच रहा था कि कोई चालाक परिवर्तन है :-) – Mulone

+0

आप ऊपर दिए गए कार्यों को प्राप्त करने के लिए 'साइन (मान) * लॉग 10 (abs (मान))' का उपयोग कर सकते हैं, लेकिन फिर सभी शून्य मान '-Inf' बन जाएगा। – James

उत्तर

3

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

Data <- c(rnorm(1000,5,10),sample(-10000:10000,10)) 
> summary(Data) 
    Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
-9669.000 -2.119  5.332 85.430 12.460 9870.000 

फिर आपके पास कुछ अलग दृष्टिकोण हैं। यह देखने के लिए सबसे आसान है कि आपके डेटा के केंद्र में क्या हो रहा है, बस आपके डेटा का केंद्र है।इस मामले में, मैं क्या पहले और तीसरे चतुर्थक के बीच होता में दिलचस्पी रखता हूँ कहते हैं, मैं प्लॉट कर सकते हैं:

hist(Data, 
    xlim=c(-30,30), 
    breaks=c(min(Data),seq(-30,30,by=5),max(Data)) 
    main="Center of Data" 
    ) 

enter image description here

आप रूप में अच्छी तरह पूंछ की गणना करना चाहते हैं, तो आप बदल सकता है आपके

  1. आप
  2. आप हिस्टोग्राम साजिश एक मूल्य के सिर्फ इतना है कि सीमा के बाहर है कि ब्याज की सीमा के बाहर सभी मान निर्दिष्ट, binnin: इस प्रकार पूंछ पतन और अक्ष को बदलने के लिए डेटा यह दिखाने के लिए, जी एक बिन में सभी चरम मानों
  3. आप सही लेबल
  4. आप पैकेज plotrix से axis.break() का उपयोग अपने एक्स अक्ष पर कुछ टूट जाता है जोड़ने के लिए साथ एक्स अक्ष का निर्माण, उसके लिए असंतत अक्ष

का संकेत

require(plotrix) 
# rearrange data 
plotdata <- Data 
id <- plotdata < -30 | plotdata > 30 
plotdata[id] <- sign(plotdata[id])*35 
# plot histogram 
hist(plotdata, 
     xlim=c(-40,40), 
     breaks=c(-40,seq(-30,30,by=5),40), 
     main="Untailed Data", 
     xaxt='n' # leave the X axis away 
    ) 
# Construct the X axis 
axis(1, 
     at=c(-40,seq(-30,30,by=10),40), 
     labels=c(min(Data),seq(-30,30,by=10),max(Data)) 
) 
# add axis breaks 
axis.break(axis=1,breakpos=-35) 
axis.break(axis=1,breakpos=35) 

यह आपको देता है::

आप निम्नलिखित कोड की तरह कुछ का उपयोग कर सकते

ध्यान दें कि freq=TRUE को hist() फ़ंक्शन में जोड़कर आप कच्चे आवृत्तियों को प्राप्त करते हैं।

4

आपके पास जो भी है वह अनिवार्य रूप से @ जेम्स सुझाता है। यह (-1,1) में मूल्यों, विशेष रूप से मूल करने के लिए उन करीब के लिए समस्याग्रस्त है:

x <- seq(-2, 2, by=.01) 
plot(x, sign(x)*log10(abs(x)), pch='.') 

enter image description here

कुछ इस तरह मदद कर सकते हैं:

y <- c(-log10(-x[x<(-1)])-1, x[x >= -1 & x <= 1], log10(x[x>1])+1) 

plot(x, y, pch='.') 

enter image description here

यह निरंतर है।

z <- c(-log10(-x[x<(-1/log(10))]) - 1/log(10)+log10(1/log(10)), 
     x[x >= -1/log(10) & x <= 1/log(10)], 
     log10(x[x>1/log(10)]) + 1/log(10)-log10(1/log(10)) 
     ) 
plot(x, z, pch='.') 

enter image description here: एक अंतराल (-1/लॉग (10), 1/लॉग (10)), घ/dx log10 (x) = 1 को हल करके पाया जाता है का उपयोग करके सी^1 मजबूर कर सकते हैं

1

मैं इसे एक और उत्तर के रूप में जोड़ रहा हूं, क्योंकि विचार समान है, मैपिंग मूल रूप से अलग है।

जब छोटे मान (< 1) लॉग-स्केल्ड प्लॉट में शामिल होते हैं, तो यह log(.) की बजाय सामान्य साजिश log(1 + .) है।

मूल भर में प्रतिबिंबित, और हम कुछ उपयोगी मिलती है:

x <- seq(-2, 2, by=.01) 
w <- c(-log10(1-x[x<0]), x[x==0], log10(1+x[x>0])) 

plot(x, w, pch='.') 

यह स्पष्ट समारोह, चिकनी है कि के रूप में 0 के आसपास दिशात्मक डेरिवेटिव भी परिलक्षित होगा होना चाहिए।

x <- seq(-10000, 10000, by=.01) 
w <- c(-log10(1-x[x<0]), x[x==0], log10(1+x[x>0])) 
plot(x, w, pch='.') 

enter image description here