#工作路径设置
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
# ##确定最终进入模型的变量 --
R---逻辑回归模型流程
最新推荐文章于 2022-08-17 14:28:16 发布