{"id":2966,"date":"2017-01-27T18:53:16","date_gmt":"2017-01-27T23:53:16","guid":{"rendered":"http:\/\/bioinfo.iric.ca\/?p=2966\/"},"modified":"2017-04-29T17:40:02","modified_gmt":"2017-04-29T21:40:02","slug":"regression-logistique-et-gtex","status":"publish","type":"post","link":"https:\/\/bioinfo.iric.ca\/fr\/regression-logistique-et-gtex\/","title":{"rendered":"R\u00e9gression logistique et GTEx"},"content":{"rendered":"<p>Lorsqu&rsquo;on travaille avec toutes sortes de donn\u00e9es, il arrive parfois que nous voulons pr\u00e9dire la valeur d&rsquo;une variable qui n&rsquo;est pas num\u00e9rique. Dans ces cas-l\u00e0, la r\u00e9gression logistique est tout \u00e0 fait appropri\u00e9e. On peut dire qu&rsquo;elle est s&rsquo;apparente \u00e0 une r\u00e9gression lin\u00e9aire sauf que la variable d\u00e9pendante est une cat\u00e9gorie.<\/p>\n<p>Vous vous souvenez de la fonction de la r\u00e9gression lin\u00e9aire o\u00f9 l&rsquo;on essaie d&rsquo;estimer les param\u00e8tres beta (les coefficients) qui s&rsquo;ajustent le mieux la droite \u00e0 nos donn\u00e9es:<\/p>\n<p>\\begin{equation}<br \/>\nY_i = \\beta_0 + \\beta_1 X_i + \\epsilon_i<br \/>\n\\end{equation}<\/p>\n<p>Et bien, dans une r\u00e9gression logistique, nous essayons aussi d&rsquo;estimer les param\u00e8tres beta mais pour :<br \/>\n\\begin{equation}<br \/>\ny = \\left\\{\\begin{matrix}1\\: \\: \\: \\: Y_i = \\beta_0 + \\beta_1 X_i + \\epsilon_i &gt; 0<br \/>\n\\\\<br \/>\n0\\: \\: \\: \\:else<br \/>\n\\end{matrix}\\right.<br \/>\n\\end{equation}<\/p>\n<p>Ici, <code>y<\/code> n&rsquo;est pas lin\u00e9airement d\u00e9pendant de <code>x<\/code>. Regardons maintenant un exemple!<\/p>\n<h3>Pr\u00e9dire le sexe \u00e0 partir des profils d&rsquo;expression des g\u00e8nes<\/h3>\n<p>Lorsque je construis un mod\u00e8le \u00e0 partir de l&rsquo;expression des g\u00e8nes, je commence habituellement par essayer de construire un mod\u00e8le pour pr\u00e9dire le sexe. \u00c7a me sert de contr\u00f4le puisque c&rsquo;est une t\u00e2che tr\u00e8s facile \u00e0 effectuer. On peut facilement pr\u00e9dire le sexe en regardant l&rsquo;expression de seulement quelques g\u00e8nes.<\/p>\n<p>Pour mon example, j&rsquo;ai d\u00e9cid\u00e9 d&rsquo;utiliser le jeu de donn\u00e9es de RPKM du <a href=\"http:\/\/www.gtexportal.org\/\"> Genotype-Tissue Expression (GTEx) <\/a>. Le portail de GTEx permet d&rsquo;explorer les donn\u00e9es transcriptomiques et les associations g\u00e9n\u00e9tiques \u00e0 travers diff\u00e9rents types de tissus cellulaires provenant de donneurs d\u00e9c\u00e9d\u00e9s en bonne sant\u00e9. La version V6p contient 8555 \u00e9chantillons sondant 53 tissus provenant de 544 donneurs <em>post-mortem<\/em>. Vous devriez \u00a0jeter un coup d&rsquo;oeil au site, c&rsquo;est vraiment int\u00e9ressant et leurs outils sont faciles \u00e0 utiliser.<\/p>\n<p><center><br \/>\n<img decoding=\"async\" class=\"aligncenter size-large wp-image-2951\" src=\"https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/Screenshot-from-2017-01-26-19-14-57-1024x365.png\" alt=\"\" width=\"1024\" height=\"365\" srcset=\"https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/Screenshot-from-2017-01-26-19-14-57-200x71.png 200w, https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/Screenshot-from-2017-01-26-19-14-57-300x107.png 300w, https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/Screenshot-from-2017-01-26-19-14-57-400x142.png 400w, https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/Screenshot-from-2017-01-26-19-14-57-600x214.png 600w, https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/Screenshot-from-2017-01-26-19-14-57-768x273.png 768w, https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/Screenshot-from-2017-01-26-19-14-57-800x285.png 800w, https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/Screenshot-from-2017-01-26-19-14-57-1024x365.png 1024w, https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/Screenshot-from-2017-01-26-19-14-57.png 1084w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><strong>Figure1<\/strong>.Distribution of the tissues samples in the GTEx cohort [source:http:\/\/www.gtexportal.org\/home\/tissueSummaryPage]<\/center>&nbsp;<\/p>\n<p>Comme le jeu de donn\u00e9es de GTEx est assez gros (56238 rang\u00e9es par 8555 colonnes), j&rsquo;ai utilis\u00e9 python pour faire ma r\u00e9gression logistique en utilisant les fonctions de <a href=\"http:\/\/scikit-learn.org\/stable\/modules\/generated\/sklearn.linear_model.LogisticRegression.html\">scikit-learn package<\/a>. Si vous avez un jeu de donn\u00e9es plus petit, la fonction R <code>glm(formula, data=mydata, family='binomial')<\/code> (avec ces param\u00e8tres) est ce que vous cherchez.<\/p>\n<p>Donc, c&rsquo;est parti. Avant de commencer, j&rsquo;ai : 1) lire la matrice de RPKM, les annotations des \u00e9chantillons et les annotions sur les donneurs, 2) log-transformer les valeurs de RPKM (<em>log10(RPKM+0.01)<\/em>) 3) filtrer les g\u00e8nes pour ne garder que les 10 000 g\u00e8nes les plus variables. J&rsquo;ai gard\u00e9 un peu moins de 20% des g\u00e8nes pour mon exemple, c&rsquo;\u00e9tait un choix tout \u00e0 fait arbitraire.<\/p>\n<p>&nbsp;<\/p>\n<p><center><\/p>\n<div style=\"font-size: 0.9em;\">\n<table class=\"dataframe\" style=\"height: 156px;\" border=\"1\" width=\"749\">\n<thead>\n<tr style=\"text-align: center;\">\n<th style=\"text-align: center; width: 249px;\"><\/th>\n<th style=\"text-align: center; width: 99px;\">SMCENTER<\/th>\n<th style=\"text-align: center; width: 107px;\">SMTS<\/th>\n<th style=\"text-align: center; width: 171px;\">SMTSD<\/th>\n<th style=\"text-align: center; width: 89px;\">SUBJECT<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th style=\"text-align: center; width: 249px;\">GTEX-1117F-0003-SM-58Q7G<\/th>\n<td style=\"text-align: center; width: 99px;\">B1<\/td>\n<td style=\"text-align: center; width: 107px;\">Blood<\/td>\n<td style=\"text-align: center; width: 171px;\">Whole Blood<\/td>\n<td style=\"text-align: center; width: 89px;\">GTEX-1117F<\/td>\n<\/tr>\n<tr>\n<th style=\"text-align: center; width: 249px;\">GTEX-1117F-0003-SM-5DWSB<\/th>\n<td style=\"text-align: center; width: 99px;\">B1<\/td>\n<td style=\"text-align: center; width: 107px;\">Blood<\/td>\n<td style=\"text-align: center; width: 171px;\">Whole Blood<\/td>\n<td style=\"text-align: center; width: 89px;\">GTEX-1117F<\/td>\n<\/tr>\n<tr>\n<th style=\"text-align: center; width: 249px;\">GTEX-1117F-0226-SM-5GZZ7<\/th>\n<td style=\"text-align: center; width: 99px;\">B1<\/td>\n<td style=\"text-align: center; width: 107px;\">Adipose Tissue<\/td>\n<td style=\"text-align: center; width: 171px;\">Adipose &#8211; Subcutaneous<\/td>\n<td style=\"text-align: center; width: 89px;\">GTEX-1117F<\/td>\n<\/tr>\n<tr>\n<th style=\"text-align: center; width: 249px;\">GTEX-1117F-0426-SM-5EGHI<\/th>\n<td style=\"text-align: center; width: 99px;\">B1<\/td>\n<td style=\"text-align: center; width: 107px;\">Muscle<\/td>\n<td style=\"text-align: center; width: 171px;\">Muscle &#8211; Skeletal<\/td>\n<td style=\"text-align: center; width: 89px;\">GTEX-1117F<\/td>\n<\/tr>\n<tr>\n<th style=\"text-align: center; width: 249px;\">GTEX-1117F-0526-SM-5EGHJ<\/th>\n<td style=\"text-align: center; width: 99px;\">B1<\/td>\n<td style=\"text-align: center; width: 107px;\">Blood Vessel<\/td>\n<td style=\"text-align: center; width: 171px;\">Artery &#8211; Tibial<\/td>\n<td style=\"text-align: center; width: 89px;\">GTEX-1117F<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><strong>Table1<\/strong>. Exemple de donn\u00e9es de GTex.<br \/>\n<\/center><br \/>\nLorsqu&rsquo;on essaie de pr\u00e9dire quelque chose, il est toujours recommand\u00e9 de travailler avec un ensemble d&rsquo;entrainement et un ensemble de test. Vous construisez votre mod\u00e8le en utilisant l&rsquo;ensemble de donn\u00e9es d&rsquo;entrainement et vous \u00e9valuez sa performance en utilisant l&rsquo;ensemble de test. La plupart des fonctions de scikit-learn sont faites pour fonctionner dans ce cadre.<\/p>\n<pre><code class=\"python\">\r\nfrom sklearn.linear_model import LogisticRegression\r\nfrom sklearn import metrics, cross_validation\r\nfrom sklearn.cross_validation import train_test_split\r\nfrom sklearn.cross_validation import cross_val_score\r\n\r\n# X est la matrice de g\u00e8nes, \r\n# Y est le vecteur contenant le sexe de chaque donneur\r\n# 0.3 indique que 30% des donn\u00e9es constitueront l'ensemble de test et 70%, \r\n# l'ensemble d'entrainement\r\n\r\nX_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=0)\r\n\r\n# Ces param\u00e8tres servent \u00e0 restreindre les variables consid\u00e9r\u00e9es par le mod\u00e8le\r\nmodel = LogisticRegression(penalty='l2', C=0.2)  \r\nmodel.fit(X_train, y_train)\r\n\r\n# On applique le mod\u00e8le \u00e0 l'ensemble de test\r\npredicted = model.predict(X_test)\r\nprobs = model.predict_proba(X_test)\r\n\r\n<\/code><\/pre>\n<p>Voil\u00e0! Je peux maintenant regarder les pr\u00e9dictions pour \u00e9valuer la performance du mod\u00e8le. Comme il y avait 62.3% d&rsquo;hommes dans mon ensemble de test (ce qui est proche de la proportion d&rsquo;homme dans le jeu de donn\u00e9es complet), le mod\u00e8le a besoin de faire une bonne pr\u00e9diction plus de 62.3% du temps pour que l&rsquo;on puisse dire qu&rsquo;il est performant. Sinon, il pourrait seulement d\u00e9cider de toujours pr\u00e9dire &lsquo;Male&rsquo; (sans se fier aux donn\u00e9es d&rsquo;expression) et il serait correct 62.3% du temps. Dans cet exemple, le mod\u00e8le a une pr\u00e9cision (accuracy) de 100%. Il fait la bonne pr\u00e9diction pour tous les \u00e9chantillons.<\/p>\n<p>Ensuite, en regardant les coefficients beta, je peux identifier les g\u00e8nes qui servent dans le mod\u00e8le pour pr\u00e9dire le sexe. Ce sont les g\u00e8nes avec les plus grands et plus petits coefficients. Dans ce cas-ci, le top 4 g\u00e8nes incluent :<br \/>\nRPS4Y1 (coefficient de 1.34), KDM5D (1.27), DDX3Y (1.25) and XIST (-1.25). Notez que XIST est le seul g\u00e8ne qui semble sp\u00e9cifique aux femmes.<\/p>\n<p><center><br \/>\n<img decoding=\"async\" class=\"aligncenter size-full wp-image-2956\" src=\"https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/boxplot.png\" alt=\"\" width=\"506\" height=\"378\" srcset=\"https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/boxplot-200x149.png 200w, https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/boxplot-300x224.png 300w, https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/boxplot-400x299.png 400w, https:\/\/bioinfo.iric.ca\/wpbioinfo\/wp-content\/uploads\/2017\/01\/boxplot.png 506w\" sizes=\"(max-width: 506px) 100vw, 506px\" \/><strong>Figure2<\/strong>. Distribution de l&rsquo;expression log-transform\u00e9e des 10 g\u00e8nes avec les coefficients les plus importants.<\/center>&nbsp;<\/p>\n<p>Notez que vous devriez toujours faire une validation crois\u00e9e pour \u00eatre certain que le mod\u00e8le n&rsquo;est pas sp\u00e9cifique \u00e0 votre jeu de donn\u00e9es (qu&rsquo;il ne sur-apprend pas). Le but, apr\u00e8s tout, quand on construit des mod\u00e8les pr\u00e9dictifs est de pouvoir les r\u00e9utiliser sur de nouvelles donn\u00e9es, donc il doit \u00eatre capable de g\u00e9n\u00e9raliser. La validation crois\u00e9e implique rouler le g\u00e9n\u00e9rer un m\u00eame mod\u00e8le plusieurs fois en utilisant diff\u00e9rents ensemble d&rsquo;entrainement et de test et regarder le score moyen pour avoir une id\u00e9e de la performance r\u00e9elle du mod\u00e8le. Dans le code ci-dessous, le mod\u00e8le set construit 10 fois en utilisant chaque fois un diff\u00e9rent ensemble de test et un diff\u00e9rent ensemble d&rsquo;entrainement. Le score moyen des 10 it\u00e9rations est rapport\u00e9 et nous indique si la g\u00e9n\u00e9ralisation est bonne.<\/p>\n<pre><code class=\"python\">\r\n# \u00c9valuer le mod\u00e8le par une validation crois\u00e9e\r\nscores = cross_val_score(LogisticRegression(penalty='l2', C=0.2), xx.T, Y, scoring='accuracy', cv=10)\r\n<\/code><\/pre>\n<h3>Pr\u00e9dire le tissu \u00e0 partir des donn\u00e9es d&rsquo;expression de g\u00e8nes<\/h3>\n<p>Maintenant pour le plaisir, je peux tenter de d\u00e9river un mod\u00e8le qui pr\u00e9dira le tissu de provenance de l&rsquo;\u00e9chantillon. Je dis pour le plaisir parce que je ne ferai pas de validation crois\u00e9e, je regarderai un seul mod\u00e8le, et parce qu&rsquo;il y a un nombre diff\u00e9rent de d&rsquo;\u00e9chantillons dans chaque cat\u00e9gorie de tissu. Une cat\u00e9gorie contient 1259 \u00e9chantillons alors qu&rsquo;une autre en contient 6. J&rsquo;aurais sans doute besoin d&rsquo;\u00e9valuer comment cela affecte le mod\u00e8le et de faire des changements en cons\u00e9quence.<\/p>\n<p>Mais juste pour le plaisir, il y a 31 tissus de plus haut niveau dans le jeu de donn\u00e9es, les deux plus repr\u00e9sent\u00e9s \u00e9tant \u00ab\u00a0Brain\u00a0\u00bb et \u00ab\u00a0Skin\u00a0\u00bb, respectivement 14.7% et 10.4% des \u00e9chantillons. En utilisant le m\u00eame code et la m\u00eame matrice de g\u00e8nes qu&rsquo;auparavant, en changeant seulement le vecteur Y qui contient les valeurs de la variable d\u00e9pendant \u00e0 pr\u00e9dire, j&rsquo;obtiens un bon mod\u00e8le qui a raison dans 99.3 % du temps. Il a fait 18 erreurs sur un total de 2567 pr\u00e9dictions. C&rsquo;est int\u00e9ressant de voir que parmi ces erreurs, un bon nombre implique des tissus f\u00e9minins. C&rsquo;est peut-\u00eatre d\u00fb au fait que les \u00e9chantillons f\u00e9minins sont sous-repr\u00e9sent\u00e9s dans le jeu de donn\u00e9es.<\/p>\n<p><center><\/p>\n<table border=\"1\" class='dataframe'>\n<thead>\n<tr>\n<th style=\"width: 107px;\">Pr\u00e9dite<\/th>\n<th style=\"width: 108px;\">R\u00e9elle<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"width: 107px;\">Stomach<\/td>\n<td style=\"width: 108px;\">Vagina<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Nerve<\/td>\n<td style=\"width: 108px;\">Adipose Tissue<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Esophagus<\/td>\n<td style=\"width: 108px;\">Stomach<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Colon<\/td>\n<td style=\"width: 108px;\">Small Intestine<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Esophagus<\/td>\n<td style=\"width: 108px;\">Stomach<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Esophagus<\/td>\n<td style=\"width: 108px;\">Stomach<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Colon<\/td>\n<td style=\"width: 108px;\">Esophagus<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Skin<\/td>\n<td style=\"width: 108px;\">Vagina<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Uterus<\/td>\n<td style=\"width: 108px;\">Fallopian Tube<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Adipose Tissue<\/td>\n<td style=\"width: 108px;\">Breast<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Ovary<\/td>\n<td style=\"width: 108px;\">Fallopian Tube<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Skin<\/td>\n<td style=\"width: 108px;\">nan<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Blood Vessel<\/td>\n<td style=\"width: 108px;\">Uterus<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Adipose Tissue<\/td>\n<td style=\"width: 108px;\">Stomach<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Stomach<\/td>\n<td style=\"width: 108px;\">Colon<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Esophagus<\/td>\n<td style=\"width: 108px;\">Stomach<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Heart<\/td>\n<td style=\"width: 108px;\">Blood Vessel<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 107px;\">Adipose Tissue<\/td>\n<td style=\"width: 108px;\">Fallopian Tube<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Table2<\/strong>. Erreurs de pr\u00e9diction faites par le mod\u00e8le.<br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lorsqu&rsquo;on travaille avec toutes sortes de donn\u00e9es, il arrive parfois que nous voulons pr\u00e9dire la valeur d&rsquo;une variable qui n&rsquo;est pas num\u00e9rique. Dans ces cas-l\u00e0, la r\u00e9gression logistique est tout \u00e0 fait appropri\u00e9e. On peut dire qu&rsquo;elle est s&rsquo;apparente \u00e0 une r\u00e9gression lin\u00e9aire sauf que la variable d\u00e9pendante est une cat\u00e9gorie. Vous vous souvenez de la fonction de la r\u00e9gression lin\u00e9aire o\u00f9 l&rsquo;on essaie d&rsquo;estimer les param\u00e8tres beta (les coefficients) qui s&rsquo;ajustent le mieux la droite \u00e0 nos donn\u00e9es: \\begin{equation} <a href=\"https:\/\/bioinfo.iric.ca\/fr\/regression-logistique-et-gtex\/\"> [&#8230;]<\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[42,26],"tags":[132,131,127,81],"class_list":["post-2966","post","type-post","status-publish","format-standard","hentry","category-biologie","category-langage-python","tag-ajustement-de-courbe","tag-apprentissage-automatique","tag-expression-de-genes","tag-python"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts\/2966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/comments?post=2966"}],"version-history":[{"count":13,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts\/2966\/revisions"}],"predecessor-version":[{"id":3275,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts\/2966\/revisions\/3275"}],"wp:attachment":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/media?parent=2966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/categories?post=2966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/tags?post=2966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}