Question:
Régression linéaire mobile pondérée exponentiellement
brandon
2011-04-24 23:56:27 UTC
view on stackexchange narkive permalink

J'ai un problème où je dois calculer la régression linéaire au fur et à mesure que les échantillons entrent en jeu. Existe-t-il une formule que je peux utiliser pour obtenir la régression linéaire mobile pondérée de manière exponentielle? Je ne sais pas si c'est ainsi que vous l'appelleriez.

Je dis exponentiellement parce que je veux contrôler le poids des anciens échantillons, tout comme utiliser la moyenne mobile pondérée. Mais je veux que les anciens échantillons soient moins pondérés, exponentiellement moins, que les échantillons plus récents
Six réponses:
#1
+7
Dirk Eddelbuettel
2011-04-25 02:27:09 UTC
view on stackexchange narkive permalink

Bien sûr, ajoutez simplement un argument weights = à lm () (dans le cas de R):

  R> x <- 1:10 ## la moyenne de ceci est 5.5R> lm (x ~ 1) ## régression sur des calculs constants meanCall: lm (formula = x ~ 1) Coefficients: (Intercept) 5.5 R> lm (x ~ 1, poids = 0,9 ^ (seq (10,1, par = -1))) Appel: lm (formule = x ~ 1, poids = 0,9 ^ (seq (10, 1, par = -1))) Coefficients : (Interception) 6.35 R> 

Voici donner plus de poids aux valeurs «plus récentes» ( ie , plus élevées) et la moyenne passe de 5,5 à 6,35. La clé, le cas échéant, est le poids exponentiel $ \ lambda ^ \ tau $ que je calcule à la volée; vous pouvez changer le facteur de pondération en n'importe quelle valeur de votre choix et en fonction de la façon dont vous commandez vos données, vous pouvez également faire exécuter l'exposant dans l'autre sens.

Vous pouvez faire de même avec des modèles de régression impliquant les régresseurs que vous avez .

Je n'ai jamais entendu parler de R. Cela semble être ce que je veux, mais je ne comprends pas toute la syntaxe. Pouvez-vous expliquer comment cela fonctionnerait avec cette formule de régression linéaire? (NΣXY - (ΣX) (ΣY)) / (NΣX ^ 2 - (ΣX) ^ 2). La formule fonctionne parfaitement pour mon problème, mais j'écris un document de recherche et j'ai besoin d'une forme mobile exponentielle plus acceptable pour fonctionner lorsque les échantillons arrivent.
Il semble que la commande seq dans cette syntaxe signifie qu'elle garde la trace des 10 derniers échantillons. J'ai besoin de quelque chose comme une moyenne mobile pondérée exponentiellement qui diminue tous les poids passés approchant mais n'atteignant jamais 0
J'ai utilisé 10 pour l'exemple; remplacez-le par N où vous déterminez N comme la longueur de votre ensemble de données. En outre, il s'agit simplement d'une application des ** moindres carrés pondérés ** que tout manuel de régression décent couvrira plus en détail.
#2
+4
Ralph Winters
2011-04-25 20:18:03 UTC
view on stackexchange narkive permalink

On dirait que ce que vous voulez faire est un modèle en deux étapes. Commencez par transformer vos données en une forme lissée exponentiellement en utilisant un facteur de lissage spécifié, puis entrez les données transformées dans votre formule de régression linéaire.

http://www.jstor.org/pss/2627674

http://en.wikipedia.org/wiki/Exponential_smoothing

