2009年3月11日星期三

Logistic regression and tree model

##read and clean the input file (deleting obs with missing values)
hmeq<-read.csv("hmeq.csv",na.strings="",h=T)
dim(hmeq)
dc<-hmeq[complete.cases(hmeq),]
dim(dc)
names(dc)

##randomly split the data and carry out logistic regression and tree model
fit<-c()
valid.fit<-c()
pred<-c()
tree.fit<-c()
tree.valid<-c()
tree.pred<-c()
for (i in c (1:10)){
samp.t<-sample(1:3364,1682)
train<-dc[samp.t,]
dim(train)
rest<-dc[-samp.t,]
samp.v<-sample(1:1682,841)
valid<-rest[samp.v,]
dim(valid)
test<-rest[-samp.v,]
dim(test)
##logistic regression model with binary response
lreg<-glm(BAD~.,data=train,binomial)
summary(lreg)
fit<-cbind(fit,lreg$fit)
valid.fit<-cbind(valid.fit,predict(lreg,valid))
pred<-cbind(pred,predict(lreg,test))
##recall"tree"command from "tree package"
library(tree)
hmeq.tree<-tree(BAD~.,data=train)
summary(hmeq.tree)
hmeq.tree
##plot the tree model
plot(hmeq.tree)
text(hmeq.tree,pretty=0,cex=0.8)
dev.off()
tree.fit<-cbind(tree.fit,hmeq.tree$y)
tree.valid<-cbind(tree.valid,predict(hmeq.tree,valid))
tree.pred<-cbind(tree.pred,predict(hmeq.tree,test))
}
##loop-calculate the train,validating,testing error from above two models with 10 replications
train_error<-c()
valid_error<-c()
test_error<-c()
f_error<-c()
v_error<-c()
t_error<-c()
for (i in 1:10){
fit1<-fit[,i]>0.5
fit.table<-table(fit1,train$BAD)
train_error<-c(train_error,(fit.table[1,2]+fit.table[2,1])/sum(fit.table))
train_error
valid.fit1<-valid.fit[,i]>0.5
valid.table<-table(valid.fit1,valid$BAD)
valid_error<-c(valid_error,(table[1,2]+table[2,1])/sum(table))
valid_error
pred1<-pred[,i]>0.5
table<-table(pred1,test$BAD)
test_error<-c(test_error,(table[1,2]+table[2,1])/sum(table))
test_error
table.f<-table(tree.fit[,i],train$BAD)
table.v<-table(tree.valid[,i],valid$BAD)
table.t<-table(tree.pred[,i],test$BAD)
f_error<-c(f_error,(table.f[1,2]+table.f[2,1])/sum(table.f))
v_error<-c(v_error,(table.v[1,2]+table.v[2,1])/sum(table.v))
t_error<-c(t_error,(table.t[1,2]+table.t[2,1])/sum(table.t))
}
##display the results errors from two models
l_errors<-cbind(train_error,valid_error,test_error)
t(l_errors)
t_errors<-cbind(f_error,v_error,t_error)
t(t_errors)

没有评论:

发表评论