0

这是我当前问题的简化版本。我需要从 2 个模型矩阵创建一个 model.matrix,而不会丢失“分配”中的信息。例如,考虑数据和公式

y<-rnorm(100); x1<-rnorm(100); x2<-rnorm(100); x3<-rnorm(100)
f1 <- y ~ x1 + x2 + x3

和 2 个模型矩阵X1X2使用创建

trms<-terms.formula(f1)
trms2<-drop.terms(trms, dropx = 2)
trms3<-drop.terms(trms, dropx = -2)
X1<-model.matrix(trms2)
X2<-model.matrix(trms3)

有没有一种简单的方法可以创建一个具有 1 个截距列的矩阵,X1并且可以从中获得? X2Xattr(,"assign")f1

4

2 回答 2

0

如果我正确理解了这个问题,那么简单直接的事情怎么样:

X3                <- cbind(X1[,1:2], X2[,2], X1[,3])
attr(X3,"assign") <- c(0,1,2,3)
colnames(X3)      <- c("Intercept",attr(trms, "term.labels"))
head(X3)
  Intercept          x1         x2         x3
1         1 -1.28372461 -0.2598796  0.3028496
2         1  0.56880875  0.2803302  0.7593734
3         1 -0.32480770 -1.6705911 -1.1750247
4         1 -1.02761734 -0.1405454 -0.6805033
5         1  0.84218452 -0.1224962 -1.3882420
6         1  0.07221231  0.5587801 -0.9042751
于 2018-08-25T18:42:48.797 回答
0

我不完全确定这是否是您正在尝试做的,但cbind()在这种情况下似乎可以正常工作。

X <- cbind(X1, X2)
X <- X[, !duplicated(colnames(X))]

然后,您可以连接 X1 和 X2 的属性。为了不得到重复,您只能从 X2 中获取 X1 中尚不存在的分配信息:

attributes(X)$assign <- c(attr(X1,"assign"), attr(X2,"assign")[!attr(X2,"assign") %in% attr(X1,"assign")])

如果这不是您想要让我们知道的。

于 2018-08-25T18:47:26.657 回答