5

私はここで R の完全な初心者であり、この質問の洗練されたレベルに対応しています。

R の ROCR パッケージを使用して、ROC 曲線のプロット データを生成しています。次に、ggplot2 を使用してプロットを描画します。このようなもの:

library(ggplot2)
library(ROCR)

inputFile <- read.csv("path/to/file", header=FALSE, sep=" ", colClasses=c('numeric','numeric'), col.names=c('score','label'))

predictions <- prediction(inputFile$score, inputFile$label)
auc <- performance(predictions, measure="auc")@y.values[[1]]

rocData <- performance(predictions, "tpr","fpr")
rocDataFrame <- data.frame(x=rocData@x.values[[1]],y=rocData@y.values[[1]])

rocr.plot <- ggplot(data=rd, aes(x=x, y=y)) + geom_path(size=1)
rocr.plot <- rocr.plot + geom_text(aes(x=1, y= 0, hjust=1, vjust=0, label=paste(sep = "", "AUC = ",round(auc,4))),colour="black",size=4)

これは、単一の ROC 曲線を描くのに適しています。ただし、私がやりたいことは、ディレクトリ全体に相当する入力ファイル (分類子テスト結果ごとに 1 つのファイル) を読み取り、AUC スコアを各プロットに出力しながら、すべての ROC 曲線の ggplot2 多面プロットを作成することです。

これを達成するための「適切な」Rスタイルのアプローチとは何かを理解したいと思います。1つのループでディレクトリ内のすべてのファイルを調べて、それぞれに個別のデータフレームを作成し、別のループで複数のプロットを作成し、ggplo2でこれらすべてのプロットを同じファイルに出力することで、何かを一緒にハックできると確信しています。水面。ただし、それではggplot2の組み込みのファセットを使用できません。これは正しいアプローチだと思います。ただし、ファセットを使用するためにデータを適切な形にする方法はわかりません。すべてのデータ フレームを 1 つのデータ フレームにマージし、マージされた各チャンクに名前 (ファイル名など) を付けてファセット処理する必要がありますか? もしそうなら、これを実現するためのライブラリまたは推奨される方法はありますか?

あなたの提案は大歓迎です。私はまだ R のベスト プラクティスに頭を悩ませているので、慣れ親しんだ通常の宣言型プログラミング言語のように見えるコードを作成するために何かをハックするのではなく、専門家のアドバイスを得たいと考えています。

編集:私が最も明確でないことは、ggplot2 の組み込みのファセット機能を使用する場合、生成される各プロットにカスタム文字列 (AUC スコア) を出力できるかどうかです。

4

1 に答える 1

13

説明したようにプロットを生成する方法の例を次に示します。組み込みのデータセットを使用しますquakes:

コードは次のことを行います。

  • ggplot2plyrパッケージをロードする
  • ファセット変数を追加しますquakes- この場合、地震の深さで要約します
  • ddply各深度の平均マグニチュードを要約するために使用します
  • とともに使用ggplotgeom_textて、平均マグニチュードにラベルを付けます

コード:

library(plyr)
library(ggplot2)

quakes$level <- cut(quakes$depth, 5, 
  labels=c("Very Shallow", "Shallow", "Medium", "Deep", "Very Deep"))

quakes.summary <- ddply(quakes, .(level), summarise, mag=round(mean(mag), 1))

ggplot(quakes, aes(x=long, y=lat)) + 
  geom_point(aes(colour=mag)) + 
  geom_text(aes(label=mag), data=quakes.summary, x=185, y=-35) +
  facet_grid(~level) + 
  coord_map()

ここに画像の説明を入力

于 2012-08-08T07:46:05.013 に答える