2016-08-29 9 views
-1

一連の値をループし、テーブルカウント結果を別のベクトルまたはマトリックスに保存しようとしています。私はプログラミングに慣れていないので、貧しい試みを許してください。テーブルカウントをベクトルとして保存する

pred_test <- seq(0, 1, length=1000) 
test$PURCHASER_FLAG <- sample(c(0,1), size=1000, replace= TRUE) 
crit = seq(from=0, to=1, by=.01) 

list <- matrix(0, nrow=101, ncol=2) 

for (i in 1:length(crit)) { 
list[i,] <- as.numeric(table(pred_test >= i, test$PURCHASER_FLAG)[2,]) 

} 

は私がクリティカルのすべての値をループしたいと「リスト」と呼ばれる新しいベクトルに行として各関連するテーブル数の結果を保存します。

は、ここに私の問題です。 Pred_testは0-1の確率スコアであり、Purchaserフラグは0または1の関連クラスです。 関連するクリティカルスレッシュホールドごとにこれらのカウントをcritに保存します。

これを行う簡単な方法がある場合は教えてください。

+1

'pred_test'と' test $ PURCHASER_FLAG'とは何ですか?再現可能な例を提供してください – akrun

答えて

0

使用sapply、あなたが生成するすべてのテーブルの寸法が同じあなたのケースでは(2×2)であることを確認してください。

library(dplyr) 
library(tidyr) 


# generate the data 
df_foo = data_frame(
    pred_test = runif(1000), 
    PURCHASER_FLAG = sample(c(0, 1), size = 1000, replace = TRUE) 
) 

# collect the confusion matrices 
m_confusion = sapply(
    seq(0, 1, .1), function(x) { 
    # straighten out the matrix 
    as.numeric(
     # create the confusion matrix 
     table(
     # ensure that all the levels are always represented 
     factor(
      df_foo$pred_test > x, levels = c("TRUE", "FALSE") 
     ), 
     df_foo$PURCHASER_FLAG 
    ) 
    ) 
    } 
) 

# add some dimnames to the matrix created 
colnames(m_confusion) = seq(0, 1, 0.1) 

# create the rownames from a dummy object 
rownames_confusion = 
    unite(
    expand.grid(
     dimnames(
     table(
      factor(
      df_foo$pred_test > 0.1, levels = c("TRUE", "FALSE")), df_foo$PURCHASER_FLAG 
     ) 
    ) 
    ), rownames, everything() 
)$rownames 

# attach the rownames 
rownames(m_confusion) = rownames_confusion 

# print the final object 
m_confusion 

これが与える:

> m_confusion 
      0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 
TRUE_0 510 467 425 376 318 274 210 157 103 52 0 
FALSE_0 0 43 85 134 192 236 300 353 407 458 510 
TRUE_1 490 428 374 326 284 246 205 158 111 54 0 
FALSE_1 0 62 116 164 206 244 285 332 379 436 490 

を私は確信してそこにいます行の薄暗い名前を作成する簡単な方法ですが、私はあなたに把握するためにそれを残します。

関連する問題