2011-09-05 18 views
14

यह किसी अन्य प्रश्न से संबंधित है: Plot weighted frequency matrixप्लॉट संभाव्यता हीटमैप/हेक्सबिन विभिन्न आकार के डिब्बे

मैं इस ग्राफिक (आर में नीचे दिए गए कोड द्वारा उत्पादित) है: multisample

#Set the number of bets and number of trials and % lines 
numbet <- 36 
numtri <- 1000 
#Fill a matrix where the rows are the cumulative bets and the columns are the trials 
xcum <- matrix(NA, nrow=numbet, ncol=numtri) 
for (i in 1:numtri) { 
x <- sample(c(0,1), numbet, prob=c(5/6,1/6), replace = TRUE) 
xcum[,i] <- cumsum(x)/(1:numbet) 
} 
#Plot the trials as transparent lines so you can see the build up 
matplot(xcum, type="l", xlab="Number of Trials", ylab="Relative Frequency", main="", col=rgb(0.01, 0.01, 0.01, 0.02), las=1) 

मैं बहुत ज्यादा तरीका है कि इस साजिश दुर्लभ रास्तों की तुलना में गहरे रूप में बनाया गया है और पता चलता है अधिक लगातार रास्तों की तरह (लेकिन यह एक प्रिंट प्रस्तुति के लिए पर्याप्त स्पष्ट नहीं है)। मैं क्या करना चाहता हूं कि संख्याओं के लिए किसी प्रकार का हेक्सबिन या हीटमैप तैयार करना है। इस बारे में सोच पर, ऐसा लगता है कि भूखंड शामिल करने के लिए अलग अलग आकार डिब्बे (लिफाफा स्केच की मेरी पीठ देखें) होगा:

binsketch

मेरे तो सवाल: अगर मैं कोड का उपयोग कर एक लाख रन अनुकरण ऊपर, मैं इसे स्टेच में दिखाए गए विभिन्न आकार के डिब्बे के साथ एक हीटमैप या हेक्सबिन के रूप में कैसे पेश कर सकता हूं?

स्पष्टीकरण के लिए: मैं साजिश के एक हिस्से के माध्यम से पारित परीक्षण की दुर्लभता दिखाने के लिए पारदर्शिता पर भरोसा नहीं करना चाहता हूं। इसके बजाय मैं गर्मी के साथ दुर्लभता को इंगित करना चाहता हूं और गर्म (लाल) और ठंडा (नीला) के रूप में एक दुर्लभ मार्ग के रूप में एक आम मार्ग दिखाऊंगा। साथ ही, मुझे नहीं लगता कि डिब्बे एक ही आकार के होने चाहिए क्योंकि पहले परीक्षण में केवल दो स्थान हैं जहां पथ हो सकता है, लेकिन आखिरी में बहुत कुछ है। इसलिए तथ्य यह है कि इस तथ्य के आधार पर मैंने एक बदलते बिन पैमाने का चयन किया। अनिवार्य रूप से मैं सेल के माध्यम से पथ (2 कोलो 1 में 2, 2 में 2) में गुजरने की संख्या की गणना कर रहा हूं और उसके बाद सेल को रंगीन करता हूं कि कितनी बार इसे पारित किया गया है।

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

plot2

अद्यतन:

हम प्रभावी रूप से प्रत्येक में इन बातों की घटना की गणना करने के लिए है इस की एक घनत्व (हीटमैप) साजिश संस्करण बनाने के लिए: यह website एक हीटमैप प्लॉट करने के लिए एक प्रक्रिया की रूपरेखा छवि में अलग स्थान। यह ग्रिड को स्थापित करके और उस ग्रिड के प्रत्येक स्थान पर प्रत्येक पिक्सेल "डिब्बे" में प्रत्येक बिंदु समन्वय "गिरने" की संख्या की गणना करके किया जाता है।

शायद उस वेबसाइट पर कुछ जानकारी जो हमारे पास पहले से मिल सकती है?

अद्यतन: heatmap

numbet <- 20 
numtri <- 100 
prob=1/6 
#Fill a matrix 
xcum <- matrix(NA, nrow=numtri, ncol=numbet+1) 
for (i in 1:numtri) { 
    x <- sample(c(0,1), numbet, prob=c(prob, 1-prob), replace = TRUE) 
    xcum[i, ] <- c(i, cumsum(x)/cumsum(1:numbet)) 
} 
colnames(xcum) <- c("trial", paste("bet", 1:numbet, sep="")) 

