library(readr)
library(MASS)
library(DiscriMiner)
train <- read_csv("D:/PG Business Analytics/PA/Group Assignment/PaulBooks1.csv")
Parsed with column specification:
cols(
  `'ID` = col_integer(),
  Months = col_integer(),
  NoBought = col_integer(),
  Purchase = col_integer()
)
test <- read_csv("D:/PG Business Analytics/PA/Group Assignment/PaulBooks2.csv")
Parsed with column specification:
cols(
  `'ID` = col_integer(),
  Months = col_integer(),
  NoBought = col_integer(),
  Purchase = col_integer()
)
head(train)
head(test)
ggplot(data=train, aes(x=factor(Months))) + stat_count() + xlab('Months')

ggplot(data=train, aes(x=factor(NoBought))) + stat_count() + xlab('NoBought')

ggplot(data=train,aes(Months,Months))+geom_boxplot()

ggplot(data=train,aes(NoBought,NoBought))+geom_boxplot()

ggplot(stack(train[,2:4]), aes(x = ind, y = values,color=ind)) +
  geom_boxplot()+ coord_flip()+xlab(" Values ") +ylab("Variables")+theme(legend.position="none")

ggplot(data=train,aes(x=Purchase,y=Months,group=Purchase))+geom_boxplot()

ggplot(data=train,aes(x=Purchase,y=NoBought,group=Purchase))+geom_boxplot()

ggplot(data=train,aes(x=Months,y=Purchase))+geom_point(shape=1,col='grey')+
  geom_smooth(method=lm)+
  xlab(paste('Living Area above Ground',' R-Sqaured:',
             summary(lm(train$Purchase~train$Months))$adj.r.squared))+theme_light()

ggplot(data=train,aes(x=Purchase,y=NoBought))+geom_point(shape=1,col='grey')+
  geom_smooth(method=lm)+
  xlab(paste('Living Area above Ground',' R-Sqaured:',
             summary(lm(train$Purchase~train$NoBought))$adj.r.squared))+theme_light()

model = lda(Purchase~Months+NoBought,data=train,na.action="na.omit", CV=TRUE)
summary(model)
          Length Class  Mode   
class     1000   factor numeric
posterior 2000   -none- numeric
terms        3   terms  call   
call         5   -none- call   
xlevels      0   -none- list   
train$pred =  as.numeric(model$posterior[,1]<model$posterior[,2])
table(actual=train$Purchase,Predicted = train$pred)
      Predicted
actual   0   1
     0 907  10
     1  72  11
train$dummy<-log(train$NoBought/train$Months)
train$dummy<-as.numeric(train$Months<36)
train$dummy<-train$dummy+as.numeric(train$Months<24)
train$dummy<-train$dummy+as.numeric(train$Months<12)
model = lda(Purchase~Months+NoBought+dummy,data=train,na.action="na.omit", CV=TRUE)
pred =  as.numeric(model$posterior[,1]<model$posterior[,2])
table(actual=train$Purchase,Predicted = pred)
      Predicted
actual   0   1
     0 903  14
     1  70  13
x<-train[,2:3]
y<-as.numeric(train[,4])
Error: (list) object cannot be coerced to type 'double'
mahalanobis<-linDA(x,y)
mahalanobis

Linear Discriminant Analysis
-------------------------------------------
$functions        discrimination functions
$confusion        confusion matrix
$scores           discriminant scores
$classification   assigned class
$error_rate       error rate
-------------------------------------------

$functions
          0       1     
constant  -1.473  -4.295
Months     0.200   0.143
NoBought   0.699   2.267


$confusion
        predicted
original    0    1
       0  907   10
       1   72   11


$error_rate
[1] 0.082


$scores
          0           1
1  3.315145  -0.8650023
2  1.718994  -2.0082531
3  1.519476  -2.1511595
4  2.916107  -1.1508150
5  1.519476  -2.1511595
6  1.120868   1.0966496
...

$classification
[1] 0 0 0 0 0 0
Levels: 0 1
...
mscore<-as.data.frame(mahalanobis$scores)
dwpred<-as.numeric(mscore$`0`<mscore$`1`)
table(rm$Purchase,dwpred)
   dwpred
      0   1
  0 907  10
  1  72  11
