【问题标题】:R: quadratic regression all factors: how to specify a formula?R:二次回归所有因素:如何指定公式?
【发布时间】:2025-11-20 19:40:01
【问题描述】:

我想使用线性、成对交互和二次项对数据集上的所有可用因子指定二次回归。举个例子,如果我有

y<-rnorm(1000)
A<-sample(1:4,1000,replace=TRUE)
B<-sample(1:2,1000,replace=TRUE)
C<-sample(1:10,1000,replace=TRUE)
Dataset<-data.frame(y,A,B,C)

如果我想以这种方式回归 y 我的所有因素,我希望有一个类似的模型

model<-lm(y~.+.^2+I(A^2)+I(B^2)+I(C^2),data=Dataset)

但我想知道是否有一个表达式可以指定所有因素的所有二次项,所以我不必指定所有I(A^2)+I(B^2)+I(C^2)

我试过了

model<-lm(y~.+.^2+I(.^2),data=Dataset)

它不起作用。你能帮我解决这个问题吗? 谢谢。

【问题讨论】:

  • 您好,您可以明智地使用 poly 功能,您应该看看这篇帖子link 了解更多详情。
  • 模型
  • @duffymo 在没有 Identity() 运算符的情况下向正方形指定多个变量被解释为“所有单因素和所有 2 度交互”。
  • 是的,这就是我阅读要求的方式:“我想在具有线性、成对交互和二次项的数据集上指定所有可用因子的二次回归”
  • @duffymo 所以仍然缺少所有二次项,这是操作的问题,因为 I(.^2) 不是有效项

标签: r formula lm term quadratic


【解决方案1】:

我没有看到直接的解决方案,所以我想出了一种方法来重建您的公式。这适用于任意数量的变量:

library(dplyr)
data <- mtcars
y    <- "cyl"
formula <-  paste0("I(", names(data)[names(data)!=y], "^2)+", collapse="") %>%
  paste(y, "~", .) %>%
  substr(., 1, nchar(.)-1) %>%
  as.formula
lm(data=mtcars, formula)

您可以对其进行修改以包含单个因素和交互作用。 dplyr 库在这里只是为了脚本的清晰性(%>% 运算符)

【讨论】:

  • 我写不出你建议的公式:Error in nchar(.) : object '.' not found
  • 我没有重现错误。你加载包了吗?
  • 是的,我做到了。我今天刚刚安装它,我再次重新运行并出现相同的错误消息。我正在使用 R 3.0.3 和平台 x86_64-w64-mingw32/x64(64 位)。这可以证明输出差异是合理的吗?
  • 是的,这就是导致错误的原因。我试图加载你的 R 版本,我也得到了错误。可能是重用'.'的能力。在一行中多次执行操作符尚未实现。
  • 您可以将第二个点替换为整个上面行的重复paste(y, "~", paste0("I(", names(data)[names(data)!=y], "^2)+", collapse="")) 或者您可以在base R中重写它... ;-)