假设我有大约 500 个变量可用,并且我正在尝试为我的模型进行变量选择(响应是二进制的)
我打算对所有连续的进行某种 corr 分析,然后再进行分类。
由于涉及很多变量,我无法手动完成。
有我可以使用的功能吗?或者也许是一个模块?
我正在使用iris
avaialbe 中的数据集R
。然后
sapply(iris, is.factor)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
FALSE FALSE FALSE FALSE TRUE
会告诉你天气你的列是否是因素。所以使用
iris[ ,sapply(iris, is.factor)]
您只能选择因子列。和
iris[ ,!sapply(iris, is.factor)]
会给你那些不是因素的列。您还可以使用is.numeric
,is.character
和不同的其他版本。
创建一个函数,该函数返回的唯一值数量小于总数的一部分,我选择 5%:
discreteL <- function(x) length(unique(x)) < 0.05*length(x)
现在sapply
它(对连续变量的否定)到data.frame:
> str( iris[ , !sapply(iris, discreteL)] )
'data.frame': 150 obs. of 4 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
我想你可以选择一个特定的数字,比如 15,作为你的标准。
我应该明确指出,统计理论表明这个程序对于所概述的目的是危险的。仅选择与二元响应最相关的变量并没有得到很好的支持。有许多研究表明了更好的变量选择方法。所以我的回答其实只是如何做分离,而不是对你模糊描述的总体方案的背书。
您可以使用str(df)
查看哪些列是因素,哪些不是(df 是您的数据框)。例如,对于 R 中的数据 iris:
str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
或者,您可以使用lapply(iris,class)
$Sepal.Length
[1] "numeric"
$Sepal.Width
[1] "numeric"
$Petal.Length
[1] "numeric"
$Petal.Width
[1] "numeric"
$Species
[1] "factor"