我有一个数据帧(df),如下所示:
yourbehavior condition tryreduce comfortable vegvalidity
1 2 4 3 3
2 5 7 4 5
3 7 1 2 4
我想找出一种有效运行以下回归的方法。
lm(yourbehavior ~ condition + tryreduce + (condition*tryreduce), data = df)
lm(yourbehavior ~ condition + comfortable + (condition*comfortable), data = df)
lm(yourbehavior ~ condition + vegvalidity + (condition*vegvalidity), data = df)
有人知道我如何同时执行这些回归分析吗?我的实际数据集中比该示例中包含的要多。
我已经读到,使用for循环通常不是在R中进行这些类型的分析的最有效方法。如果可能的话,我更喜欢使用tidyverse,因为这是我最了解的。
答案 0 :(得分:4)
您可以执行以下操作,这将创建一个列表,其中每个元素都是回归模型之一,每个列表元素的名称将是与//check for valid review headline length
if (strlen($data['review_headline']) < 10)
{
$this->setError(JText::_('COM_MYEXTENSION_REVIEWS_ASSIGNMENT_REVIEWSUBMIT_REVIEWHEAD_SHORT'));
return false;
}
交互的变量:
condition
如果要遍历除前两列之外的所有列,可以执行以下操作:
library(tidyverse)
interaction.vars = c("tryreduce", "comfortable", "vegvalidity")
form = paste("yourbehavior ~ condition *", interaction.vars)
models = form %>%
set_names(interaction.vars) %>%
map(~lm(.x, data=df))
请注意,在模型公式中,interaction.vars = names(df)[!names(df) %in% c("yourbehavior","condition")]
与a*b
等效,因此您无需重复每个列的名称。
for循环不一定很糟糕,上面的a + b + a*b
函数本质上是以与for循环相同的方式进行迭代的。但是,R中的许多函数都是vectorized,它比循环要快和简洁。