คุณเห็นภาพผลลัพธ์ไบนารีกับตัวทำนายอย่างต่อเนื่องได้อย่างไร


10

ฉันมีข้อมูลบางอย่างที่ฉันต้องการเห็นภาพและไม่แน่ใจว่าจะทำอย่างไรดีที่สุด ฉันมีรายการฐานบางชุดมีความถี่ตามลำดับF = { f 1 , , f n }และผลลัพธ์ O { 0 , 1 } nQ={q1,,qn}F={f1,,fn}O{0,1}n. ตอนนี้ฉันต้องพล็อตวิธีที่ "พบ" (เช่น 1 ผล) ของรายการความถี่ต่ำได้ดีเพียงใด ตอนแรกฉันเพิ่งมีแกน x ของความถี่และแกน ay ของ 0-1 กับพล็อตจุด แต่มันดูน่ากลัว (โดยเฉพาะเมื่อเปรียบเทียบข้อมูลจากสองวิธี) นั่นคือแต่ละรายการมีผลลัพธ์ (0/1) และเรียงลำดับตามความถี่qQ

นี่คือตัวอย่างที่มีผลลัพธ์ของวิธีการเดียว:

ป้อนคำอธิบายรูปภาพที่นี่

แนวคิดต่อไปของฉันคือการแบ่งข้อมูลออกเป็นช่วง ๆ และคำนวณความไวเฉพาะจุดในช่วงเวลานั้น ๆ แต่ปัญหาของแนวคิดนั้นก็คือการแจกแจงความถี่ไม่จำเป็นต้องเหมือนกัน ดังนั้นฉันจะเลือกช่วงเวลาที่ดีที่สุดได้อย่างไร

ไม่มีใครรู้วิธีที่ดีกว่า / มีประโยชน์มากขึ้นในการแสดงภาพข้อมูลเหล่านี้เพื่อแสดงถึงประสิทธิภาพในการค้นหารายการที่หายาก (เช่นความถี่ต่ำมาก)

แก้ไข: เพื่อเป็นรูปธรรมมากขึ้นฉันกำลังแสดงความสามารถของวิธีการบางอย่างเพื่อสร้างลำดับทางชีวภาพของประชากรบางกลุ่ม สำหรับการตรวจสอบโดยใช้ข้อมูลจำลองฉันต้องแสดงความสามารถในการสร้างตัวแปรใหม่โดยไม่คำนึงถึงความอุดมสมบูรณ์ (ความถี่) ดังนั้นในกรณีนี้ฉันเห็นภาพรายการที่ไม่ได้รับและพบตามลำดับความถี่ พล็อตนี้จะไม่รวมถึงสายพันธุ์ใหม่ที่ไม่อยู่ในคิวQ


1
ฉันไม่เข้าใจ "ผลลัพธ์" กำลังค้นหาบางสิ่งอยู่หรือไม่ "รายการที่หายาก" คืออะไร
Peter Flom

1
IMO คุณควรรวมกราฟที่คุณพูดว่าดูน่ากลัว - มันจะทำให้ทุกคนมีความคิดที่ดีขึ้นเกี่ยวกับข้อมูลที่คุณพยายามแสดง
Andy W

@ PeterFlom ฉันได้แก้ไขเพื่อให้ชัดเจนขึ้น ผลลัพธ์ 0-1 สำหรับแต่ละรายการระบุว่า "ไม่พบ" และ "พบ" รายการที่หายากนั้นเป็นรายการความถี่ที่ต่ำมาก
Nicholas Mancuso

@AndyW แก้ไขเพื่อรวมภาพ เนื่องจากค่าบนแกน y ไม่ได้สะท้อนแนวคิดที่พบและไม่พบ แต่อย่างน้อยสำหรับการถ่ายทอดสิ่งที่ฉันต้องการนำเสนอ (เพื่อจุดประสงค์ของคำถามนี้) คุณจะได้รับความคิด ...
Nicholas Mancuso

1
ตกลงดูเหมือนว่าคุณพยายามกระจายข้อมูลที่ค่า y สามารถเป็น 0 หรือ 1 ได้ใช่ไหม และคุณต้องการเปรียบเทียบการเรียงลำดับของหลาย ๆ วิธีในจุดเดียวกัน แต่วิธีการแต่ละวิธีสามารถถูกหรือผิดในทางเดียวหรือสองวิธี? นั่นคือแต่ละจุดเป็นหรือไม่ (อะไรก็ตาม) ดังนั้นวิธีการที่สามารถพูดได้ว่าประเด็นคือ (อะไรก็ตาม) หรือไม่ (อะไรก็ตาม) และตัวเลือกอย่างใดอย่างหนึ่งอาจจะถูกหรือผิด?
Peter 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()

