Question:
Détection du point de changement bayésien
German Demidov
2016-02-23 19:23:33 UTC
view on stackexchange narkive permalink

Question vraiment naïve. J'ai une série chronologique. Je sais comment effectuer une segmentation (comme l'algorithme de segmentation binaire). Le but est de trouver des intervalles générés à partir de différents modèles probabilistes.

Mais j'ai toutes les informations sur les modèles possibles (forme de distribution, variance, moyenne). Donc, pour chaque point dans le temps, j'ai la probabilité de chaque modèle et de son a priori. => Je peux calculer le postérieur pour chaque point temporel, tout modèle et tout intervalle.

Problème: si je segmente simplement la série temporelle en utilisant la probabilité postérieure maximale, j'aurai trop de points de changement. HMM peut être une solution, mais il ne prend également en compte qu'un seul point et ne «regarde» pas tout l'intervalle. Il est également difficile d'appliquer HMM pour des données non normales.

Il peut être résolu avec une fenêtre coulissante, mais on ne sait pas comment choisir la taille de la fenêtre coulissante.

Y a-t-il un algorithme pour ce type de détection de point de changement bayésien (lorsque vous connaissez des modèles possibles)? Comme HMM, mais prend en compte l'intervalle et peut fonctionner avec n'importe quelle distribution paramétrique? L'algorithme heuristique est bon aussi.

Comment puis-je appliquer la classification par maximum de vraisemblance à ce problème?

UPD: Simulation du problème:

  variances < - runif (1000,0.01,0.5) couvre <- c () for (i in seq (1: 100)) {couvertures <- c (couvertures, rnorm (1, mean = 0, sd = variances [i])) } for (i in seq (101: 200)) {coverages <- c (coverages, rnorm (1, mean = -log (2), sd = variances [i] / 0.75))} for (i in seq (201 : 300)) {couvertures <- c (couvertures, rnorm (1, moyenne = log (3/2), sd = variances [i] * 0,75))} pour (i en seq (301: 1000)) {couvertures < - c (couvertures, rnorm (1, moyenne = 0, sd = variances [i]))} plot (couvertures)  

enter image description here

Dans la vraie vie, je connais les écarts et les moyennes possibles pour chaque point dans le temps. Je dois déduire la prévalence de l'un des modèles à l'intérieur du segment.

Trois réponses:
Zhubarb
2016-02-23 19:51:43 UTC
view on stackexchange narkive permalink

Les deux bons articles sur ce sujet sont ci-dessous:

1) Détection bayésienne des points de changement en ligne

2) Modélisation de la structure des dépendances changeantes dans des séries temporelles multivariées

Ceux-ci n'appliquent pas d'algorithme de clustering mais prennent en compte l'intervalle (depuis le dernier point de changement) comme vous l'avez demandé. Et ils travaillent avec des distributions paramétriques. L'article d'Adams et Mackay (le premier) a également l'algorithme implémenté dans MatLab et Python.

Merci beaucoup!Cela ressemble exactement à ce que je voulais.Ils ont l'air vraiment sympa!Je vais les lire attentivement, probablement, ma recherche est terminée =)
= (malheureusement, ce que je n'ai pas remarqué dans le premier article: nous supposons en outre que pour chaque partition ρ, les données qu'elle contient sont iid d'une distribution de probabilité. Pour ma situation, je connais les paramètres de distribution, donc je peux répondre à la question: "quels sont les paramètres pour le point temporel $ t $ et le modèle $ H_i $", mais les données à l'intérieur ne sont pas iid donc les distributions pour les points temporels $ t $ et $ t + 1 $ peuvent être différentes même pour le même modèle $ H_i $.
Jonas Lindeløv
2020-01-10 16:59:41 UTC
view on stackexchange narkive permalink

En bref, le package mcp effectue une régression bayésienne des points de changement. À partir de la v0.2, il prend Gaussian, Binomial, Bernoulli et Poisson. Modéliser vos données sous la forme de quatre segments d'interception uniquement:

  model = list (
  y ~ 1, # Intercepter
  ~ 1, # etc ...
  ~ 1,
  ~ 1
)

bibliothèque (mcp)
df = data.frame (x = seq_along (couvertures), y = couvertures)
fit = mcp (modèle, df, par_x = "x")
 

Tracons-le avec un intervalle de prédiction, juste pour le plaisir (lignes pointillées vertes). Les courbes bleues sont des densités postérieures pour les emplacements des points de changement. Les lignes grises sont des tirages au sort de la partie postérieure.

  plot (fit, q_predict = T)
 

enter image description here

Vous pouvez utiliser plot_pars () pour tracer des estimations de paramètres individuels. Voici les résumés. où cp_ * sont les estimations du point de changement:

  summary (fit))

