gpt4 book ai didi

r - 在公式中扩展因子相互作用

转载 作者:行者123 更新时间:2023-12-03 16:06:14 24 4
gpt4 key购买 nike

我有许多格式为formula的公式(Formulay ~ a*b类),其中ab是因素。

我需要编写一个函数,该函数采用这样的公式,并在“已明确说明”的交互中返回包含所有术语的公式。这是一个例子:

fac1 <- factor(c('a', 'a', 'b', 'b'))
fac2 <- factor(c('c', 'd', 'c', 'd'))
BigFormula(formula(x ~ fac1*fac2))

其中 BigFormula返回 formula(x ~ a + b + c + d + a:c + a:d + b:c + b:d)

有没有简单的方法可以做到这一点?

(上下文:我正在运行许多格式为 anova(mod1, mod2)的命令,其中 mod2嵌套在 mod1中,并且两个模型的右侧都包含诸如 fac1*fac2这样的术语。这些命令的目的是计算F统计量。问题是即使它通常表示三个以上的变量, anova仍将 fac1*fac2视为三个变量(例如,在上面的代码中, fac1*fac2表示八个变量。)因此, anova低估了嵌套模型中的限制数量,高估了我的自由度。)

最佳答案

下面的解决方案如何。我使用一个复杂交互的更极端的例子。
f = formula(y ~ a * b * c * d * e)
为了阐明交互作用项,我们从terms.formula()返回的值中提取项:
terms = attr(terms.formula(f), "term.labels")
产生:

> terms
[1] "a" "b" "c" "d" "e" "a:b" "a:c"
[8] "b:c" "a:d" "b:d" "c:d" "a:e" "b:e" "c:e"
[15] "d:e" "a:b:c" "a:b:d" "a:c:d" "b:c:d" "a:b:e" "a:c:e"
[22] "b:c:e" "a:d:e" "b:d:e" "c:d:e" "a:b:c:d" "a:b:c:e" "a:b:d:e"
[29] "a:c:d:e" "b:c:d:e" "a:b:c:d:e"

然后我们可以将其转换回公式:
f = as.formula(sprintf("y ~ %s", paste(terms, collapse="+")))
> f
y ~ a + b + c + d + e + a:b + a:c + b:c + a:d + b:d + c:d + a:e +
b:e + c:e + d:e + a:b:c + a:b:d + a:c:d + b:c:d + a:b:e +
a:c:e + b:c:e + a:d:e + b:d:e + c:d:e + a:b:c:d + a:b:c:e +
a:b:d:e + a:c:d:e + b:c:d:e + a:b:c:d:e

关于r - 在公式中扩展因子相互作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11595392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com