Introduction and Data Understanding

About the data

The German Credit Scoring data set contains 1000 observations and 21 variables. The dataset in this form is provided by Professor Dr. Hans Hofmann. The dataset contains 14 categorical variables and 7 numerical variables.

Objectives:

  • To build a predictive model to classify customers as good or a bad using logistic regression
  • Also making sure the model adheres to the idea that - It is worse to classify a customer as good when they are bad than it is to classify a customer as bad when they are good

Accessing necessary packages

library(caret)
library(verification)
library(rpart)
library(rpart.plot)
library(verification)
library(mgcv)
library(nnet)
library(NeuralNetTools)
library(e1071)

Loading Data and Initial Cleaning

german.data <- read.table("http://archive.ics.uci.edu/ml/machine-learning-databases/statlog/german/german.data")

colnames(german.data) <- c("chk_acct", "duration", "credit_his", "purpose", 
                             "amount", "saving_acct", "present_emp", "installment_rate", "sex", "other_debtor", 
                             "present_resid", "property", "age", "other_install", "housing", "n_credits", 
                             "job", "n_people", "telephone", "foreign", "response")
german.data$response <- german.data$response- 1
german.data$response <- as.factor(german.data$response)
str(german.data)
## 'data.frame':    1000 obs. of  21 variables:
##  $ chk_acct        : Factor w/ 4 levels "A11","A12","A13",..: 1 2 4 1 1 4 4 2 4 2 ...
##  $ duration        : int  6 48 12 42 24 36 24 36 12 30 ...
##  $ credit_his      : Factor w/ 5 levels "A30","A31","A32",..: 5 3 5 3 4 3 3 3 3 5 ...
##  $ purpose         : Factor w/ 10 levels "A40","A41","A410",..: 5 5 8 4 1 8 4 2 5 1 ...
##  $ amount          : int  1169 5951 2096 7882 4870 9055 2835 6948 3059 5234 ...
##  $ saving_acct     : Factor w/ 5 levels "A61","A62","A63",..: 5 1 1 1 1 5 3 1 4 1 ...
##  $ present_emp     : Factor w/ 5 levels "A71","A72","A73",..: 5 3 4 4 3 3 5 3 4 1 ...
##  $ installment_rate: int  4 2 2 2 3 2 3 2 2 4 ...
##  $ sex             : Factor w/ 4 levels "A91","A92","A93",..: 3 2 3 3 3 3 3 3 1 4 ...
##  $ other_debtor    : Factor w/ 3 levels "A101","A102",..: 1 1 1 3 1 1 1 1 1 1 ...
##  $ present_resid   : int  4 2 3 4 4 4 4 2 4 2 ...
##  $ property        : Factor w/ 4 levels "A121","A122",..: 1 1 1 2 4 4 2 3 1 3 ...
##  $ age             : int  67 22 49 45 53 35 53 35 61 28 ...
##  $ other_install   : Factor w/ 3 levels "A141","A142",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ housing         : Factor w/ 3 levels "A151","A152",..: 2 2 2 3 3 3 2 1 2 2 ...
##  $ n_credits       : int  2 1 1 1 2 1 1 1 1 2 ...
##  $ job             : Factor w/ 4 levels "A171","A172",..: 3 3 2 3 3 2 3 4 2 4 ...
##  $ n_people        : int  1 1 2 2 2 2 1 1 1 1 ...
##  $ telephone       : Factor w/ 2 levels "A191","A192": 2 1 1 1 1 2 1 2 1 1 ...
##  $ foreign         : Factor w/ 2 levels "A201","A202": 1 1 1 1 1 1 1 1 1 1 ...
##  $ response        : Factor w/ 2 levels "0","1": 1 2 1 1 2 1 1 1 1 2 ...
summary(german.data)
##  chk_acct     duration    credit_his    purpose        amount     
##  A11:274   Min.   : 4.0   A30: 40    A43    :280   Min.   :  250  
##  A12:269   1st Qu.:12.0   A31: 49    A40    :234   1st Qu.: 1366  
##  A13: 63   Median :18.0   A32:530    A42    :181   Median : 2320  
##  A14:394   Mean   :20.9   A33: 88    A41    :103   Mean   : 3271  
##            3rd Qu.:24.0   A34:293    A49    : 97   3rd Qu.: 3972  
##            Max.   :72.0              A46    : 50   Max.   :18424  
##                                      (Other): 55                  
##  saving_acct present_emp installment_rate  sex      other_debtor
##  A61:603     A71: 62     Min.   :1.000    A91: 50   A101:907    
##  A62:103     A72:172     1st Qu.:2.000    A92:310   A102: 41    
##  A63: 63     A73:339     Median :3.000    A93:548   A103: 52    
##  A64: 48     A74:174     Mean   :2.973    A94: 92               
##  A65:183     A75:253     3rd Qu.:4.000                          
##                          Max.   :4.000                          
##                                                                 
##  present_resid   property        age        other_install housing   
##  Min.   :1.000   A121:282   Min.   :19.00   A141:139      A151:179  
##  1st Qu.:2.000   A122:232   1st Qu.:27.00   A142: 47      A152:713  
##  Median :3.000   A123:332   Median :33.00   A143:814      A153:108  
##  Mean   :2.845   A124:154   Mean   :35.55                           
##  3rd Qu.:4.000              3rd Qu.:42.00                           
##  Max.   :4.000              Max.   :75.00                           
##                                                                     
##    n_credits       job         n_people     telephone  foreign    response
##  Min.   :1.000   A171: 22   Min.   :1.000   A191:596   A201:963   0:700   
##  1st Qu.:1.000   A172:200   1st Qu.:1.000   A192:404   A202: 37   1:300   
##  Median :1.000   A173:630   Median :1.000                                 
##  Mean   :1.407   A174:148   Mean   :1.155                                 
##  3rd Qu.:2.000              3rd Qu.:1.000                                 
##  Max.   :4.000              Max.   :2.000                                 
## 

Splitting the Data into Training and Testing

set.seed(12941211)
trainrows <- sample(nrow(german.data), nrow(german.data) * 0.75)
germandata.train <- german.data[trainrows, ]
germandata.test <- german.data[-trainrows,]

Logistic Regression Model

  • The dataset has been randomly sampled to 75% training dataset and 25% testing dataset. Logistic regression was implemented on the training dataset.
  • A cost function will be created which will contain different weights for False Negative and False Positive predictions and a weighted mean of the same would be take
  • Here we’re using the ratio of 5:1 asymmetric cost which means we’re assigning a higher weight for False Negative
