# Taken all categorical variable
Attrition2 = subset(Attrition, select = c(2,3,5,7,9,13,15,19))
str(Attrition2)
# combined Numeric &categorical Variable
Attrition<-data.frame(Attrition2,Attrition1)
str(Attrition)
names(Attrition)
##############333#Data Partition#789#######################
set.seed(231)
library(caret)
train<-createDataPartition(Attrition$Attrition,p=0.7,list=FALSE)
training<-Attrition[train,]
testing<-Attrition[-train,]
############################## Data Pre-Processing #############################
summary(training)
############################## Missing Value #############################
sapply(training,function(x) sum(is.na(x)))
###### Identify outlier of Income Variable #####
boxplot(training$YearsWithCurrManager)
boxplot(training$YearsWithCurrManager)
summary(training$YearsWithCurrManager)
#### Winsorizing technique #####
upper<-1162+1.5*IQR(training$YearsWithCurrManager);upper
#### Winsorizing technique #####
upper<-7+1.5*IQR(training$YearsWithCurrManager);upper
training$YearsWithCurrManager[training$YearsWithCurrManager > upper]<-upper
boxplot(training$YearsWithCurrManager)
summary(training$YearsWithCurrManager)
############# Model Building all variable ##########################
logit <- glm(target ~ .,family='binomial',
data=training)
############# Model Building all variable ##########################
logit <- glm(Attrition ~ .,family='binomial',
data=training)
summary(logit)
############# Model Building all variable ##########################
logit <- step(glm(Attrition ~ .,family='binomial',
data=training),direction = "Both")
############# Model Building all variable ##########################
logit <- step(glm(Attrition ~ .,family='binomial',
data=training),direction = "both")
summary(logit)
summary(logit)
anova(logit,test='Chisq')
###################### Variable Selection Method #####################
#relevel(Pclass,ref = 2)
logit2 <- step(glm(Attrition ~ .-Gender-RelationshipSatisfaction-StockOptionLevel
-TotalWorkingYears-YearsAtCompany ,
family='binomial', data=training),direction = "both")
summary(logit2)
anova(logit2,test='Chisq')
# concordance and discordance
Acc=function(model){
Data = cbind(model$y, model$fitted.values)
ones = Data[Data[,1] == 1,]
zeros = Data[Data[,1] == 0,]
conc=matrix(0, dim(zeros)[1], dim(ones)[1])
disc=matrix(0, dim(zeros)[1], dim(ones)[1])
ties=matrix(0, dim(zeros)[1], dim(ones)[1])
for (j in 1:dim(zeros)[1])
{
for (i in 1:dim(ones)[1])
{
if (ones[i,2]>zeros[j,2])
{conc[j,i]=1}
else if (ones[i,2]<zeros[j,2])
{disc[j,i]=1}
else if (ones[i,2]==zeros[j,2])
{ties[j,i]=1}
}
}
Pairs=dim(zeros)[1]*dim(ones)[1]
PercentConcordance=(sum(conc)/Pairs)*100
PercentDiscordance=(sum(disc)/Pairs)*100
PercentTied=(sum(ties)/Pairs)*100
return(list("Percent Concordance"=PercentConcordance,"Percent Discordance"=PercentDiscordance,"Percent Tied"=PercentTied,"Pairs"=Pairs))
}
###################### Accuracy of model #####################
Acc(logit2)
##################### # odds Ratio #####################
exp(coef(logit2))
##################### ## Prediction on testing data #####################
testing$probs <-predict(logit2, testing, type='response')
testing$Predict<-as.factor(ifelse(testing$probs>0.70,1,0))
###################### Accuracy of testing data  #####################
library(e1071)
table(testing$Predict, testing$target)
table(testing$Predict, testing$Attrition)
confusionMatrix(testing$Attrition,testing$Predict,positive = "1")
table(testing$Predict, testing$Attrition)
confusionMatrix(testing$Attrition,testing$Predict,positive = "1")
testing$Predict<-as.factor(ifelse(testing$probs>0.70,"Yes","NO"))
###################### Accuracy of testing data  #####################
library(e1071)
table(testing$Predict, testing$Attrition)
confusionMatrix(testing$Attrition,testing$Predict,positive = "1")
confusionMatrix(testing$Attrition,testing$Predict,positive = "yES")
confusionMatrix(testing$Attrition,testing$Predict,positive = "Yes")
table(testing$Predict, testing$Attrition)
##################### ## Prediction on testing data #####################
testing$probs <-predict(logit2, testing, type='response')
testing$Predict<-as.factor(ifelse(testing$probs>0.70,"Yes","NO"))
###################### Accuracy of testing data  #####################
library(e1071)
table(testing$Predict, testing$Attrition)
confusionMatrix(testing$Attrition,testing$Predict,positive = "Yes")
confusionMatrix(testing$Attrition,testing$Predict,positive = "Yes")
Attrition$Attrition<-ifelse(Attrition$Attrition=="Yes",1,0)
View(Attrition)
Attrition$Attrition<-as.factor(ifelse(Attrition$Attrition=="Yes",1,0))
str(Attrition)
View(Attrition)
Datafile<-read.csv("F:/R and Data Science/Decision tree/employee.csv")
Datafile<-read.csv("F:/R and Data Science/Decision tree/employee.csv")
################### To check Data Type ##################
str(Datafile)
names(Datafile)
#################### Just taking a subset of column for model building ##################
Datafile = subset(Datafile, select = -c(7,9,10,27,22))
names(Datafile)
str(Datafile)
# Taken All integar variable &  convert to numeric
Datafile1 = subset(Datafile, select = -c(2,3,5,7,9,13,15,19))
names(Datafile1)
str(Datafile1)
Datafile1<-data.frame(apply(Datafile1, 2, as.numeric))
str(Datafile1)
# Taken all categorical variable
Datafile2 = subset(Datafile, select = c(2,3,5,7,9,13,15,19))
str(Datafile2)
# combined Numeric &categorical Variable
Datafile<-data.frame(Datafile2,Datafile1)
str(Datafile)
names(Datafile)
Datafile$Datafile<-as.factor(ifelse(Datafile$Datafile=="Yes",1,0))
str(Datafile)
########## Data Import
Datafile<-read.csv("F:/R and Data Science/Decision tree/employee.csv")
################### To check Data Type ##################
str(Datafile)
names(Datafile)
#################### Just taking a subset of column for model building ##################
Datafile = subset(Datafile, select = -c(7,9,10,27,22))
names(Datafile)
str(Datafile)
################## Data Conversion#############################
# Taken All integar variable &  convert to numeric
Datafile1 = subset(Datafile, select = -c(2,3,5,7,9,13,15,19))
names(Datafile1)
str(Datafile1)
Datafile1<-data.frame(apply(Datafile1, 2, as.numeric))
str(Datafile1)
# Taken all categorical variable
Datafile2 = subset(Datafile, select = c(2,3,5,7,9,13,15,19))
str(Datafile2)
# combined Numeric &categorical Variable
Datafile<-data.frame(Datafile2,Datafile1)
str(Datafile)
names(Datafile)
Datafile$Attrition<-as.factor(ifelse(Datafile$Attrition=="Yes",1,0))
str(Datafile)
train<-createDataPartition(Datafile$Attrition,p=0.7,list=FALSE)
training<-Datafile[train,]
testing<-Datafile[-train,]
summary(training)
############################## Missing Value #############################
sapply(training,function(x) sum(is.na(x)))
##################### Identifcation & Treatment of  Outlier#############################
###### Identify outlier of Income Variable #####
boxplot(training$YearsWithCurrManager)
###### Identify &  Treatment of outlier for YearsWithCurrManager #####
par(mfrow=c(1,2))
boxplot(training$YearsWithCurrManager)
summary(training$YearsWithCurrManager)
#### Winsorizing technique #####
upper<-7+1.5*IQR(training$YearsWithCurrManager);upper
training$YearsWithCurrManager[training$YearsWithCurrManager > upper]<-upper
boxplot(training$YearsWithCurrManager)
summary(training$YearsWithCurrManager)
############# Model Building all variable ##########################
logit <- step(glm(Attrition ~ .,family='binomial',
data=training),direction = "both")
summary(logit)
anova(logit,test='Chisq')
###################### Variable Selection Method #####################
#relevel(Pclass,ref = 2)
logit2 <- step(glm(Attrition ~ .-Gender-RelationshipSatisfaction-StockOptionLevel
-TotalWorkingYears-YearsAtCompany ,
family='binomial', data=training),direction = "both")
summary(logit2)
anova(logit2,test='Chisq')
###################### Accuracy of model #####################
Acc(logit2)
# concordance and discordance
Acc=function(model){
Data = cbind(model$y, model$fitted.values)
ones = Data[Data[,1] == 1,]
zeros = Data[Data[,1] == 0,]
conc=matrix(0, dim(zeros)[1], dim(ones)[1])
disc=matrix(0, dim(zeros)[1], dim(ones)[1])
ties=matrix(0, dim(zeros)[1], dim(ones)[1])
for (j in 1:dim(zeros)[1])
{
for (i in 1:dim(ones)[1])
{
if (ones[i,2]>zeros[j,2])
{conc[j,i]=1}
else if (ones[i,2]<zeros[j,2])
{disc[j,i]=1}
else if (ones[i,2]==zeros[j,2])
{ties[j,i]=1}
}
}
Pairs=dim(zeros)[1]*dim(ones)[1]
PercentConcordance=(sum(conc)/Pairs)*100
PercentDiscordance=(sum(disc)/Pairs)*100
PercentTied=(sum(ties)/Pairs)*100
return(list("Percent Concordance"=PercentConcordance,"Percent Discordance"=PercentDiscordance,"Percent Tied"=PercentTied,"Pairs"=Pairs))
}
##################### # odds Ratio #####################
exp(coef(logit2))
###################### Accuracy of model #####################
Acc(logit2)
##################### ## Prediction on testing data #####################
testing$probs <-predict(logit2, testing, type='response')
testing$Predict<-as.factor(ifelse(testing$probs>0.70,1,0))
###################### Accuracy of testing data  #####################
library(e1071)
table(testing$Predict, testing$Datafile)
confusionMatrix(testing$Datafile,testing$Predict,positive = "1")
table(testing$Predict, testing$Attrition)
confusionMatrix(testing$Attrition,testing$Predict,positive = "1")
Datafile<-read.csv("F:/R and Data Science/Decision tree/employee.csv")
################### To check Data Type ##################
str(Datafile)
names(Datafile)
#################### Just taking a subset of column for model building ##################
Datafile = subset(Datafile, select = -c(7,9,10,27,22))
names(Datafile)
str(Datafile)
# Taken All integar variable &  convert to numeric
Datafile1 = subset(Datafile, select = -c(2,3,5,7,9,13,15,19))
names(Datafile1)
str(Datafile1)
Datafile1<-data.frame(apply(Datafile1, 2, as.numeric))
str(Datafile1)
# Taken all categorical variable
Datafile2 = subset(Datafile, select = c(2,3,5,7,9,13,15,19))
str(Datafile2)
# combined Numeric &categorical Variable
Datafile<-data.frame(Datafile2,Datafile1)
str(Datafile)
names(Datafile)
Datafile$Attrition<-as.factor(ifelse(Datafile$Attrition=="Yes",1,0))
str(Datafile)
##############333#Data Partition#789#######################
set.seed(231)
library(caret)
train<-createDataPartition(Datafile$Attrition,p=0.7,list=FALSE)
training<-Datafile[train,]
testing<-Datafile[-train,]
############################## Data Pre-Processing #############################
summary(training)
############################## Missing Value #############################
sapply(training,function(x) sum(is.na(x)))
###### Identify outlier of Income Variable #####
boxplot(training$YearsWithCurrManager)
###### Identify &  Treatment of outlier for YearsWithCurrManager #####
par(mfrow=c(1,2))
boxplot(training$YearsWithCurrManager)
summary(training$YearsWithCurrManager)
#### Winsorizing technique #####
upper<-7+1.5*IQR(training$YearsWithCurrManager);upper
training$YearsWithCurrManager[training$YearsWithCurrManager > upper]<-upper
boxplot(training$YearsWithCurrManager)
summary(training$YearsWithCurrManager)
############# Model Building all variable ##########################
logit <- step(glm(Attrition ~ .,family='binomial',
data=training),direction = "both")
summary(logit)
anova(logit,test='Chisq')
###################### Variable Selection Method #####################
#relevel(Pclass,ref = 2)
logit2 <- step(glm(Attrition ~ .-Gender-RelationshipSatisfaction-StockOptionLevel
-TotalWorkingYears-YearsAtCompany ,
family='binomial', data=training),direction = "both")
summary(logit2)
anova(logit2,test='Chisq')
###################### Accuracy of model #####################
Acc(logit2)
# concordance and discordance
Acc=function(model){
Data = cbind(model$y, model$fitted.values)
ones = Data[Data[,1] == 1,]
zeros = Data[Data[,1] == 0,]
conc=matrix(0, dim(zeros)[1], dim(ones)[1])
disc=matrix(0, dim(zeros)[1], dim(ones)[1])
ties=matrix(0, dim(zeros)[1], dim(ones)[1])
for (j in 1:dim(zeros)[1])
{
for (i in 1:dim(ones)[1])
{
if (ones[i,2]>zeros[j,2])
{conc[j,i]=1}
else if (ones[i,2]<zeros[j,2])
{disc[j,i]=1}
else if (ones[i,2]==zeros[j,2])
{ties[j,i]=1}
}
}
Pairs=dim(zeros)[1]*dim(ones)[1]
PercentConcordance=(sum(conc)/Pairs)*100
PercentDiscordance=(sum(disc)/Pairs)*100
PercentTied=(sum(ties)/Pairs)*100
return(list("Percent Concordance"=PercentConcordance,"Percent Discordance"=PercentDiscordance,"Percent Tied"=PercentTied,"Pairs"=Pairs))
}
###################### Accuracy of model #####################
Acc(logit2)
##################### # odds Ratio #####################
exp(coef(logit2))
table(training$BusinessTravel)
##################### # odds Ratio #####################
exp(coef(logit2))
##################### ## Prediction on testing data #####################
testing$probs <-predict(logit2, testing, type='response')
testing$Predict<-as.factor(ifelse(testing$probs>0.70,1,0))
###################### Accuracy of testing data  #####################
library(e1071)
table(testing$Predict, testing$Attrition)
confusionMatrix(testing$Attrition,testing$Predict,positive = "1")
confusionMatrix(testing$Predict,testing$Attrition,positive = "1")
confusionMatrix(testing$Predict,testing$Attrition,positive = "1")
confusionMatrix(testing$Predict,testing$Attrition,positive = "1")
confusionMatrix(testing$Predict,testing$Attrition,positive = "1")
########## Data Import
Datafile<-read.csv("F:/R and Data Science/Decision tree/employee.csv")
################### To check Data Type ##################
str(Datafile)
names(Datafile)
#################### Just taking a subset of column for model building ##################
Datafile = subset(Datafile, select = -c(7,9,10,27,22))
names(Datafile)
str(Datafile)
################## Data Conversion#############################
# Taken All integar variable &  convert to numeric
Datafile1 = subset(Datafile, select = -c(2,3,5,7,9,13,15,19))
names(Datafile1)
str(Datafile1)
Datafile1<-data.frame(apply(Datafile1, 2, as.numeric))
str(Datafile1)
# Taken all categorical variable
Datafile2 = subset(Datafile, select = c(2,3,5,7,9,13,15,19))
str(Datafile2)
# combined Numeric &categorical Variable
Datafile<-data.frame(Datafile2,Datafile1)
str(Datafile)
names(Datafile)
Datafile$Attrition<-as.factor(ifelse(Datafile$Attrition=="Yes",1,0))
str(Datafile)
##############333#Data Partition#789#######################
set.seed(231)
library(caret)
train<-createDataPartition(Datafile$Attrition,p=0.7,list=FALSE)
training<-Datafile[train,]
testing<-Datafile[-train,]
############################### Multiple Logistic Regression #############################
############################## Data Pre-Processing #############################
summary(training)
############################## Missing Value #############################
sapply(training,function(x) sum(is.na(x)))
##################### Identifcation & Treatment of  Outlier#############################
###### Identify outlier of Income Variable #####
boxplot(training$YearsWithCurrManager)
###### Identify &  Treatment of outlier for YearsWithCurrManager #####
par(mfrow=c(1,2))
boxplot(training$YearsWithCurrManager)
summary(training$YearsWithCurrManager)
#### Winsorizing technique #####
upper<-7+1.5*IQR(training$YearsWithCurrManager);upper
training$YearsWithCurrManager[training$YearsWithCurrManager > upper]<-upper
boxplot(training$YearsWithCurrManager)
summary(training$YearsWithCurrManager)
############# Model Building all variable ##########################
logit <- step(glm(Attrition ~ .,family='binomial',
data=training),direction = "both")
summary(logit)
anova(logit,test='Chisq')
###################### Variable Selection Method #####################
#relevel(Pclass,ref = 2)
logit2 <- step(glm(Attrition ~ .-Gender-RelationshipSatisfaction-StockOptionLevel
-TotalWorkingYears-YearsAtCompany ,
family='binomial', data=training),direction = "both")
summary(logit2)
anova(logit2,test='Chisq')
###################### Accuracy of model #####################
Acc(logit2)
##################### # odds Ratio #####################
exp(coef(logit2))
##################### ## Prediction on testing data #####################
testing$probs <-predict(logit2, testing, type='response')
testing$Predict<-as.factor(ifelse(testing$probs>0.70,1,0))
###################### Accuracy of testing data  #####################
library(e1071)
table(testing$Predict, testing$Attrition)
confusionMatrix(testing$Predict,testing$Attrition,positive = "1")
######################## Roc Curve  #####################
library(ROCR)
# Make predictions on training set
predictTrain = predict(logit2,testing, type="response")
# Prediction function
ROCRpred = prediction(predictTrain, testing$target)
# Performance function
ROCRperf = performance(ROCRpred, "tpr", "fpr")
# Plot ROC curve
plot(ROCRperf)
######################### AUC #####################
library(ROCR)
pred = prediction(testing$probs, testing$target)
as.numeric(performance(pred, "auc")@y.values)
###################### Mathematical calculation check  #####################
# To get Coefficent of model(B0,B1,B2)
logit2$coefficients
# Manual Prediction for Male
Z=-11.648609428+0.005820372*2113.01902+0.836563545*1
a<-exp(-Z)
b<-1+a
Y<-1/b
Y
# Manual Prediction for Female
Z=-11.648609428+0.005820372*2261.84816	+0.836563545*0
a<-exp(-Z)
b<-1+a
Y<-1/b
Y
confusionMatrix(testing$Predict,testing$Attrition,positive = "1")
# create 2 hp Level
abc<-mtcars
View(abc)
abc$hpcat <- as.factor(ifelse(abc$hp > 200,"sport","Normal_Car"))
View(abc)
# to check the level in a variable
table(abc$hpcat)
abc$hpcat<- factor(abc$hpcat,
levels = c("sport","Normal_Car"),
labels = c(1,0))
table(abc$hpcat)
rm(abc)
# More than 2 levels
abc<-mtcars
abc$hpcat <- as.factor(ifelse(abc$hp<= 70,"Normal_Car",
ifelse(abc$hp<=200,"Semi_sport","sport")))
# to check the level in a variable
table(abc$hpcat)
abc$hpcat<- factor(abc$hpcat,
levels = c("Normal_Car","Semi_sport","sport"),
labels = c(1,2,1))
table(abc$hpcat)
## outlier replacement using box plot and quantile strategy
old<-mtcars
mtcars<-mtcars
## outlier replacement using box plot and quantile strategy
old<-mtcars
mtcars<-mtcars
########### Capping and Flooring Technique
library(scales)
summary(mtcars$hp)
boxplot(mtcars$hp)
summary(mtcars$hp)
boxplot(mtcars$hp)
mtcars$hp <- squish(mtcars$hp, round(quantile(mtcars$hp, c(0.05, 0.95))))
summary(mtcars$hp)
boxplot(mtcars$hp)
rm(mtcars)
## outlier replacement using Winsorization Technique
mtcars<-mtcars
## outlier replacement using Winsorization Technique
mtcars<-mtcars
summary(mtcars$hp)
boxplot(mtcars$hp)
#creating upper limit value
upper<-180+1.5*IQR(mtcars$hp)
upper
#creating lower limit value
lower<-96.5-1.5*IQR(mtcars$hp)
lower
# upper limit replacement
mtcars$hp[mtcars$hp > upper]<-upper
summary(mtcars$hp)
boxplot(mtcars$hp)
rm(mtcars)
############# Outlier treatment by Mean,Median,Mode & Row Deletion #########
mtcars<-mtcars
summary(mtcars$hp)
boxplot(mtcars$hp)
abc<-subset(mtcars,mtcars$hp<=305.25)
mean(abc$hp)
######### Replace by mean
mtcars$hp <- (ifelse(mtcars$hp > 305.25,mean(abc$hp),mtcars$hp))
summary(mtcars$hp)
boxplot(mtcars$hp)
## Manual code of capping and flooring or winsorization
outputQuantile <- quantile(faithful$waiting, seq(0,1,by=0.05))
outputQuantile
qn = quantile(faithful$waiting, c(0.01, 0.99), na.rm = TRUE)
qn = quantile(faithful$waiting, c(0.01, 0.99), na.rm = TRUE)
df = within(faithful,{ waiting=ifelse(waiting < qn[1],qn[1],waiting)
waiting = ifelse(waiting > qn[2], qn[2], waiting)})
summary(faithful)
summary(df)
setwd("C:/Users/Ankit Dsouza/Desktop/tanushree notes/Talent analytics Case study file/Testing Hypothesis")
data<-read.csv("employee.csv")
t.test(data$Appraisal_Result_Rating~data$Performance_Cycle,mu=0,alternative = "two.sided",conf.level = 0.95,var.eq=T,paired=F)
