【问题标题】:Polynomial regression with two variables with R具有两个变量的多项式回归与 R
【发布时间】:2014-08-20 16:00:08
【问题描述】:

我正在尝试用 R 做一些非常简单的事情,但我不确定我是否做得很好。我有一个包含三列 V1,V4,V5 的数据集,我想进行回归以获得以下两个变量多项式的系数 Ci,j:

sum[i=0->3] sum[j=0->i] Ci,j . (V4_k)^i . (V5_k)^(3-j)

所以我尝试使用函数 polym:

lm(V1 ~ polym(V4, V5, degree=3, raw = TRUE), data)

这给了我以下系数

[1]  1.048122e+04 -2.050453e+02  1.407736e+00 -3.309312e-03 -3.748650e+01  8.983050e-01 -4.308559e-03  1.834724e-01 -6.868446e-04  4.030224e-04

现在,如果我很好地理解了我们必须如何构建一个公式,我假设以下内容会给出相同的结果:

lm(v1 ~ V4 + V5 + I(V4 * V5) + I(V4^2 * V5) + I(V4^3 * V5) + I(V4^2 * V5^2) + I(V4^2*V5^3) + I(V4^3 * V5^2) + I(V4^3 * V5^3), data)

但我得到不同的系数:

[1]  3.130403e+03 -1.652007e+01 -1.592879e+02  3.984177e+00 -2.419069e-02  3.919910e-05  1.008657e-04  4.271893e-07 -5.305623e-07 -2.289836e-09

你能告诉我我做错了什么吗?用 R 实现这种回归的正确方法是什么?

【问题讨论】:

  • 你检查过 poly() 中返回矩阵的顺序吗?它似乎返回 V4, V4^2, V4^3, V5, V5^2, V5^3,... 这与您的自定义方程式不同。此外,V4^3 * V5 是四阶多项式。

标签: r regression polynomials


【解决方案1】:

polym(V4, V5) 调用并没有给你你想的那样。 (本例使用 poly 还是 polym 都没有关系)

我们来看一个例子:

v1 <- 1:10; v2 <- 1:10
poly(v1, v2, degree=3, raw=TRUE)
      1.0 2.0  3.0 0.1 1.1  2.1 0.2  1.2  0.3
 [1,]   1   1    1   1   1    1   1    1    1
 [2,]   2   4    8   2   4    8   4    8    8
 [3,]   3   9   27   3   9   27   9   27   27
 [4,]   4  16   64   4  16   64  16   64   64
 [5,]   5  25  125   5  25  125  25  125  125
 [6,]   6  36  216   6  36  216  36  216  216
 [7,]   7  49  343   7  49  343  49  343  343
 [8,]   8  64  512   8  64  512  64  512  512
 [9,]   9  81  729   9  81  729  81  729  729
[10,]  10 100 1000  10 100 1000 100 1000 1000

列标签告诉您作为参数提供的第一个和第二个向量的度数。前三个来自 V2^0,后三个在 V2 中是线性的,依此类推。

这是正确的,但您的第二个示例中包含 4 度项。如果您实际上是在寻找 4 度项,只需在方法调用中将度数更改为 4。

如果您在多项式回归方面需要更多帮助,this article,R-Bloggers 应该会有所帮助。它展示了如何使用 I()poly 创建模型,尽管我认为它们只是单变量的。

【讨论】:

    【解决方案2】:

    附样本数据

    dd<-data.frame(x1=rnorm(50),
       x2=rnorm(50))
    dd<-transform(dd, z = 2*x1-.5*x1*x2 + 3*x2^2+x1^2 + rnorm(50))
    

    我们看到了

    lm(z~polym(x1,x2,degree=3, raw=T), dd)
    lm(z~x1+I(x1^2)+I(x1^3)+I(x2)+I(x1*x2) + 
       I(x1^2*x2)+I(x2^2) + I(x1*x2^2) + I(x2^3), dd)
    

    都是一样的。

    请注意,在您的扩展中,您有类似的术语

    I(V4^3 * V5) + I(V4^2 * V5^2)
    

    它们都是 4 次项(指数之和为 4),因此它们不应出现在三次多项式中。所以这取决于你想要什么。通常,对于三次多项式,您有

    sum[i=0->3] sum[j=0->3-i] Ci,j . (V4_k)^i . (V5_k)^j
    

    所以i+j&lt;=3 总是如此。我不清楚你到底想要什么类型的回归。

    【讨论】:

    • 确实,我的扩展是错误的。但是现在如何解释这样一个事实,即第一次调用(使用 polym),我得到 10 个系数,而不仅仅是 6,就像我通过适当的扩展得到的(当删除指数 >3 时)?
    • @TanguyA。如果你看我上面的例子,它有适当的扩展,有 9 个项,加上一个截距项,所以你得到 10 个总系数估计。所以 10 是正确的数字。听起来您在扩展中遗漏了一些术语。
    • 你是对的。现在我得到了两个调用相同的结果。通过这种方式,我想我得到了我正在寻找的系数。感谢您的回答!
    猜你喜欢
    • 2017-12-14
    • 1970-01-01
    • 2020-05-20
    • 2022-01-10
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2021-10-12
    相关资源
    最近更新 更多