2017-10-24 5 views
3

私はxとyのデータセットを持っています。各データセットについて、点(x、y)をRにプロットします。そして得られたプロットは、一般にtype Aまたはtype Bのいずれかに似ています。タイプBには交差点があり、タイプAには交差点がありません。元のデータセットとのカーブ(交差が発生する可能性があります)の下の面積を計算するにはどうすればよいですか?

私の質問:新しいデータセットを考えると、それは視覚化を知らずにタイプAとタイプBのプロットに示されるように、曲線の下の赤斜線(Rで)を算出することができますか?

主な課題は、次のとおり

1)データセットがRでタイプA又はタイプBを生成するかどうかを決定する方法は?

2)Rタイプのデータセットを使用してタイプBの赤い陰影付き領域を計算するにはどうすればよいですか?

ここでは、タイプBカーブを生成したデータセットを生成するコードを示します。ここ

set.seed(300) 
predicted_value_A = c(rbeta(300, 9, 2), rbeta(700, 2, 4), rbeta(10000, 2, 4)) 
predicted_value_B = c(rbeta(1000, 4, 3), rbeta(10000, 2, 3)) 
real_value = c(rep(1, 1000), rep(0, 10000)) 

library(ROCR) 
library(ggplot2) 

predB <- prediction(predicted_value_B, real_value) 
perfB <- performance(predB, measure = "mat", x.measure = "f") 

yB <- attr(perfB, "y.values")[[1]] 

yB <- (yB + 1)/2 

xB <- attr(perfB, "x.values")[[1]] 

# dataset that generates type B curve 
dfB <- data.frame(X = xB, Y= yB) 

ggplot(df, aes(x=X, y=Y, ymin=0, ymax=1, xmin=0, xmax=1)) + geom_point(size =  0.2, shape = 21, fill="white")+ 
ggtitle("Type B curve") + 
theme(plot.title=element_text(hjust=0.5)) 

enter image description here

enter image description here
+1

これはRの質問であるかわかりません。サンプルデータやRコードの試行は見られません。 –

+0

タイプBカーブを生成するRコードを追加しました! – Kirin

答えて

0

シェードにコードのビットは、小さな長方形と近似を用いて(x、y)は点の集合からプロットです。これは、等間隔のx値を前提としており、矩形近似がうまく機能するのに十分です。

# sample dataset 
x <- seq(0,2,length.out=1000) 
y1 <- x 
y2 <- sin(x*pi)+x 

# plot 
plot(x,y1,type='l',ylab='y') 
lines(x,y2) 

# shade the plot 
## not efficient but works 
dx <- x[2]-x[1] 
area <- 0 

# shade plot and calculate area 
## uses a rectangular strip approximation 
## assumes even spacing in x. Could also calculate the dx in each step if it changes 
for (i in 1:(length(x))) { 

    if (y1[i] < y2[i]) { 
    cord.x <- c(x[i]-dx/2,x[i]-dx/2,x[i]+dx/2,x[i]+dx/2) 
    cord.y <- c(y1[i],y2[i],y2[i],y1[i]) 
    } else { 
    cord.x <- c(x[i]-dx/2,x[i]-dx/2,x[i]+dx/2,x[i]+dx/2) 
    cord.y <- c(y2[i],y1[i],y1[i],y2[i]) 
    } 

    # draw the polygons 
    polygon(cord.x, cord.y, col = 'pink', border = NA) 

    # sum to the area 
    area <- area + abs(y2[i]-y1[i])*dx 
} 
area 

sample shaded plot by rectangular approximation

+0

こんにちは、ありがとう!私が扱うデータセットは上記のコードのデータよりも面倒です。 xとyは順序付けされておらず、計算が難しくなっています。たとえば、(x、y)がカーブの上位か下かを判断するにはどうすればよいですか?私は質問の部分にxとyのデータセットを追加しました。 – Kirin

+0

私はこれにクリーンな解決策を考えようとしてきており、それを思い付くことができませんでした。 X値の範囲では、ある行が上の行と下の行の特定の領域を指定できますが、基本的には上記のスクリプトを区分的に実行する必要があります。データがかなり騒々しいように見えることを除いて、解析的に行うこともできますが、これは実現可能ではありません。 – Rob

関連する問題