我试图找出如何编写代码以从分类树生成数据以进行模拟研究。让我们说我有3个多变量正态随机变量。我将使用以下代码在R
中生成它们,
set.seed(1612)
library(MASS)
Sigma <- matrix(c(0.277312, 0.1213606, 0.05482612, 0.1213606, 0.5968614, 0.2171699, 0.05482612, 0.2171699, 0.5036522), nrow = 3)
X <- mvrnorm(n = 1272, mu = rep(0, 3), Sigma = Sigma)
colnames(X) <- paste0("X", 1:3)
pred <- data.frame(X)
然后我想根据以下规则将Y分类为是(即1):
如果X1 <= 0且X2 <= 0
如果X1> 0和X3 <= 0
我会使用以下代码执行此操作,并使用rpart
拟合树。
y <- ifelse(pred$X1 <= 0 & pred$X2 <= 0, 1, ifelse(pred$X1 > 0 & pred$X3 <= 0, 1, 0))
library(rpart)
mod <- rpart(y ~ ., data = pred, method = "class")
mod
mod
n= 1272
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 1272 636 0 (0.5000000 0.5000000)
2) X3>=-0.001090791 663 126 0 (0.8099548 0.1900452)
4) X2>=-0.002500219 420 0 0 (1.0000000 0.0000000) *
5) X2< -0.002500219 243 117 1 (0.4814815 0.5185185)
10) X1>=0.001410812 117 0 0 (1.0000000 0.0000000) *
11) X1< 0.001410812 126 0 1 (0.0000000 1.0000000) *
3) X3< -0.001090791 609 99 1 (0.1625616 0.8374384)
6) X2>=0.00167211 227 99 1 (0.4361233 0.5638767)
12) X1< -0.000418794 99 0 0 (1.0000000 0.0000000) *
13) X1>=-0.000418794 128 0 1 (0.0000000 1.0000000) *
7) X2< 0.00167211 382 0 1 (0.0000000 1.0000000) *
然而,我似乎无法完全恢复我的树(注意x3出现在树的顶部)。我相信我生成的数据不正确,但我不确定如何正确生成数据。我应该为Y条件生成数据,反之亦然(我在这里做过)。我也知道我目前在我的Y中没有错误,并且如果我将Y设置为我的条件的概率接近1的伯努利随机变量可能会引入错误(但是,这似乎并没有解决我的问题) 。
任何帮助都会受到欢迎,因为我在搜索中找不到任何内容。