2015-05-17 7 views
5

को छोड़कर मैं एक आवृत्ति हिस्टोग्राम में एक घनत्व वक्र को ओवरले करना चाहता हूं। आवृत्ति हिस्टोग्राम के लिए मैंने aes(y=..counts../40) का उपयोग किया क्योंकि 40 मेरा कुल नमूना संख्या है। मैंने aes(y=..density..*0.1) का उपयोग किया ताकि घनत्व 0 और 1 के बीच कहीं भी हो सके क्योंकि मेरी बिनविड्थ 0.1 है। हालांकि, घनत्व वक्र मेरे डेटा में फिट नहीं है और इसमें 1.0 के बराबर मानों को शामिल नहीं किया गया है (ध्यान दें कि हिस्टोग्राम बिन = (1.0,1.1) के लिए संचय मूल्य दिखाता है लेकिन घनत्व वक्र 1.0 पर समाप्त होता है)ओवरले घनत्व साजिश हिस्टोग्राम मान

अपने डेटा

data<-structure(list(variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("E1", "test" 
), class = "factor"), value = c(0.288888888888889, 0.08179, 
0.219026548672566, 0.584795321637427, 0.927554980595084, 0.44661095636026, 
1, 0.653780942692438, 1, 0.806451612903226, 1, 0.276794335371741, 
1, 0.930109557990178, 0.776864728192162, 0.824909747292419, 1, 
1, 1, 1, 1, 0.0875912408759124, 0.308065494238933, 1, 0.0258064516129032, 
0.0167322834645669, 1, 1, 0.355605889014723, 0.310344827586207, 
0.106598984771574, 0.364447494852436, 0.174724342663274, 0.77491961414791, 
1, 0.856026785714286, 0.680759275237274, 0.850657108721625, 1, 
1, 0, 0.851851851851852, 1, 0, 0.294954721862872, 0.819870009285051, 
0, 0.734147168531706, 0.0135424091233072, 0.0189098998887653, 
0.0101010101010101, 0, 0.296905222437137, 0.706837929731772, 
0.269279393173198, 0.135379061371841, 0.158969804618117, 0.0902981940361193, 
0.00423131170662906, 0, 0.374880611270296, 0.0425790754257908, 
0.145542753183748, 0, 0.129032258064516, 0.260334645669291, 0, 
0, 1, 0.175505350772889, 0.08248730964467, 0, 0.317217981340119, 
0.614147909967846, 0, 0.264508928571429, 0.883520276100086, 0.0657108721624851, 
0, 0.560229445506692)), row.names = c(NA, -80L), .Names = c("variable", 
"value"), class = "data.frame") 

प्लॉट

q<-ggplot(data, aes(value, fill = variable)) 
     q + geom_density(alpha = 0.6,aes(y=..density..*0.1),binwidth=0.1) 
    + theme_minimal()+scale_fill_manual(values =c("#D7191C","#2B83BA")) 
    + theme(legend.position="bottom")+ guides(fill=guide_legend(nrow=1)) 
    + labs(title="Density Plot GrupoB",x="Respuesta",y="Density") 
    +scale_x_continuous(breaks=seq(from=0,to=1.2,by=0.1)) 
    +geom_histogram(alpha = 0.6,aes(y=..count../40),binwidth=0.1,position="dodge") 

उत्पादन मैं इस enter image description here

उत्तर

6

आपका साजिश exa कर रहा है है ctly क्या है आप अपने डेटा से उम्मीद की जा करने के लिए:

  • आप साजिश data$value है, जो, 0 और 1 के बीच संख्यात्मक मान होता है ताकि आप घनत्व वक्र के रूप में अच्छी तरह से 0 से 1 तक चलाने के लिए उम्मीद करनी चाहिए।
  • आप बिनविड्थ 0.1 के साथ एक हिस्टोग्राम प्लॉट करते हैं। डिब्बे निचले सिरे पर बंद होते हैं और ऊपरी छोर पर खुले होते हैं। तो आपके मामले में जो कताई मिलती है वह है [0,0.1), [0.1, 0.2), ..., [0.9,1.0), [1.0,1.1)। आपके डेटा में 17 मान हैं जो 1 हैं और इस प्रकार अंतिम बिन में जाते हैं, जिसे 1 से 1.1 तक प्लॉट किया जाता है।

मुझे लगता है कि हिस्टोग्राम को आपके द्वारा किए जाने वाले तरीके को साजिश करना एक बुरा विचार है। इसका कारण यह है कि एक हिस्टोग्राम के लिए, एक्स-अक्ष निरंतर होता है, जिसका अर्थ यह है कि x-axis रेंज को कवर करने वाला बार, 0.1 से 0.2 के बीच मानों की गिनती के लिए 0.1 और 0.2 (सहित) शामिल है बाद वाला)। इस स्थिति में चकमा का उपयोग एक विकृत तस्वीर की ओर जाता है, क्योंकि बार अब सही एक्स-अक्ष रेंज को कवर नहीं करते हैं। दो बार उस सीमा को साझा करते हैं जो दोनों में से पूरी तरह से कवर किया जाना चाहिए। यह विरूपण कारणों में से एक है कि घनत्व वक्र हिस्टोग्राम से मेल नहीं खाता है।