#logit link
germandata.train.glm0 <- glm(response~., family = binomial, germandata.train)
summary(germandata.train.glm0)
## 
## Call:
## glm(formula = response ~ ., family = binomial, data = germandata.train)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.3693  -0.6994  -0.3639   0.6540   2.7241  
## 
## Coefficients:
##                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept)       -7.513e-01  1.323e+00  -0.568  0.57002    
## chk_acctA12       -4.270e-02  2.578e-01  -0.166  0.86845    
## chk_acctA13       -1.290e+00  4.609e-01  -2.799  0.00512 ** 
## chk_acctA14       -1.853e+00  2.775e-01  -6.678 2.42e-11 ***
## duration           3.042e-02  1.113e-02   2.733  0.00628 ** 
## credit_hisA31      8.637e-02  6.780e-01   0.127  0.89863    
## credit_hisA32     -3.782e-01  5.506e-01  -0.687  0.49218    
## credit_hisA33     -5.661e-01  5.912e-01  -0.957  0.33834    
## credit_hisA34     -8.993e-01  5.617e-01  -1.601  0.10935    
## purposeA41        -1.700e+00  4.586e-01  -3.707  0.00021 ***
## purposeA410       -2.042e+00  9.135e-01  -2.236  0.02536 *  
## purposeA42        -8.400e-01  3.079e-01  -2.728  0.00637 ** 
## purposeA43        -8.196e-01  2.855e-01  -2.871  0.00409 ** 
## purposeA44         1.019e-01  9.922e-01   0.103  0.91821    
## purposeA45        -5.681e-02  6.798e-01  -0.084  0.93340    
## purposeA46         5.913e-02  4.736e-01   0.125  0.90065    
## purposeA48        -1.698e+00  1.220e+00  -1.392  0.16385    
## purposeA49        -8.827e-01  4.092e-01  -2.157  0.03102 *  
## amount             1.607e-04  5.227e-05   3.074  0.00211 ** 
## saving_acctA62    -3.060e-01  3.492e-01  -0.876  0.38090    
## saving_acctA63     1.442e-01  4.288e-01   0.336  0.73674    
## saving_acctA64    -1.475e+00  6.713e-01  -2.198  0.02796 *  
## saving_acctA65    -8.199e-01  3.068e-01  -2.672  0.00754 ** 
## present_empA72     1.146e-01  4.958e-01   0.231  0.81718    
## present_empA73     3.257e-02  4.731e-01   0.069  0.94512    
## present_empA74    -7.175e-01  5.325e-01  -1.347  0.17787    
## present_empA75    -1.523e-01  4.763e-01  -0.320  0.74916    
## installment_rate   4.310e-01  1.056e-01   4.082 4.46e-05 ***
## sexA92            -1.293e-01  4.611e-01  -0.280  0.77910    
## sexA93            -8.832e-01  4.508e-01  -1.959  0.05009 .  
## sexA94            -5.197e-01  5.393e-01  -0.964  0.33529    
## other_debtorA102   2.410e-01  4.785e-01   0.504  0.61442    
## other_debtorA103  -1.155e+00  5.412e-01  -2.134  0.03288 *  
## present_resid     -2.282e-02  1.012e-01  -0.226  0.82155    
## propertyA122       3.672e-01  3.040e-01   1.208  0.22705    
## propertyA123       3.595e-01  2.803e-01   1.282  0.19968    
## propertyA124       1.110e+00  4.922e-01   2.255  0.02415 *  
## age               -3.872e-03  1.107e-02  -0.350  0.72644    
## other_installA142 -2.236e-01  4.922e-01  -0.454  0.64959    
## other_installA143 -6.766e-01  2.758e-01  -2.453  0.01416 *  
## housingA152       -1.838e-01  2.876e-01  -0.639  0.52278    
## housingA153       -7.745e-01  5.620e-01  -1.378  0.16817    
## n_credits          1.924e-01  2.180e-01   0.883  0.37748    
## jobA172           -7.237e-02  7.949e-01  -0.091  0.92746    
## jobA173           -2.264e-02  7.705e-01  -0.029  0.97656    
## jobA174           -3.009e-01  7.744e-01  -0.389  0.69756    
## n_people           4.528e-01  2.880e-01   1.572  0.11588    
## telephoneA192     -3.111e-01  2.321e-01  -1.341  0.18005    
## foreignA202       -9.843e-01  6.500e-01  -1.514  0.12993    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 889.43  on 749  degrees of freedom
## Residual deviance: 655.53  on 701  degrees of freedom
## AIC: 753.53
## 
## Number of Fisher Scoring iterations: 5
step(germandata.train.glm0)
## Start:  AIC=753.53
## response ~ chk_acct + duration + credit_his + purpose + amount + 
##     saving_acct + present_emp + installment_rate + sex + other_debtor + 
##     present_resid + property + age + other_install + housing + 
##     n_credits + job + n_people + telephone + foreign
## 
##                    Df Deviance    AIC
## - job               3   656.28 748.28
## - credit_his        4   661.28 751.28
## - housing           2   657.46 751.46
## - present_resid     1   655.58 751.58
## - age               1   655.65 751.65
## - present_emp       4   661.69 751.69
## - n_credits         1   656.31 752.31
## - property          3   660.90 752.90
## - telephone         1   657.34 753.34
## <none>                  655.53 753.53
## - n_people          1   657.97 753.97
## - foreign           1   658.14 754.14
## - other_debtor      2   661.21 755.21
## - other_install     2   661.90 755.90
## - saving_acct       4   668.24 758.24
## - sex               3   666.37 758.37
## - duration          1   663.06 759.06
## - amount            1   665.20 761.20
## - purpose           9   682.77 762.77
## - installment_rate  1   673.15 769.15
## - chk_acct          3   723.39 815.39
## 
## Step:  AIC=748.28
## response ~ chk_acct + duration + credit_his + purpose + amount + 
##     saving_acct + present_emp + installment_rate + sex + other_debtor + 
##     present_resid + property + age + other_install + housing + 
##     n_credits + n_people + telephone + foreign
## 
##                    Df Deviance    AIC
## - housing           2   658.09 746.09
## - present_emp       4   662.22 746.22
## - credit_his        4   662.23 746.23
## - present_resid     1   656.30 746.30
## - age               1   656.43 746.43
## - n_credits         1   657.16 747.16
## - property          3   661.48 747.48
## <none>                  656.28 748.28
## - n_people          1   658.77 748.77
## - telephone         1   658.95 748.95
## - foreign           1   658.97 748.97
## - other_debtor      2   661.81 749.81
## - other_install     2   662.40 750.40
## - saving_acct       4   668.41 752.41
## - sex               3   667.15 753.15
## - duration          1   664.44 754.44
## - amount            1   665.22 755.22
## - purpose           9   684.59 758.59
## - installment_rate  1   673.32 763.32
## - chk_acct          3   724.23 810.23
## 
## Step:  AIC=746.09
## response ~ chk_acct + duration + credit_his + purpose + amount + 
##     saving_acct + present_emp + installment_rate + sex + other_debtor + 
##     present_resid + property + age + other_install + n_credits + 
##     n_people + telephone + foreign
## 
##                    Df Deviance    AIC
## - present_emp       4   663.80 743.80
## - property          3   661.95 743.95
## - present_resid     1   658.11 744.11
## - credit_his        4   664.19 744.19
## - age               1   658.59 744.59
## - n_credits         1   659.01 745.01
## <none>                  658.09 746.09
## - n_people          1   660.35 746.35
## - foreign           1   660.53 746.53
## - telephone         1   660.64 746.64
## - other_debtor      2   663.78 747.78
## - other_install     2   664.29 748.29
## - saving_acct       4   669.46 749.46
## - duration          1   665.53 751.53
## - sex               3   670.40 752.40
## - amount            1   667.42 753.42
## - purpose           9   687.10 757.10
## - installment_rate  1   674.94 760.94
## - chk_acct          3   725.75 807.75
## 
## Step:  AIC=743.8
## response ~ chk_acct + duration + credit_his + purpose + amount + 
##     saving_acct + installment_rate + sex + other_debtor + present_resid + 
##     property + age + other_install + n_credits + n_people + telephone + 
##     foreign
## 
##                    Df Deviance    AIC
## - property          3   667.33 741.33
## - present_resid     1   663.90 741.90
## - age               1   664.45 742.45
## - n_credits         1   664.55 742.55
## - credit_his        4   670.67 742.67
## <none>                  663.80 743.80
## - n_people          1   666.10 744.10
## - foreign           1   666.12 744.12
## - telephone         1   667.13 745.13
## - other_debtor      2   670.50 746.50
## - other_install     2   670.56 746.56
## - duration          1   670.49 748.49
## - saving_acct       4   676.62 748.62
## - amount            1   672.79 750.79
## - sex               3   678.87 752.87
## - purpose           9   693.09 755.09
## - installment_rate  1   681.36 759.36
## - chk_acct          3   733.19 807.19
## 
## Step:  AIC=741.33
## response ~ chk_acct + duration + credit_his + purpose + amount + 
##     saving_acct + installment_rate + sex + other_debtor + present_resid + 
##     age + other_install + n_credits + n_people + telephone + 
##     foreign
## 
##                    Df Deviance    AIC
## - present_resid     1   667.34 739.34
## - age               1   667.60 739.60
## - n_credits         1   667.99 739.99
## - credit_his        4   674.35 740.35
## <none>                  667.33 741.33
## - n_people          1   669.62 741.62
## - foreign           1   669.75 741.75
## - telephone         1   670.23 742.23
## - other_install     2   674.64 744.64
## - other_debtor      2   675.69 745.69
## - saving_acct       4   680.54 746.54
## - duration          1   675.55 747.55
## - sex               3   681.58 749.58
## - amount            1   677.59 749.59
## - purpose           9   697.20 753.20
## - installment_rate  1   686.05 758.05
## - chk_acct          3   738.85 806.85
## 
## Step:  AIC=739.34
## response ~ chk_acct + duration + credit_his + purpose + amount + 
##     saving_acct + installment_rate + sex + other_debtor + age + 
##     other_install + n_credits + n_people + telephone + foreign
## 
##                    Df Deviance    AIC
## - age               1   667.65 737.65
## - n_credits         1   667.99 737.99
## - credit_his        4   674.37 738.37
## <none>                  667.34 739.34
## - n_people          1   669.62 739.62
## - foreign           1   669.75 739.75
## - telephone         1   670.27 740.27
## - other_install     2   674.68 742.68
## - other_debtor      2   675.70 743.70
## - saving_acct       4   680.56 744.56
## - duration          1   675.56 745.56
## - sex               3   681.58 747.58
## - amount            1   677.62 747.62
## - purpose           9   697.29 751.29
## - installment_rate  1   686.05 756.05
## - chk_acct          3   739.06 805.06
## 
## Step:  AIC=737.65
## response ~ chk_acct + duration + credit_his + purpose + amount + 
##     saving_acct + installment_rate + sex + other_debtor + other_install + 
##     n_credits + n_people + telephone + foreign
## 
##                    Df Deviance    AIC
## - n_credits         1   668.26 736.26
## - credit_his        4   674.81 736.81
## <none>                  667.65 737.65
## - n_people          1   669.87 737.87
## - foreign           1   670.00 738.00
## - telephone         1   670.85 738.85
## - other_install     2   674.86 740.86
## - other_debtor      2   676.12 742.12
## - saving_acct       4   681.09 743.09
## - duration          1   676.00 744.00
## - amount            1   677.86 745.86
## - sex               3   682.91 746.91
## - purpose           9   697.43 749.43
## - installment_rate  1   686.18 754.18
## - chk_acct          3   740.27 804.27
## 
## Step:  AIC=736.26
## response ~ chk_acct + duration + credit_his + purpose + amount + 
##     saving_acct + installment_rate + sex + other_debtor + other_install + 
##     n_people + telephone + foreign
## 
##                    Df Deviance    AIC
## - credit_his        4   674.95 734.95
## <none>                  668.26 736.26
## - n_people          1   670.64 736.64
## - foreign           1   670.72 736.72
## - telephone         1   671.18 737.18
## - other_install     2   675.91 739.91
## - other_debtor      2   676.70 740.70
## - saving_acct       4   681.69 741.69
## - duration          1   676.45 742.45
## - amount            1   678.40 744.40
## - sex               3   683.38 745.38
## - purpose           9   698.33 748.33
## - installment_rate  1   686.75 752.75
## - chk_acct          3   740.80 802.80
## 
## Step:  AIC=734.95
## response ~ chk_acct + duration + purpose + amount + saving_acct + 
##     installment_rate + sex + other_debtor + other_install + n_people + 
##     telephone + foreign
## 
##                    Df Deviance    AIC
## <none>                  674.95 734.95
## - n_people          1   677.37 735.37
## - foreign           1   677.48 735.48
## - telephone         1   677.92 735.92
## - other_debtor      2   683.52 739.52
## - saving_acct       4   689.04 741.04
## - duration          1   683.88 741.88
## - other_install     2   685.98 741.98
## - amount            1   686.17 744.17
## - sex               3   691.58 745.58
## - purpose           9   704.18 746.18
## - installment_rate  1   693.04 751.04
## - chk_acct          3   759.11 813.11
## 
## Call:  glm(formula = response ~ chk_acct + duration + purpose + amount + 
##     saving_acct + installment_rate + sex + other_debtor + other_install + 
##     n_people + telephone + foreign, family = binomial, data = germandata.train)
## 
## Coefficients:
##       (Intercept)        chk_acctA12        chk_acctA13  
##        -1.1048079         -0.0584091         -1.3145561  
##       chk_acctA14           duration         purposeA41  
##        -1.9939350          0.0310699         -1.6568374  
##       purposeA410         purposeA42         purposeA43  
##        -2.0366048         -0.6974679         -0.8269341  
##        purposeA44         purposeA45         purposeA46  
##         0.2908069          0.1036726          0.2631046  
##        purposeA48         purposeA49             amount  
##        -1.4506261         -0.7916964          0.0001624  
##    saving_acctA62     saving_acctA63     saving_acctA64  
##        -0.2033314          0.2385046         -1.4244078  
##    saving_acctA65   installment_rate             sexA92  
##        -0.8013818          0.4185865          0.0192570  
##            sexA93             sexA94   other_debtorA102  
##        -0.8756687         -0.5076356          0.3671755  
##  other_debtorA103  other_installA142  other_installA143  
##        -1.3148286         -0.2495753         -0.8232115  
##          n_people      telephoneA192        foreignA202  
##         0.4359517         -0.3608315         -0.9572702  
## 
## Degrees of Freedom: 749 Total (i.e. Null);  720 Residual
## Null Deviance:       889.4 
## Residual Deviance: 674.9     AIC: 734.9
germandata.train.glm0<- glm(formula = response ~ chk_acct + duration + credit_his + purpose + 
      amount + saving_acct + present_emp + installment_rate + sex + 
      other_install + housing + telephone + foreign, family = binomial, 
    data = germandata.train)
