在R中递归写出模型矩阵

时间:2014-12-23 03:23:16

标签: r dataframe regression

在我正在运行的分析中有许多预测变量,我想建立一个模型矩阵。但是,模型矩阵需要采用诸如

之类的格式的公式
t<-model.matrix(f[,1]~f[,2]+f[,3]+....)

如果我的数据框被调用f是否有一种快速的粘贴方法或者只是为了反复写出这个公式?否则,我需要输入所有内容

1 个答案:

答案 0 :(得分:0)

为什么不使用:

f <- data.frame(z = 1:10, b= 1:10, d=factor(1:10))

 model.matrix(~. , data=f[-1])
#-------------
   (Intercept)  b d2 d3 d4 d5 d6 d7 d8 d9 d10
1            1  1  0  0  0  0  0  0  0  0   0
2            1  2  1  0  0  0  0  0  0  0   0
3            1  3  0  1  0  0  0  0  0  0   0
4            1  4  0  0  1  0  0  0  0  0   0
5            1  5  0  0  0  1  0  0  0  0   0
6            1  6  0  0  0  0  1  0  0  0   0
7            1  7  0  0  0  0  0  1  0  0   0
8            1  8  0  0  0  0  0  0  1  0   0
9            1  9  0  0  0  0  0  0  0  1   0
10           1 10  0  0  0  0  0  0  0  0   1
attr(,"assign")
 [1] 0 1 2 2 2 2 2 2 2 2 2
attr(,"contrasts")
attr(,"contrasts")$d
[1] "contr.treatment"

与你所得到的相比:

> model.matrix(z~., f)
   (Intercept)  b d2 d3 d4 d5 d6 d7 d8 d9 d10
1            1  1  0  0  0  0  0  0  0  0   0
2            1  2  1  0  0  0  0  0  0  0   0
3            1  3  0  1  0  0  0  0  0  0   0
4            1  4  0  0  1  0  0  0  0  0   0
5            1  5  0  0  0  1  0  0  0  0   0
6            1  6  0  0  0  0  1  0  0  0   0
7            1  7  0  0  0  0  0  1  0  0   0
8            1  8  0  0  0  0  0  0  1  0   0
9            1  9  0  0  0  0  0  0  0  1   0
10           1 10  0  0  0  0  0  0  0  0   1
attr(,"assign")
 [1] 0 1 2 2 2 2 2 2 2 2 2
attr(,"contrasts")
attr(,"contrasts")$d
[1] "contr.treatment"