तो, आप इसके बारे में क्या कर सकते हैं? मैं तुम्हें कुछ सुझाव आप faceting इस्तेमाल कर सकते हैं दे सकते हैं, लेकिन शायद दूसरों बेहतर विचार है ...

  • इसके बजाय position="dodge" साथ एक दूसरे के बगल हिस्टोग्राम की साजिश रचने का, वह है, हिस्टोग्राम साजिश (और इसी घनत्व घटता) अलग भूखंडों में। यह आपकी साजिश में + facet_grid(variable~.) जोड़ कर हासिल किया जा सकता है।

  • आप अंतिम बिन रखने के लिए थोड़ा सा धोखा दे सकते हैं, जो [0.9,1) है, जिसमें 1 शामिल है (यानी यह [0.9,1.0] है)। 0.999 तक अपने डेटा में बस 1 को प्रतिस्थापित करें: data$value[data$value==1]<-0.999। यह महत्वपूर्ण है कि आप प्लॉट के लिए यह केवल करें, जहां वास्तव में इसका मतलब है कि आप थोड़ा कताई को फिर से परिभाषित करते हैं। आपके द्वारा किए जाने वाले सभी संख्यात्मक मूल्यांकनों के लिए, आपको यह प्रतिस्थापन नहीं करना चाहिए! अपने घनत्व वक्र को सामान्य और हिस्टोग्राम के बारे में (यह, उदाहरण के लिए, data$value का मतलब बदल जाएगा।)

  • : घनत्व वक्र की कोई आवश्यकता नहीं 0 और 1. प्रतिबंध के बीच झूठ है कि वहाँ अभिन्न अंग है घनत्व वक्र पर 1 होना चाहिए। इस प्रकार, घनत्व वक्र और हिस्टोग्राम की तुलना करने योग्य बनाने के लिए, हिस्टोग्राम में अभिन्न अंग होना चाहिए, जो कि बाइंडविड्थ द्वारा वाई-वैल्यू को विभाजित करके हासिल किया जाता है।इसलिए, आपको geom_density(alpha = 0.6,aes(y=..density..)) का उपयोग करना चाहिए (मैंने bindwith=0.1 को भी हटा दिया क्योंकि इसका प्रभाव geom_density) और geom_histogram(alpha = 0.6,aes(y=..count../40/.1),binwidth=0.1) (position="dodge" की आवश्यकता नहीं है, एक बार जब आप फ़ेसटिंग का उपयोग करते हैं)। यह निश्चित रूप से आपके रिश्तेदार सामान्यीकरण के लिए होता है, लेकिन यह अधिक समझ में आता है क्योंकि घनत्व वक्र और हिस्टोग्राम पर इंटीग्रल 1 होते हैं, जैसा कि वे होना चाहिए।

  • घनत्व वक्र अभी भी पूरी तरह से हिस्टोग्राम से मेल नहीं खाता है और इसे घनत्व अनुमानक की गणना के तरीके से करना है। मैं इसे विस्तार से नहीं जानता और दुर्भाग्यवश दुर्भाग्य से इसे और समझा नहीं सकता। लेकिन आप पैरामीटर adjust से geom_density पैरामीटर के साथ खेलकर यह कैसे बेहतर तरीके से समझ सकते हैं। यह वक्र को छोटी संख्याओं के लिए कम चिकनी बना देगा और वक्र हिस्टोग्राम जैसा दिखता है।

सब कुछ एक साथ रखने के लिए, मैं अपने कोड में मेरी सभी सुझावों का निर्माण किया है geom_density में adjust=0.2 का इस्तेमाल किया और परिणाम साजिश रची:

data$value[data$value==1]<-0.999 
q<-ggplot(data, aes(value, fill = variable)) 
q + geom_density(alpha = 0.6,aes(y=..density..),adjust=0.2) + 
    theme_minimal()+scale_fill_manual(values =c("#D7191C","#2B83BA")) + 
    theme(legend.position="bottom")+ guides(fill=guide_legend(nrow=1)) + 
    labs(title="Density Plot GrupoB",x="Respuesta",y="Density")+ 
    scale_x_continuous(breaks=seq(from=0,to=1.2,by=0.1))+ 
    geom_histogram(alpha = 0.6,aes(y=..count../40/.1),binwidth=0.1) + 
    facet_grid(variable~.) 

enter image description here

दुर्भाग्य से, मैं आप को नहीं दे सकता एक और पूरा जवाब, लेकिन मुझे आशा है कि ये विचार आपको अच्छी शुरुआत देंगे।

+0

मुझे पता है कि मुझे इसका धन्यवाद करने के लिए उपयोग नहीं करना चाहिए, लेकिन आप अपनी प्रोफ़ाइल में संचार का कोई मतलब नहीं प्रदान करते हैं। आपका जवाब सही है। मैं स्थिति = "डॉज" का उपयोग करने में परेशान था लेकिन स्टैक्ड संस्करण के साथ मैं डेटा भी नहीं देख सका। संगोष्ठी प्रस्तुति के लिए पहलू दृष्टिकोण भी सुंदर है। –

संबंधित मुद्दे