在R中的lm模型中,“I”关键字的意义

5
我正在为我的任务创建一个线性模型:
lm(revenue ~ (max_cpc - max_cpc.mean), data = traffic)  

但是它会抛出以下错误:
Error in model.frame.default(formula = revenue ~ (max_cpc - max_cpc.mean),  : 
   variable lengths differ (found for 'maxcpc.mean') 

然后,通过不断试错,我稍微修改了我的代码:
lm(revenue ~ I(max_cpc - max_cpc.mean), data = traffic)

并且!!! Bingo!它完美地运作了。

但是我现在正在努力弄清楚“I”的意义以及它如何解决我的问题。有人能向我解释一下吗?


此问题似乎不属于讨论范围,因为它没有展示任何解决努力。 - Carl Witthoft
嗨@CarlWitthoft,请告诉我这个问题有什么问题需要被downvote /关闭,如果它似乎很容易解决,为什么你不先回答它而是在评论中发表意见。 - heybhai
@CarlWitthoft 请提供您所说的原始问题和我的重复问题的链接。谢谢。 - heybhai
1
请问在R中进行线性回归时,大写字母"I"有什么特殊含义吗? - Carl Witthoft
1个回答

12

I()防止公式接口解释参数,因此将其传递给表达式解析部分。

在公式界面中,-x表示“从预测变量中除去x”。所以我可以使用y〜.-x表示“针对除了x之外的所有内容拟合y”。

您不希望它这样做-实际上,您想要创建一个变量,该变量是两个变量之差并对其进行回归,因此您不希望公式界面解析该表达式。

I()为您实现了这一点。

具有平方项的项(x^2)也需要相同的处理。公式接口对幂有特殊处理,如果您真正想要平方变量,则必须使用I()

I()在其他上下文中还有其他用途。请参见?I


1
此外,当您将某些运算符应用于长度不同的两个向量时,较短的向量会被循环使用 - 其值会重复直到与较长的向量相同长度。 "变量长度不同"错误表示max_cpc.mean比max_cpc短,并将其包装在I()函数中会导致R在循环使用较短的向量时进行差异处理。 - neverKnowsBest
进一步讲解变量长度问题,它还建议至少一个变量不在“traffic”数据框中。您可能需要仔细检查这是否确实是您想要的。 - John
1
@John,假定max_cpc.meanmax_cpc的平均值,因此可能长度为1。 - Glen_b
@John max_cpc.mean 是 max_cpc 的平均值,这不是打字错误。 - heybhai
1
嘿兄弟,你应该为此提出一个新问题。 - John
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接