Làm thế nào để bạn hình dung kết quả nhị phân so với một người dự đoán liên tục?


10

Tôi có một số dữ liệu tôi cần để hình dung và không chắc làm thế nào tốt nhất để làm như vậy. Tôi có một số bộ mục cơ bản với tần số tương ứng và kết quả . Bây giờ tôi cần vẽ biểu đồ phương pháp của tôi "tìm thấy" (nghĩa là 1 kết quả) các mục tần số thấp. Ban đầu tôi chỉ có trục x tần số và trục ay 0-1 với các ô điểm, nhưng nó trông thật kinh khủng (đặc biệt là khi so sánh dữ liệu từ hai phương pháp). Nghĩa là, mỗi mục có kết quả (0/1) và được sắp xếp theo tần số của nó.Q={q1,,qn}F={f1,,fn}O{0,1}nqQ

Đây là một ví dụ với kết quả của một phương thức:

nhập mô tả hình ảnh ở đây

Ý tưởng tiếp theo của tôi là chia dữ liệu thành các khoảng và tính toán độ nhạy cục bộ theo các khoảng, nhưng vấn đề với ý tưởng đó là phân phối tần số không nhất thiết phải thống nhất. Vì vậy, làm thế nào tốt nhất tôi nên chọn khoảng?

Có ai biết một cách tốt hơn / hữu ích hơn để hình dung các loại dữ liệu này để mô tả hiệu quả của việc tìm kiếm các mục hiếm (tức là tần số rất thấp) không?

EDIT: Để cụ thể hơn, tôi đang trình diễn khả năng của một số phương pháp để tái cấu trúc các chuỗi sinh học của một dân số nhất định. Để xác thực bằng cách sử dụng dữ liệu mô phỏng, tôi cần thể hiện khả năng tái cấu trúc các biến thể bất kể mức độ phong phú (tần số) của nó. Vì vậy, trong trường hợp này tôi đang hình dung các mục bị bỏ lỡ và tìm thấy, được sắp xếp theo tần số của chúng. Âm mưu này sẽ không bao gồm các biến thể xây dựng lại không nằm trong .Q


1
Tôi hoàn toàn không hiểu. Là "kết quả" tìm thấy một cái gì đó? "Vật phẩm hiếm" là gì?
Peter Flom - Tái lập Monica

1
IMO bạn nên bao gồm biểu đồ mà bạn nói trông thật kinh khủng - nó sẽ cho mọi người biết rõ hơn về dữ liệu bạn đang cố hiển thị.
Andy W

@PeterFlom, tôi đã chỉnh sửa để làm cho nó rõ ràng hơn. Các kết quả 0-1 cho mỗi mục chỉ ra "không tìm thấy" và "tìm thấy". Một mặt hàng hiếm là đơn giản một mặt hàng tần số rất thấp.
Nicholas Mancuso

@AndyW, được chỉnh sửa để bao gồm hình ảnh. Do các giá trị trên trục y không thực sự phản ánh khái niệm tìm thấy và không tìm thấy, nhưng ít nhất là để truyền đạt những gì tôi muốn trình bày (cho mục đích của câu hỏi này), bạn có ý tưởng ...
Nicholas Mancuso

1
OK, có vẻ như bạn đã thử phân tán dữ liệu trên dữ liệu trong đó giá trị y chỉ có thể là 0 hoặc 1. Có đúng không? Và bạn muốn so sánh các loại ô này trên nhiều phương thức trên cùng một điểm? Nhưng mỗi phương pháp có thể đúng hay sai theo một hay hai cách? Đó là, mỗi điểm hoặc là hoặc không (bất cứ điều gì). Vì vậy, một phương pháp có thể nói một điểm là (bất cứ điều gì) hoặc không (bất cứ điều gì) và lựa chọn nào có thể đúng hay sai?
Peter Flom - Tái lập Monica

Câu trả lời:


10

Những gì tôi đã làm trong quá khứ về cơ bản là những gì bạn đã làm với việc thêm một hoàng thổ . Tùy thuộc vào mật độ của các điểm, tôi sẽ sử dụng các điểm mờ (alpha), như được hiển thị bên dưới và / hoặc các ký hiệu đường ống ("|") để giảm thiểu sự chồng chéo.

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()

