2016-11-11 10 views
0

多くの検索の後、私の問題に対する答えを見つけることができませんでした。 forループまたはsapplyを使用してpROC pakkageでROCカーブを生成したいと思います。forループまたはサプリでROC曲線を作成

私のデータベースは(唯一の26のcolumsと74行で)次のようになります。 '自動' の

plot.new() 
roc1 <- roc(cor.datT$PA, cor.datT$mT1G, percent=TRUE, partial.auc=c(100, 90), partial.auc.correct=TRUE, 
      partial.auc.focus="sens", ci=TRUE, boot.n=100, ci.alpha=0.9, stratified=FALSE, plot=TRUE, col= 'red') 
roc2 <- roc(cor.datT$PA, cor.datT$mT01, plot=TRUE, add=TRUE, percent=roc1$percent, col = 'blue') 

私が試した:私は '手動' ROC曲線を作ることができます

PT Bpt PA mnT1G mnT01 
1 1 1 2.3 4.5 
1 2 0 1.2 3.2 
2 1 1 5.4 2.1 

まず、ROC曲線常にmnT1G:

rocT1G <- roc(cor.datT$PA, cor.datT$mnT1G, percent=TRUE, partial.auc=c(100, 90), partial.auc.correct=TRUE, partial.auc.focus="sens", ci=TRUE, boot.n=100, ci.alpha=0.9, stratified=FALSE, plot=TRUE, col= 'red') 

他のrocカーブを追加します(データ$ Imgは、別のデータフレームのすべてのイメージ名(T1G、T01など)です)。私は彼らのすべてが青になります理解:

sapply(unique(data$Img[data$Img != "T1G"]), FUN = function(i) paste("roc",i,sep="") <- roc(cor.datT$PA, cor.datT[paste("mn",i, sep = "")], plot=TRUE, add=TRUE, percent=rocT1G$percent, col = 'blue'), simplify = FALSE) 

しかし、私はこのエラーを取得する:

Error in roc.default(cor.datT$PA, cor.datT[paste("mn", i, sep = "")], : Predictor must be numeric or ordered.

同じループのために起こる:

for (i in unique(data$Img[data$Img != "T1G"])){ 
    plot.new() 
    rocT1G <- roc(cor.datT$PA, cor.datT$mnT1G, percent=TRUE, partial.auc=c(100, 90), partial.auc.correct=TRUE, partial.auc.focus="sens", ci=TRUE, boot.n=100, ci.alpha=0.9, stratified=FALSE, plot=TRUE, col= 'red') 
    paste("roc",i,sep="") <- roc(cor.datT$PA, cor.datT[paste("mn",i, sep = "")], plot=TRUE, add=TRUE, percent=rocT1G$percent, col = 'blue') 
} 

私は列をチェックし、彼らはすべての数値です。だから、スクリプトのクラスで何か問題が起きる可能性がありますか?

+0

編集あなたの質問を。特定のオプションは、編集ボックスの上部に表示されます –

答えて

0

私の他の回答のコメントに記したように、問題は具体的にdata.frameが抽出されてしまうことです。

data.frameでは、1文字で抽出するとdata.frameが返されます。これは?Extract.data.frameに記載されています:

Data frames can be indexed in several modes. When [ and [[ are used with a single vector index (x[i] or x[[i]]), they index the data frame as if it were a list.

そして?Extractを見て:

Recursive (list-like) objects

Indexing by [ is similar to atomic vectors and selects a list of the specified element(s).

これは、テキストからそれほど明白ではありませんが、ベクターに列を抽出するために、次の2つを使用する必要があります角括弧[[

class(cor.datT[[paste("mn",i, sep = "")]]) 

はベクターである必要があります。

今、次のコードを実行する必要があります適切に表示されるコードを持っている

rocT1G <- roc(cor.datT$PA, cor.datT$mnT1G, percent=TRUE, partial.auc=c(100, 90), partial.auc.correct=TRUE, partial.auc.focus="sens", ci=TRUE, boot.n=100, ci.alpha=0.9, stratified=FALSE, plot=TRUE, col= 'red') 
for (i in unique(data$Img[data$Img != "T1G"])){ 
    roc(cor.datT$PA, cor.datT[[paste("mn",i, sep = "")]], plot=TRUE, add=TRUE, percent=rocT1G$percent, col = 'blue') 
} 
+0

ありがとう!これは動作します!しかし、次の問題は、最後の行に沿って、rocオブジェクトを生成しています。これを手動で行う場合、オブジェクトrocT1GのクラスrocT01は "roc"です。ループでは、クラスは「文字」です。どのようにすれば、正しいクラスを生成するためのループを得ることができますか? –

+0

これはエラーです。貼り付けエラー( "roc"、i、sep = "")< - roc(cor.datT $ PA、cor.datT [[paste( "mn"、: -language object –

+0

文字列にROC曲線を割り当てることはできませんが、それをすべて割り当てる必要がありますか?答えを編集してみましょう – Calimo

0

期待どおり、列の1つが数値ではありません。残念ながら、Rからのエラーメッセージは、問題が発生し、ループのどの繰り返しであなたを教えてくれませんが、簡単に問題

for (i in unique(data$Img[data$Img != "T1G"])){ 
    print(i) 
    plot.new() 
    rocT1G <- roc(cor.datT$PA, cor.datT$mnT1G, percent=TRUE, partial.auc=c(100, 90), partial.auc.correct=TRUE, partial.auc.focus="sens", ci=TRUE, boot.n=100, ci.alpha=0.9, stratified=FALSE, plot=TRUE, col= 'red') 
    paste("roc",i,sep="") <- roc(cor.datT$PA, cor.datT[paste("mn",i, sep = "")], plot=TRUE, add=TRUE, percent=rocT1G$percent, col = 'blue') 
} 

最後の列の数を出したコラムを把握するためにあなたのループにprintステートメントを追加することができます印刷されます。あなたは列に何が起こっているか見ることができます。

class(cor.datT[paste("mn",i, sep = "")]) 
str(cor.datT[paste("mn",i, sep = "")]) 

より一般的には、クラスcharacterまたはfactor中の列のためにチェックアウト

str(cor.datT) 

で非常に迅速にデータフレームのすべての列を検査することができます特に。

+0

Calimoありがとうございます。データフレームcor.datTの列のクラスはすべて数値です。 print(class(cor.datT [paste( "mn"、i、sep = ""])))では、ループによってすべてのデータフレームが作成されます。どのようにループに数値を残すことができますか? –

+0

良いキャッチ、私は新しい答えを投稿させてください – Calimo

関連する問題