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

Posted 生信客栈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于R语言笔记——将分类变量转换为连续变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中将分类变量转换为连续变量?

R语言 变量

R语言进行变量编码(recode):把dataframe中连续变量基于条件表达式转化为多个类别的离散变量(分类变量)使用attach函数绑定数据

如何将连续变量转换为分类变量?

R语言批量把dataframe多个分类变量因子化处理批量把多个分类变量转换为因子变量

R语言笔记——将因子转换为整数