バイナリ予測結果と継続的予測子をどのように視覚化しますか?


10

視覚化する必要のあるデータがあり、どのように行うのが最善かわかりません。私はいくつかの基本アイテムの設定したそれぞれの周波数でF = { F 1F N }と成果 O { 0 1 } nはQ={q1,,qn}F={f1,,fn}O{0,1}n。次に、私のメソッドが低頻度アイテムをどれだけうまく「発見」するか(つまり、1つの結果)をプロットする必要があります。私は当初、周波数のx軸とポイントプロットの0-1のy軸しかありませんでしたが、ひどく見えました(特に2つの方法からのデータを比較する場合)。すなわち、各アイテムである結果(0/1)を有しており、その周波数によって順序付けされます。qQ

次に、単一のメソッドの結果の例を示します。

ここに画像の説明を入力してください

私の次のアイデアは、データを間隔に分割して、その間隔での局所感度を計算することでしたが、そのアイデアの問題は、頻度分布が必ずしも均一ではないことです。それで、どのように間隔を選ぶのが最善ですか?

これらの種類のデータを視覚化して、まれな(つまり、非常に頻度の低い)アイテムを見つけることの有効性を表す、より良い/より便利な方法を知っている人はいますか?

Q


1
よくわかりません。「結果」は何かを見つけていますか?「レアアイテム」とは?
ピーターフロム-モニカの復活

1
IMOは、あなたが言ったグラフをひどく見えるように含めるべきです-それはあなたが表示しようとしているデータのより良い考えを皆に与えるでしょう。
アンディW

@PeterFlom、わかりやすくするために編集しました。各項目の0-1の結果は、「見つかりません」と「見つかりました」を示します。レアアイテムはシンプルな超低頻度アイテムです。
Nicholas Mancuso

@AndyW、画像を含むように編集。本当に私が何を搬送するための少なくとも見つけましたが、見つかりませんという概念を反映していないy軸の値が与えられたい(この質問の目的のために)存在し、あなたのアイデアを得る...
ニコラス・マンキューソ

1
OK、yの値が0または1に過ぎないデータに対して散布図を試みたようです。それでよろしいですか?そして、あなたは同じ点で複数の方法にわたってこれらの種類のプロットを比較したいですか?しかし、それぞれの方法は、1つまたは2つの方法で正しいか間違っているか?つまり、各ポイントは(どちらでも)であるか、そうでないかです。したがって、メソッドはポイントが(何でも)またはそうではない(何でも)と言うことができ、どちらの選択が正しいか間違っている可能性がありますか?
ピーターフロム-モニカの復活

回答:


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の内部stat_smooth関数でこれを行う簡単な方法はありません。このメソッドを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))
アンディW

3
+1ただし、暗黙のガウスノイズではなく、二項分布の逆数からの信頼限界を使用する必要があります。
Mimshot

@Mimshot信頼区間を正しく計算する方法を示すことができますか?
ミツバチ

1
@Mimshot ggplot2正しいCIを提供する方法を知っていますか?CIのプロットがあり、[0,1]その外に明らかに間違った計算が含まれています
MichaelChirico

[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'

reprexパッケージ(v0.2.1)によって2019-02-06に作成されました

比較のために、1と0をプロットしてaを追加した場合の2次関係は次のようになります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")'

reprexパッケージ(v0.2.1)によって2019-02-25に作成されました

ロジットとの関係は明確ではなく、使用に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 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.