summary(germandata.train.glm0)
## 
## Call:
## glm(formula = response ~ chk_acct + duration + credit_his + purpose + 
##     amount + saving_acct + present_emp + installment_rate + sex + 
##     other_install + housing + telephone + foreign, family = binomial, 
##     data = germandata.train)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.3306  -0.7158  -0.3894   0.7236   2.7392  
## 
## Coefficients:
##                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        1.891e-01  9.086e-01   0.208 0.835101    
## chk_acctA12       -1.370e-01  2.472e-01  -0.554 0.579477    
## chk_acctA13       -1.297e+00  4.530e-01  -2.864 0.004178 ** 
## chk_acctA14       -1.835e+00  2.732e-01  -6.717 1.86e-11 ***
## duration           3.136e-02  1.063e-02   2.952 0.003162 ** 
## credit_hisA31     -8.422e-02  6.470e-01  -0.130 0.896428    
## credit_hisA32     -5.516e-01  5.282e-01  -1.044 0.296292    
## credit_hisA33     -5.597e-01  5.783e-01  -0.968 0.333121    
## credit_hisA34     -9.286e-01  5.462e-01  -1.700 0.089081 .  
## purposeA41        -1.744e+00  4.471e-01  -3.900 9.60e-05 ***
## purposeA410       -1.926e+00  8.988e-01  -2.142 0.032157 *  
## purposeA42        -8.227e-01  2.933e-01  -2.805 0.005032 ** 
## purposeA43        -9.201e-01  2.780e-01  -3.310 0.000934 ***
## purposeA44         7.957e-02  9.812e-01   0.081 0.935364    
## purposeA45        -6.073e-02  6.349e-01  -0.096 0.923793    
## purposeA46         2.076e-01  4.610e-01   0.450 0.652441    
## purposeA48        -1.601e+00  1.205e+00  -1.328 0.184225    
## purposeA49        -8.677e-01  4.002e-01  -2.168 0.030160 *  
## amount             1.578e-04  4.941e-05   3.194 0.001402 ** 
## saving_acctA62    -1.046e-01  3.319e-01  -0.315 0.752691    
## saving_acctA63     2.404e-01  4.235e-01   0.568 0.570258    
## saving_acctA64    -1.164e+00  6.287e-01  -1.851 0.064143 .  
## saving_acctA65    -7.403e-01  2.971e-01  -2.491 0.012722 *  
## present_empA72     1.722e-01  4.429e-01   0.389 0.697366    
## present_empA73    -2.187e-02  4.101e-01  -0.053 0.957462    
## present_empA74    -6.931e-01  4.752e-01  -1.459 0.144643    
## present_empA75    -1.105e-01  4.242e-01  -0.260 0.794542    
## installment_rate   4.082e-01  1.014e-01   4.025 5.69e-05 ***
## sexA92            -1.470e-01  4.415e-01  -0.333 0.739181    
## sexA93            -7.765e-01  4.315e-01  -1.799 0.071974 .  
## sexA94            -6.010e-01  5.190e-01  -1.158 0.246880    
## other_installA142 -2.919e-01  4.848e-01  -0.602 0.547054    
## other_installA143 -7.092e-01  2.683e-01  -2.643 0.008213 ** 
## housingA152       -1.940e-01  2.686e-01  -0.722 0.470250    
## housingA153       -1.255e-01  3.958e-01  -0.317 0.751231    
## telephoneA192     -2.932e-01  2.140e-01  -1.370 0.170618    
## foreignA202       -1.154e+00  6.477e-01  -1.781 0.074898 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 889.43  on 749  degrees of freedom
## Residual deviance: 671.60  on 713  degrees of freedom
## AIC: 745.6
## 
## Number of Fisher Scoring iterations: 5
pred.glm.gtrain.glm0 <- predict(germandata.train.glm0, type = "response")
pred.glm.gtest.glm0 <- predict(germandata.train.glm0, newdata=germandata.test,type = "response")
#residual deviance
germandata.train.glm0$deviance
## [1] 671.5951
# Asymmetric Misclassification Rate, using  5:1 asymmetric cost
cost <- function(r, pi){
  weight1 = 5
  weight0 = 1
  c1 = (r==1)&(pi==0) #logical vector - true if actual 1 but predict 0
  c0 = (r==0)&(pi==1) #logical vector - true if actual 0 but predict 1
  return(mean(weight1*c1+weight0*c0))
}

pcut <-  1/6 ## Bayes estimate

#training data stats
  class.pred.train.glm0<- (pred.glm.gtrain.glm0>pcut)*1
  table(germandata.train$response, class.pred.train.glm0, dnn = c("True", "Predicted"))
##     Predicted
## True   0   1
##    0 303 237
##    1  26 184
#  MR.glm0 <- mean(germandata.train$response!=class.pred.train.glm0)
  cost.train <- cost(r = germandata.train$response, pi = class.pred.train.glm0) 
#testing data stats
  class.pred.test.glm0<- (pred.glm.gtest.glm0>pcut)*1
  table(germandata.test$response, class.pred.test.glm0, dnn = c("True", "Predicted"))
##     Predicted
## True  0  1
##    0 91 69
##    1 13 77
#  MR.glm0.test <- mean(germandata.test$response!=class.pred.test.glm0)
  cost.test <- cost(r = germandata.test$response, pi = class.pred.test.glm0) 

#area under the curve
library(verification)
  par(mfrow=c(1,1))
roc.logit <- roc.plot(x=(germandata.train$response == "1"), pred =pred.glm.gtrain.glm0)

roc.logit$roc.vol
##      Model      Area      p.value binorm.area
## 1 Model  1 0.8246737 9.609299e-44          NA
roc.logit.test <- roc.plot(x=(germandata.test$response == "1"), pred =pred.glm.gtest.glm0)

roc.logit.test$roc.vol
##      Model     Area      p.value binorm.area
## 1 Model  1 0.804375 7.005702e-16          NA

Classification Tree Model

  • We have used the ‘rpart’ library for model building and ‘rpart.plot’ for plotting
  • The asymmetric cost function used is 5:1. It has been updated in the list parameter by providing additional weight to the False Negative part
germandata.largetree <- rpart(formula = response~., data = germandata.train, 
                              parms = list(loss = matrix(c(0, 5, 1, 0), nrow = 2)), cp=0.001)
prp(germandata.largetree, extra = 1, nn.font=40,box.palette = "green")

plotcp(germandata.largetree)

printcp(germandata.largetree)
## 
## Classification tree:
## rpart(formula = response ~ ., data = germandata.train, parms = list(loss = matrix(c(0, 
##     5, 1, 0), nrow = 2)), cp = 0.001)
## 
## Variables actually used in tree construction:
##  [1] age           amount        chk_acct      credit_his    duration     
##  [6] housing       job           n_credits     other_debtor  other_install
## [11] present_emp   property      purpose       saving_acct  
## 
## Root node error: 540/750 = 0.72
## 
## n= 750 
## 
##           CP nsplit rel error xerror    xstd
## 1  0.2000000      0   1.00000 5.0000 0.11386
## 2  0.0370370      1   0.80000 2.2222 0.11594
## 3  0.0222222      3   0.72593 2.7593 0.12242
## 4  0.0185185      5   0.68148 2.6926 0.12193
## 5  0.0175926      6   0.66296 2.6519 0.12140
## 6  0.0166667      8   0.62778 2.6019 0.12077
## 7  0.0129630      9   0.61111 2.5741 0.12050
## 8  0.0120370     14   0.52778 2.4556 0.11889
## 9  0.0092593     16   0.50370 2.4241 0.11835
## 10 0.0083333     17   0.49444 2.2241 0.11562
## 11 0.0074074     19   0.47778 2.1648 0.11456
## 12 0.0055556     21   0.46296 2.1981 0.11488
## 13 0.0037037     26   0.42407 2.2389 0.11535
## 14 0.0018519     27   0.42037 2.2407 0.11532
## 15 0.0010000     31   0.41296 2.1944 0.11465
#library(rattle)
#fancyRpartPlot(Gcredit.tree1,cex=0.6)

#Pruning###
german.prunedtree <- rpart(response~., data = germandata.train, method = "class",
                     parms = list(loss = matrix(c(0, 5, 1, 0), nrow = 2)),cp=0.008)
prp(german.prunedtree, extra = 1, nn.font=500,box.palette = "green")

pred.tree.gtrain <- predict(german.prunedtree, type = "prob")
pred.tree.gtest <- predict(german.prunedtree, newdata=germandata.test, type = "prob")

#training stats
german.train.pred.rpart = as.numeric(pred.tree.gtrain[,2] > pcut)
table(germandata.train$response, german.train.pred.rpart, dnn=c("Truth","Predicted"))
##      Predicted
## Truth   0   1
##     0 322 218
##     1   8 202
#MR.rpart <- mean(germandata.train$response!=german.train.pred.rpart)
cost(germandata.train$response,german.train.pred.rpart)
## [1] 0.344
#testing stats
german.test.pred.rpart = as.numeric(pred.tree.gtest[,2] > pcut)
table(germandata.test$response, german.test.pred.rpart, dnn=c("Truth","Predicted"))
##      Predicted
## Truth  0  1
##     0 83 77
##     1 11 79
#MR.rpart.test <- mean(germandata.test$response!=german.test.pred.rpart)
cost(germandata.test$response,german.test.pred.rpart)
## [1] 0.528
#area under the curve
library(verification)
par(mfrow=c(1,2))
roc.tree <- roc.plot(x=(germandata.train$response == "1"), pred =pred.tree.gtrain[,2])
roc.tree$roc.vol
##      Model      Area      p.value binorm.area
## 1 Model  1 0.8352469 1.548776e-47          NA
roc.tree.test <- roc.plot(x=(germandata.test$response == "1"), pred =pred.tree.gtest[,2])

roc.tree.test$roc.vol
##      Model     Area      p.value binorm.area
## 1 Model  1 0.723125 1.436426e-09          NA

Generalized Additive Model

str(germandata.train)
## 'data.frame':    750 obs. of  21 variables:
##  $ chk_acct        : Factor w/ 4 levels "A11","A12","A13",..: 4 1 2 4 1 4 4 2 3 2 ...
##  $ duration        : int  6 18 18 36 20 15 60 18 10 12 ...
##  $ credit_his      : Factor w/ 5 levels "A30","A31","A32",..: 5 3 3 5 3 5 3 5 3 3 ...
##  $ purpose         : Factor w/ 10 levels "A40","A41","A410",..: 5 5 5 1 4 5 5 4 1 5 ...
##  $ amount          : int  1898 3190 3213 3535 2212 1471 10144 1295 1240 1158 ...
##  $ saving_acct     : Factor w/ 5 levels "A61","A62","A63",..: 5 1 3 1 5 1 2 1 2 3 ...
##  $ present_emp     : Factor w/ 5 levels "A71","A72","A73",..: 3 3 2 4 4 3 4 2 5 3 ...
##  $ installment_rate: int  1 2 1 4 4 4 2 4 1 3 ...
##  $ sex             : Factor w/ 4 levels "A91","A92","A93",..: 3 2 4 3 3 3 2 2 2 1 ...
##  $ other_debtor    : Factor w/ 3 levels "A101","A102",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ present_resid   : int  2 2 3 4 4 4 4 1 4 1 ...
##  $ property        : Factor w/ 4 levels "A121","A122",..: 1 1 1 3 3 4 1 2 4 3 ...
##  $ age             : int  34 24 25 37 39 35 21 27 48 26 ...
##  $ other_install   : Factor w/ 3 levels "A141","A142",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ housing         : Factor w/ 3 levels "A151","A152",..: 2 2 1 2 2 3 2 2 3 2 ...
##  $ n_credits       : int  2 1 1 2 1 2 1 2 1 1 ...
##  $ job             : Factor w/ 4 levels "A171","A172",..: 2 3 3 3 3 3 3 3 2 3 ...
##  $ n_people        : int  2 1 1 1 1 1 1 1 2 1 ...
##  $ telephone       : Factor w/ 2 levels "A191","A192": 1 1 1 2 2 2 2 1 1 2 ...
##  $ foreign         : Factor w/ 2 levels "A201","A202": 1 1 1 1 1 1 1 1 1 1 ...
##  $ response        : Factor w/ 2 levels "0","1": 1 2 1 1 1 1 1 1 2 1 ...
germandata.gam <- gam(as.factor(response)~chk_acct+s(duration)+credit_his+purpose+s(amount)+saving_acct+present_emp+installment_rate+sex+other_debtor+present_resid+property
                  +s(age)+other_install+housing+n_credits+telephone+foreign , family=binomial,data=germandata.train)
