2017-02-23 6 views
0

注:私はこれでかなり新しいです。 は、私は、それらがによって置かれたためにRクラス(ポップ)により標識ユニークな個人を示すRの2つの列から精度を計算し、サマリーテーブルを作成

INDIVIDUALS CURRENT INFERRED 
pop1_1 1 1 
pop1_2 1 1 
pop1_3 1 2 
pop2_1 2 3 
pop2_2 2 2 
pop2_3 2 2 
pop3_1 3 1 
pop3_2 3 2 
pop3_3 3 3 

、クラスは、彼らが実際に(CURRENT)に所属し、クラス内のデータフレーム(DF)を持っていますアルゴリズム(INFERRED)。

私が望むのは、クラスと全体の両方の精度の要約です。これまでのところ、私は、全体的な計算のためにこれを持って

POP CORRECT ACCURACY 
pop1 2 66.7 
pop2 2 66.7 
pop3 1 33.3 
OVERALL 5 55.6 

for (i in 1:ncol(reducedresults)) 
{reducedresults[,i]=as.vector(reducedresults[,i])} 
correct<-ifelse(reducedresults$CURRENT==reducedresults$INFERRED,1,0) 
accuracy<-sum(correct)/length(correct)*100 

私は精度を見つけるために、行を指定することができ考え出ししたがって、上記の例で、私はのようなものが欲しいですそれぞれのクラスは、私はどのように要約テーブルにそれを強制するか、または私は正しい軌道上にあるかどうかはわかりません。

+1

を計算するために、その常に良いアイデアをtableを使用することができ、グループ化変数

> df$GROUP <- sub('_.*', '', as.character(df$INDIVIDUALS)) 

が必要グループ変数(1,2,3)内であなたの個人とは別のものになります。これにより、集約が簡単になります。ここでは、 'cbind(do.call(rbind、strsplit as.character(df $個)、split =" _ "))、df)'のようなものでこれを行います。 – lmo

答えて

1

あなたは、あなたはあなたのグループの変数(ここではポップ)を保存するために、絶対的および相対的頻度を手始めに

> tab <- with(df, table(GROUP, CORRECT=CURRENT == INFERRED)) 
> addmargins(tab) 
     CORRECT 
GROUP FALSE TRUE Sum 
    pop1  1 2 3 
    pop2  1 2 3 
    pop3  2 1 3 
    Sum  4 5 9 
> prop.table(tab, margin=1) 
     CORRECT 
GROUP  FALSE  TRUE 
    pop1 0.3333333 0.6666667 
    pop2 0.3333333 0.6666667 
    pop3 0.6666667 0.3333333 
> prop.table(colSums(tab)) 
    FALSE  TRUE 
0.4444444 0.5555556 
関連する問題