आप एक निरंतर भविष्यवक्ता बनाम द्विआधारी परिणामों की कल्पना कैसे करते हैं?


10

मेरे पास कुछ डेटा हैं जिनकी मुझे कल्पना करने की ज़रूरत है और मुझे यकीन नहीं है कि ऐसा करना सबसे अच्छा कैसे होगा। मैं आधार आइटम के कुछ सेट है संबंधित आवृत्तियों के साथ एफ = { 1 , , n } और परिणामों हे { 0 , 1 } nQ={q1,,qn}F={f1,,fn}O{0,1}n। अब मुझे प्लॉट करने की आवश्यकता है कि मेरी विधि "पाता" (यानी, 1-परिणाम) कम आवृत्ति वाली चीजें कितनी अच्छी है। मुझे शुरू में बस बिंदु-भूखंडों के साथ आवृत्ति का एक्स-अक्ष और 0-1 का अक्ष था, लेकिन यह भयानक लग रहा था (विशेषकर दो तरीकों से डेटा की तुलना करते समय)। यही है, प्रत्येक आइटम का एक परिणाम (0/1) है और इसकी आवृत्ति द्वारा आदेश दिया गया है।qQ

यहां एकल विधि के परिणामों के साथ एक उदाहरण दिया गया है:

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

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

क्या किसी को दुर्लभ (यानी, बहुत कम-आवृत्ति) वस्तुओं को खोजने की प्रभावशीलता को चित्रित करने के लिए इन प्रकार के डेटा की कल्पना करने का एक बेहतर / अधिक उपयोगी तरीका पता है?

Q


1
मैं पूरी तरह से समझ में नहीं आता। क्या "परिणाम" कुछ ढूंढ रहे हैं? "दुर्लभ वस्तुएं" क्या हैं?
पीटर Flom

1
IMO में आपको वह ग्राफ़ शामिल करना चाहिए जो आपने कहा था कि भयानक लग रहा है - यह सभी को उस डेटा का बेहतर विचार देगा जिसे आप प्रदर्शित करने का प्रयास कर रहे हैं।
एंडी डब्ल्यू

@PeterFlom, मैंने इसे स्पष्ट करने के लिए संपादित किया है। प्रत्येक आइटम के लिए 0-1 परिणाम "नहीं-पाया" और "पाया" इंगित करते हैं। एक दुर्लभ वस्तु सरल है एक बहुत कम आवृत्ति वाली वस्तु।
निकोलस मंचुको

@AndyW, छवि को शामिल करने के लिए संपादित किया गया। Y- अक्ष पर मूल्यों को देखते हुए वास्तव में पाया और पाया नहीं की अवधारणा को प्रतिबिंबित नहीं करता है, लेकिन कम से कम यह बताने के लिए कि मैं क्या प्रस्तुत करना चाहता हूं (इस प्रश्न के उद्देश्यों के लिए), आपको यह विचार मिलता है ...
निकोलस मंचुको

1
ठीक है, ऐसा लगता है कि आपने डेटा पर एक स्कैल्पलॉट की कोशिश की जहां y मान केवल 0 या 1. हो सकता है क्या यह सही है? और आप एक ही बिंदु पर कई तरीकों से इन प्रकार के भूखंडों की तुलना करना चाहते हैं? लेकिन क्या प्रत्येक विधि एक या दो तरीकों से सही या गलत हो सकती है? यही है, प्रत्येक बिंदु या तो है या नहीं है (जो भी)। तो एक विधि कह सकती है कि एक बिंदु (जो भी है) या नहीं है (जो भी हो) और कोई भी विकल्प सही या गलत हो सकता है?
पीटर Flom

जवाबों:


10

मैंने अतीत में जो कुछ किया है, वह मूल रूप से आपके पास एक शिथिलता के अतिरिक्त है । अंकों के घनत्व के आधार पर, मैं ओवरलैप को कम करने के लिए पारभासी बिंदुओं (अल्फा), जैसा कि नीचे दिखाया गया है, और / या पाइप प्रतीकों ("|") का उपयोग करेगा।

library(ggplot2) # plotting package for R

N=100
data=data.frame(Q=seq(N), Freq=runif(N,0,1), Success=sample(seq(0,1), 
size=N, replace=TRUE))

ggplot(data, aes(x=Freq, y=Success))+geom_point(size=2, alpha=0.4)+
  stat_smooth(method="loess", colour="blue", size=1.5)+
  xlab("Frequency")+
  ylab("Probability of Detection")+
  theme_bw()

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

(मुझे नहीं लगता कि त्रुटि सलाखों को यहां किनारों पर चौड़ा करना चाहिए, लेकिन एक आसान तरीका नहीं है जो मुझे पता है कि ggplot की आंतरिक स्टेट_स्मिथ फ़ंक्शन के साथ ऐसा करने के लिए। यदि आप इस तरीके का उपयोग आर में वास्तविक के लिए करते हैं, तो हम कर सकते हैं। साजिश रचने से पहले लूप और उसकी त्रुटि पट्टी का अनुमान लगाकर।)

( संपादित करें: एंडी डब्ल्यू की टिप्पणियों के लिए प्लस-वे ऊर्ध्वाधर घबराने की कोशिश कर रहे हैं यदि डेटा का घनत्व इसे उपयोगी बनाता है और मिमशॉट से उचित आत्मविश्वास अंतराल के बारे में।)


3
+1 - मैं डॉट्स (पारदर्शिता के अलावा) के लिए घबराना का उपयोग करने का भी सुझाव दूंगा। इस उदाहरण में मैं geom_point(size=2, alpha=0.4)साथ बदलूंगा geom_jitter(size=2, alpha=0.4, position = position_jitter(height = .02))
एंडी डब्ल्यू

