关于R语言中model.matrix与~操作符用法的技术问询
关于R中model.matrix与~操作符的疑问解答
先看你给出的示例代码及运行结果:
加载iris数据集并生成矩阵:
data("iris") x = model.matrix(~Species +0, iris) x
选取三个不同物种的行:
> iris[c(1,78, 143),] Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 78 6.7 3.0 5.0 1.7 versicolor 143 5.8 2.7 5.1 1.9 virginica
处理后对应行的结果:
> x[c(1,78,143),] Speciessetosa Speciesversicolor Speciesvirginica 1 1 0 0 78 0 1 0 143 0 0 1
1. model.matrix的具体作用
model.matrix的核心功能就是把分类变量(因子)转换成哑变量矩阵,方便后续建模计算。
所谓哑变量,就是用0和1标记样本所属的分类:比如Species有setosa、versicolor、virginica三个类别,model.matrix会给每个类别单独生成一列,某行样本属于哪个类别,对应列就标1,其他列标0。
你代码里的+0是关键:默认情况下model.matrix会自动生成一列全1的截距项,同时去掉第一个分类(比如setosa),只生成后两个分类的哑变量。加了+0就会取消截距项,保留所有分类的哑变量列,所以你得到了3列的结果。
2. ~操作符的用法
~在R里是用来创建公式对象的,不止能在lm这类建模函数里用。
- 在
lm(Y ~ X1+X2)里,~分隔因变量(Y)和自变量(X1、X2);但公式也可以只有右侧部分,也就是~ X,这种情况下它只是用来描述需要处理的变量集合。 - 单独运行
~iris$Species时,你只是创建了一个公式对象,R会直接返回这个对象本身,不会做任何计算。只有把这个公式传给model.matrix这类能解析公式的函数时,才会触发变量转换的操作。
内容的提问来源于stack exchange,提问作者Pewter City
相关产品推荐
相关产品推荐

