R指数多元回归

时间:2017-01-18 06:40:24

标签: r regression exponential multivalue multivariate-testing

N   x1  x2  x3      x4  x5      y
1   8   7.0 -148    26  0.54    3768
2   12  4.4 -148    28  0.99    2957
3   12  6.6 -130    26  0.58    3772
4   5   3.0 -73     33  0.49    1134
5   7   6.0 -115    42  0.32    2691
6   13  5.8 -53     26  0.52    2613
7   9   6.2 -64     32  0.86    2425
8   7   5.7 -76     43  0.72    2108
9   15  4.0 -84     33  0.63    2639
10  8   5.1 -68     40  0.34    1846
11  10  5.5 -90     30  0.79    2465
12  13  6.0 -51     26  0.24    2696
13  14  4.0 -95     41  0.63    2592
14  14  4.9 -85     39  0.79    2748
15  15  3.2 -100    28  0.61    2656
16  10  6.7 -51     40  0.29    2715
17  15  5.7 -113    26  0.72    3559
18  5   5.1 -135    29  0.51    2341
19  8   6.8 -106    35  0.22    3169
20  13  3.9 -68     37  0.76    2106
21  10  4.9 -129    26  0.93    2646
22  7   4.1 -55     40  0.58    1294
23  7   6.9 -86     38  0.31    2932
24  11  6.7 -85     38  0.44    3214
25  14  4.7 -133    31  0.30    3203
26  9   5.7 -128    25  0.74    2859
27  7   3.1 -111    33  0.61    1709
28  6   4.1 -51     34  0.52    1168
29  9   3.4 -124    27  0.38    2088
30  9   4.0 -118    28  0.29    2146

所以我有上面的数据集,我想要做的是以a*x^b的形式执行指数多变量回归。我试过在r上使用nls函数没有运气。有没有人有任何关于如何做到这一点的提示。基本上,等式的最终形式应为y = a1*x1^b1 + a2*x2^b2 + a3*x3^b3 + a4*x4^b4 + a5*x5^b5。我需要解决a1,b1,a2,b2,a3,b3,a4,b4,a5,b5变量。

1 个答案:

答案 0 :(得分:0)

仅针对x1和x2的参数示例如下

det <- read.table(header = T, stringsAsFactors = F,  text = "N   x1  x2  x3      x4  x5      y
1   8   7.0 -148    26  0.54    3768
2   12  4.4 -148    28  0.99    2957
3   12  6.6 -130    26  0.58    3772
4   5   3.0 -73     33  0.49    1134
5   7   6.0 -115    42  0.32    2691
6   13  5.8 -53     26  0.52    2613
7   9   6.2 -64     32  0.86    2425
8   7   5.7 -76     43  0.72    2108
9   15  4.0 -84     33  0.63    2639
10  8   5.1 -68     40  0.34    1846
11  10  5.5 -90     30  0.79    2465
12  13  6.0 -51     26  0.24    2696
13  14  4.0 -95     41  0.63    2592
14  14  4.9 -85     39  0.79    2748
15  15  3.2 -100    28  0.61    2656
16  10  6.7 -51     40  0.29    2715
17  15  5.7 -113    26  0.72    3559
18  5   5.1 -135    29  0.51    2341
19  8   6.8 -106    35  0.22    3169
20  13  3.9 -68     37  0.76    2106
21  10  4.9 -129    26  0.93    2646
22  7   4.1 -55     40  0.58    1294
23  7   6.9 -86     38  0.31    2932
24  11  6.7 -85     38  0.44    3214
25  14  4.7 -133    31  0.30    3203
26  9   5.7 -128    25  0.74    2859
27  7   3.1 -111    33  0.61    1709
28  6   4.1 -51     34  0.52    1168
29  9   3.4 -124    27  0.38    2088
30  9   4.0 -118    28  0.29    2146")

You can use `optim` function `?optim` I give an example for `x1` and `x2`

首先,您创建一个减少模型SS的优化函数,即par[1]*x1^par[2] + par[3]*x2^par[4] - y(您可以为x3,x4等添加参数。

min.RSS_2 <- function(data, par){
  with(data, sum((par[1]*x1^par[2] + par[3]*x2^par[4] - y)^2))

}

并且使用起始值

运行optim函数
result <- optim(par = c(0, 1, 0.1, 0.2), min.RSS_2, data = det)

计算新值

result$par
$par
[1]  973.4197484    0.4210558  250.6697196 -645.7000012

你可以在图中看到这个

plot(y ~ x1, data = det, main="Least square regression")
curve(result$par[1]*x^result$par[2] + result$par[3] * 7^result$par[4], 6 , 14, col = "red", add = T)