2017-01-18 3 views
1
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 

J'ai donc l'ensemble de données ci-dessus et ce que je suis en train de faire est de réaliser une régression multivariée exponentielle sous la forme de a*x^b. J'ai essayé d'utiliser la fonction nls sur r sans chance. Est-ce que quelqu'un a des conseils sur la façon de le faire. Fondamentalement, la forme finale de l'équation devrait être y = a1*x1^b1 + a2*x2^b2 + a3*x3^b3 + a4*x4^b4 + a5*x5^b5. Je dois résoudre pour les variables a1,b1,a2,b2,a3,b3,a4,b4,a5,b5.R exponentielle de régression multivariée

+0

si vous avez besoin d'un 'nls' avec les valeurs de départ pour tous les paramètres ex' start = c (a1 = ..., a2 = ...) '. Il pourrait être difficile d'affiner les valeurs de départ pour résoudre l'équation et je ne sais pas si cette fonction est correcte car je n'ai jamais vu d'équation avec autant de paramètres – Mateusz1981

+0

x3 a des valeurs négatives et vous ne pouvez pas augmenter une valeur négative non entière un pouvoir. –

Répondre

0

L'exemple avec des paramètres seulement pour x1 et x2 est le suivant

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` 

Tout d'abord vous créer une fonction d'optimisation qui permettent de réduire SS de votre modèle c.-à-par[1]*x1^par[2] + par[3]*x2^par[4]-y (vous pouvez ajouter des paramètres pour x3, x4 ect.

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

} 

et que vous exécutez la fonction optim avec les valeurs de départ

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

nouvelles valeurs sont calculées

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

Vous pouvez visualiser cela sur la figure

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) 
+0

Comment devrais-je comprendre les valeurs de départ avec 5, donc a1 * x1^b1 + a2 * x2^b2 etc – brownmamba71

+0

Je le fais par essais et erreurs et la reconnaissance de la façon dont la fonction se comporte – Mateusz1981

+0

Avez-vous gérer? – Mateusz1981