Apparemment, ce site ne me laissera pas appuyer sur la flèche vers le haut car je suis trop nouveau, mais certainement ce dont j'avais besoin
@brandon Maintenant, vous pouvez (15 répétitions nécessaires).
FYI, The Crane and Crotty reference (http://www.jstor.org/pss/2627674) est une URL valide, mais en essayant d'obtenir le PDF, je reçois un message indiquant que "le fichier est endommagé et ne peut pas être réparé" .
#3
+3
Henry
2011-04-25 21:20:16 UTC
view on stackexchange narkive permalink

Si vous recherchez une équation de la forme

$$ y = \ alpha_n + \ beta_n x $$

après que $ n $ éléments de données sont entrés, et vous utilisez un facteur exponentiel $ k \ ge 1 $ alors vous pouvez utiliser

$$ \ beta_n = \ frac {\ left (\ sum_ {i = 1} ^ nk ^ i \ right) \ left (\ sum_ {i = 1} ^ nk ^ i X_i Y_i \ right) - \ left (\ sum_ {i = 1} ^ nk ^ i X_i \ right) \ left (\ sum_ {i = 1} ^ nk ^ i Y_i \ right)} {\ left (\ sum_ {i = 1} ^ nk ^ i \ right) \ left (\ sum_ {i = 1} ^ nk ^ i X_i ^ 2 \ right) - \ gauche (\ sum_ {i = 1} ^ nk ^ i X_i \ right) ^ 2} $$

et

$$ \ alpha_n = \ frac {\ left (\ sum_ {i = 1 } ^ nk ^ i Y_i \ right) - \ beta_n \ left (\ sum_ {i = 1} ^ nk ^ i X_i \ right)} {\ sum_ {i = 1} ^ nk ^ i}. $$

Si l'arrondi ou la vitesse deviennent des problèmes, cela peut être refondu sous d'autres formes. Il peut aussi être intéressant de savoir que pour $ k>1 $ vous avez $ \ sum_ {i = 1} ^ n k ^ i = \ frac {k (k ^ n - 1)} {k-1} $.

C'est bien, mais existe-t-il une formulation récursive en ligne?i.e. Pouvez-vous écrire $ a_n, b_n $ en termes de $ a_ {n-1}, b_ {n-1}, x_n, y_n, k $?
@Peter: probablement pas facilement, mais au lieu de garder tous les différents $ X_i $ et $ Y_i $, vous pouvez simplement stocker quatre ou cinq sommes en cours
#4
+3
MohSahx
2014-01-04 03:41:08 UTC
view on stackexchange narkive permalink

Oui, vous pouvez. La méthode que vous recherchez est appelée méthode des moindres carrés à pondération exponentielle. C'est une variante de la méthode des moindres carrés récursifs: \ begin {align} Θ ̂ (k + 1) & = Θ ̂ (k) + K [z (k + 1) -x ^ T (k + 1) Θ ̂ (k)] \\ K (k + 1) & = D (k) x (k + 1) [λ + x ^ T (k + 1) D (k) x (k + 1)] ^ (- 1 ) \\ D (k + 1) & = \ frac 1 λ \ bigg (D (k) -D (k) x (k + 1) \ bigg [λ + x ^ T (k + 1) D (k) x (k + 1) \ bigg] ^ {- 1} x ^ T (k + 1) D (k) \ bigg) \ end {align} $ 0.9<λ<1 $ typiquement.

C'est une méthode développée pour tenir compte des paramètres variant dans le temps, mais sont toujours dans un format linéaire. qui provient de la fonction de coût: $$ J (Θ) = 1/2 ∑_ (i = km) ^ k▒ 〖λ ^ (ki) [z (i) -x ^ T (i) Θ]〗 ^ 2 $$

Les moindres carrés ordinaires sont calculés à partir de la comparaison suivante:

la fonction de coût étant: $$ J (Θ) = 1/2 ∑_ (i = i) ^ k▒ [z (i) -x ^ T (i) Θ] ^ 2 $$ avec \ begin {align} Θ (k) & = D (k) X_k ^ T Z_k \\ Cov [Θ ̂ (k)] & = σ ^ 2 D (k) \\ D (k) & = [X_k ^ T X_k] ^ {- 1} \ end {align}

Bienvenue sur le site, @MohSahx! Ce serait plus clair si vous pouviez éditer vos formules dans `latex`, en particulier pour réviser les symboles comme ▒.
#5
+1
IrishStat
2011-04-25 15:49:36 UTC
view on stackexchange narkive permalink

Si vous formez le modèle de fonction de transfert y (t) = W (B) * X (t) + [THETA (B) / PHI (B)] * a (t) l'opérateur [THETA (B) / PHI (B)] est le "composant de lissage". Par exemple, si PHI (B) = 1,0 et THETA (B) = 1-.5B, cela impliquerait un ensemble de poids de .5, .25, .125, .... de cette façon, vous pourriez fournir la réponse à l'optimisation de la "régression linéaire mobile pondérée" plutôt que de prendre sa forme.

#6
+1
Peter
2018-05-10 14:12:33 UTC
view on stackexchange narkive permalink

Je ne suis pas sûr de la relation réelle entre cela et la régression linéaire mobile pondérée exponentiellement, mais une formule en ligne simple pour estimer une pente et un décalage pondérés de manière exponentielle s'appelle Double lissage exponentiel Holt-Winters.Depuis la page Wikipédia:

Étant donné une série temporelle $ x_0 ... x_t $, et les paramètres de lissage $ \ alpha \ in (0,1], \ beta \ in (0, 1] $, initialiser avec:

\ begin {align} s_1 & = x_1 \\ b_1 & = x_1 - x_0 \ end {align}

Et puis pour $ t>1 $: \ begin {align} s_t & = (1- \ alpha) (s_ {t-1} + b_ {t-1}) + \ alpha x_t \\ b_t & = (1- \ beta) b_ {t-1} + \ beta (s_t - s_ {t-1}) \ end {align}

Où $ b_t $ est une pente estimée et $ s_t $ est une intersection y estimée au temps t.

Peut-être qu'une personne statistiquement encline peut commenter à quel point cela est proche de la solution de la régression linéaire mobile pondérée de manière exponentielle.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...