R---逻辑回归模型流程

#工作路径设置
setwd('C:\\Users\\Documents\\R语言') 


data<-read.csv("logitcredit.csv",header=T)

str(data)

n<-nrow(data)
n

# ####定义变量角色 --------------------------------------------------------------


target="Delta"

##找出data中变量时numeric的变量名称

numerics=names(which(sapply(data,is.numeric)))
length(numerics)

##找出data中变量是factor的变量名称
factors=setdiff(names(which(sapply(data,is.factor))),target)
##集合的差

###logical变量
logic<-names(which(lev==2))
logic


# #####数据清洗,找出删除的变量~~~~~~~~~~~~~ ------------------------------------------



########取值集中在某一取值
centors=names(which(sapply(data,function(x) max(table(x))/length(x)>0.95)))
centors
##有

########查找变量缺失值的数量
mvc = sapply(data,function(x) sum(is.na(x)))

summary(mvc)

missings = names(which(mvc >= 0.7*nrow(data)))

##这些数据已经处理过,确实没有信息缺失

#例
data1=data.frame(y=c(1,2,3,NA,5,6),x1=c(6,NA,4,NA,NA,1),x2=c(1,NA,6,NA,12,NA))
##查找缺失值的个数
mvc1 = sapply(data1,function(x) sum(is.na(x)))

#给出data1中缺失值大于40%的名称
missings1 = names(which(mvc1> 0.3*nrow(data1)))



####找出水平过多的因子,合并或直接剔除


lvls = sapply(data[factors], function(x) length(levels(x)))

manylvls=names(which(lvls>15))

manylvls



###查找取值数较少的数值型变量
lev = sapply(data[numerics], function(x) length(unique(x)))
summary(lev)
####
concret<-names(which(lev<=100))
length(concret)



# 确定第一次删除的变量 --------------------------------------------------------------


ignores=c(centors,missings,manylvls,concret)
input=setdiff(names(data),ignores)##变量中去掉ignores这些变量,剩余作为输入变量

summary(input)



# 根据部分准则,筛选变量 ----------------------------------------------------------


library(rattle)


#计算变量的IV值
var.iv=function(x,target) {
  ##如果x是数值型的,则对x分段,分为8段,按照分位数分
  if(is.numeric(x)) x=binning(x,bins=8,method="quantile")
  ##做频数统计表
  temp1=table(x,target)
  ##频数统计表转化为数据框,矩阵的长度为水平的个数
  
  temp2=as.data.frame(matrix(temp1,length(unique(x)),2))
  ##计算比例
  
  temp3=sapply(temp2,function(x) x/sum(x))
  #如果有不是矩阵的,则直接默认iv=0
  
  if(!is.matrix(temp3)) {iv=0} else
  {
    woe=log(temp3[,1]/temp3[,2])*100
    iv=sum((temp3[,1]-temp3[,2])[!is.infinite(woe)]*woe[!is.infinite(woe)])
  }
  return(iv) }

X1_iv=var.iv(data$X1,data$Delta)  #计算变量的IV值

X1_iv

iv.value=apply(data[input],2,function(x)var.iv(x,data$Delta)) #计算所有变量的IV值
summary(iv.value)



input=names(which(iv.value>30)) #筛选IV值大于30的变量
input


# ##确定最终进入模型的变量 --
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值