2016-12-22 6 views
1

モデル化/予測変更と実際の変更があります。予測される変更はforecastHPIChangeという列にあり、実際の変更はHPIChangeという名前になります。予測モデルが正しいかどうかをよりうまくテストする方法はありますか?

 HPIChange forecastHPIChange 
1    NA  1.547368e-02 
2 -0.0026155187  1.485668e-02 
3 0.0002906977  1.251108e-02 
4 -0.0077877127  1.718729e-02 
5 0.0200058841  2.143551e-02 

予測の符号の一致が正しいかどうかは、143インスタンスをテストしたいと思います。だから、本当に4例があります。

  1. 予測が正であり、実際には肯定的である - >正しい陽性
  2. 見通しはネガティブであり、実際にはマイナスされる - >正しい陰性
  3. 予測は正であり、実際には否定的です - > - 間違った正
  4. 見通しはネガティブであり、実際には肯定的である - >間違って陰性

これを確認するには、私が一緒に次のコードをハッキングしてきたと私はデータフレームBにそれらを養うことができ私はこのチェックを行うよりエレガントな方法があるかどうかを確認したいと思っていましたか?

data1 %>% 
    filter(forecastHPIChange > 0 & HPIChange > 0) %>% 
    summarise(correct = n()) 

data1 %>% 
    filter(forecastHPIChange < 0 & HPIChange < 0) %>% 
      summarise(correct = n()) 

data1 %>% 
    filter(forecastHPIChange < 0 & HPIChange > 0) %>% 
      summarise(wrong = n()) 

data1 %>% 
    filter(forecastHPIChange > 0 & HPIChange < 0) %>% 
      summarise(wrong = n()) 

答えて

2

キャレットパッケージにconfusionMatrixをお試しください:

library(caret) 

make_factor <- function(x) factor(sign(x), levels = c(-1, 1)) 
signs <- as.data.frame(lapply(data1, make_factor)) 
with(signs, confusionMatrix(forecastHPIChange, reference = HPIChange)) 

またはパイプラインを使用して:

library(purrr) 

data1 %>% 
     map_df(make_factor) %>% 
     { confusionMatrix(.$forecastHPIChange, reference = .$HPIChange) } 

どちらかが与えられる:示さ入力されていないすべての要因については

Confusion Matrix and Statistics 

      Reference 
Prediction -1 1 
     -1 0 0 
     1 2 2 

       Accuracy : 0.5    
       95% CI : (0.0676, 0.9324) 
    No Information Rate : 0.5    
    P-Value [Acc > NIR] : 0.6875   

        Kappa : 0    
Mcnemar's Test P-Value : 0.4795   

      Sensitivity : 0.0    
      Specificity : 1.0    
     Pos Pred Value : NaN    
     Neg Pred Value : 0.5    
      Prevalence : 0.5    
     Detection Rate : 0.0    
    Detection Prevalence : 0.0    
     Balanced Accuracy : 0.5   

をレベルが現れた実際の入力にすべての要素レベルがある場合は、make_factorを削除して代わりにsignを使用することができます。

注:上記の使用再現性の形で入力data1は次のとおりです。

次のデータを皮切り
data1 <- structure(list(HPIChange = c(NA, -0.0026155187, 0.0002906977, 
-0.0077877127, 0.0200058841), forecastHPIChange = c(0.01547368, 
0.01485668, 0.01251108, 0.01718729, 0.02143551)), .Names = c("HPIChange", 
"forecastHPIChange"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5")) 
0

(、すべてのクラスTP、FPのために本データポイントを持っているあなたの例のデータを少し変更TN、FN):

data1 
     HPIChange forecastHPIChange 
1   NA  0.01547368 
2 -0.0026155187  0.01485668 
3 0.0002906977  0.01251108 
4 -0.0077877127  -0.01718729 
5 0.0200058841  -0.02143551 

# transform the data1 to dataset data2 where we have only + and - labels (represented by +1 and -1) 
data2 <- as.data.frame(sapply(data1, function(x) ifelse(x > 0, 1, -1))) 

table(data2)  

    forecastHPIChange 
HPIChange -1 1 
     -1 1 1 # 1, 1 = TP 1, -1 = FN 
     1 1 1 # -1. -1 = TN -1, 1 = FP 

# using the package caret 
library(caret) 
confusionMatrix(data2$forecastHPIChange, data2$HPIChange) 
関連する問題