公式中的*运算符将给出交互以及低阶项。这是一个示例:
char arg;
char args[] = {1,2,3};
push:
uintptr_t pc = get_pc();
arg = args[some_clever_hash(pc)];
stack.push(arg);
给予:
char arg;
char args[] = {1,3};
push:
setarg();
stack.push(arg);
void setarg(void)
{
uintptr_t pc = get_pc_of_caller();
arg = args[some_clever_hash(pc)];
}
我们也可以检查模型矩阵
country <- c("A","A","B","B")
female <- c(1,1,1)
y <- 1:6
fm <- lm(y ~ country * female)
fm
给予
Call:
lm(formula = y ~ country * female)
Coefficients:
(Intercept) countryB female countryB:female
3.0 2.0 -1.5 1.5
,
您在这里不需要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()
很有用,例如对于多项式,其中 age 是流行的候选项:pv1math ~ age + I(age^2) + I(age^3)
,或将GLM中的因变量二值化:glm(I(pv1math > 0.75) ~ ggi*female,family=binomial)
。
而且-as @G.Grothendieck already wrote-您不需要重复交互项中已经存在的变量(这只是多余的),因此您可以尝试:
lm(pv1math ~ ggi*female + factor(year) + female*factor(country),data=f1)
本文链接:https://www.f2er.com/3169680.html