ป้อนคำอธิบายรูปภาพที่นี่

(ฉันไม่คิดว่าแถบข้อผิดพลาดควรขยายบนขอบที่นี่ แต่ไม่มีวิธีที่ง่ายที่ฉันรู้ว่าจะทำเช่นนั้นด้วยฟังก์ชั่นภายใน stat_smooth ของ ggplot ถ้าคุณใช้วิธีนี้สำหรับ reals ใน R เราสามารถทำได้ โดยประมาณดินเหลืองและแถบข้อผิดพลาดก่อนที่จะลงจุด)

( แก้ไข:และอีกประการหนึ่งสำหรับความคิดเห็นจาก Andy W. เกี่ยวกับการพยายามกระวนกระวายใจในแนวดิ่งถ้าความหนาแน่นของข้อมูลทำให้มีประโยชน์และจาก Mimshot เกี่ยวกับช่วงความมั่นใจที่เหมาะสม)


3
+1 - ฉันขอแนะนำให้ใช้ตัวสั่นสำหรับจุด (นอกเหนือจากความโปร่งใส) ในตัวอย่างนี้ผมจะเข้ามาแทนที่ด้วยgeom_point(size=2, alpha=0.4) geom_jitter(size=2, alpha=0.4, position = position_jitter(height = .02))
Andy W

3
+1 แต่คุณควรใช้ขอบเขตความมั่นใจจากค่าผกผันของการแจกแจงแบบทวินามแทนที่จะเป็นสัญญาณรบกวนแบบเกาส์
Mimshot

@Mimshot คุณสามารถแสดงวิธีคำนวณช่วงความมั่นใจได้อย่างถูกต้องหรือไม่?
คนที่แต่งตัวประหลาดผึ้ง

1
@MimShot คุณรู้วิธีในggplot2การจัดหา CIs ที่ถูกต้องหรือไม่ ฉันได้พล็อตที่มี CIs ภายนอก[0,1]ซึ่งเห็นได้ชัดว่ามาจากการคำนวณผิด
MichaelChirico

[0,1]

2

พิจารณาว่าเครื่องชั่งชนิดใดที่เหมาะสมที่สุดสำหรับกรณีการใช้งานของคุณ สมมติว่าคุณกำลังทำการตรวจสอบด้วยภาพเพื่อจุดประสงค์ในการสร้างแบบจำลองในการถดถอยแบบโลจิสติกส์และต้องการให้เห็นภาพตัวทำนายอย่างต่อเนื่องเพื่อดูว่าคุณจำเป็นต้องเพิ่มคำว่า spline หรือพหุนามในโมเดลของคุณหรือไม่ ในกรณีนี้คุณอาจต้องการสเกลในอัตราล็อกแทนที่จะเป็นความน่าจะเป็น / สัดส่วน

ฟังก์ชั่นที่ส่วนสำคัญด้านล่างใช้ฮิวริสติกแบบ จำกัด เพื่อแยกตัวทำนายต่อเนื่องออกเป็นถังขยะคำนวณสัดส่วนเฉลี่ยเปลี่ยนเป็นอัตราต่อรองจากนั้นจึงวางแผน geom_smoothจุดรวมเหล่านี้

ตัวอย่างของแผนภูมินี้ถ้า covariate มีความสัมพันธ์กำลังสอง (+ เสียงรบกวน) กับอัตราการบันทึกของเป้าหมายไบนารี:

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 โดยแพ็คเกจ reprex (v0.2.1)

สำหรับการเปรียบเทียบนี่คือความสัมพันธ์สมการกำลังสองที่จะมีลักษณะเป็นอย่างไรถ้าคุณเพิ่งพล็อต 1/0 และเพิ่ม a 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 โดยแพ็คเกจ reprex (v0.2.1)

ความสัมพันธ์กับ logit นั้นชัดเจนน้อยลงและการใช้geom_smoothมีปัญหาบางอย่าง


0

ฉันยอมรับว่าการโพสต์ข้อมูลตัวอย่างเพียงไม่กี่บรรทัดจะช่วยได้มาก ถ้าฉันเข้าใจคำถามฉันคิดว่ามันจะง่ายที่สุดในการพล็อตความถี่ตามสัดส่วนที่พบ

ก่อนอื่นฉันจะสร้างข้อมูลตัวอย่างใน R; โปรดแก้ไขฉันหากฉันไม่เข้าใจคุณอย่างถูกต้อง

# 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.