vlambda博客
学习文章列表

R语言笔记——将分类变量转换为连续变量




      本个专题将介绍R语言的一些基本技能和实用技巧。在分类模型中,我们通常会遇到自变量中类别或级别过多的情况。简单的解决方案是将分类变量转换为连续变量,然后在模型中使用连续变量。将类别变量转换为连续变量的最简单方法是用类别的平均响应值替换原始类别。





R语言笔记——将分类变量转换为连续变量

类别预测


变量的调整后平均值要使类别预测变量的Y = 1Y = 0具有不同的值,我们可以调整类别的平均响应值,




> # Creating dummy dat> set.seed(123)> mydata = data.frame(y= ifelse(sign(rnorm(100))==-1,0,1),+ x1= sample(LETTERS[1:5],100,replace = TRUE),+                     x2= factor(sample(1:7, 100, replace = TRUE)))


> # Convert categorical variables to continuous variables> TransformCateg <- function(y,x,inputdata,cutoff){+ for (i in seq(1,length(x),1)) {+ if (class(inputdata[,x[i]]) %in% c("factor", "character")){+ len <- NULL+ t1 <- aggregate(inputdata[,y], list(inputdata[,x[i]]), mean)+ names(t1)[2] <- "avg"+ t2 <- aggregate(inputdata[,y], list(inputdata[,x[i]]), length)+ names(t2)[2] <- "len"+ temp <- merge(t1, t2, by = "Group.1")+ t1 <- subset(temp, len >= cutoff)+ t2 <- subset(temp, len < cutoff)+ if(nrow(t2) > 0)+ {+ t2$avg <- sum(t2$avg*t2$len)/sum(t2$len)+ t2$len <- sum(t2$len)+ }+ temp <- rbind(t1, t2)+ inputdata <- merge(inputdata, temp, by.x = x[i], by.y = "Group.1", all.x = T)+ inputdata[,paste(x[i],"mean", sep="_")] <- ((inputdata$avg * inputdata$len) - (inputdata[,y]))/(inputdata$len - 1)+ inputdata <- inputdata[, !(colnames(inputdata) %in% c("avg","len"))]+ }+ else{+ warning(paste(x[i], " is not a factor or character variable", sep = ""))+ }+ }+ return(inputdata)+ }


> # Run Function> train2 = TransformCateg(y= "y",x= c("x1","x2"), inputdata = mydata, cutoff = 15)


R语言笔记——将分类变量转换为连续变量

TransformCateg函数的参数


  1. y:响应或目标或因变量-分类或连续

  2. x:自变量或预测变量的列表-因子或字符变量

  3. inputdata:输入数据框的名称

  4. 临界值:类别中的最小观察值。具有小于临界值的观察值的所有类别将是不同的类别。






ble