R 将分类变量与回归中的伪变量相乘

R 将分类变量与回归中的伪变量相乘,r,regression,dummy-variable,R,Regression,Dummy Variable,我正在尝试运行一个回归,该回归的分数与一个女性假人(取0或1的值)进行回归,并且我也有该女性的国家。我试图在回归中创造一个固定的效果,在回归中我有女性与国家互动,但我尝试的每一种方法都不起作用,因为我用一个因子乘以数字 我尝试过使用fastdummies,但没有成功。我还尝试使用country-1方法,尝试与雌性繁殖,但没有成功 #first wrong olss1= lm(pv1math ~ female + I(ggi*female) + factor(country) + factor(

我正在尝试运行一个回归,该回归的分数与一个女性假人(取0或1的值)进行回归,并且我也有该女性的国家。我试图在回归中创造一个固定的效果,在回归中我有女性与国家互动,但我尝试的每一种方法都不起作用,因为我用一个因子乘以数字

我尝试过使用fastdummies,但没有成功。我还尝试使用country-1方法,尝试与雌性繁殖,但没有成功

#first wrong
olss1= lm(pv1math ~ female + I(ggi*female) + factor(country) +  factor(year) + I(female * factor(country)), data = f1)
# second wrong
olss1= lm(pv1math ~ female + I(ggi*female) + factor(country) +  factor(year) + factor( female * country ), data = f1)


错误消息是,我不能将因子与数值相乘,公式中的*运算符将给出交互作用以及低阶项。以下是一个例子:

country <- c("A", "A", "A", "B", "B", "B")
female <- c(1, 1, 0, 1, 0, 1)
y <- 1:6

fm <- lm(y ~ country * female)
fm
我们还可以检查模型矩阵

model.matrix(fm)
给予

  (Intercept) countryB female countryB:female
1           1        0      1               0
2           1        0      1               0
3           1        0      0               0
4           1        1      1               1
5           1        1      0               0
6           1        1      1               1
attr(,"assign")
[1] 0 1 2 3
attr(,"contrasts")
attr(,"contrasts")$country
[1] "contr.treatment"
这里不需要
I()
<代码>*单独执行交互,而
I()
将在回归前执行算术运算

比较:

lm(pv1math ~ ggi*female, data=dat)$coefficients
# (Intercept)         ggi      female  ggi:female 
#         ...         ...         ...         ... 

lm(pv1math ~ I(ggi*female), data=dat)$coefficients
# (Intercept) I(ggi * female) 
#         ...             ... 
I()
非常有用,例如对于多项式,其中年龄是一个流行的候选变量:
pv1math~age+I(age^2)+I(age^3)
,或者对GLM中的因变量进行二值化:
GLM(I(pv1math>0.75)~ggi*女性,家庭=二项式)

而且--您不需要重复交互项中已经存在的变量(这只是多余的),因此您可能需要尝试:

lm(pv1math ~ ggi*female + factor(year) + female*factor(country), data=f1)

一般来说,发布错误消息是不够的。当发布到SO时,示例应该是可复制的,这意味着提供所需的完整代码和数据,以便其他人可以复制并粘贴到他们的R会话中,并获得相同的错误消息。请参阅标记页顶部的说明。
lm(pv1math ~ ggi*female + factor(year) + female*factor(country), data=f1)