summary(germandata.gam)
## 
## Family: binomial 
## Link function: logit 
## 
## Formula:
## as.factor(response) ~ chk_acct + s(duration) + credit_his + purpose + 
##     s(amount) + saving_acct + present_emp + installment_rate + 
##     sex + other_debtor + present_resid + property + s(age) + 
##     other_install + housing + n_credits + telephone + foreign
## 
## Parametric coefficients:
##                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        0.84382    1.05642   0.799 0.424436    
## chk_acctA12       -0.07710    0.25747  -0.299 0.764598    
## chk_acctA13       -1.35370    0.45910  -2.949 0.003192 ** 
## chk_acctA14       -1.85176    0.27707  -6.683 2.33e-11 ***
## credit_hisA31      0.13937    0.67834   0.205 0.837214    
## credit_hisA32     -0.35011    0.55408  -0.632 0.527459    
## credit_hisA33     -0.54191    0.59271  -0.914 0.360562    
## credit_hisA34     -0.86467    0.56483  -1.531 0.125809    
## purposeA41        -1.73451    0.46463  -3.733 0.000189 ***
## purposeA410       -2.23965    0.97231  -2.303 0.021255 *  
## purposeA42        -0.79216    0.31021  -2.554 0.010660 *  
## purposeA43        -0.81468    0.28392  -2.869 0.004113 ** 
## purposeA44         0.06407    0.97713   0.066 0.947718    
## purposeA45        -0.05459    0.68109  -0.080 0.936115    
## purposeA46         0.08373    0.47572   0.176 0.860286    
## purposeA48        -1.73448    1.23023  -1.410 0.158575    
## purposeA49        -0.80626    0.40465  -1.992 0.046317 *  
## saving_acctA62    -0.25209    0.34758  -0.725 0.468285    
## saving_acctA63     0.16200    0.42488   0.381 0.702991    
## saving_acctA64    -1.33408    0.65203  -2.046 0.040752 *  
## saving_acctA65    -0.79317    0.30604  -2.592 0.009550 ** 
## present_empA72     0.18092    0.46106   0.392 0.694772    
## present_empA73     0.09883    0.42738   0.231 0.817129    
## present_empA74    -0.62509    0.48837  -1.280 0.200565    
## present_empA75    -0.09957    0.43890  -0.227 0.820533    
## installment_rate   0.33663    0.10829   3.108 0.001881 ** 
## sexA92            -0.15814    0.46227  -0.342 0.732273    
## sexA93            -0.75278    0.44880  -1.677 0.093476 .  
## sexA94            -0.57696    0.54073  -1.067 0.285965    
## other_debtorA102   0.21563    0.48820   0.442 0.658713    
## other_debtorA103  -1.12111    0.53793  -2.084 0.037150 *  
## present_resid     -0.02254    0.10044  -0.224 0.822461    
## propertyA122       0.31972    0.30196   1.059 0.289688    
## propertyA123       0.31829    0.27762   1.146 0.251599    
## propertyA124       1.04813    0.49275   2.127 0.033410 *  
## other_installA142 -0.29740    0.49517  -0.601 0.548107    
## other_installA143 -0.65725    0.27541  -2.386 0.017013 *  
## housingA152       -0.19560    0.28931  -0.676 0.498978    
## housingA153       -0.73372    0.56685  -1.294 0.195535    
## n_credits          0.20344    0.21860   0.931 0.352032    
## telephoneA192     -0.35050    0.22123  -1.584 0.113112    
## foreignA202       -0.98661    0.66135  -1.492 0.135745    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##               edf Ref.df Chi.sq p-value   
## s(duration) 2.051  2.606 12.382 0.00472 **
## s(amount)   3.200  4.036 11.601 0.02063 * 
## s(age)      1.000  1.000  0.095 0.75855   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =  0.263   Deviance explained = 26.8%
## UBRE = -0.0037455  Scale est. = 1         n = 750
plot(germandata.gam, shade=TRUE)

# Move age to partially linear term and refit gam() model
germandata.gam <- gam(as.factor(response)~chk_acct+s(duration)+credit_his+purpose+s(amount)+saving_acct+present_emp+installment_rate+sex+other_debtor+present_resid+property
                      +(age)+other_install+housing+n_credits+telephone+foreign , family=binomial,data=germandata.train)
summary(germandata.gam)
## 
## Family: binomial 
## Link function: logit 
## 
## Formula:
## as.factor(response) ~ chk_acct + s(duration) + credit_his + purpose + 
##     s(amount) + saving_acct + present_emp + installment_rate + 
##     sex + other_debtor + present_resid + property + (age) + other_install + 
##     housing + n_credits + telephone + foreign
## 
## Parametric coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        0.962964   1.135464   0.848 0.396393    
## chk_acctA12       -0.077098   0.257467  -0.299 0.764597    
## chk_acctA13       -1.353697   0.459102  -2.949 0.003192 ** 
## chk_acctA14       -1.851759   0.277069  -6.683 2.33e-11 ***
## credit_hisA31      0.139370   0.678338   0.205 0.837214    
## credit_hisA32     -0.350114   0.554075  -0.632 0.527460    
## credit_hisA33     -0.541911   0.592709  -0.914 0.360562    
## credit_hisA34     -0.864671   0.564834  -1.531 0.125809    
## purposeA41        -1.734514   0.464632  -3.733 0.000189 ***
## purposeA410       -2.239651   0.972311  -2.303 0.021255 *  
## purposeA42        -0.792158   0.310207  -2.554 0.010660 *  
## purposeA43        -0.814677   0.283923  -2.869 0.004113 ** 
## purposeA44         0.064074   0.977134   0.066 0.947717    
## purposeA45        -0.054591   0.681089  -0.080 0.936116    
## purposeA46         0.083732   0.475721   0.176 0.860286    
## purposeA48        -1.734483   1.230235  -1.410 0.158575    
## purposeA49        -0.806265   0.404652  -1.992 0.046317 *  
## saving_acctA62    -0.252091   0.347582  -0.725 0.468285    
## saving_acctA63     0.162000   0.424877   0.381 0.702991    
## saving_acctA64    -1.334084   0.652029  -2.046 0.040752 *  
## saving_acctA65    -0.793171   0.306041  -2.592 0.009550 ** 
## present_empA72     0.180915   0.461062   0.392 0.694772    
## present_empA73     0.098826   0.427376   0.231 0.817129    
## present_empA74    -0.625087   0.488371  -1.280 0.200565    
## present_empA75    -0.099569   0.438897  -0.227 0.820532    
## installment_rate   0.336628   0.108295   3.108 0.001881 ** 
## sexA92            -0.158142   0.462266  -0.342 0.732275    
## sexA93            -0.752782   0.448795  -1.677 0.093476 .  
## sexA94            -0.576961   0.540725  -1.067 0.285966    
## other_debtorA102   0.215632   0.488196   0.442 0.658713    
## other_debtorA103  -1.121109   0.537931  -2.084 0.037150 *  
## present_resid     -0.022537   0.100441  -0.224 0.822463    
## propertyA122       0.319717   0.301960   1.059 0.289687    
## propertyA123       0.318287   0.277623   1.146 0.251599    
## propertyA124       1.048133   0.492748   2.127 0.033410 *  
## age               -0.003362   0.010933  -0.308 0.758457    
## other_installA142 -0.297398   0.495169  -0.601 0.548108    
## other_installA143 -0.657250   0.275412  -2.386 0.017013 *  
## housingA152       -0.195605   0.289312  -0.676 0.498975    
## housingA153       -0.733720   0.566852  -1.294 0.195535    
## n_credits          0.203439   0.218597   0.931 0.352031    
## telephoneA192     -0.350504   0.221227  -1.584 0.113111    
## foreignA202       -0.986616   0.661348  -1.492 0.135745    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##               edf Ref.df Chi.sq p-value   
## s(duration) 2.051  2.606  12.38 0.00472 **
## s(amount)   3.200  4.036  11.60 0.02063 * 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =  0.263   Deviance explained = 26.8%
## UBRE = -0.0037458  Scale est. = 1         n = 750
plot(germandata.gam, shade=TRUE)

#In sample performance
prob.gam.in<-predict(germandata.gam,germandata.train,type="response")
pred.gam.in<-(prob.gam.in>=pcut)*1
table(germandata.train$response,pred.gam.in,dnn=c("Observed","Predicted"))
##         Predicted
## Observed   0   1
##        0 310 230
##        1  24 186
#mean(ifelse(germandata.train$response != pred.gam.in, 1, 0))
cost(germandata.train$response, pred.gam.in)
## [1] 0.4666667
#Out-of-sample performance########
prob.gam.out<-predict(germandata.gam,germandata.test,type="response")
pred.gam.out<-(prob.gam.out>=pcut)*1
table(germandata.test$response,pred.gam.out,dnn=c("Observed","Predicted"))
##         Predicted
## Observed  0  1
##        0 92 68
##        1 15 75
#mean(ifelse(germandata.test$response != pred.gam.out, 1, 0))
cost(germandata.test$response, pred.gam.out)
## [1] 0.572
###ROC curve for GAM ##############
par(mfrow=(c(1,2)))
roc.gam <- roc.plot(x=(germandata.train$response == "1"), pred =prob.gam.in)
roc.gam$roc.vol
##      Model      Area      p.value binorm.area
## 1 Model  1 0.8370723 5.474326e-47          NA
roc.gam.test <- roc.plot(x=(germandata.test$response == "1"), pred =prob.gam.out)

roc.gam.test$roc.vol
##      Model      Area      p.value binorm.area
## 1 Model  1 0.8101389 2.032777e-16          NA

Neural Network

  • We are building a Neural Network for a categorical response now
  • For classification problems with nnet, we need to code the response to factor first. In addition we will the add type = “class” for predict() function.
  • Here, we’re using another library called NeuralNetTools
  • The size of the hidden layers are calculated internally