nhập mô tả hình ảnh ở đây

(Tôi không nghĩ các thanh lỗi sẽ mở rộng ở các cạnh ở đây, nhưng không phải là cách dễ dàng để tôi biết điều đó với hàm stat_smooth bên trong của ggplot. bằng cách ước tính hoàng thổ và thanh lỗi của nó trước khi vẽ.)

( Chỉnh sửa: Và những người thân cho ý kiến ​​từ Andy W. về việc thử jitter dọc nếu mật độ dữ liệu làm cho nó hữu ích và từ Mimshot về khoảng tin cậy thích hợp.)


3
+1 - Tôi cũng sẽ đề xuất sử dụng jitter cho các dấu chấm (ngoài độ trong suốt). Trong ví dụ này tôi sẽ thay thế geom_point(size=2, alpha=0.4)bằng geom_jitter(size=2, alpha=0.4, position = position_jitter(height = .02)).
Andy W

3
+1 nhưng bạn nên sử dụng giới hạn tin cậy từ nghịch đảo của phân phối nhị thức thay vì bạn ngụ ý nhiễu Gaussian.
Bắt chước

@Mimshot Bạn có thể chỉ ra cách tính khoảng tin cậy một cách chính xác không?
anh chàng ong

1
@Mimshot Bạn có biết một cách bên trong ggplot2để cung cấp các TCTD chính xác không? Tôi đã có một âm mưu với các TCTD bên ngoài [0,1]rõ ràng là đến từ tính toán sai
MichaelChirico

Đây là một câu trả lời tốt (+1), nhưng phạm vi của âm mưu (và các TCTD) chắc chắn nên được giới hạn trong khoảng . Điều đó sẽ cải thiện giao diện của cốt truyện và cũng tôn trọng sự hỗ trợ của giá trị xác suất cho phép. [0,1]
Ben - Tái lập Monica

2

Cũng xem xét các quy mô phù hợp nhất cho trường hợp sử dụng của bạn. Giả sử bạn đang thực hiện kiểm tra trực quan cho mục đích lập mô hình trong hồi quy logistic và muốn trực quan hóa một công cụ dự đoán liên tục để xác định xem bạn có cần thêm một thuật ngữ spline hoặc đa thức cho mô hình của mình không. Trong trường hợp này, bạn có thể muốn một tỷ lệ theo tỷ lệ cược log hơn là xác suất / tỷ lệ.

Hàm tại ý chính dưới đây sử dụng một số phương pháp phỏng đoán hạn chế để phân tách yếu tố dự đoán liên tục thành các thùng, tính tỷ lệ trung bình, chuyển đổi thành tỷ lệ cược log, sau đó vẽ sơ đồ geom_smoothcác điểm tổng hợp này.

Ví dụ về biểu đồ này trông như thế nào nếu một hiệp phương sai có mối quan hệ bậc hai (+ nhiễu) với tỷ lệ cược log của mục tiêu nhị phân:

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'

Được tạo vào ngày 2019-02-06 bởi gói reprex (v0.2.1)

Để so sánh, đây là mối quan hệ bậc hai sẽ như thế nào nếu bạn chỉ vẽ 1's / 0 và thêm 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")'

Được tạo vào ngày 2019-02-25 bởi gói reprex (v0.2.1)

Mối quan hệ với logit là ít rõ ràng và sử dụng geom_smoothcó một số vấn đề.


0

Tôi đồng ý rằng việc đăng chỉ một vài dòng dữ liệu mẫu sẽ đi một chặng đường dài. Nếu tôi hiểu câu hỏi, tôi nghĩ sẽ đơn giản nhất để vẽ tần số theo tỷ lệ tìm thấy.

Đầu tiên tôi sẽ tạo một số dữ liệu mẫu trong R; xin vui lòng sửa cho tôi nếu tôi không hiểu bạn chính xác.

# 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

Và bây giờ chỉ đơn giản là âm tần ( F) bằng cách proportion:

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

nhập mô tả hình ảnh ở đây


4
Âm mưu đó thật kinh khủng! Một số làm mịn, như trong câu trả lời trước đó, là cần thiết.
kjetil b halvorsen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.