model.matrix(...)

R中的模型矩阵函数。

分类变量

分类变量(Factors):R中用来存储分类数据的类别信息。

1
2
3
4
5
6
7
8
9
10
> f = factor(c('a','b','a','c'))
# 检查变量是否是分类变量(因子)
> class(f)
[1] "factor"
# 查看分类变量中有哪些类别
> levels(f)
[1] "a" "b" "c"
# 查看分类变量中有几类
> nlevels(f)
[1] 3

哑变量

虚拟变量/哑变量(dummy variable):量化非数值类型的变量,通常取0/1。例如,衡量一个人的性别:男 -> 1,女 -> 0。

解释变量

解释变量(explanatory variable):单纯从数理角度来看,解释变量等同于控制变量/自变量,与之相对的是被解释变量(反应变量/因变量)。REF

设计矩阵

设计矩阵(design matrix):又叫模型矩阵(model matrix)或者回归矩阵(regressor matrix)。由解释变量值组成的矩阵:一行代表一个独立的观测对象(样本),一列代表对应的变量(特征值、元数据),通常记为$X$。简单理解,就是我们所说的输入矩阵,可以是元数据的,也可以是数据的。

model.matrix(…)

定义:

1
2
3
4
# S3 method for default 
model.matrix(object, data = environment(object), contrasts.arg = NULL, xlev = NULL, …)
# 函数依据 object 创建设计矩阵,矩阵的创建必须借助于数据集 data
# data 必须能提供与 object 相同名字的变量!

以膀胱癌去批次效应为例,元数据形式如下
model.matrix.pheno

下面是部分列处理后的结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
> model <- model.matrix(~batch, data = pheno)
(Intercept)batch
GSM71019.CEL 1 3
GSM71020.CEL 1 2
# pheno$batch 是数值型变量,相当于提取列
# 此时新的变量名仍然是 batch
#---------------------------------------------------------------------

>model <- model.matrix(~cancer, data = pheno)
(Intercept) cancerCancer cancerNormal
GSM71019.CEL 1 0 1
GSM71020.CEL 1 0 1
# pheno$cancer 被处理成分类变量,每一类将单独作为列(哑变量),取值为0/1
# 此时新的变量名为 cancerCancer 和 cancerNormal
#---------------------------------------------------------------------

> model <- model.matrix(~cancer=="Cancer", data = pheno)
(Intercept) cancer == "Cancer"TRUE
GSM71019.CEL 1 0
GSM71020.CEL 1 0
# cancer=="Cancer" 是一个 logical 类型
# 这种写法极不优雅!我们应该先定好名字
> pheno$hasCancer <- pheno$cancer == "Cancer"
> model <- model.matrix(~hasCancer, data=pheno)
(Intercept) hasCancer
GSM71019.CEL 1 0
GSM71020.CEL 1 0

----- For reprint please indicate the source -----
0%