Famille: gaussienne (lien = 'identité')
Itérations: 9000 à partir de 3 chaînes.
Segments:
  1: y ~ 1
  2: y ~ 1 ~ 1
  3: y ~ 1 ~ 1
  4: y ~ 1 ~ 1

Paramètres au niveau de la population:
    nom signifie inférieur supérieur Rhat n.eff
    cp_1 101,280 99,38 103,0000 1 5627
    cp_2 199,562 199,00 200,4314 1 5038
    cp_3 299,365 296,85 301,7760 1 2340
   int_1 -0,047 -0,11 0,0104 1 5614
   int_2 -0,620 -0,68 -0,5592 1 5792
   int_3 0,423 0,37 0,4838 1 6463
   int_4 -0,018 -0,04 0,0036 1 5382
 sigma_1 0,295 0,28 0,3082 1 5963
 

En savoir plus sur le site Web mcp. Clause de non-responsabilité: je suis le développeur de mcp .

C'est une excellente réponse!Juste un peu trop tard, j'ai déjà écrit un article en utilisant une méthode différente https://www.biorxiv.org/content/10.1101/837971v1 - j'espère donc que la prochaine génération de chercheurs utilisera votre package, je suis sûr que cela fonctionnera mieux quemon algorithme simple ...
Super que vous ayez trouvé (et publié!) Une solution.Envisagez d'accepter une réponse (pas nécessairement la mienne) si elle résout le problème que vous avez initialement posé.Cela permet aux futurs utilisateurs de trouver plus facilement des solutions lorsqu'ils viennent ici.
Mike Hunter
2016-02-23 20:21:48 UTC
view on stackexchange narkive permalink

C'est plus un commentaire qu'une réponse mais c'est trop long pour être un commentaire:

La "bible" de l'analyse séquentielle est probablement le livre de 2014 Analyse séquentielle: Test d'hypothèses et détection des points de changement par Alexander Tartakovsky. Il est apparemment exhaustif dans sa couverture du sujet.

http://www.amazon.com/Sequential-Analysis-Hypothesis-Changepoint-Probability-ebook/dp/B00MMOIWTS/ref=sr_1_1 ? ie = UTF8&qid = 1445511005&sr = 8-1&keywords = sequential + analysis + tartakovsky

Cela dit, en juin 2014, Columbia a parrainé le cinquième atelier international sur les méthodologies séquentielles qui a réuni les derniers et les plus grands praticiens Sur le terrain. Tartakovsky faisait partie du comité d'organisation.

https://sites.google.com/site/iwsm2015/home

Voir le lien "Programme détaillé" sur le site Web de la conférence pour les résumés et les articles. Il y a probablement quelque chose qui vise spécifiquement votre question.

Réponse issue de ce fil de discussion de CV tel que écrit par moi: estimateurs séquentiels pour une proportion

Je voudrais acheter ce livre, mais je ne peux pas.J'ai une allocation, pas un salaire ... 70 euros, c'est beaucoup pour moi = (je vais essayer de le trouver dans le programme détaillé.
Pouvez-vous l'obtenir grâce à un prêt entre bibliothèques?


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...