R语言笔记——将分类变量转换为连续变量
Posted 生信客栈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言笔记——将分类变量转换为连续变量相关的知识,希望对你有一定的参考价值。
本个专题将介绍R语言的一些基本技能和实用技巧。在分类模型中,我们通常会遇到自变量中类别或级别过多的情况。简单的解决方案是将分类变量转换为连续变量,然后在模型中使用连续变量。将类别变量转换为连续变量的最简单方法是用类别的平均响应值替换原始类别。
类别预测
变量的调整后平均值要使类别预测变量的Y = 1和Y = 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
"y",x= c("x1","x2"), inputdata = mydata, cutoff = 15) train2 = TransformCateg(y=
TransformCateg函数的参数
y:响应或目标或因变量-分类或连续
x:自变量或预测变量的列表-因子或字符变量
inputdata:输入数据框的名称
临界值:类别中的最小观察值。具有小于临界值的观察值的所有类别将是不同的类别。
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆ble
以上是关于R语言笔记——将分类变量转换为连续变量的主要内容,如果未能解决你的问题,请参考以下文章
R语言进行变量编码(recode):把dataframe中连续变量基于条件表达式转化为多个类别的离散变量(分类变量)使用attach函数绑定数据