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
变量。
答案 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)