是否存在用 R 识别线性模型中二次分量的方法?

发布于 2024-11-05 16:13:51 字数 152 浏览 6 评论 0原文

假设我们有一个 y=x1+x2+... 形式的加法模型,其中包含很多变量。 R 中是否有一个例程来识别应被视为表现出二次效应的变量?我知道 Box-Cox 变换可以识别 y 的链接,但是 x 呢?如果只有几个变量,测试它们很容易,但是持有一大堆变量又如何呢?

来自德国的问候

Suppose we have an additive model of the form y=x1+x2+... with a lot of variables. Is there a routine in R to identify variables that should be considered as exhibiting a quadratic effect? I know that Box-Cox transformation allows to identify links for y, but what about x. If there are just a few variables, it's easy to test them, but what about holding a whole bunch?

Regards from Germany

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

花间憩 2024-11-12 16:13:51

您可能不关心是否需要二次项,而是关心是否有任何影响是非线性的。虽然二次项可以吸收其中一些影响,但也有一些明显的非线性非二次效应。有很多方法可以做到这一点,但我喜欢使用在 Hmisc 和 Design 包中实现的受限三次样条。

例如:

library(Design)
x1 <- runif(200)
x2 <- runif(200)
x3 <- runif(200)
x4 <- runif(200)
y <- x1 + x2 + rnorm(200)
f1    <- ols(y ~ rcs(x1,4) + rcs(x2,4) + rcs(x3,4) + rcs(x4,4))

> anova(f1)
                Analysis of Variance          Response: y 

 Factor          d.f. Partial SS  MS         F    P     
 x1                3   19.2033740 6.40112466 7.96 0.0001
  Nonlinear        2    5.6426655 2.82133277 3.51 0.0319
 x2                3   10.6042751 3.53475836 4.40 0.0051
  Nonlinear        2    0.5047319 0.25236593 0.31 0.7309
 x3                3    3.0844406 1.02814688 1.28 0.2829
  Nonlinear        2    0.1474818 0.07374091 0.09 0.9124
 x4                3    4.1770965 1.39236549 1.73 0.1619
  Nonlinear        2    4.1770665 2.08853325 2.60 0.0771
 TOTAL NONLINEAR   8    9.5322762 1.19153452 1.48 0.1660
 REGRESSION       12   37.1220435 3.09350362 3.85 <.0001
 ERROR           187  150.3064834 0.80377799      

ols 本质上相当于lm。请注意输出中的方差分析表:它对效应的非线性进行了测试,包括全局测试。

You probably don't care to know whether you need quadratic terms, but rather whether any of the effects are non-linear. While a quadratic term can pick up some of those, there are some decidedly non-quadratic effects that are not linear. There are many ways of doing that, but I like using restricted cubic splines as implemented in the Hmisc and Design packages.

For example:

library(Design)
x1 <- runif(200)
x2 <- runif(200)
x3 <- runif(200)
x4 <- runif(200)
y <- x1 + x2 + rnorm(200)
f1    <- ols(y ~ rcs(x1,4) + rcs(x2,4) + rcs(x3,4) + rcs(x4,4))

> anova(f1)
                Analysis of Variance          Response: y 

 Factor          d.f. Partial SS  MS         F    P     
 x1                3   19.2033740 6.40112466 7.96 0.0001
  Nonlinear        2    5.6426655 2.82133277 3.51 0.0319
 x2                3   10.6042751 3.53475836 4.40 0.0051
  Nonlinear        2    0.5047319 0.25236593 0.31 0.7309
 x3                3    3.0844406 1.02814688 1.28 0.2829
  Nonlinear        2    0.1474818 0.07374091 0.09 0.9124
 x4                3    4.1770965 1.39236549 1.73 0.1619
  Nonlinear        2    4.1770665 2.08853325 2.60 0.0771
 TOTAL NONLINEAR   8    9.5322762 1.19153452 1.48 0.1660
 REGRESSION       12   37.1220435 3.09350362 3.85 <.0001
 ERROR           187  150.3064834 0.80377799      

ols is essentially the equivalent of lm. Note the ANOVA table in the output: it has test for non-linearity of the effects including a global test.

残龙傲雪 2024-11-12 16:13:51

如果您想创建所有双向交互,您可以执行以下操作:

lm(y ~ (x1 + x2 + x3)^2, data=dat)

请参阅:

?formula

If you want to create all the two-way interactions you can do this:

lm(y ~ (x1 + x2 + x3)^2, data=dat)

See:

?formula
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文