【问题标题】:R fitting a polynomial on dataR在数据上拟合多项式
【发布时间】:2013-06-30 01:28:57
【问题描述】:

我有一些从下面显示的函数综合生成的数据。

fn <- function(w1,w2){
  f= -(0.1 + 1.3*w1 + 0.4*w2 - 1.8*w1*w1 - 1.8*w2*w2)
  return(f)
}

接下来我创建一个数据框,其值如下所示

x = data.frame(
  yval = fn(seq(0.1,0.9,by=0.01),seq(1.1,0.3,by=-0.01)),
  x1 = seq(0.1,0.9,by=0.01),
  x2 = seq(1.1,0.3,by=-0.01)
)

我想看看我是否可以通过使用多项式拟合来重新创建 fn 中多项式的系数,我尝试如下所示

fit = lm(yval ~ x1 + x2 + I(x1^2) + I(x2^2),data=x)
coef(fit)

但是当我运行上面的代码时,我得到以下内容

(Intercept)          x1          x2     I(x1^2)     I(x2^2) 
      2.012      -5.220          NA       3.600          NA 

似乎从未“检测到”术语 x2。有人知道我做错了什么吗?我知道,如果我创建合成线性数据并尝试使用 lm 重新创建系数,我会相当准确地取回系数。提前致谢。

【问题讨论】:

  • x1x2 完全共线,因此不能同时估计两者的参数。 R 认识到这一点并将其中一个设置为NA

标签: r linear-regression polynomial-math lm


【解决方案1】:

如果您要拟合包含 2 个预测变量的网格,则需要 expand.grid

x <- expand.grid(x1=seq(0.1, 0.9, by=0.01), x2=seq(1.1, 0.3, by=-0.01))
x$yval <- with(x, fn(x1, x2))

fit = lm(yval ~ x1 + x2 + I(x1^2) + I(x2^2),data=x)
coef(fit)
(Intercept)          x1          x2     I(x1^2)     I(x2^2) 
       -0.1        -1.3        -0.4         1.8         1.8 

【讨论】:

    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2018-03-16
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多