mxcum <- reshape(data.frame(xcum), varying=1+1:numbet, 
    idvar="trial", v.names="outcome", direction="long", timevar="bet") 

#from the other question 
require(MASS) 
dens <- kde2d(mxcum$bet, mxcum$outcome) 
filled.contour(dens) 

मैं काफी समझ में नहीं आता क्या है: मैं इस पर पहुंचने के लिए है, जो काफी है कि मैं क्या की अवधारणा गया था के करीब है क्या Andrie इस question से कुछ के साथ लिखा था के कुछ ले लिया चल रहा है, लेकिन ऐसा लगता है कि मैं जो उत्पादन करना चाहता था (स्पष्ट रूप से विभिन्न आकार के डिब्बे के बिना)।

अपडेट: यह अन्य भूखंडों के समान है।यह बिल्कुल सही नहीं है:

hexbin

plot(hexbin(x=mxcum$bet, y=mxcum$outcome)) 

अंतिम कोशिश। इसके बाद के संस्करण के रूप में: enter image description here

image(mxcum$bet, mxcum$outcome) 

यह बहुत अच्छी है। मैं इसे अपने हाथ से तैयार स्केच की तरह दिखाना पसंद करूंगा।

+0

तो, अपने ड्राइंग में, ऊपरी-दाएं सभी नीले bottom- में लाल रंग में fading होगा बाएं, और नीचे दाएं? –

+0

@ ब्रैंडन अनिवार्य रूप से हाँ। मैंने अभी एक नकली कोशिश की है, लेकिन मैं कोई कलाकार नहीं हूं (न ही गणितज्ञ)। मैं कोशिश करूंगा और दिखाऊंगा कि मैं क्या चाहूंगा। –

+0

आपका प्रश्न अच्छा लग रहा है :) – polerto

उत्तर

11

है संपादित

मैं निम्नलिखित समाधान आप के लिए क्या पूछना करता है लगता है।

(ध्यान दें कि यह धीमी है, विशेष रूप से reshape कदम)

numbet <- 32 
numtri <- 1e5 
prob=5/6 
#Fill a matrix 
xcum <- matrix(NA, nrow=numtri, ncol=numbet+1) 
for (i in 1:numtri) { 
    x <- sample(c(0,1), numbet, prob=c(prob, 1-prob), replace = TRUE) 
    xcum[i, ] <- c(i, cumsum(x)/cumsum(1:numbet)) 
} 
colnames(xcum) <- c("trial", paste("bet", 1:numbet, sep="")) 

mxcum <- reshape(data.frame(xcum), varying=1+1:numbet, 
    idvar="trial", v.names="outcome", direction="long", timevar="bet") 


library(plyr) 
mxcum2 <- ddply(mxcum, .(bet, outcome), nrow) 
mxcum3 <- ddply(mxcum2, .(bet), summarize, 
       ymin=c(0, head(seq_along(V1)/length(V1), -1)), 
       ymax=seq_along(V1)/length(V1), 
       fill=(V1/sum(V1))) 
head(mxcum3) 

library(ggplot2) 

p <- ggplot(mxcum3, aes(xmin=bet-0.5, xmax=bet+0.5, ymin=ymin, ymax=ymax)) + 
    geom_rect(aes(fill=fill), colour="grey80") + 
    scale_fill_gradient("Outcome", formatter="percent", low="red", high="blue") + 
    scale_y_continuous(formatter="percent") + 
    xlab("Bet") 

print(p) 

enter image description here

+0

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

+0

उस स्थिति में आपको वर्णन करना होगा कि क्या अलग है। आपने सलाखों को आकार दिखाने के लिए स्केल करने के लिए कहा था, है ना? – Andrie

+0

अंतिम प्रयास करें: मेरे प्रश्न में पहला ग्राफ़िक लें और मैंने जो ग्रिड स्केच किया है उसे ओवरले करें। ग्रिड पर उस विशेष वर्ग के माध्यम से पथ पारित होने की संख्या की गणना करें। गर्म के रूप में रंग लगातार पथ। मुझे लगता है कि आपका ग्राफिक दिखाता है कि 10000 परीक्षणों में, परीक्षण 1 के लिए, अधिकांश लोग 0 स्कोर करते हैं, जो अनुपात 1 बनाते हैं, (1/6)। जिस ग्राफ को मैं ढूंढ रहा हूं उसके पास मेरे हाथ से तैयार किए गए स्केच का लेआउट है, लेकिन पहले ग्राफ का डेटा ... क्योंकि परीक्षण 1 (हिट मिस) के लिए केवल दो संभावित श्रेणियां हैं, वहां दो बराबर डिब्बे होना चाहिए। मदद बीटीडब्ल्यू के लिए धन्यवाद। –

