{"id":353,"date":"2015-02-06T15:55:01","date_gmt":"2015-02-06T14:55:01","guid":{"rendered":"http:\/\/perso.ens-lyon.fr\/lise.vaudor\/?p=353"},"modified":"2018-11-27T16:05:34","modified_gmt":"2018-11-27T15:05:34","slug":"detection-automatique-de-ruptures-dans-un-signal-package-changepoint","status":"publish","type":"post","link":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/detection-automatique-de-ruptures-dans-un-signal-package-changepoint\/","title":{"rendered":"D\u00e9tection automatique de ruptures dans un signal: package changepoint"},"content":{"rendered":"<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Changepoint_package\/Lise_Vaudor_headband.png\" alt=\"plot of chunk\nLise_Vaudor_headband\" \/><\/p>\n<p>Si vous travaillez sur des s\u00e9ries (temporelles, ou spatiales) alors ce qui suit pourrait vous int\u00e9resser.<\/p>\n<p>Comment faire, en effet, pour d\u00e9crire et analyser des s\u00e9ries telles que celles-ci:<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Changepoint_package\/series.png\" alt=\"plot of chunk\nseries\" \/><\/p>\n<p>Il y a \u00e9videmment des mani\u00e8res tr\u00e8s diff\u00e9rentes de proc\u00e9der pour analyser ce type de signal. L&rsquo;une des plus \u00ab\u00a0intuitives\u00a0\u00bb consiste \u00e0 d\u00e9couper la s\u00e9rie en <strong>segments \u00ab\u00a0homog\u00e8nes\u00a0\u00bb<\/strong>. Cette notion d&rsquo;homog\u00e9n\u00e9it\u00e9 peut recouvrir, par exemple, une homog\u00e9n\u00e9it\u00e9 en <strong>moyenne<\/strong>, ou une homog\u00e9n\u00e9it\u00e9 en <strong>variance<\/strong> (ou encore une homog\u00e9n\u00e9it\u00e9 en moyenne-variance!).<\/p>\n<h2>Exemple: d\u00e9tection de ruptures de moyenne, de variance, et de moyenne ou variance<\/h2>\n<p>Par exemple, pour les trois s\u00e9ries ci-dessus, on a l&rsquo;impression que:<\/p>\n<ul>\n<li>la s\u00e9rie x1 est affect\u00e9e par des changements de moyenne,<\/li>\n<li>la s\u00e9rie x2 est affect\u00e9e par des changements de variance, et<\/li>\n<li>la s\u00e9rie x3 par des changements de moyenne <em>et<\/em> de variance.<\/li>\n<\/ul>\n<p>Partant de ces mod\u00e8les voici le genre de segmentation que l&rsquo;on pourrait proposer:<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Changepoint_package\/series_segmentees.png\" alt=\"plot of chunk\nseries_segmentees\" \/><\/p>\n<h2>Package <code>changepoint<\/code><\/h2>\n<p>Les r\u00e9sultats ci-dessus sont en fait obtenus en utilisant le package <code>changepoint<\/code> de Killick and Eckley (2011).<\/p>\n<p>En l&rsquo;occurrence, voici les codes utilis\u00e9s pour g\u00e9n\u00e9rer les segmentations ci-dessus:<\/p>\n<pre><code>layout(matrix(1:3,nrow=3))\nrequire(changepoint)\n\n###\nseg1=cpt.mean(x1,method=\"PELT\", penalty=\"Manual\", pen.value=\"5*log(n)\")\nplot(seg1,cpt.width=2)\n###\nseg2=cpt.var(x2,method=\"PELT\")\nplot(seg2,cpt.width=2)\n###\nseg3=cpt.meanvar(x3,method=\"PELT\")\nplot(seg3,cpt.width=2)\n<\/code><\/pre>\n<p>On a utilis\u00e9 3 fonctions diff\u00e9rentes:<\/p>\n<ul>\n<li><code>cpt.mean<\/code> qu&rsquo;on utilise pour d\u00e9tecter des ruptures dans la moyenne (sous hypoth\u00e8se que la variance est constante)<\/li>\n<li><code>cpt.var<\/code> qu&rsquo;on utilise pour d\u00e9tecter des ruptures dans la variance (sous hypoth\u00e8se que la moyenne est constante)<\/li>\n<li><code>cpt.meanvar<\/code> qu&rsquo;on utilise pour d\u00e9tecter des ruptures \u00e0 la fois dans la moyenne et dans la variance<\/li>\n<\/ul>\n<p>Ces trois fonctions sont largement param\u00e9trables. On peut ainsi faire varier (entre autres)<\/p>\n<ul>\n<li>la <strong>nature de l&rsquo;algorithme<\/strong> utilis\u00e9 pour d\u00e9tecter les points de rupture \u00ab\u00a0optimaux\u00a0\u00bb<\/li>\n<li>le <strong>type de test<\/strong> utilis\u00e9 pour localiser les ruptures (on peut soit supposer que la distribution r\u00e9siduelle des variables est gaussienne, soit ne pas faire d&rsquo;hypoth\u00e8se de distribution et utiliser un test non-param\u00e9trique) <\/li>\n<li>le <strong>type<\/strong> et l&rsquo;<strong>ampleur<\/strong> de la <strong>p\u00e9nalisation<\/strong> appliqu\u00e9e afin de limiter la sursegmentation.<\/li>\n<\/ul>\n<p>Ces aspects sont discut\u00e9s dans l&rsquo;article de Killick and Eckley (2014)<\/p>\n<h2>Effet de la param\u00e9trisation<\/h2>\n<p>Sans surprise, les fonctions ci-dessus donnent des r\u00e9sultats tr\u00e8s diff\u00e9rents selon la fa\u00e7on dont on les param\u00e8tre&#8230;<\/p>\n<p>Par exemple ici, on fait varier le type d&rsquo;algorithme:<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Changepoint_package\/series_segmentees_param1.png\" alt=\"plot of chunk\nseries_segmentees_param1\" \/><\/p>\n<p>Ici, on fait varier le type de p\u00e9nalit\u00e9:<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Changepoint_package\/series_segmentees_param2.png\" alt=\"plot of chunk\nseries_segmentees_param2\" \/><\/p>\n<p>Et ici, on fait varier la valeur de la p\u00e9nalit\u00e9 (quand fix\u00e9e manuellement):<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Changepoint_package\/series_segmentees_param3.png\" alt=\"plot of chunk\nseries_segmentees_param3\" \/><\/p>\n<h2>Comment choisir une m\u00e9thode?<\/h2>\n<p>Pour choisir l&rsquo;algorithme de segmentation et autres param\u00e8tres associ\u00e9s, on va s&rsquo;appuyer sur 3 crit\u00e8res:<\/p>\n<ul>\n<li>des crit\u00e8res <strong>th\u00e9oriques<\/strong> (quel mod\u00e8le est le plus adapt\u00e9 \u00e0 vos donn\u00e9es? un avec une variance constante, un o\u00f9 les r\u00e9sidus sont gaussiens, un qui rendrait compte de segments de longueurs tr\u00e8s variables? etc.)<\/li>\n<li>des crit\u00e8res <strong>empiriques<\/strong> (on choisit la m\u00e9thode qui donne les r\u00e9sultats les plus \u00ab\u00a0exploitables\u00a0\u00bb sur des donn\u00e9es r\u00e9elles, et les plus corrects sur des donn\u00e9es simul\u00e9es)<\/li>\n<li>des crit\u00e8res <strong>de calcul<\/strong> (il faut que pour des donn\u00e9es d&rsquo;une certaine taille, la m\u00e9thode soit applicable d&rsquo;un point de vue calculatoire)<\/li>\n<\/ul>\n<p>Evidemment, d\u00e9terminer quelle est la <em>meilleure<\/em> m\u00e9thode en utilisant de multiples crit\u00e8res de ces trois types est difficile (voire impossible). N\u00e9anmoins il est possible d&rsquo;en discuter en r\u00e9alisant (peut-\u00eatre, tout-de-m\u00eame, en moins ambitieux!!) le m\u00eame type d&rsquo;\u00e9tude que Leviandier et al. (2012).<\/p>\n<p>Ce n&rsquo;est pas l&rsquo;objet de ce billet (ce serait un petit peu long), mais je compte me pencher sur cette question dans les mois qui viennent&#8230; Je n&rsquo;exclus donc pas de futurs billets sur ce probl\u00e8me (ou assimil\u00e9s)&#8230;<\/p>\n<h2>R\u00e9ferences<\/h2>\n<p>Killick, Rebecca, and Idris A. Eckley. 2011. <em>changepoint: An R Package for Changepoint Analysis<\/em>. <a href=\"http:\/\/CRAN.R-project.org\/package=changepoint\">http:\/\/CRAN.R-project.org\/package=changepoint<\/a>.<\/p>\n<p>\u2014\u2014\u2014. 2014. \u201cchangepoint: An R Package for Changepoint Analysis.\u201d <em>Journal of Statistical Software<\/em> 58 (3). <a href=\"http:\/\/www.jstatsoft.org\/v58\/i03\">http:\/\/www.jstatsoft.org\/v58\/i03<\/a>.<\/p>\n<p>Leviandier, Thierry, A. Alber, F. Le Ber, and H. Pi\u00e9gay. 2012. \u201cComparison of Statistical Algorithms for Detecting Homogeneous River Reaches Along a Longitudinal Continuum.\u201d <em>Geomorphology<\/em> 138 (1): 130\u201344. doi:<a href=\"http:\/\/dx.doi.org\/10.1016\/j.geomorph.2011.08.031\">10&#46;1016\/j.geomorph.2011.08.031<\/a>. <a href=\"http:\/\/linkinghub.elsevier.com\/retrieve\/pii\/S0169555X11004624\">http:\/\/linkinghub.elsevier.com\/retrieve\/pii\/S0169555X11004624<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si vous travaillez sur des s\u00e9ries (temporelles, ou spatiales) alors ce qui suit pourrait vous int\u00e9resser. Comment faire, en effet, pour d\u00e9crire et analyser des s\u00e9ries telles que celles-ci: Il y a \u00e9videmment des mani\u00e8res tr\u00e8s diff\u00e9rentes de proc\u00e9der pour analyser ce type de signal. L&rsquo;une des plus \u00ab\u00a0intuitives\u00a0\u00bb consiste \u00e0 d\u00e9couper la s\u00e9rie en segments \u00ab\u00a0homog\u00e8nes\u00a0\u00bb. Cette notion d&rsquo;homog\u00e9n\u00e9it\u00e9 peut recouvrir, par exemple, une homog\u00e9n\u00e9it\u00e9 en moyenne, ou une.. <a href=\"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/detection-automatique-de-ruptures-dans-un-signal-package-changepoint\/\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-353","post","type-post","status-publish","format-standard","hentry","category-tous-les-posts"],"_links":{"self":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/353","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/comments?post=353"}],"version-history":[{"count":16,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/353\/revisions"}],"predecessor-version":[{"id":1054,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/353\/revisions\/1054"}],"wp:attachment":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/media?parent=353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/categories?post=353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/tags?post=353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}