用模型·矩阵执行R中的STATA伪矩阵扩展席
我想用模型矩阵将连续变量和分类变量的相互作用转化为R中的指标变量矩阵。在Stata中,可以使用命令用模型·矩阵执行R中的STATA伪矩阵扩展席,r,stata,R,Stata,我想用模型矩阵将连续变量和分类变量的相互作用转化为R中的指标变量矩阵。在Stata中,可以使用命令 xi i.categorical_var*continuous_var 在第一种情况下 xi i.categorical_var1*i.categorical_var2 在第二个 我不熟悉R(以及其他),但我知道model.matrix函数也有类似的用途。不幸的是,在对它进行实验并寻找各种例子之后,我找不到它在将连续和分类变量的交互转化为指标矩阵这一特定问题上的应用。我想做的就是从这样的事情开
xi i.categorical_var*continuous_var
在第一种情况下
xi i.categorical_var1*i.categorical_var2
在第二个
我不熟悉R(以及其他),但我知道model.matrix
函数也有类似的用途。不幸的是,在对它进行实验并寻找各种例子之后,我找不到它在将连续和分类变量的交互转化为指标矩阵这一特定问题上的应用。我想做的就是从这样的事情开始
continuous <- rnorm(10)
categorical <- factor(c(1, 2, 1, 1, 3, 4, 5, 2, 4, 2))
这显然是错误的,因为它产生了
(Intercept) continuous categorical2 categorical3 categorical4
1 1 -0.76797492 0 0 0
2 1 1.50064357 1 0 0
3 1 0.05523012 0 0 0
4 1 -1.72968823 0 0 0
5 1 0.90034781 0 1 0
6 1 -0.55831914 0 0 1
7 1 -0.93848440 0 0 0
8 1 0.41429539 1 0 0
9 1 -0.18777429 0 0 1
10 1 1.06846354 1 0 0
categorical5 continuous:categorical2 continuous:categorical3
1 0 0.0000000 0.0000000
2 0 1.5006436 0.0000000
3 0 0.0000000 0.0000000
4 0 0.0000000 0.0000000
5 0 0.0000000 0.9003478
6 0 0.0000000 0.0000000
7 1 0.0000000 0.0000000
8 0 0.4142954 0.0000000
9 0 0.0000000 0.0000000
10 0 1.0684635 0.0000000
continuous:categorical4 continuous:categorical5
1 0.0000000 0.0000000
2 0.0000000 0.0000000
3 0.0000000 0.0000000
4 0.0000000 0.0000000
5 0.0000000 0.0000000
6 -0.5583191 0.0000000
7 0.0000000 -0.9384844
8 0.0000000 0.0000000
9 -0.1877743 0.0000000
10 0.0000000 0.0000000
在R中,“虚拟变量”的形成通常由回归或制表函数中的公式处理代码自动处理。该过程通常由model.matrix
处理,但处理过程通常对用户不可见。人们通常会执行以下操作:
fit <- lm( Y ~ categ_var1*contin_var + categ_var1*categ_var2, data=dfrm)
你在
R
中所做的(我认为)相当于在Stata
中所做的I.category\u var\c.continuous\u var
或I.category\u var1\I.category\u var2
。我明白了。那么我的代码的问题就在别处了。我的印象是,最终的矩阵中只有1和0。感谢您的回复。自Stata 11(2009)起,您使用xi
描述的内容现在在Stata中被取代;请参阅并详细说明,您的xi
示例不正确,因为您省略了冒号。这些细节不会影响你的问题,但一些读者会收集不正确的印象。为什么你认为模型矩阵只有1和0?
fit <- lm( Y ~ categ_var1*contin_var + categ_var1*categ_var2, data=dfrm)
> options( width=60)
> dfrm <- data.frame(continuous, categorical)
> model.matrix(~continuous*factor(categorical), environment=dfrm)[, c(3, 7,4,8,5,9,6,10)]
factor(categorical)2 continuous:factor(categorical)2
1 0 0.0000000
2 1 1.3023986
3 0 0.0000000
4 0 0.0000000
5 0 0.0000000
6 0 0.0000000
7 0 0.0000000
8 1 -1.1876527
9 0 0.0000000
10 1 0.4406243
factor(categorical)3 continuous:factor(categorical)3
1 0 0.00000000
2 0 0.00000000
3 0 0.00000000
4 0 0.00000000
5 1 0.09724975
6 0 0.00000000
7 0 0.00000000
8 0 0.00000000
9 0 0.00000000
10 0 0.00000000
factor(categorical)4 continuous:factor(categorical)4
1 0 0.0000000
2 0 0.0000000
3 0 0.0000000
4 0 0.0000000
5 0 0.0000000
6 1 -0.4323666
7 0 0.0000000
8 0 0.0000000
9 1 1.0544171
10 0 0.0000000
factor(categorical)5 continuous:factor(categorical)5
1 0 0.000000
2 0 0.000000
3 0 0.000000
4 0 0.000000
5 0 0.000000
6 0 0.000000
7 1 1.712812
8 0 0.000000
9 0 0.000000
10 0 0.000000