3

एफवाईआई: यह एक उत्तर से अधिक विस्तारित टिप्पणी है।

मेरे लिए, यह नई साजिश एक स्टैक्ड बार की तरह दिखती है जहां प्रत्येक बार की ऊंचाई अगले परीक्षण में ऊपरी और निचली रेखा के चौराहे बिंदुओं के बराबर होती है।

enter image description here

तरह से है कि मैं इस दृष्टिकोण होगा एक स्पष्ट चर के रूप में "परीक्षण" के इलाज के लिए है। फिर हम बराबर तत्वों के लिए xcum की प्रत्येक पंक्ति को खोज सकते हैं। यदि वे हैं, तो हम इसे चौराहे का एक बिंदु मान सकते हैं जिसका न्यूनतम भी हमारे सलाखों की ऊंचाई को परिभाषित करने वाले कई लोगों का प्रतिनिधित्व करता है।

x <- t(xcum) 
x <- x[duplicated(x),] 
x[x==0] <- NA 

अब हम वास्तविक अंक के गुणकों है, हम यह पता लगाने की कैसे तो अगले चरण पर यह लेने के लिए और जानकारी binning का एक तरीका खोजने की जरूरत है। इसका मतलब है कि हमें प्रत्येक समूह के प्रतिनिधित्व के बारे में निर्णय लेने की आवश्यकता है। आइए पोस्टरिटी के लिए कुछ अंक लिखें।

Trial 1 (2) = 1, 0.5 # multiple = 0.5 
Trial 2 (3) = 1, 0.66, 0.33 # multiple = 0.33 
Trial 3 (4) = 1, 0.75, 0.5, 0.25 # multiple = 0.25 
Trial 4 (5) = 1, 0.8, 0.6, 0.4, 0.2 # multiple = 0.2 
Trial 5 (6) = 1, 0.8333335, 0.6666668, 0.5000001, 0.3333334, 0.1666667 
... 
Trial 36 (35) = 1, 0.9722223, ..., 0.02777778 # mutiple = 0.05555556/2 

दूसरे शब्दों में, प्रत्येक परीक्षण के लिए प्लॉट के लिए एन -1 अंक हैं। आपके चित्र में आपके पास 7 डिब्बे हैं। इसलिए हमें प्रत्येक बिन के गुणकों को समझने की आवश्यकता है।

के धोखा और दो द्वारा अंतिम दो कॉलम विभाजित करते हैं, हम दृश्य निरीक्षण से पता न्यूनतम से कम 0,05

x[,35:36] <- x[,35:36]/2

तो प्रत्येक स्तंभ के न्यूनतम लगता है कि:

x <- apply(x, 2, function(x) min(x, na.rm=T))[-1] # Drop the 1 
x <- x[c(1,2,3,4,8,17,35)] # I'm just guessing here by the "look" of your drawing. 

ऐसा करने का सबसे स्पष्ट तरीका प्रत्येक बिन को अलग से बनाना है। जाहिर है, यह बाद में स्वचालित रूप से किया जा सकता है। याद है कि प्रत्येक बिंदु

bin1 <- data.frame(bin = rep("bin1",2), Frequency = rep(x[1],2)) 
bin2 <- data.frame(bin = rep("bin2",3), Frequency = rep(x[2],3)) 
bin3 <- data.frame(bin = rep("bin3",4), Frequency = rep(x[3],4)) 
bin4 <- data.frame(bin = rep("bin4",5), Frequency = rep(x[4],5)) 
bin5 <- data.frame(bin = rep("bin5",9), Frequency = rep(x[5],9)) 
bin6 <- data.frame(bin = rep("bin6",18), Frequency = rep(x[6],18)) 
bin7 <- data.frame(bin = rep("bin7",36), Frequency = rep(x[7],36)) 

df <- rbind(bin1,bin2,bin3,bin4,bin5,bin6,bin7) 
ggplot(df, aes(bin, Frequency, color=Frequency)) + geom_bar(stat="identity", position="stack") 
+0

मुझे आपका उत्तर कुछ विचार देना होगा।मैंने स्पष्ट किया है कि मैं साजिश से क्या चाहता हूं, अगर इससे लोगों को यह समझने में मदद मिलती है कि मैं पहले से जो कुछ भी कर रहा हूं उससे काफी खुश नहीं हूं। धन्यवाद। –

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