c<-classify(mahalanobis,test[,2:3])
test$pred<-c$pred_class
table(actual=test$Purchase,predict=test$pred)
      predict
actual   0   1
     0 908  11
     1  67  14

The accuracy in holdout sample is 92.2%

LS0tDQp0aXRsZTogJ0Rpc2NyaW1pbmFudCBBbmFseXNpcycNCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KLS0tDQoNCiANCg0KYGBge3J9DQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeShNQVNTKQ0KbGlicmFyeShEaXNjcmlNaW5lcikNCmBgYA0KDQpgYGB7cn0NCnRyYWluIDwtIHJlYWRfY3N2KCJEOi9QRyBCdXNpbmVzcyBBbmFseXRpY3MvUEEvR3JvdXAgQXNzaWdubWVudC9QYXVsQm9va3MxLmNzdiIpDQp0ZXN0IDwtIHJlYWRfY3N2KCJEOi9QRyBCdXNpbmVzcyBBbmFseXRpY3MvUEEvR3JvdXAgQXNzaWdubWVudC9QYXVsQm9va3MyLmNzdiIpDQpoZWFkKHRyYWluKQ0KDQpgYGANCg0KDQpgYGB7cn0NCmhlYWQodGVzdCkNCmBgYA0KDQoNCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YT10cmFpbiwgYWVzKHg9ZmFjdG9yKE1vbnRocykpKSArIHN0YXRfY291bnQoKSArIHhsYWIoJ01vbnRocycpDQpgYGANCg0KDQpgYGB7cn0NCmdncGxvdChkYXRhPXRyYWluLCBhZXMoeD1mYWN0b3IoTm9Cb3VnaHQpKSkgKyBzdGF0X2NvdW50KCkgKyB4bGFiKCdOb0JvdWdodCcpDQpgYGANCg0KDQpgYGB7ciB3YXJuaW5nPUZBTFNFfQ0KZ2dwbG90KGRhdGE9dHJhaW4sYWVzKE1vbnRocyxNb250aHMpKStnZW9tX2JveHBsb3QoKQ0KYGBgDQoNCg0KYGBge3Igd2FybmluZz1GQUxTRX0NCmdncGxvdChkYXRhPXRyYWluLGFlcyhOb0JvdWdodCxOb0JvdWdodCkpK2dlb21fYm94cGxvdCgpDQpgYGANCg0KDQpgYGB7cn0NCmdncGxvdChzdGFjayh0cmFpblssMjo0XSksIGFlcyh4ID0gaW5kLCB5ID0gdmFsdWVzLGNvbG9yPWluZCkpICsNCiAgZ2VvbV9ib3hwbG90KCkrIGNvb3JkX2ZsaXAoKSt4bGFiKCIgVmFsdWVzICIpICt5bGFiKCJWYXJpYWJsZXMiKSt0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQ0KYGBgDQoNCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YT10cmFpbixhZXMoeD1QdXJjaGFzZSx5PU1vbnRocyxncm91cD1QdXJjaGFzZSkpK2dlb21fYm94cGxvdCgpDQpgYGANCg0KDQpgYGB7cn0NCmdncGxvdChkYXRhPXRyYWluLGFlcyh4PVB1cmNoYXNlLHk9Tm9Cb3VnaHQsZ3JvdXA9UHVyY2hhc2UpKStnZW9tX2JveHBsb3QoKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGE9dHJhaW4sYWVzKHg9TW9udGhzLHk9UHVyY2hhc2UpKStnZW9tX3BvaW50KHNoYXBlPTEsY29sPSdncmV5JykrDQogIGdlb21fc21vb3RoKG1ldGhvZD1sbSkrDQogIHhsYWIocGFzdGUoJ0xpdmluZyBBcmVhIGFib3ZlIEdyb3VuZCcsJyBSLVNxYXVyZWQ6JywNCiAgICAgICAgICAgICBzdW1tYXJ5KGxtKHRyYWluJFB1cmNoYXNlfnRyYWluJE1vbnRocykpJGFkai5yLnNxdWFyZWQpKSt0aGVtZV9saWdodCgpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YT10cmFpbixhZXMoeD1QdXJjaGFzZSx5PU5vQm91Z2h0KSkrZ2VvbV9wb2ludChzaGFwZT0xLGNvbD0nZ3JleScpKw0KICBnZW9tX3Ntb290aChtZXRob2Q9bG0pKw0KICB4bGFiKHBhc3RlKCdMaXZpbmcgQXJlYSBhYm92ZSBHcm91bmQnLCcgUi1TcWF1cmVkOicsDQogICAgICAgICAgICAgc3VtbWFyeShsbSh0cmFpbiRQdXJjaGFzZX50cmFpbiROb0JvdWdodCkpJGFkai5yLnNxdWFyZWQpKSt0aGVtZV9saWdodCgpDQpgYGANCg0KDQoNCmBgYHtyfQ0KbW9kZWwgPSBsZGEoUHVyY2hhc2V+TW9udGhzK05vQm91Z2h0LGRhdGE9dHJhaW4sbmEuYWN0aW9uPSJuYS5vbWl0IiwgQ1Y9VFJVRSkNCnN1bW1hcnkobW9kZWwpDQpgYGANCg0KYGBge3J9DQp0cmFpbiRwcmVkID0gIGFzLm51bWVyaWMobW9kZWwkcG9zdGVyaW9yWywxXTxtb2RlbCRwb3N0ZXJpb3JbLDJdKQ0KdGFibGUoYWN0dWFsPXRyYWluJFB1cmNoYXNlLFByZWRpY3RlZCA9IHRyYWluJHByZWQpDQpgYGANCg0KYGBge3J9DQp0cmFpbiRkdW1teTwtbG9nKHRyYWluJE5vQm91Z2h0L3RyYWluJE1vbnRocykNCg0KdHJhaW4kZHVtbXk8LWFzLm51bWVyaWModHJhaW4kTW9udGhzPDM2KQ0KdHJhaW4kZHVtbXk8LXRyYWluJGR1bW15K2FzLm51bWVyaWModHJhaW4kTW9udGhzPDI0KQ0KdHJhaW4kZHVtbXk8LXRyYWluJGR1bW15K2FzLm51bWVyaWModHJhaW4kTW9udGhzPDEyKQ0KDQptb2RlbCA9IGxkYShQdXJjaGFzZX5Nb250aHMrTm9Cb3VnaHQrZHVtbXksZGF0YT10cmFpbixuYS5hY3Rpb249Im5hLm9taXQiLCBDVj1UUlVFKQ0KcHJlZCA9ICBhcy5udW1lcmljKG1vZGVsJHBvc3RlcmlvclssMV08bW9kZWwkcG9zdGVyaW9yWywyXSkNCnRhYmxlKGFjdHVhbD10cmFpbiRQdXJjaGFzZSxQcmVkaWN0ZWQgPSBwcmVkKQ0KYGBgDQoNCmBgYHtyfQ0KeDwtdHJhaW5bLDI6M10NCnk8LWFzLm51bWVyaWModHJhaW5bLDRdKQ0KZmlzaGVyPC1kZXNEQSh4LHkpDQpmaXNoZXINCmBgYA0KDQpgYGB7cn0NCm1haGFsYW5vYmlzPC1saW5EQSh4LHkpDQptYWhhbGFub2Jpcw0KbXNjb3JlPC1hcy5kYXRhLmZyYW1lKG1haGFsYW5vYmlzJHNjb3JlcykNCmR3cHJlZDwtYXMubnVtZXJpYyhtc2NvcmUkYDBgPG1zY29yZSRgMWApDQoNCnRhYmxlKHJtJFB1cmNoYXNlLGR3cHJlZCkNCmBgYA0KDQpgYGB7cn0NCmM8LWNsYXNzaWZ5KG1haGFsYW5vYmlzLHRlc3RbLDI6M10pDQp0ZXN0JHByZWQ8LWMkcHJlZF9jbGFzcw0KdGFibGUoYWN0dWFsPXRlc3QkUHVyY2hhc2UscHJlZGljdD10ZXN0JHByZWQpDQpgYGANCg0KDQpUaGUgYWNjdXJhY3kgaW4gaG9sZG91dCBzYW1wbGUgaXMgOTIuMiUNCg==