从列表R在lda函数中插入多个变量

问题描述

我有6个变量,我想测试哪个变量是线性判别分析lda 的最佳组合。

我创建了包含所有组合的列表。

我想遍历此列表并为每个组合运行一个lda

lda公式希望使用+指定列名,如下所示:

lda(classification~ variable1+variable2,data=mydata)

但是,如果我将列表的值插入lda函数中,则会出现错误

unlist(mylist[i])
 "variable1"     "variable2"
Error in model.frame.default(formula = mylist ~ unlist(mylist[i]),: 
  variable lengths differ

可复制的示例(变量出于说明目的是恒定的)

classification<-c("a","b","c","d","e","f")
variable1<-c(1,1,1)
variable2<-c(1,1)
variable3<-c(1,1)
variable4<-c(1,1)
variable5<-c(1,1)
variable6<-c(1,1)
mydata<-data.frame("classification","variable1","variable2","variable3","variable4","variable5","variable6")

para_combo1<-combn(mydata[2:7],simplify = FALSE)

para_combo2<-combn(mydata[2:7],2,simplify = FALSE)

para_combo3<-combn(mydata[2:7],3,simplify = FALSE)

para_combo4<-combn(mydata[2:7],4,simplify = FALSE)

para_combo5<-combn(mydata[2:7],5,simplify = FALSE)

para_combo6<-combn(mydata[2:7],6,simplify = FALSE)
para_combo<-c(para_combo1,para_combo2,para_combo3,para_combo4,para_combo5,para_combo6)

#manual example
lda_table<-lda(classification~ variable1+variable2,data= mydata)

#example I would loop
lda_table<-lda(classification~ para_combo[7],data= mydata)

我不知道如何以lda要求的格式编码我的组合

解决方法

除了提供公式外,您还可以分别在参数 x 分组中提供特征和类:

lda.result <- lda(x=mydata[,c(1,3)],grouping=mydata$classification)
# or simply:
lda.result <- lda(mydata[,mydata$classification)

请注意,R中的函数 lda 实际上不仅适用于两个变量,而且适用于任意数量的变量(有时称为“多重判别分析”)。因此,无需尝试所有成对的变量组合,但是您可以让 lda 自己解决。