par(mfrow=c(1,1))
germandata.nnet <- train(response~., data=germandata.train,method="nnet",na.action=na.exclude)
## # weights:  51
## initial  value 532.735607 
## final  value 447.518697 
## converged
## # weights:  151
## initial  value 465.421972 
## final  value 447.518697 
## converged
## # weights:  251
## initial  value 457.296760 
## final  value 447.518697 
## converged
## # weights:  51
## initial  value 496.914281 
## iter  10 value 447.561892
## final  value 447.561578 
## converged
## # weights:  151
## initial  value 669.225939 
## iter  10 value 447.552218
## iter  20 value 447.352582
## iter  30 value 440.665680
## iter  40 value 437.283135
## iter  50 value 434.709850
## iter  60 value 434.681380
## final  value 434.681281 
## converged
## # weights:  251
## initial  value 786.029130 
## iter  10 value 441.573724
## iter  20 value 414.404434
## iter  30 value 354.226110
## iter  40 value 348.884451
## iter  50 value 331.654245
## iter  60 value 321.857905
## iter  70 value 319.767188
## iter  80 value 318.630652
## iter  90 value 317.790931
## iter 100 value 307.645993
## final  value 307.645993 
## stopped after 100 iterations
## # weights:  51
## initial  value 514.665429 
## final  value 447.519715 
## converged
## # weights:  151
## initial  value 616.199178 
## final  value 447.521101 
## converged
## # weights:  251
## initial  value 652.011889 
## final  value 447.522651 
## converged
## # weights:  51
## initial  value 480.411549 
## final  value 455.577688 
## converged
## # weights:  151
## initial  value 606.323888 
## iter  10 value 436.920946
## iter  20 value 416.622013
## iter  30 value 398.900071
## iter  40 value 353.954537
## iter  50 value 321.068862
## iter  60 value 313.333230
## iter  70 value 311.499810
## iter  80 value 311.261426
## iter  90 value 310.214368
## iter 100 value 310.191672
## final  value 310.191672 
## stopped after 100 iterations
## # weights:  251
## initial  value 757.793669 
## final  value 455.577688 
## converged
## # weights:  51
## initial  value 591.620657 
## iter  10 value 455.652891
## iter  20 value 455.013094
## iter  30 value 443.556529
## iter  40 value 439.308472
## iter  50 value 438.094233
## final  value 438.094051 
## converged
## # weights:  151
## initial  value 489.602748 
## iter  10 value 455.617442
## iter  20 value 455.099962
## iter  30 value 441.995437
## iter  40 value 439.419138
## iter  50 value 390.337770
## iter  60 value 338.551664
## iter  70 value 316.571684
## iter  80 value 304.748318
## iter  90 value 291.059377
## iter 100 value 275.182613
## final  value 275.182613 
## stopped after 100 iterations
## # weights:  251
## initial  value 841.553225 
## iter  10 value 455.692701
## iter  20 value 455.567981
## iter  30 value 454.110571
## iter  40 value 450.163525
## iter  50 value 444.737779
## iter  60 value 414.370982
## iter  70 value 393.952294
## iter  80 value 344.154482
## iter  90 value 314.948939
## iter 100 value 304.970014
## final  value 304.970014 
## stopped after 100 iterations
## # weights:  51
## initial  value 457.948972 
## final  value 455.578564 
## converged
## # weights:  151
## initial  value 529.508196 
## final  value 455.580150 
## converged
## # weights:  251
## initial  value 496.171939 
## final  value 455.581565 
## converged
## # weights:  51
## initial  value 470.180774 
## final  value 428.743251 
## converged
## # weights:  151
## initial  value 921.657023 
## final  value 428.743250 
## converged
## # weights:  251
## initial  value 810.517508 
## final  value 428.743250 
## converged
## # weights:  51
## initial  value 549.175100 
## iter  10 value 428.799092
## final  value 428.798789 
## converged
## # weights:  151
## initial  value 471.900515 
## iter  10 value 428.795571
## iter  20 value 428.224108
## iter  30 value 414.578466
## iter  40 value 367.713778
## iter  50 value 321.998147
## iter  60 value 295.962684
## iter  70 value 282.899863
## iter  80 value 277.395332
## iter  90 value 274.353148
## iter 100 value 272.639392
## final  value 272.639392 
## stopped after 100 iterations
## # weights:  251
## initial  value 471.152920 
## iter  10 value 428.930579
## iter  20 value 423.863350
## iter  30 value 418.727398
## iter  40 value 410.587907
## iter  50 value 398.635364
## iter  60 value 359.556437
## iter  70 value 301.448505
## iter  80 value 261.982911
## iter  90 value 239.492545
## iter 100 value 230.077234
## final  value 230.077234 
## stopped after 100 iterations
## # weights:  51
## initial  value 485.802816 
## final  value 428.744252 
## converged
## # weights:  151
## initial  value 526.258668 
## final  value 428.746563 
## converged
## # weights:  251
## initial  value 751.914049 
## final  value 428.747429 
## converged
## # weights:  51
## initial  value 490.199254 
## final  value 437.940596 
## converged
## # weights:  151
## initial  value 480.183572 
## final  value 437.940596 
## converged
## # weights:  251
## initial  value 439.813257 
## final  value 437.940596 
## converged
## # weights:  51
## initial  value 526.975745 
## iter  10 value 437.909011
## iter  20 value 436.259243
## iter  30 value 434.099916
## iter  40 value 415.945078
## iter  50 value 404.412011
## iter  60 value 365.002749
## iter  70 value 315.376165
## iter  80 value 303.323190
## iter  90 value 301.072413
## iter 100 value 299.049841
## final  value 299.049841 
## stopped after 100 iterations
## # weights:  151
## initial  value 619.328883 
## iter  10 value 437.878298
## iter  20 value 434.837009
## iter  30 value 434.325527
## iter  40 value 432.092517
## iter  50 value 418.939011
## iter  60 value 383.872056
## iter  70 value 360.084360
## iter  80 value 349.499281
## iter  90 value 335.474134
## iter 100 value 309.859618
## final  value 309.859618 
## stopped after 100 iterations
## # weights:  251
## initial  value 458.102483 
## iter  10 value 437.980083
## iter  20 value 425.976749
## iter  30 value 424.339666
## iter  40 value 403.788169
## iter  50 value 390.069909
## iter  60 value 354.718294
## iter  70 value 350.275308
## iter  80 value 347.559690
## iter  90 value 346.757331
## iter 100 value 330.539994
## final  value 330.539994 
## stopped after 100 iterations
## # weights:  51
## initial  value 440.024671 
## final  value 437.941445 
## converged
## # weights:  151
## initial  value 539.720558 
## final  value 437.942968 
## converged
## # weights:  251
## initial  value 557.559680 
## iter  10 value 435.975943
## iter  20 value 383.150050
## iter  30 value 357.043869
## iter  40 value 342.004688
## iter  50 value 341.440812
## iter  60 value 341.364267
## iter  70 value 340.470029
## iter  80 value 340.380238
## iter  90 value 340.173689
## iter 100 value 338.437787
## final  value 338.437787 
## stopped after 100 iterations
## # weights:  51
## initial  value 453.831478 
## final  value 450.263391 
## converged
## # weights:  151
## initial  value 490.418686 
## final  value 450.263391 
## converged
## # weights:  251
## initial  value 528.045686 
## final  value 450.263391 
## converged
## # weights:  51
## initial  value 525.684511 
## iter  10 value 450.160066
## iter  20 value 440.130040
## iter  30 value 426.643373
## iter  40 value 420.207908
## iter  50 value 383.052444
## iter  60 value 343.379285
## iter  70 value 323.801498
## iter  80 value 315.510972
## iter  90 value 314.021498
## iter 100 value 312.933030
## final  value 312.933030 
## stopped after 100 iterations
## # weights:  151
## initial  value 483.784691 
## iter  10 value 450.335243
## iter  20 value 432.472355
## iter  30 value 413.831707
## iter  40 value 372.025875
## iter  50 value 290.689876
## iter  60 value 275.697623
## iter  70 value 273.605503
## iter  80 value 267.626633
## iter  90 value 254.203323
## iter 100 value 240.781771
## final  value 240.781771 
## stopped after 100 iterations
## # weights:  251
## initial  value 538.375229 
## iter  10 value 450.344921
## iter  20 value 448.839966
## iter  30 value 442.824640
## iter  40 value 417.601056
## iter  50 value 384.116819
## iter  60 value 338.994231
## iter  70 value 292.679918
## iter  80 value 267.692291
## iter  90 value 245.595038
## iter 100 value 244.054908
## final  value 244.054908 
## stopped after 100 iterations
## # weights:  51
## initial  value 455.783534 
## final  value 450.264162 
## converged
## # weights:  151
## initial  value 453.164462 
## final  value 450.266114 
## converged
## # weights:  251
## initial  value 474.611780 
## final  value 450.267818 
## converged
## # weights:  51
## initial  value 484.306575 
## final  value 459.830145 
## converged
## # weights:  151
## initial  value 526.666758 
## final  value 459.830145 
## converged
## # weights:  251
## initial  value 701.541188 
## final  value 459.830145 
## converged
## # weights:  51
## initial  value 471.120290 
## iter  10 value 459.894651
## final  value 459.865088 
## converged
## # weights:  151
## initial  value 475.149042 
## iter  10 value 459.853983
## iter  20 value 455.078610
## iter  30 value 433.740534
## iter  40 value 387.266590
## iter  50 value 379.955395
## iter  60 value 356.019480
## iter  70 value 349.175628
## iter  80 value 335.935635
## iter  90 value 323.151255
## iter 100 value 312.015678
## final  value 312.015678 
## stopped after 100 iterations
## # weights:  251
## initial  value 508.618509 
## iter  10 value 459.847796
## iter  20 value 454.501712
## iter  30 value 452.271357
## iter  40 value 447.738062
## iter  50 value 390.615491
## iter  60 value 355.943359
## iter  70 value 333.974108
## iter  80 value 328.655431
## iter  90 value 328.023342
## iter 100 value 327.667586
## final  value 327.667586 
## stopped after 100 iterations
## # weights:  51
## initial  value 563.426432 
## final  value 459.830997 
## converged
## # weights:  151
## initial  value 461.215422 
## final  value 459.832587 
## converged
## # weights:  251
## initial  value 832.008391 
## final  value 459.835561 
## converged
## # weights:  51
## initial  value 501.935931 
## final  value 437.940596 
## converged
## # weights:  151
## initial  value 707.912850 
## final  value 437.940596 
## converged
## # weights:  251
## initial  value 462.276614 
## final  value 437.940596 
## converged
## # weights:  51
## initial  value 536.495408 
## iter  10 value 437.740948
## iter  20 value 422.694085
## iter  30 value 395.050495
## iter  40 value 345.290554
## iter  50 value 313.207625
## iter  60 value 308.220935
## iter  70 value 307.329123
## iter  80 value 307.059637
## iter  90 value 307.054961
## iter  90 value 307.054959
## iter  90 value 307.054959
## final  value 307.054959 
## converged
## # weights:  151
## initial  value 701.654443 
## iter  10 value 438.288349
## iter  20 value 437.951344
## iter  30 value 433.823834
## iter  40 value 426.443407
## iter  50 value 370.817057
## iter  60 value 332.012284
## iter  70 value 301.547582
## iter  80 value 275.330893
## iter  90 value 255.713238
## iter 100 value 245.646705
## final  value 245.646705 
## stopped after 100 iterations
## # weights:  251
## initial  value 522.558621 
## iter  10 value 438.071397
## iter  20 value 433.838680
## iter  30 value 407.930067
## iter  40 value 389.195320
## iter  50 value 378.738535
## iter  60 value 364.193308
## iter  70 value 327.926956
## iter  80 value 296.933826
## iter  90 value 283.672183
## iter 100 value 282.558871
## final  value 282.558871 
## stopped after 100 iterations
## # weights:  51
## initial  value 507.865418 
## final  value 437.941408 
## converged
## # weights:  151
## initial  value 499.569116 
## iter  10 value 423.563335
## iter  20 value 362.206992
## iter  30 value 336.879989
## iter  40 value 332.786196
## iter  50 value 331.117405
## iter  60 value 330.600246
## iter  70 value 330.416423
## iter  80 value 330.063591
## iter  90 value 329.605142
## iter 100 value 329.518776
## final  value 329.518776 
## stopped after 100 iterations
## # weights:  251
## initial  value 446.197638 
## final  value 437.944981 
## converged
## # weights:  51
## initial  value 612.729028 
## final  value 453.832031 
## converged
## # weights:  151
## initial  value 464.753161 
## final  value 453.832031 
## converged
## # weights:  251
## initial  value 693.351698 
## final  value 453.832031 
## converged
## # weights:  51
## initial  value 455.756310 
## iter  10 value 453.870840
## iter  10 value 453.870838
## iter  10 value 453.870838
## final  value 453.870838 
## converged
## # weights:  151
## initial  value 591.075318 
## iter  10 value 453.856410
## iter  20 value 453.853982
## final  value 453.851826 
## converged
## # weights:  251
## initial  value 578.388746 
## iter  10 value 453.891385
## iter  20 value 453.848789
## iter  30 value 453.847252
## iter  40 value 453.846502
## iter  50 value 453.845654
## iter  50 value 453.845652
## iter  50 value 453.845652
## final  value 453.845652 
## converged
## # weights:  51
## initial  value 477.425937 
## final  value 453.832897 
## converged
## # weights:  151
## initial  value 459.780012 
## final  value 453.834237 
## converged
## # weights:  251
## initial  value 456.981581 
## final  value 453.836428 
## converged
## # weights:  51
## initial  value 538.241608 
## final  value 441.851754 
## converged
## # weights:  151
## initial  value 563.271723 
## final  value 441.851754 
## converged
## # weights:  251
## initial  value 472.882778 
## final  value 441.851754 
## converged
## # weights:  51
## initial  value 688.140864 
## iter  10 value 441.899503
## final  value 441.898371 
## converged
## # weights:  151
## initial  value 517.886391 
## iter  10 value 441.875522
## final  value 441.875384 
## converged
## # weights:  251
## initial  value 466.365902 
## iter  10 value 434.256588
## iter  20 value 418.439051
## iter  30 value 404.084340
## iter  40 value 371.175466
## iter  50 value 320.930407
## iter  60 value 295.625769
## iter  70 value 275.738149
## iter  80 value 265.572259
## iter  90 value 261.086931
## iter 100 value 250.384135
## final  value 250.384135 
## stopped after 100 iterations
## # weights:  51
## initial  value 564.560080 
## final  value 441.852755 
## converged
## # weights:  151
## initial  value 498.912417 
## final  value 441.855284 
## converged
## # weights:  251
## initial  value 650.623130 
## final  value 441.856269 
## converged
## # weights:  51
## initial  value 503.032197 
## final  value 450.263391 
## converged
## # weights:  151
## initial  value 497.077688 
## final  value 450.263391 
## converged
## # weights:  251
## initial  value 509.421737 
## final  value 450.263391 
## converged
## # weights:  51
## initial  value 549.156669 
## iter  10 value 450.304748
## final  value 450.304500 
## converged
## # weights:  151
## initial  value 544.715746 
## iter  10 value 450.284713
## iter  20 value 437.576687
## iter  30 value 427.008929
## iter  40 value 426.315661
## iter  50 value 415.662016
## iter  60 value 410.841201
## iter  70 value 392.058159
## iter  80 value 335.410717
## iter  90 value 280.681397
## iter 100 value 252.717525
## final  value 252.717525 
## stopped after 100 iterations
## # weights:  251
## initial  value 462.994807 
## iter  10 value 450.282257
## iter  20 value 443.357836
## iter  30 value 440.127593
## iter  40 value 414.644466
## iter  50 value 359.341065
## iter  60 value 343.195287
## iter  70 value 300.556966
## iter  80 value 269.564159
## iter  90 value 262.164197
## iter 100 value 260.679303
## final  value 260.679303 
## stopped after 100 iterations
## # weights:  51
## initial  value 600.222464 
## final  value 450.264282 
## converged
## # weights:  151
## initial  value 464.380047 
## final  value 450.265875 
## converged
## # weights:  251
## initial  value 678.183667 
## final  value 450.267658 
## converged
## # weights:  51
## initial  value 538.242904 
## final  value 455.577688 
## converged
## # weights:  151
## initial  value 598.179109 
## final  value 455.577688 
## converged
## # weights:  251
## initial  value 777.073918 
## final  value 455.577688 
## converged
## # weights:  51
## initial  value 603.652088 
## iter  10 value 455.652685
## iter  20 value 453.943052
## iter  30 value 397.005433
## iter  40 value 368.608814
## iter  50 value 353.504344
## iter  60 value 350.501327
## iter  70 value 335.725083
## iter  80 value 331.064737
## iter  90 value 324.969531
## iter 100 value 314.344217
## final  value 314.344217 
## stopped after 100 iterations
## # weights:  151
## initial  value 514.660164 
## iter  10 value 455.693673
## iter  20 value 455.577021
## iter  30 value 451.331132
## iter  40 value 447.865188
## iter  50 value 445.014263
## iter  60 value 444.163326
## iter  70 value 443.647677
## iter  80 value 417.214699
## iter  90 value 381.660300
## iter 100 value 358.337537
## final  value 358.337537 
## stopped after 100 iterations
## # weights:  251
## initial  value 461.598183 
## iter  10 value 455.709423
## iter  20 value 455.021423
## iter  30 value 431.673011
## iter  40 value 423.866787
## iter  50 value 392.690798
## iter  60 value 336.774061
## iter  70 value 313.858392
## iter  80 value 305.773952
## iter  90 value 296.767363
## iter 100 value 295.024318
## final  value 295.024318 
## stopped after 100 iterations
## # weights:  51
## initial  value 785.448680 
## final  value 455.578394 
## converged
## # weights:  151
## initial  value 459.674996 
## iter  10 value 451.430914
## iter  20 value 449.915329
## iter  30 value 449.912452
## final  value 449.908762 
## converged
## # weights:  251
## initial  value 536.060704 
## final  value 455.581889 
## converged
## # weights:  51
## initial  value 504.037568 
## final  value 455.577688 
## converged
## # weights:  151
## initial  value 604.733302 
## final  value 455.577688 
## converged
## # weights:  251
## initial  value 457.220740 
## iter  10 value 442.450929
## iter  20 value 397.312484
## iter  30 value 356.449430
## final  value 352.376960 
## converged
## # weights:  51
## initial  value 485.676699 
## iter  10 value 455.615604
## final  value 455.615357 
## converged
## # weights:  151
## initial  value 590.076051 
## iter  10 value 455.641478
## iter  20 value 444.946284
## iter  30 value 401.844798
## iter  40 value 346.237837
## iter  50 value 313.711605
## iter  60 value 305.512256
## iter  70 value 300.439278
## iter  80 value 299.935848
## iter  90 value 299.868767
## iter 100 value 299.816087
## final  value 299.816087 
## stopped after 100 iterations
## # weights:  251
## initial  value 730.859387 
## iter  10 value 455.649186
## iter  20 value 454.505266
## iter  30 value 436.966232
## iter  40 value 422.289765
## iter  50 value 344.267547
## iter  60 value 311.853710
## iter  70 value 297.191081
## iter  80 value 288.987103
## iter  90 value 282.094748
## iter 100 value 276.946435
## final  value 276.946435 
## stopped after 100 iterations
## # weights:  51
## initial  value 646.234023 
## final  value 455.578513 
## converged
## # weights:  151
## initial  value 487.551835 
## final  value 455.579797 
## converged
## # weights:  251
## initial  value 460.142590 
## iter  10 value 455.581740
## final  value 455.580608 
## converged
## # weights:  51
## initial  value 468.890142 
## final  value 425.553125 
## converged
## # weights:  151
## initial  value 472.536897 
## final  value 425.553125 
## converged
## # weights:  251
## initial  value 428.875292 
## final  value 425.553125 
## converged
## # weights:  51
## initial  value 426.709716 
## iter  10 value 425.612445
## final  value 425.610917 
## converged
## # weights:  151
## initial  value 615.451902 
## iter  10 value 425.026069
## iter  20 value 419.374544
## iter  30 value 418.651809
## iter  40 value 411.577437
## iter  50 value 397.805820
## iter  60 value 371.292533
## iter  70 value 355.905937
## iter  80 value 311.294022
## iter  90 value 288.706461
## iter 100 value 248.220610
## final  value 248.220610 
## stopped after 100 iterations
## # weights:  251
## initial  value 437.155748 
## iter  10 value 425.640288
## iter  20 value 415.134232
## iter  30 value 409.594382
## iter  40 value 391.945379
## iter  50 value 366.329657
## iter  60 value 311.705067
## iter  70 value 270.955411
## iter  80 value 243.116191
## iter  90 value 229.480392
## iter 100 value 220.885924
## final  value 220.885924 
## stopped after 100 iterations
## # weights:  51
## initial  value 495.756202 
## final  value 425.554000 
## converged
## # weights:  151
## initial  value 729.559733 
## final  value 425.555603 
## converged
## # weights:  251
## initial  value 692.444906 
## final  value 425.557307 
## converged
## # weights:  51
## initial  value 444.748396 
## final  value 444.714988 
## converged
## # weights:  151
## initial  value 513.525920 
## final  value 444.714988 
## converged
## # weights:  251
## initial  value 576.773018 
## final  value 444.714988 
## converged
## # weights:  51
## initial  value 478.642792 
## iter  10 value 444.759708
## iter  10 value 444.759708
## iter  10 value 444.759705
## final  value 444.759705 
## converged
## # weights:  151
## initial  value 474.888720 
## iter  10 value 444.492083
## iter  20 value 426.084789
## iter  30 value 372.132125
## iter  40 value 352.753309
## iter  50 value 320.243931
## iter  60 value 314.599578
## iter  70 value 312.237309
## iter  80 value 309.731163
## iter  90 value 306.140380
## iter 100 value 305.453417
## final  value 305.453417 
## stopped after 100 iterations
## # weights:  251
## initial  value 814.560063 
## iter  10 value 442.642883
## iter  20 value 417.728781
## iter  30 value 345.266620
## iter  40 value 320.319629
## iter  50 value 302.973874
## iter  60 value 286.662994
## iter  70 value 282.620156
## iter  80 value 277.625360
## iter  90 value 275.368974
## iter 100 value 275.292496
## final  value 275.292496 
## stopped after 100 iterations
## # weights:  51
## initial  value 483.895309 
## final  value 444.715800 
## converged
## # weights:  151
## initial  value 526.503654 
## final  value 444.717528 
## converged
## # weights:  251
## initial  value 531.981916 
## final  value 444.719189 
## converged
## # weights:  51
## initial  value 567.214772 
## final  value 448.440127 
## converged
## # weights:  151
## initial  value 815.632350 
## final  value 448.440127 
## converged
## # weights:  251
## initial  value 645.756714 
## final  value 448.440072 
## converged
## # weights:  51
## initial  value 637.313932 
## iter  10 value 448.482450
## final  value 448.482433 
## converged
## # weights:  151
## initial  value 450.930151 
## iter  10 value 448.532165
## iter  20 value 448.437772
## iter  30 value 444.281094
## iter  40 value 433.749688
## iter  50 value 432.176357
## iter  60 value 428.446472
## iter  70 value 420.799084
## iter  80 value 402.872708
## iter  90 value 347.057294
## iter 100 value 330.255952
## final  value 330.255952 
## stopped after 100 iterations
## # weights:  251
## initial  value 586.518341 
## iter  10 value 448.528525
## iter  20 value 448.027062
## iter  30 value 432.837719
## iter  40 value 363.383739
## iter  50 value 320.081318
## iter  60 value 313.412541
## iter  70 value 309.511491
## iter  80 value 308.354786
## iter  90 value 299.658794
## iter 100 value 288.982383
## final  value 288.982383 
## stopped after 100 iterations
## # weights:  51
## initial  value 491.847665 
## final  value 448.441122 
## converged
## # weights:  151
## initial  value 467.854916 
## final  value 448.442755 
## converged
## # weights:  251
## initial  value 488.547619 
## final  value 448.445198 
## converged
## # weights:  51
## initial  value 705.250687 
## final  value 437.940596 
## converged
## # weights:  151
## initial  value 440.413692 
## final  value 437.940596 
## converged
## # weights:  251
## initial  value 659.913281 
## final  value 437.940596 
## converged
## # weights:  51
## initial  value 574.087401 
## iter  10 value 437.990252
## final  value 437.989851 
## converged
## # weights:  151
## initial  value 607.944255 
## iter  10 value 437.992636
## iter  20 value 424.534337
## iter  30 value 418.966577
## iter  40 value 415.146686
## iter  50 value 400.428525
## iter  60 value 389.637150
## iter  70 value 369.591136
## iter  80 value 364.211208
## iter  90 value 336.867609
## iter 100 value 288.064586
## final  value 288.064586 
## stopped after 100 iterations
## # weights:  251
## initial  value 750.791385 
## iter  10 value 437.986305
## iter  20 value 425.224014
## iter  30 value 403.108152
## iter  40 value 350.407747
## iter  50 value 314.288143
## iter  60 value 308.034674
## iter  70 value 307.667974
## iter  80 value 307.657753
## iter  90 value 307.652946
## final  value 307.652900 
## converged
## # weights:  51
## initial  value 495.476191 
## final  value 437.941405 
## converged
## # weights:  151
## initial  value 994.902119 
## final  value 437.943060 
## converged
## # weights:  251
## initial  value 470.476215 
## final  value 437.944885 
## converged
## # weights:  51
## initial  value 464.197917 
## final  value 456.440911 
## converged
## # weights:  151
## initial  value 632.979562 
## final  value 456.440911 
## converged
## # weights:  251
## initial  value 596.195204 
## final  value 456.440911 
## converged
## # weights:  51
## initial  value 500.465492 
## iter  10 value 456.478308
## final  value 456.478016 
## converged
## # weights:  151
## initial  value 691.429461 
## iter  10 value 456.489346
## iter  20 value 456.327839
## iter  30 value 439.155511
## iter  40 value 351.422707
## iter  50 value 317.448759
## iter  60 value 305.863028
## iter  70 value 304.692506
## iter  80 value 302.754114
## iter  90 value 297.894690
## iter 100 value 294.887938
## final  value 294.887938 
## stopped after 100 iterations
## # weights:  251
## initial  value 479.042629 
## iter  10 value 456.434124
## iter  20 value 453.641925
## iter  30 value 381.212421
## iter  40 value 338.820749
## iter  50 value 325.161830
## iter  60 value 312.420694
## iter  70 value 301.648795
## iter  80 value 300.506335
## iter  90 value 300.486708
## final  value 300.486623 
## converged
## # weights:  51
## initial  value 761.701350 
## final  value 456.441834 
## converged
## # weights:  151
## initial  value 718.311680 
## final  value 456.443738 
## converged
## # weights:  251
## initial  value 496.277118 
## final  value 456.445047 
## converged
## # weights:  51
## initial  value 471.722499 
## final  value 449.355019 
## converged
## # weights:  151
## initial  value 475.214202 
## final  value 449.355019 
## converged
## # weights:  251
## initial  value 492.376664 
## iter  10 value 447.123022
## iter  20 value 433.935387
## iter  30 value 378.330255
## iter  40 value 342.716965
## iter  50 value 330.641864
## iter  60 value 327.438864
## iter  70 value 327.341690
## iter  80 value 324.400102
## iter  90 value 324.274369
## iter 100 value 323.468938
## final  value 323.468938 
## stopped after 100 iterations
## # weights:  51
## initial  value 545.064032 
## iter  10 value 449.360621
## iter  20 value 448.017669
## iter  30 value 445.978452
## iter  40 value 445.892643
## final  value 445.892556 
## converged
## # weights:  151
## initial  value 673.153331 
## iter  10 value 449.399417
## iter  20 value 436.371412
## iter  30 value 418.146538
## iter  40 value 345.349193
## iter  50 value 331.581268
## iter  60 value 325.047090
## iter  70 value 315.794548
## iter  80 value 315.465798
## iter  90 value 314.657308
## iter 100 value 314.191016
## final  value 314.191016 
## stopped after 100 iterations
## # weights:  251
## initial  value 585.072269 
## iter  10 value 443.887121
## iter  20 value 425.851789
## iter  30 value 386.851125
## iter  40 value 369.332217
## iter  50 value 323.689392
## iter  60 value 310.262130
## iter  70 value 295.491409
## iter  80 value 274.338839
## iter  90 value 255.892497
## iter 100 value 233.776663
## final  value 233.776663 
## stopped after 100 iterations
## # weights:  51
## initial  value 602.303700 
## final  value 449.355932 
## converged
## # weights:  151
## initial  value 623.497057 
## final  value 449.357566 
## converged
## # weights:  251
## initial  value 474.035040 
## final  value 449.358947 
## converged
## # weights:  51
## initial  value 455.607352 
## final  value 455.577688 
## converged
## # weights:  151
## initial  value 544.193739 
## final  value 455.577689 
## converged
## # weights:  251
## initial  value 513.213673 
## final  value 455.577689 
## converged
## # weights:  51
## initial  value 624.712901 
## iter  10 value 455.585810
## iter  20 value 451.503277
## iter  30 value 448.902580
## iter  40 value 429.861235
## iter  50 value 394.642782
## iter  60 value 345.375330
## iter  70 value 316.274894
## iter  80 value 308.280031
## iter  90 value 304.524114
## iter 100 value 303.620319
## final  value 303.620319 
## stopped after 100 iterations
## # weights:  151
## initial  value 572.920166 
## iter  10 value 455.513820
## iter  20 value 439.020010
## iter  30 value 380.901529
## iter  40 value 350.183020
## iter  50 value 341.141982
## iter  60 value 333.572147
## iter  70 value 320.273456
## iter  80 value 299.811020
## iter  90 value 284.352560
## iter 100 value 264.394366
## final  value 264.394366 
## stopped after 100 iterations
## # weights:  251
## initial  value 538.575928 
## iter  10 value 455.596565
## iter  20 value 455.152189
## iter  30 value 418.632436
## iter  40 value 397.924385
## iter  50 value 352.181149
## iter  60 value 334.045260
## iter  70 value 307.684050
## iter  80 value 254.613952
## iter  90 value 228.450214
## iter 100 value 212.795135
## final  value 212.795135 
## stopped after 100 iterations
## # weights:  51
## initial  value 467.078843 
## final  value 455.578586 
## converged
## # weights:  151
## initial  value 548.694381 
## final  value 455.580071 
## converged
## # weights:  251
## initial  value 652.378248 
## final  value 455.581333 
## converged
## # weights:  51
## initial  value 457.897960 
## final  value 454.708067 
## converged
## # weights:  151
## initial  value 635.435376 
## final  value 454.708067 
## converged
## # weights:  251
## initial  value 453.751954 
## iter  10 value 440.580208
## iter  20 value 382.716068
## iter  30 value 329.196498
## iter  40 value 306.180771
## iter  50 value 303.750450
## iter  60 value 302.256922
## iter  70 value 300.972847
## iter  80 value 300.263324
## iter  90 value 298.965250
## iter 100 value 298.259354
## final  value 298.259354 
## stopped after 100 iterations
## # weights:  51
## initial  value 524.695970 
## final  value 454.746233 
## converged
## # weights:  151
## initial  value 460.935682 
## iter  10 value 454.795335
## final  value 454.727370 
## converged
## # weights:  251
## initial  value 537.095818 
## iter  10 value 457.098556
## iter  20 value 454.813188
## iter  30 value 453.543664
## iter  40 value 428.151883
## iter  50 value 389.198704
## iter  60 value 323.267333
## iter  70 value 308.630155
## iter  80 value 297.957938
## iter  90 value 287.697391
## iter 100 value 263.556408
## final  value 263.556408 
## stopped after 100 iterations
## # weights:  51
## initial  value 594.035390 
## final  value 454.708981 
## converged
## # weights:  151
## initial  value 458.037730 
## final  value 454.710562 
## converged
## # weights:  251
## initial  value 460.650753 
## final  value 454.712158 
## converged
## # weights:  51
## initial  value 427.780813 
## final  value 427.686860 
## converged
## # weights:  151
## initial  value 554.022997 
## final  value 427.686860 
## converged
## # weights:  251
## initial  value 531.206366 
## final  value 427.686860 
## converged
## # weights:  51
## initial  value 447.515296 
## iter  10 value 427.656893
## iter  20 value 366.088434
## iter  30 value 321.764230
## iter  40 value 302.446979
## iter  50 value 298.474174
## iter  60 value 295.612113
## iter  70 value 294.213107
## iter  80 value 293.682400
## iter  90 value 293.607219
## iter 100 value 293.501885
## final  value 293.501885 
## stopped after 100 iterations
## # weights:  151
## initial  value 524.852125 
## iter  10 value 427.730151
## iter  20 value 427.263827
## iter  30 value 405.340546
## iter  40 value 335.527003
## iter  50 value 306.391810
## iter  60 value 304.112228
## iter  70 value 302.818662
## iter  80 value 292.942892
## iter  90 value 277.475153
## iter 100 value 266.495330
## final  value 266.495330 
## stopped after 100 iterations
## # weights:  251
## initial  value 437.807992 
## iter  10 value 427.731272
## iter  20 value 419.817498
## iter  30 value 411.956997
## iter  40 value 377.928281
## iter  50 value 307.053624
## iter  60 value 279.699677
## iter  70 value 264.720645
## iter  80 value 242.073899
## iter  90 value 224.427744
## iter 100 value 208.198094
## final  value 208.198094 
## stopped after 100 iterations
## # weights:  51
## initial  value 470.069244 
## final  value 427.687908 
## converged
## # weights:  151
## initial  value 440.464025 
## final  value 427.689453 
## converged
## # weights:  251
## initial  value 699.552261 
## final  value 427.691152 
## converged
## # weights:  51
## initial  value 472.272518 
## final  value 448.440127 
## converged
## # weights:  151
## initial  value 449.760710 
## final  value 448.440127 
## converged
## # weights:  251
## initial  value 567.781325 
## iter  10 value 430.904299
## iter  20 value 381.446654
## iter  30 value 359.863633
## iter  40 value 352.161431
## iter  50 value 349.892316
## iter  60 value 349.005549
## iter  70 value 348.971585
## iter  80 value 346.280416
## iter  90 value 337.113055
## iter 100 value 332.180871
## final  value 332.180871 
## stopped after 100 iterations
## # weights:  51
## initial  value 455.688959 
## final  value 448.482395 
## converged
## # weights:  151
## initial  value 450.951977 
## iter  10 value 448.055203
## iter  20 value 428.775808
## iter  30 value 358.585688
## iter  40 value 334.648217
## iter  50 value 326.246858
## iter  60 value 306.437525
## iter  70 value 305.600619
## iter  80 value 305.571800
## iter  90 value 305.483496
## iter 100 value 304.030733
## final  value 304.030733 
## stopped after 100 iterations
## # weights:  251
## initial  value 559.685946 
## iter  10 value 448.493812
## iter  20 value 446.337036
## iter  30 value 389.231224
## iter  40 value 347.165164
## iter  50 value 317.825441
## iter  60 value 306.923688
## iter  70 value 305.501254
## iter  80 value 304.537287
## iter  90 value 299.794964
## iter 100 value 292.350512
## final  value 292.350512 
## stopped after 100 iterations
## # weights:  51
## initial  value 648.910127 
## final  value 448.441021 
## converged
## # weights:  151
## initial  value 604.836098 
## final  value 448.442587 
## converged
## # weights:  251
## initial  value 594.468559 
## final  value 448.444165 
## converged
## # weights:  51
## initial  value 458.280597 
## final  value 453.832031 
## converged
## # weights:  151
## initial  value 502.046698 
## final  value 453.832031 
## converged
## # weights:  251
## initial  value 585.941662 
## final  value 453.832031 
## converged
## # weights:  51
## initial  value 625.218017 
## iter  10 value 453.870825
## iter  10 value 453.870824
## iter  10 value 453.870824
## final  value 453.870824 
## converged
## # weights:  151
## initial  value 458.189040 
## iter  10 value 453.878005
## iter  20 value 453.870335
## iter  30 value 452.888228
## iter  40 value 419.550509
## iter  50 value 383.302873
## iter  60 value 374.308264
## iter  70 value 329.688458
## iter  80 value 316.269487
## iter  90 value 313.714482
## iter 100 value 313.204300
## final  value 313.204300 
## stopped after 100 iterations
## # weights:  251
## initial  value 663.274762 
## iter  10 value 454.024289
## iter  20 value 450.802885
## iter  30 value 433.009584
## iter  40 value 416.946192
## iter  50 value 396.455818
## iter  60 value 358.384804
## iter  70 value 304.846136
## iter  80 value 285.481525
## iter  90 value 275.454533
## iter 100 value 273.233946
## final  value 273.233946 
## stopped after 100 iterations
## # weights:  51
## initial  value 468.750482 
## final  value 453.833089 
## converged
## # weights:  151
## initial  value 474.929887 
## final  value 453.835157 
## converged
## # weights:  251
## initial  value 498.852071 
## final  value 453.836330 
## converged
## # weights:  51
## initial  value 472.495665 
## final  value 446.590709 
## converged
## # weights:  151
## initial  value 447.282429 
## final  value 446.590709 
## converged
## # weights:  251
## initial  value 454.552136 
## final  value 446.590709 
## converged
## # weights:  51
## initial  value 675.531401 
## iter  10 value 446.611708
## iter  20 value 437.392838
## iter  30 value 436.365276
## iter  40 value 434.405476
## iter  50 value 434.240096
## final  value 434.240064 
## converged
## # weights:  151
## initial  value 453.625439 
## iter  10 value 446.062803
## iter  20 value 431.065567
## iter  30 value 407.978646
## iter  40 value 402.860876
## iter  50 value 401.680890
## iter  60 value 400.049366
## iter  70 value 395.782148
## iter  80 value 360.890723
## iter  90 value 314.345078
## iter 100 value 305.531411
## final  value 305.531411 
## stopped after 100 iterations
## # weights:  251
## initial  value 458.662550 
## iter  10 value 442.176623
## iter  20 value 440.647567
## iter  30 value 440.389514
## iter  40 value 440.307221
## iter  50 value 431.009606
## iter  60 value 397.672397
## iter  70 value 346.705633
## iter  80 value 326.252992
## iter  90 value 312.062914
## iter 100 value 301.754653
## final  value 301.754653 
## stopped after 100 iterations
## # weights:  51
## initial  value 449.499479 
## final  value 446.591478 
## converged
## # weights:  151
## initial  value 463.465631 
## final  value 446.593311 
## converged
## # weights:  251
## initial  value 447.568693 
## final  value 446.594663 
## converged
## # weights:  51
## initial  value 515.937227 
## final  value 456.440911 
## converged
## # weights:  151
## initial  value 469.427602 
## final  value 456.440911 
## converged
## # weights:  251
## initial  value 605.535177 
## iter  10 value 427.003842
## iter  20 value 407.823601
## iter  30 value 403.235497
## iter  40 value 401.397688
## iter  50 value 401.147135
## iter  60 value 397.583499
## iter  70 value 397.484955
## iter  80 value 396.112067
## iter  90 value 395.982218
## iter 100 value 394.751134
## final  value 394.751134 
## stopped after 100 iterations
## # weights:  51
## initial  value 514.082833 
## iter  10 value 456.410038
## iter  20 value 454.353644
## iter  30 value 451.691266
## iter  40 value 428.150777
## iter  50 value 353.395408
## iter  60 value 315.311193
## iter  70 value 311.492195
## iter  80 value 310.597981
## iter  90 value 310.042118
## iter 100 value 308.300370
## final  value 308.300370 
## stopped after 100 iterations
## # weights:  151
## initial  value 505.824606 
## iter  10 value 456.714200
## iter  20 value 456.468820
## iter  30 value 456.467635
## iter  40 value 456.462875
## iter  50 value 456.460936
## iter  60 value 456.459897
## final  value 456.459835 
## converged
## # weights:  251
## initial  value 469.000925 
## iter  10 value 455.465975
## iter  20 value 419.308720
## iter  30 value 380.912205
## iter  40 value 373.013442
## iter  50 value 334.776969
## iter  60 value 310.366988
## iter  70 value 297.726995
## iter  80 value 285.536242
## iter  90 value 261.468195
## iter 100 value 230.619460
## final  value 230.619460 
## stopped after 100 iterations
## # weights:  51
## initial  value 545.496143 
## final  value 456.441798 
## converged
## # weights:  151
## initial  value 537.496628 
## final  value 456.443439 
## converged
## # weights:  251
## initial  value 678.034673 
## final  value 456.445342 
## converged
## # weights:  51
## initial  value 624.902415 
## iter  10 value 444.760201
## final  value 444.759716 
## converged
print(germandata.nnet)
## Neural Network 
## 
## 750 samples
##  20 predictor
##   2 classes: '0', '1' 
## 
## No pre-processing
## Resampling: Bootstrapped (25 reps) 
## Summary of sample sizes: 750, 750, 750, 750, 750, 750, ... 
## Resampling results across tuning parameters:
## 
##   size  decay  Accuracy   Kappa      
##   1     0e+00  0.7231997  0.000000000
##   1     1e-04  0.7231997  0.000000000
##   1     1e-01  0.7319562  0.098825492
##   3     0e+00  0.7203639  0.012393841
##   3     1e-04  0.7238127  0.012148425
##   3     1e-01  0.7271728  0.231939324
##   5     0e+00  0.7228635  0.055980178
##   5     1e-04  0.7220361  0.007240612
##   5     1e-01  0.7245660  0.300898859
## 
## Accuracy was used to select the optimal model using the largest value.
## The final values used for the model were size = 1 and decay = 0.1.
plot(germandata.nnet)