3
+1 लेकिन आपको गोमेशियन शोर के निहित होने के बजाय द्विपद वितरण के व्युत्क्रम से विश्वास सीमा का उपयोग करना चाहिए।
मिमशॉट

@ मिमशॉट क्या आप दिखा सकते हैं कि आत्मविश्वास अंतराल की सही गणना कैसे करें?
मधुमक्खी पालन

1
@ मैं आपको ggplot2सही CI की आपूर्ति करने के लिए एक तरीके से जानता हूं? मुझे CI के साथ एक प्लॉट मिला है [0,1]जिसके बाहर स्पष्ट गणना से स्पष्ट रूप से आ रहे हैं
माइकलचिरिको

[0,1]

2

यह भी विचार करें कि आपके उपयोग के मामले के लिए कौन से तराजू सबसे उपयुक्त हैं। कहते हैं कि आप लॉजिस्टिक रिग्रेशन में मॉडलिंग के उद्देश्यों के लिए दृश्य निरीक्षण कर रहे हैं और यह निर्धारित करने के लिए एक सतत भविष्यवाणिका की कल्पना करना चाहते हैं कि क्या आपको अपने मॉडल में एक स्प्लिन या बहुपद शब्द जोड़ने की आवश्यकता है। इस मामले में, आप संभावना / अनुपात के बजाय लॉग-ऑड्स में एक पैमाना चाहते हैं।

नीचे दिए गए फ़ंक्शन का उपयोग निरंतर भविष्यवक्ता को डिब्बे में विभाजित करने के लिए, सीमित अनुपात की गणना करने, लॉग-ऑड में परिवर्तित करने, फिर geom_smoothइन समग्र बिंदुओं पर साजिश करने के लिए कुछ सीमित उत्तराधिकारियों का उपयोग करता है ।

उदाहरण के लिए कि यह चार्ट कैसा दिखता है यदि किसी कोवरिएट का द्विआधारी लक्ष्य के लॉग-ऑड्स के साथ द्विघात संबंध (+ शोर) है:

devtools::source_gist("https://gist.github.com/brshallo/3ccb8e12a3519b05ec41ca93500aa4b3")

# simulated dataset with quadratic relationship between x and y
set.seed(12)
samp_size <- 1000
simulated_df <- tibble(x = rlogis(samp_size), 
                       y_odds = 0.2*x^2,
                       y_probs = exp(y_odds)/(1 + exp(y_odds))) %>% 
  mutate(y = rbinom(samp_size, 1, prob = y_probs)) 

# looking at on balanced dataset
simulated_df_balanced <- simulated_df %>% 
  group_by(y) %>% 
  sample_n(table(simulated_df$y) %>% min())


ggplot_continuous_binary(df = simulated_df,
                         covariate = x, 
                         response = y,
                         snip_scales = TRUE)
#> [1] "bin size: 18"
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'

2019-02-06 को रेप्रेक्स पैकेज (v0.2.1) द्वारा बनाया गया

तुलना के लिए, यहाँ वह द्विघात संबंध ऐसा दिखाई देगा जैसे कि आपने सिर्फ 1/0 का प्लॉट किया हो और एक जोड़ा हो geom_smooth:

simulated_df %>% 
  ggplot(aes(x, y))+
  geom_smooth()+
  geom_jitter(height = 0.01, width = 0)+
  coord_cartesian(ylim = c(0, 1), xlim = c(-3.76, 3.59))
# set xlim to be generally consistent with prior chart
#> `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

2019-02-25 को रेप्रेक्स पैकेज (v0.2.1) द्वारा बनाया गया

लॉगिट से संबंध कम स्पष्ट है और उपयोग करने geom_smoothमें कुछ समस्याएं हैं।


0

मैं मानता हूं कि नमूना डेटा की कुछ पंक्तियों को पोस्ट करने से बहुत लंबा रास्ता तय होगा। यदि मैं प्रश्न को समझता हूं, तो मुझे लगता है कि पाया गया अनुपात द्वारा आवृत्ति को प्लॉट करना सबसे सरल होगा।

पहले मैं आर में कुछ नमूना डेटा उत्पन्न करूंगा; अगर आपने मुझे सही ढंग से समझा नहीं है तो कृपया मुझे सही करें।

# Create some sample data
data=data.frame(Q=1:20,F=seq(5,100,by=5))
set.seed(1)
data$found<-round(sapply(data$F,function(x) runif(1,1,x)))
data$prop<-data$found/data$F
# Looks like:
Q   F found      prop
1   1   5     2 0.4000000
2   2  10     4 0.4000000
3   3  15     9 0.6000000
4   4  20    18 0.9000000
5   5  25     6 0.2400000
6   6  30    27 0.9000000
7   7  35    33 0.9428571
8   8  40    27 0.6750000
9   9  45    29 0.6444444
10 10  50     4 0.0800000
11 11  55    12 0.2181818
12 12  60    11 0.1833333
13 13  65    45 0.6923077
14 14  70    28 0.4000000
15 15  75    58 0.7733333
16 16  80    40 0.5000000
17 17  85    61 0.7176471
18 18  90    89 0.9888889
19 19  95    37 0.3894737
20 20 100    78 0.7800000

और अब बस प्लॉट फ़्रीक्वेंसी ( F) द्वारा proportion:

# Plot frequency by proportion found.
plot(data$F,data$prop,xlab='Frequency',ylab='Proportion Found',type='l',col='red',lwd=2)

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


4
वह कथानक भयानक है! कुछ चौरसाई, जैसा कि पहले के उत्तर में, आवश्यक है।
kjetil b halvorsen
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.