plotnet(germandata.nnet$finalModel, y_names = "response")
title("Graphical Representation of our Neural Network")

#In sample
prob.nnet= predict(germandata.nnet,type='prob')
pred.nnet = (prob.nnet[,2] >=pcut)*1
table(germandata.train$response,pred.nnet, dnn=c("Observed","Predicted"))
##         Predicted
## Observed   1
##        0 540
##        1 210
#mean(ifelse(germandata.train$response != pred.nnet, 1, 0))
cost(germandata.train$response, pred.nnet)
## [1] 0.72
#Out of sample
prob.nnet.test= predict(germandata.nnet,germandata.test,type='prob')
pred.nnet.test = as.numeric(prob.nnet.test[,2] > pcut)
table(germandata.test$response,pred.nnet.test, dnn=c("Observed","Predicted"))
##         Predicted
## Observed   1
##        0 160
##        1  90
#mean(ifelse(germandata.test$response != pred.nnet.test, 1, 0))
cost(germandata.test$response, pred.nnet.test)
## [1] 0.64
#Roc curve for nnet########
par(mfrow=c(1,2))
roc.nnet <- roc.plot(x=(germandata.train$response == "1"), pred =prob.nnet[,2])
roc.nnet$roc.vol
##      Model      Area   p.value binorm.area
## 1 Model  1 0.4921473 0.9380831          NA
roc.nnet.test <- roc.plot(x=(germandata.test$response == "1"), pred =prob.nnet.test[,2])

roc.nnet.test$roc.vol
##      Model      Area   p.value binorm.area
## 1 Model  1 0.5023958 0.3440269          NA