{"id":3082,"date":"2026-09-07T00:33:46","date_gmt":"2026-09-07T00:33:46","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/comment-effectuer-test-adequation-chi-deux-python\/"},"modified":"2026-09-07T00:33:46","modified_gmt":"2026-09-07T00:33:46","slug":"comment-effectuer-test-adequation-chi-deux-python","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=comment-effectuer-test-adequation-chi-deux-python","title":{"rendered":"Comment effectuer un test d&rsquo;ad\u00e9quation du chi-deux en Python"},"content":{"rendered":"<p>Dans le champ de l&rsquo;analyse quantitative et de l&rsquo;inf\u00e9rence statistique, la confrontation entre des distributions empiriques et des mod\u00e8les th\u00e9oriques pr\u00e9dictifs constitue l&rsquo;un des piliers de la d\u00e9marche scientifique. Qu&rsquo;il s&rsquo;agisse d&rsquo;\u00e9valuer la conformit\u00e9 des donn\u00e9es d&rsquo;un essai clinique aux pr\u00e9dictions g\u00e9n\u00e9tiques mend\u00e9liennes, d&rsquo;analyser la r\u00e9partition des choix dans une t\u00e2che de d\u00e9cision comportementale ou de v\u00e9rifier l&rsquo;ad\u00e9quation d&rsquo;un \u00e9chantillon aux strates d&rsquo;une population parente, le chercheur doit disposer d&rsquo;outils rigoureux pour quantifier la divergence entre le r\u00e9el observ\u00e9 et l&rsquo;attendu probabiliste. Le test d&rsquo;ad\u00e9quation du chi-deux s&rsquo;impose historiquement et m\u00e9thodologiquement comme la proc\u00e9dure inf\u00e9rentielle de r\u00e9f\u00e9rence pour traiter ces probl\u00e9matiques appliqu\u00e9es aux variables qualitatives et discr\u00e8tes.<\/p>\n<p>L&rsquo;essor des \u00e9cosyst\u00e8mes informatiques pour la science des donn\u00e9es, domin\u00e9s par le langage Python et ses biblioth\u00e8ques sp\u00e9cialis\u00e9es telles que <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/scipy.org\/\">SciPy<\/a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/numpy.org\/\">NumPy<\/a> et <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/pandas.pydata.org\/\">Pandas<\/a>, a profond\u00e9ment transform\u00e9 la mise en \u0153uvre pratique de ces analyses. L&rsquo;ex\u00e9cution d&rsquo;un test statistique ne se r\u00e9sume plus \u00e0 une simple lecture de tables pr\u00e9calcul\u00e9es, mais s&rsquo;inscrit au sein d&rsquo;un pipeline complet comprenant le pr\u00e9traitement des donn\u00e9es, la validation programmatique des postulats d&rsquo;application, l&rsquo;estimation fine de la taille d&rsquo;effet, le calcul d&rsquo;intervalles de confiance par r\u00e9\u00e9chantillonnage et la restitution visuelle de haute pr\u00e9cision.<\/p>\n<p>Ce guide exhaustif a pour vocation d&rsquo;offrir une r\u00e9f\u00e9rence m\u00e9thodologique et computationnelle compl\u00e8te pour la r\u00e9alisation, l&rsquo;interpr\u00e9tation et la restitution du test d&rsquo;ad\u00e9quation du chi-deux en Python. En combinant formalisation math\u00e9matique rigoureuse, consid\u00e9rations \u00e9pist\u00e9mologiques, impl\u00e9mentations d&rsquo;algorithmes et analyses de cas appliqu\u00e9es, ce document s&rsquo;adresse aux chercheurs, analystes de donn\u00e9es et \u00e9tudiants avanc\u00e9s d\u00e9sireux de ma\u00eetriser les nuances conceptuelles et techniques de ce test fondamental.<\/p>\n<h2>1. Fondements th\u00e9oriques du test d&rsquo;ad\u00e9quation du chi-deux<\/h2>\n<p>L&rsquo;inf\u00e9rence statistique sur donn\u00e9es cat\u00e9gorielles repose sur la mod\u00e9lisation de fr\u00e9quences d&rsquo;apparition d&rsquo;\u00e9v\u00e9nements au sein de classes mutuellement exclusives. Avant d&rsquo;aborder l&rsquo;outillage algorithmique, il convient de circonscrire l&rsquo;origine \u00e9pist\u00e9mologique de cette \u00e9preuve d&rsquo;hypoth\u00e8se, de formaliser son syst\u00e8me d\u00e9ductif et de comprendre ses applications pr\u00e9f\u00e9rentielles en sciences humaines, sociales et exp\u00e9rimentales.<\/p>\n<h3>1.1 D\u00e9finition et utilit\u00e9 \u00e9pist\u00e9mologique<\/h3>\n<p>Le test d&rsquo;ad\u00e9quation du chi-deux (couramment d\u00e9sign\u00e9 sous l&rsquo;anglicisme <em>Goodness-of-Fit test<\/em>) a \u00e9t\u00e9 formalis\u00e9 \u00e0 l&rsquo;aube du XXe si\u00e8cle par le math\u00e9maticien et biostatisticien britannique <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Karl_Pearson\">Karl Pearson<\/a> dans un article fondateur publi\u00e9 en 1900 dans le <em>Philosophical Magazine<\/em>. Cette contribution a constitu\u00e9 une rupture paradigmatique majeure : elle a affranchi l&rsquo;analyse statistique de l&rsquo;obligation de pr\u00e9sumer syst\u00e9matiquement la normalit\u00e9 des distributions sous-jacentes, ouvrant la voie \u00e0 l&rsquo;analyse non param\u00e9trique et semi-param\u00e9trique des variables discr\u00e8tes.<\/p>\n<p>Sur le plan conceptuel, il est imp\u00e9ratif de distinguer avec clart\u00e9 le test d&rsquo;ad\u00e9quation du chi-deux du test d&rsquo;ind\u00e9pendance ou d&rsquo;homog\u00e9n\u00e9it\u00e9 du chi-deux. Si les deux proc\u00e9dures partagent le m\u00eame noyau math\u00e9matique asymptotique, leurs objectifs \u00e9pist\u00e9mologiques divergent radicalement. Le test d&rsquo;ind\u00e9pendance \u00e9value si deux variables qualitatives mesur\u00e9es sur une m\u00eame population pr\u00e9sentent une structure d&rsquo;association contingente. En revanche, le test d&rsquo;ad\u00e9quation op\u00e8re sur une seule variable cat\u00e9gorielle unidimensionnelle subdivis\u00e9e en <em>k<\/em> modalit\u00e9s. Son dessein exclusif consiste \u00e0 comparer la distribution d&rsquo;effectifs observ\u00e9e au sein d&rsquo;un \u00e9chantillon \u00e0 une distribution th\u00e9orique postul\u00e9e <em>a priori<\/em> par une th\u00e9orie scientifique, un mod\u00e8le physique ou une hypoth\u00e8se d&rsquo;\u00e9quiprobabilit\u00e9.<\/p>\n<p>L&rsquo;utilit\u00e9 de ce test est donc primordiale pour la validation ou l&rsquo;invalidation de mod\u00e8les probabilistes th\u00e9oriques. Dans les d\u00e9marches d\u00e9ductives, lorsqu&rsquo;un chercheur formule un mod\u00e8le g\u00e9n\u00e9rateur de donn\u00e9es \u2014 qu&rsquo;il s&rsquo;agisse d&rsquo;une distribution uniforme, multinomiale, binomiale ou discr\u00e9tis\u00e9e issue d&rsquo;une loi continue \u2014, le test de Pearson agit comme un censeur probabiliste mesurant si la d\u00e9viation des observations par rapport aux attentes du mod\u00e8le rel\u00e8ve d&rsquo;une simple fluctuation d&rsquo;\u00e9chantillonnage al\u00e9atoire ou d&rsquo;une erreur syst\u00e9matique de sp\u00e9cification th\u00e9orique.<\/p>\n<h3>1.2 Formulation des hypoth\u00e8ses statistiques<\/h3>\n<p>La m\u00e9canique inf\u00e9rentielle du test d&rsquo;ad\u00e9quation repose sur l&rsquo;affrontement rigoureux de deux hypoth\u00e8ses statistiques mutuellement exclusives et conjointement exhaustives, relatives aux proportions sous-jacentes de la population parente. Soit une variable nominale ou ordinale comportant <em>k<\/em> modalit\u00e9s distinctes. La distribution th\u00e9orique de r\u00e9f\u00e9rence est caract\u00e9ris\u00e9e par un vecteur de probabilit\u00e9s pr\u00e9\u00e9tabli :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\mathbf{p_0} = [p_{01}, p_{02}, dots, p_{0k}] \\quad \\text{a\\vec} \\quad \\sum_{i=1}^k p_{0i} = 1\">$$\\mathbf{p_0} = [p_{01}, p_{02}, dots, p_{0k}] \\quad \\text{a\\vec} \\quad \\sum_{i=1}^k p_{0i} = 1$$<\/span><\/p>\n<p>L&rsquo;hypoth\u00e8se nulle, not\u00e9e <em>H\u2080<\/em>, stipule que la distribution observ\u00e9e dans l&rsquo;\u00e9chantillon est parfaitement compatible avec la distribution de r\u00e9f\u00e9rence. Formellement, elle s&rsquo;\u00e9nonce comme l&rsquo;\u00e9galit\u00e9 stricte entre le vecteur des proportions r\u00e9elles de la population, not\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"\\mathbf{p}\">$\\mathbf{p}$<\/span>, et le vecteur th\u00e9orique cible :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"H_0 : p_i = p_{0i} \\quad \\forall i in {1, 2, dots, k}\">$$H_0 : p_i = p_{0i} \\quad \\forall i in {1, 2, dots, k}$$<\/span><\/p>\n<p>L&rsquo;hypoth\u00e8se alternative, not\u00e9e <em>H\u2081<\/em>, ne postule pas une direction particuli\u00e8re pour l&rsquo;ensemble des modalit\u00e9s, mais affirme qu&rsquo;au moins une des proportions s&rsquo;\u00e9carte significativement de sa valeur attendue sous <em>H\u2080<\/em> :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"H_1 : \\exists , i in {1, 2, dots, k} \\quad \\text{tel que} \\quad p_i \\neq p_{0i}\">$$H_1 : \\exists , i in {1, 2, dots, k} \\quad \\text{tel que} \\quad p_i \\neq p_{0i}$$<\/span><\/p>\n<p>La prise de d\u00e9cision est assujettie \u00e0 un risque d&rsquo;erreur de premi\u00e8re esp\u00e8ce, conventionnellement not\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"\\alpha\">$\\alpha$<\/span> (g\u00e9n\u00e9ralement fix\u00e9 \u00e0 0,05 dans la recherche empirique). Ce seuil d\u00e9limite la probabilit\u00e9 maximale tol\u00e9r\u00e9e de rejeter <em>H\u2080<\/em> alors qu&rsquo;elle est v\u00e9rifi\u00e9e dans la population. En m\u00e9thodologie empirique, la formulation <em>a priori<\/em> de ces hypoth\u00e8ses est une condition non n\u00e9gociable pour pr\u00e9venir les biais de confirmation et le <em>p-hacking<\/em>, garantissant que la mod\u00e9lisation th\u00e9orique n&rsquo;est pas r\u00e9ajust\u00e9e r\u00e9troactivement \u00e0 la lumi\u00e8re des donn\u00e9es collect\u00e9es.<\/p>\n<h3>1.3 Applications empiriques en psychologie et sciences du comportement<\/h3>\n<p>Les sciences du comportement et la psychologie exp\u00e9rimentale offrent un terreau particuli\u00e8rement fertile pour le test d&rsquo;ad\u00e9quation du chi-deux. Dans le domaine de la psychom\u00e9trie, les chercheurs l&#8217;emploient fr\u00e9quemment pour v\u00e9rifier l&rsquo;uniformit\u00e9 des r\u00e9ponses apport\u00e9es \u00e0 des items polytomiques (comme les \u00e9chelles de Likert) en l&rsquo;absence de stimulus polarisant. Cette v\u00e9rification permet de s&rsquo;assurer qu&rsquo;aucun biais d&rsquo;attractivit\u00e9 intrins\u00e8que ou de positionnement spatial n&rsquo;affecte pr\u00e9f\u00e9rentiellement une modalit\u00e9 de r\u00e9ponse.<\/p>\n<p>Dans les paradigmes de choix forc\u00e9 en neuropsychologie cognitive ou en \u00e9conomie comportementale, le test permet d&rsquo;analyser la conformit\u00e9 des fr\u00e9quences de s\u00e9lection d&rsquo;options d\u00e9cisionnelles face \u00e0 une situation de neutralit\u00e9 informationnelle. Si un participant ou un groupe exp\u00e9rimental doit choisir entre quatre alternatives \u00e9quiprobables, le test d&rsquo;ad\u00e9quation d\u00e9termine si la proportion de choix observ\u00e9e d\u00e9vie du seuil th\u00e9orique de 25 % par option, r\u00e9v\u00e9lant ainsi l&rsquo;existence d&rsquo;une heuristique cognitive ou d&rsquo;une pr\u00e9f\u00e9rence implicite non consciente.<\/p>\n<p>Enfin, le contr\u00f4le m\u00e9thodologique de la repr\u00e9sentativit\u00e9 de l&rsquo;\u00e9chantillon constitue une application standard. En confrontant les distributions sociod\u00e9mographiques (tranches d&rsquo;\u00e2ge, cat\u00e9gories socio-professionnelles, parit\u00e9 de genre) d&rsquo;une cohorte d&rsquo;\u00e9tude aux statistiques de recensement national fournies par les instituts officiels, le test d&rsquo;ad\u00e9quation met en exergue les biais de recrutement ou les ph\u00e9nom\u00e8nes d&rsquo;attrition diff\u00e9rentielle au sein des recherches longitudinales.<\/p>\n<h2>2. Cadre math\u00e9matique et propri\u00e9t\u00e9s statistiques du test<\/h2>\n<p>Comprendre le fonctionnement intime du test n\u00e9cessite d&rsquo;analyser sa d\u00e9rivation math\u00e9matique, la structure de sa loi limite et les m\u00e9canismes sous-tendant le calcul des degr\u00e9s de libert\u00e9 et de la valeur critique.<\/p>\n<h3>2.1 D\u00e9rivation de la statistique du chi-deux<\/h3>\n<p>La statistique d&rsquo;ad\u00e9quation de Pearson quantifie l&rsquo;\u00e9cart global entre les effectifs observ\u00e9s au sein de l&rsquo;\u00e9chantillon, not\u00e9s <span class=\"arabpsy-math-inline\" data-latex=\"O_i\">$O_i$<\/span>, et les effectifs th\u00e9oriques attendus sous l&rsquo;hypoth\u00e8se nulle, not\u00e9s <span class=\"arabpsy-math-inline\" data-latex=\"E_i\">$E_i$<\/span>, pour chaque modalit\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"i in {1, 2, dots, k}\">$i in {1, 2, dots, k}$<\/span>. Pour un \u00e9chantillon de taille totale <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span>, l&rsquo;effectif attendu pour la cat\u00e9gorie <span class=\"arabpsy-math-inline\" data-latex=\"i\">$i$<\/span> est le produit de la taille de l&rsquo;\u00e9chantillon par la probabilit\u00e9 th\u00e9orique associ\u00e9e : <span class=\"arabpsy-math-inline\" data-latex=\"E_i = N \\times p_{0i}\">$E_i = N \\times p_{0i}$<\/span>.<\/p>\n<p>L&rsquo;\u00e9quation formelle de la statistique de test, not\u00e9e <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2\">$\\chi^2$<\/span>, s&rsquo;exprime comme la somme des \u00e9carts quadratiques standardis\u00e9s :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\chi^2 = \\sum_{i=1}^k \\frac{(O_i - E_i)^2}{E_i}\">$$\\chi^2 = \\sum_{i=1}^k \\frac{(O_i &#8211; E_i)^2}{E_i}$$<\/span><\/p>\n<p>Le num\u00e9rateur <span class=\"arabpsy-math-inline\" data-latex=\"(O_i - E_i)^2\">$(O_i &#8211; E_i)^2$<\/span> mesure la d\u00e9viation absolue \u00e9lev\u00e9e au carr\u00e9, neutralisant ainsi les signes pour emp\u00eacher l&rsquo;annulation mutuelle des \u00e9carts positifs et n\u00e9gatifs (dont la somme brute <span class=\"arabpsy-math-inline\" data-latex=\"\\sum (O_i - E_i)\">$\\sum (O_i &#8211; E_i)$<\/span> est obligatoirement nulle lorsque <span class=\"arabpsy-math-inline\" data-latex=\"\\sum O_i = \\sum E_i = N\">$\\sum O_i = \\sum E_i = N$<\/span>). Le d\u00e9nominateur <span class=\"arabpsy-math-inline\" data-latex=\"E_i\">$E_i$<\/span> op\u00e8re une standardisation par la variance attendue. Sous l&rsquo;hypoth\u00e8se d&rsquo;une loi multinomiale sous-jacente, le nombre d&rsquo;observations dans la cellule <span class=\"arabpsy-math-inline\" data-latex=\"i\">$i$<\/span> suit approximativement une loi binomiale de param\u00e8tres <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"p_{0i}\">$p_{0i}$<\/span>, dont la variance th\u00e9orique sous distribution asymptotique simple est proportionnelle \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"E_i\">$E_i$<\/span>.<\/p>\n<p>Sous la validit\u00e9 de l&rsquo;hypoth\u00e8se nulle et lorsque la taille de l&rsquo;\u00e9chantillon tend vers l&rsquo;infini (<span class=\"arabpsy-math-inline\" data-latex=\"N to \\infty\">$N to \\infty$<\/span>), le th\u00e9or\u00e8me central limite combin\u00e9 aux d\u00e9veloppements multivari\u00e9s d\u00e9montre que cette somme de variables al\u00e9atoires converge en loi vers une distribution continue du chi-deux, caract\u00e9ris\u00e9e par une fonction de densit\u00e9 asym\u00e9trique positive d\u00e9finie sur <span class=\"arabpsy-math-inline\" data-latex=\"[0, +\\infty[\">$[0, +\\infty[$<\/span>.<\/p>\n<h3>2.2 Notion et calcul des degr\u00e9s de libert\u00e9<\/h3>\n<p>Le param\u00e8tre structural fondamental de la loi du chi-deux est son nombre de degr\u00e9s de libert\u00e9, commun\u00e9ment abr\u00e9g\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"\\nu\">$\\nu$<\/span> ou <em>ddl<\/em> (en anglais, <em>degrees of freedom<\/em> ou <em>df<\/em>). Dans le cadre standard d&rsquo;un test d&rsquo;ad\u00e9quation sur <span class=\"arabpsy-math-inline\" data-latex=\"k\">$k$<\/span> cat\u00e9gories sans estimation de param\u00e8tres inconnus, le calcul des degr\u00e9s de libert\u00e9 ob\u00e9it \u00e0 la relation suivante :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\nu = k - 1\">$$\\nu = k &#8211; 1$$<\/span><\/p>\n<p>La soustraction d&rsquo;une unit\u00e9 d\u00e9coule de la contrainte lin\u00e9aire intrins\u00e8que impos\u00e9e aux effectifs th\u00e9oriques : la somme des effectifs attendus doit imp\u00e9rativement \u00eatre \u00e9gale \u00e0 la taille totale de l&rsquo;\u00e9chantillon <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span> (<span class=\"arabpsy-math-inline\" data-latex=\"\\sum_{i=1}^k E_i = N\">$\\sum_{i=1}^k E_i = N$<\/span>). Par cons\u00e9quent, d\u00e8s lors que les effectifs de <span class=\"arabpsy-math-inline\" data-latex=\"k - 1\">$k &#8211; 1$<\/span> cellules sont fix\u00e9s, l&rsquo;effectif de la derni\u00e8re cellule est math\u00e9matiquement d\u00e9termin\u00e9 et ne dispose d&rsquo;aucune libert\u00e9 de variation ind\u00e9pendante.<\/p>\n<p>Toutefois, une complication math\u00e9matique survient lorsque les probabilit\u00e9s th\u00e9oriques <span class=\"arabpsy-math-inline\" data-latex=\"p_{0i}\">$p_{0i}$<\/span> ne sont pas pr\u00e9d\u00e9finies de fa\u00e7on purement exog\u00e8ne, mais n\u00e9cessitent l&rsquo;estimation de <span class=\"arabpsy-math-inline\" data-latex=\"m\">$m$<\/span> param\u00e8tres de population \u00e0 partir des donn\u00e9es de l&rsquo;\u00e9chantillon lui-m\u00eame (par exemple, lors du test d&rsquo;ajustement \u00e0 une distribution de Poisson dont le param\u00e8tre <span class=\"arabpsy-math-inline\" data-latex=\"lambda\">$lambda$<\/span> est estim\u00e9 par la moyenne observ\u00e9e). Dans ce cas, les degr\u00e9s de libert\u00e9 doivent \u00eatre ajust\u00e9s \u00e0 la baisse :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\nu = k - 1 - m\">$$\\nu = k &#8211; 1 &#8211; m$$<\/span><\/p>\n<p>Le nombre de degr\u00e9s de libert\u00e9 conditionne directement la forme g\u00e9om\u00e9trique de la distribution th\u00e9orique du chi-deux. Pour <span class=\"arabpsy-math-inline\" data-latex=\"\\nu = 1\">$\\nu = 1$<\/span> ou <span class=\"arabpsy-math-inline\" data-latex=\"\\nu = 2\">$\\nu = 2$<\/span>, la densit\u00e9 est strictement d\u00e9croissante avec un pic \u00e0 l&rsquo;origine. Pour <span class=\"arabpsy-math-inline\" data-latex=\"\\nu &gt; 2\">$\\nu > 2$<\/span>, la courbe devient unimodale et pr\u00e9sente une asym\u00e9trie positive marqu\u00e9e, laquelle s&rsquo;att\u00e9nue progressivement au fur et \u00e0 mesure que <span class=\"arabpsy-math-inline\" data-latex=\"\\nu\">$\\nu$<\/span> cro\u00eet, la distribution se rapprochant asymptotiquement d&rsquo;une loi normale en vertu du th\u00e9or\u00e8me central limite pour des valeurs de <span class=\"arabpsy-math-inline\" data-latex=\"\\nu\">$\\nu$<\/span> \u00e9lev\u00e9es.<\/p>\n<h3>2.3 Calcul et interpr\u00e9tation de la p-valeur<\/h3>\n<p>La statistique <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2\">$\\chi^2$<\/span> calcul\u00e9e sur l&rsquo;\u00e9chantillon repr\u00e9sente une mesure empirique de discordance. Plus sa valeur est \u00e9lev\u00e9e, plus l&rsquo;\u00e9cart entre la r\u00e9alit\u00e9 observ\u00e9e et le mod\u00e8le th\u00e9orique est substantiel. La valeur <span class=\"arabpsy-math-inline\" data-latex=\"p\">$p$<\/span> (ou p-valeur) d\u00e9signe la probabilit\u00e9 conditionnelle, calcul\u00e9e sous l&rsquo;hypoth\u00e8se nulle <span class=\"arabpsy-math-inline\" data-latex=\"H_0\">$H_0$<\/span>, d&rsquo;obtenir une statistique de test au moins aussi extr\u00eame que la valeur empirique observ\u00e9e <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2_{obs}\">$\\chi^2_{obs}$<\/span> :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"p = P(\\chi^2 ge \\chi^2_{obs} mid H_0) = \\int_{\\chi^2_{obs}}^{+\\infty} f_{\\chi^2}(u; \\nu) , du\">$$p = P(\\chi^2 ge \\chi^2_{obs} mid H_0) = \\int_{\\chi^2_{obs}}^{+\\infty} f_{\\chi^2}(u; \\nu) , du$$<\/span><\/p>\n<p>o\u00f9 <span class=\"arabpsy-math-inline\" data-latex=\"f_{\\chi^2}(u; \\nu)\">$f_{\\chi^2}(u; \\nu)$<\/span> repr\u00e9sente la fonction de densit\u00e9 de probabilit\u00e9 de la loi du chi-deux \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"\\nu\">$\\nu$<\/span> degr\u00e9s de libert\u00e9 :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"f_{\\chi^2}(u; \\nu) = \\frac{1}{2^{nu\/2} \\Gamma(nu\/2)} u^{(nu\/2) - 1} e^{-u\/2} \\quad \\text{pour } u &gt; 0\">$$f_{\\chi^2}(u; \\nu) = \\frac{1}{2^{nu\/2} \\Gamma(nu\/2)} u^{(nu\/2) &#8211; 1} e^{-u\/2} \\quad \\text{pour } u > 0$$<\/span><\/p>\n<p>La r\u00e8gle de d\u00e9cision binaire s&rsquo;\u00e9tablit selon la comparaison avec le seuil <span class=\"arabpsy-math-inline\" data-latex=\"\\alpha\">$\\alpha$<\/span> :<\/p>\n<ul>\n<li>Si <span class=\"arabpsy-math-inline\" data-latex=\"p le \\alpha\">$p le \\alpha$<\/span>, l&rsquo;\u00e9cart observ\u00e9 est jug\u00e9 trop improbable pour \u00eatre imputable au seul hasard d&rsquo;\u00e9chantillonnage ; on rejette formellement l&rsquo;hypoth\u00e8se nulle <span class=\"arabpsy-math-inline\" data-latex=\"H_0\">$H_0$<\/span> au profit de <span class=\"arabpsy-math-inline\" data-latex=\"H_1\">$H_1$<\/span>.<\/li>\n<li>Si <span class=\"arabpsy-math-inline\" data-latex=\"p &gt; \\alpha\">$p > \\alpha$<\/span>, les donn\u00e9es ne fournissent pas de preuves suffisantes pour rejeter le mod\u00e8le ; on conserve l&rsquo;hypoth\u00e8se nulle, ou plus exactement, on \u00e9choue \u00e0 la rejeter.<\/li>\n<\/ul>\n<p>Il est \u00e9pist\u00e9mologiquement crucial de ne pas r\u00e9duire l&rsquo;analyse \u00e0 cette dichotomie simpliste. Une p-valeur n&rsquo;indique en aucun cas la probabilit\u00e9 que <span class=\"arabpsy-math-inline\" data-latex=\"H_0\">$H_0$<\/span> soit vraie dans l&rsquo;absolu, pas plus qu&rsquo;elle ne renseigne sur l&rsquo;ampleur clinique ou pratique de la d\u00e9viation. Avec un \u00e9chantillon massif, un \u00e9cart trivial sans la moindre port\u00e9e scientifique produira une p-valeur infinit\u00e9simale, soulignant la n\u00e9cessit\u00e9 d&rsquo;adjoindre syst\u00e9matiquement des mesures de taille d&rsquo;effet \u00e0 l&rsquo;analyse inf\u00e9rentielle.<\/p>\n<h2>3. Conditions d&rsquo;application et postulats m\u00e9thodologiques<\/h2>\n<p>L&rsquo;utilisation valide du test d&rsquo;ad\u00e9quation du chi-deux de Pearson est conditionn\u00e9e par le respect scrupuleux d&rsquo;un ensemble de postulats probabilistes et m\u00e9thodologiques. La violation de ces pr\u00e9requis expose l&rsquo;analyste \u00e0 des distorsions s\u00e9v\u00e8res du taux d&rsquo;erreur de premi\u00e8re esp\u00e8ce et \u00e0 des conclusions erron\u00e9es.<\/p>\n<h3>3.1 \u00c9chantillonnage et ind\u00e9pendance des observations<\/h3>\n<p>Le postulat directeur le plus imp\u00e9rieux concerne l&rsquo;ind\u00e9pendance statistique absolue des unit\u00e9s d&rsquo;observation composant l&rsquo;\u00e9chantillon. Chaque unit\u00e9 exp\u00e9rimentale (qu&rsquo;il s&rsquo;agisse d&rsquo;un participant, d&rsquo;un \u00e9v\u00e9nement ou d&rsquo;un pr\u00e9l\u00e8vement) ne doit contribuer qu&rsquo;une seule et unique fois \u00e0 une seule cellule du tableau de distribution. En d&rsquo;autres termes, la somme totale des fr\u00e9quences observ\u00e9es doit \u00eatre strictement \u00e9gale au nombre d&rsquo;unit\u00e9s ind\u00e9pendantes observ\u00e9es (<span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span>).<\/p>\n<p>Ce postulat proscrit formellement l&rsquo;application du test de Pearson sur des mesures r\u00e9p\u00e9t\u00e9es, des conceptions exp\u00e9rimentales intra-sujets ou des donn\u00e9es longitudinales o\u00f9 le m\u00eame individu est \u00e9valu\u00e9 \u00e0 travers plusieurs conditions temporelles ou contextuelles. De m\u00eame, les donn\u00e9es hi\u00e9rarchiques ou group\u00e9es pr\u00e9sentant une autocorr\u00e9lation intraclasse (par exemple, des \u00e9l\u00e8ves au sein d&rsquo;une m\u00eame classe d&rsquo;\u00e9cole) violent ce principe d&rsquo;ind\u00e9pendance.<\/p>\n<p>L&rsquo;impact d&rsquo;une violation de l&rsquo;ind\u00e9pendance est d\u00e9l\u00e9t\u00e8re : elle provoque une sous-estimation syst\u00e9matique de la variance d&rsquo;\u00e9chantillonnage r\u00e9elle, ce qui gonfle artificiellement la valeur de la statistique <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2\">$\\chi^2$<\/span> et conduit \u00e0 un taux d&rsquo;erreur de type I bien sup\u00e9rieur au seuil nominal <span class=\"arabpsy-math-inline\" data-latex=\"\\alpha\">$\\alpha$<\/span>. En amont de toute manipulation sous Python, le chercheur doit valider la conception exp\u00e9rimentale ayant pr\u00e9sid\u00e9 \u00e0 la collecte.<\/p>\n<h3>3.2 Nature des variables et structure des cat\u00e9gories<\/h3>\n<p>Le test d&rsquo;ad\u00e9quation du chi-deux s&rsquo;applique exclusivement \u00e0 des donn\u00e9es de comptage (fr\u00e9quences absolues enti\u00e8res). Il est totalement inappropri\u00e9 pour traiter des pourcentages, des proportions normalis\u00e9es, des scores continus ou des moyennes pr\u00e9calcul\u00e9es. La variable d&rsquo;int\u00e9r\u00eat doit \u00eatre de nature cat\u00e9gorielle, mesur\u00e9e \u00e0 un niveau d&rsquo;\u00e9chelle nominal ou ordinal.<\/p>\n<p>Par ailleurs, la partition de l&rsquo;espace d&rsquo;\u00e9chantillonnage doit r\u00e9pondre \u00e0 deux crit\u00e8res fondamentaux :<\/p>\n<ul>\n<li><strong>L&rsquo;exhaustivit\u00e9<\/strong> : l&rsquo;ensemble des modalit\u00e9s propos\u00e9es doit couvrir l&rsquo;int\u00e9gralit\u00e9 des issues possibles. Aucune observation ne peut \u00eatre laiss\u00e9e sans cat\u00e9gorie d&rsquo;attribution.<\/li>\n<li><strong>La disjonction stricte<\/strong> : les modalit\u00e9s doivent \u00eatre mutuellement exclusives. Une observation ne peut en aucun cas \u00eatre assign\u00e9e simultan\u00e9ment \u00e0 deux cat\u00e9gories distinctes.<\/li>\n<\/ul>\n<p>Le chevauchement cat\u00e9goriel ruine la structure probabiliste multinomiale sous-jacente. Enfin, le choix du d\u00e9coupage cat\u00e9goriel ne doit pas \u00eatre guid\u00e9 par une analyse exploratoire opportuniste cherchant \u00e0 maximiser ou minimiser les d\u00e9viations statistiques, mais doit \u00eatre ancr\u00e9 dans des consid\u00e9rations th\u00e9oriques pr\u00e9alables \u00e0 la collecte des donn\u00e9es.<\/p>\n<h3>3.3 Crit\u00e8re de taille d&rsquo;\u00e9chantillon et r\u00e8gle de Cochran<\/h3>\n<p>Puisque la statistique de Pearson ne suit la distribution du chi-deux que de fa\u00e7on asymptotique, l&rsquo;approximation continue n&rsquo;est valide que si la taille de l&rsquo;\u00e9chantillon est suffisante au sein de chaque cellule. Lorsque les effectifs sont trop restreints, la distribution discr\u00e8te de la statistique s&rsquo;\u00e9carte notablement de la courbe th\u00e9orique continue, biaisant la probabilit\u00e9 d&rsquo;erreur associ\u00e9e.<\/p>\n<p>Pour r\u00e9gir cette contrainte, la litt\u00e9rature applique majoritairement les crit\u00e8res formul\u00e9s par le statisticien <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/William_Gemmell_Cochran\">William G. Cochran<\/a> en 1952 et 1954 :<\/p>\n<ul>\n<li>Aucune cellule th\u00e9orique ne doit comporter un effectif attendu strictement inf\u00e9rieur \u00e0 1 (<span class=\"arabpsy-math-inline\" data-latex=\"E_i ge 1 \\quad \\forall i\">$E_i ge 1 \\quad \\forall i$<\/span>).<\/li>\n<li>Au moins 80 % des cellules du mod\u00e8le doivent pr\u00e9senter un effectif th\u00e9orique attendu sup\u00e9rieur ou \u00e9gal \u00e0 5 (<span class=\"arabpsy-math-inline\" data-latex=\"E_i ge 5\">$E_i ge 5$<\/span>).<\/li>\n<\/ul>\n<p>Il est fondamental d&rsquo;insister sur le fait que cette r\u00e8gle de Cochran s&rsquo;applique <em>exclusivement aux effectifs attendus (<span class=\"arabpsy-math-inline\" data-latex=\"E_i\">$E_i$<\/span>)<\/em>, et en aucun cas aux effectifs empiriquement observ\u00e9s (<span class=\"arabpsy-math-inline\" data-latex=\"O_i\">$O_i$<\/span>). Il est tout \u00e0 fait recevable qu&rsquo;une cellule observ\u00e9e pr\u00e9sente une valeur de 0 ou 1, pourvu que son effectif attendu sous l&rsquo;hypoth\u00e8se th\u00e9orique satisfasse au crit\u00e8re num\u00e9rique. Lorsque ce postulat est transgress\u00e9, les alternatives m\u00e9thodologiques s&rsquo;imposent : regroupement logique de modalit\u00e9s adjacentes, recours \u00e0 des tests exacts multinomiaux ou mod\u00e9lisation par randomisation de Monte Carlo.<\/p>\n<h2>4. Environnement de calcul Python et \u00e9cosyst\u00e8me scientifique<\/h2>\n<p>L&rsquo;impl\u00e9mentation contemporaine de l&rsquo;analyse quantitative exige un environnement de calcul stable, modulaire et hautement reproductible. L&rsquo;\u00e9cosyst\u00e8me Python offre des biblioth\u00e8ques scientifiques sp\u00e9cialis\u00e9es qui interagissent harmonieusement pour g\u00e9rer l&rsquo;int\u00e9gralit\u00e9 de la cha\u00eene analytique.<\/p>\n<h3>4.1 Configuration de l&rsquo;environnement de recherche<\/h3>\n<p>Pour garantir l&rsquo;int\u00e9grit\u00e9 et la reproductibilit\u00e9 des calculs scientifiques, il est imp\u00e9ratif d&rsquo;isoler l&rsquo;environnement d&rsquo;ex\u00e9cution \u00e0 l&rsquo;aide d&rsquo;outils de virtualisation d&rsquo;environnement tels que <code>venv<\/code> ou <code>conda<\/code>. Cette approche neutralise les conflits de versions entre packages et garantit que les scripts d&rsquo;analyse demeurent fonctionnels dans le temps.<\/p>\n<p>L&rsquo;installation de la pile scientifique \u00e9l\u00e9mentaire d\u00e9di\u00e9e aux calculs inf\u00e9rentiels s&rsquo;effectue via le gestionnaire standard de paquets de Python :<\/p>\n<p><code>pip install numpy scipy pandas statsmodels matplotlib seaborn<\/code><\/p>\n<p>L&rsquo;int\u00e9gration de ces outils au sein de carnets num\u00e9riques interactifs tels que Jupyter Notebooks ou JupyterLab constitue le standard de la science ouverte. Les carnets permettent de lier organiquement le code ex\u00e9cutable, les sorties statistiques, les visualisations graphiques vectorielles et le texte explicatif r\u00e9dig\u00e9 en Markdown, consolidant ainsi la tra\u00e7abilit\u00e9 des d\u00e9cisions analytiques.<\/p>\n<h3>4.2 Pr\u00e9sentation du module scipy.stats<\/h3>\n<p>Le module <code>scipy.stats<\/code> constitue le c\u0153ur n\u00e9vralgique du calcul statistique en Python. Il regroupe un ensemble exhaustif de distributions probabilistes continues et discr\u00e8tes, ainsi qu&rsquo;une biblioth\u00e8que de tests inf\u00e9rentiels param\u00e9triques et non param\u00e9triques. Pour le test d&rsquo;ad\u00e9quation du chi-deux, la fonction centrale est <code>scipy.stats.chisquare<\/code>.<\/p>\n<p>Il importe de distinguer avec pr\u00e9cision <code>scipy.stats.chisquare<\/code> de la fonction <code>scipy.stats.chi2_contingency<\/code>. Alors que cette derni\u00e8re est strictement r\u00e9serv\u00e9e aux tableaux de contingence bidimensionnels pour les tests d&rsquo;ind\u00e9pendance ou d&rsquo;homog\u00e9n\u00e9it\u00e9 (calculant automatiquement les marges matricielles), <code>chisquare<\/code> est d\u00e9di\u00e9e aux vecteurs unidimensionnels pour tester l&rsquo;ad\u00e9quation d&rsquo;un \u00e9chantillon \u00e0 une loi sp\u00e9cifi\u00e9e.<\/p>\n<p>La signature de base de la fonction est la suivante :<\/p>\n<p><code>scipy.stats.chisquare(f_obs, f_exp=None, ddof=0, axis=0)<\/code><\/p>\n<p>Elle retourne un objet nomm\u00e9 <code>Power_divergenceResult<\/code> contenant deux attributs essentiels : la statistique scalaire <code>statistic<\/code> et la probabilit\u00e9 <code>pvalue<\/code> associ\u00e9e.<\/p>\n<h3>4.3 Optimisation des structures de donn\u00e9es avec NumPy et Pandas<\/h3>\n<p>Dans un flux d&rsquo;analyse de donn\u00e9es classique, les observations brutes sont charg\u00e9es et manipul\u00e9es via la biblioth\u00e8que Pandas sous forme de <code>DataFrame<\/code>. Pandas facilite l&rsquo;ingestion de fichiers structur\u00e9s (CSV, Parquet, bases SQL) et fournit des m\u00e9thodes d&rsquo;agr\u00e9gation d&rsquo;une efficacit\u00e9 redoutable, notamment <code>value_counts()<\/code> et <code>groupby()<\/code>.<\/p>\n<p>Toutefois, pour les op\u00e9rations d&rsquo;alg\u00e8bre lin\u00e9aire sous-jacentes et le passage de param\u00e8tres aux fonctions de SciPy, les structures <code>ndarray<\/code> de NumPy sont privil\u00e9gi\u00e9es. La vectorisation native de NumPy permet d&rsquo;ex\u00e9cuter des transformations arithm\u00e9tiques complexes sur des millions d&rsquo;observations sans recourir \u00e0 des boucles it\u00e9ratives lentes en Python pur.<\/p>\n<p>La d\u00e9tection et le traitement des donn\u00e9es manquantes (<code>NaN<\/code>, <code>None<\/code>) doivent \u00eatre op\u00e9r\u00e9s rigoureusement en amont : la pr\u00e9sence d&rsquo;une seule valeur manquante non filtr\u00e9e dans une colonne cat\u00e9gorielle peut corrompre la taille totale d&rsquo;\u00e9chantillon <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span> et invalider l&rsquo;exhaustivit\u00e9 requise des cat\u00e9gories.<\/p>\n<h2>5. Structuration et pr\u00e9paration des vecteurs de donn\u00e9es<\/h2>\n<p>L&rsquo;exactitude des calculs inf\u00e9rentiels d\u00e9pend de la conformit\u00e9 structurelle des vecteurs transmis au moteur statistique. Cette phase de pr\u00e9paration impose des r\u00e8gles d&rsquo;alignement dimensionnel et de contr\u00f4le de coh\u00e9rence rigoureuses.<\/p>\n<h3>5.1 Constitution du vecteur des fr\u00e9quences observ\u00e9es (f_obs)<\/h3>\n<p>Le vecteur des effectifs observ\u00e9s, d\u00e9sign\u00e9 conventionnellement par l&rsquo;argument <code>f_obs<\/code> dans SciPy, doit contenir les fr\u00e9quences absolues issues du d\u00e9nombrement des modalit\u00e9s de la variable d&rsquo;\u00e9tude. Ce vecteur peut \u00eatre instanci\u00e9 sous la forme d&rsquo;une liste Python standard ou d&rsquo;un tableau unidimensionnel <code>numpy.ndarray<\/code>.<\/p>\n<p>Lorsqu&rsquo;on extrait ce vecteur depuis un <code>DataFrame<\/code> Pandas, il est crucial d&rsquo;ordonner explicitement les cat\u00e9gories. Par exemple, si l&rsquo;on \u00e9tudie une variable ordinale \u00e0 cinq niveaux, la m\u00e9thode <code>value_counts()<\/code> doit \u00eatre compl\u00e9t\u00e9e par un tri sur l&rsquo;index ou par l&rsquo;application pr\u00e9alable d&rsquo;un type de donn\u00e9es cat\u00e9goriel ordonn\u00e9 (<code>CategoricalDtype<\/code>) pour \u00e9viter tout m\u00e9lange d&rsquo;indices lors des comparaisons ult\u00e9rieures :<\/p>\n<p><code>f_obs = df['modalite'].value_counts().sort_index().to_numpy()<\/code><\/p>\n<p>Il est imp\u00e9ratif de s&rsquo;assurer que les valeurs contenues sont des entiers positifs ou nuls. L&rsquo;injection d&rsquo;un effectif n\u00e9gatif d\u00e9clenche une violation fondamentale des axiomes de Kolmogorov r\u00e9gissant les probabilit\u00e9s.<\/p>\n<h3>5.2 D\u00e9finition et calcul du vecteur des fr\u00e9quences attendues (f_exp)<\/h3>\n<p>Le vecteur des fr\u00e9quences attendues, transmis via l&rsquo;argument <code>f_exp<\/code>, sp\u00e9cifie le mod\u00e8le th\u00e9orique sous <span class=\"arabpsy-math-inline\" data-latex=\"H_0\">$H_0$<\/span>. Si le param\u00e8tre <code>f_exp<\/code> est omis lors de l&rsquo;appel \u00e0 <code>scipy.stats.chisquare<\/code>, la fonction assume par d\u00e9faut une hypoth\u00e8se d&rsquo;\u00e9quiprobabilit\u00e9 stricte (distribution uniforme), attribuant automatiquement \u00e0 chaque cellule la moyenne arithm\u00e9tique globale :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"E_i = \\frac{1}{k} \\sum_{j=1}^k O_j = \\frac{N}{k}\">$$E_i = \\frac{1}{k} \\sum_{j=1}^k O_j = \\frac{N}{k}$$<\/span><\/p>\n<p>En revanche, d\u00e8s lors que l&rsquo;hypoth\u00e8se de recherche postule une distribution asym\u00e9trique personnalis\u00e9e, le chercheur doit construire explicitement ce vecteur. Les proportions th\u00e9oriques <span class=\"arabpsy-math-inline\" data-latex=\"p_{0i}\">$p_{0i}$<\/span> doivent imp\u00e9rativement \u00eatre converties en effectifs absolus en les multipliant par la taille totale de l&rsquo;\u00e9chantillon <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span> :<\/p>\n<p><code>proportions_theoriques = np.array([0.10, 0.20, 0.40, 0.30])<\/code><br \/>\n<code>f_exp = proportions_theoriques * np.sum(f_obs)<\/code><\/p>\n<p>SciPy accepte que le vecteur <code>f_exp<\/code> contienne des nombres r\u00e9els \u00e0 virgule flottante (les effectifs th\u00e9oriques n&rsquo;\u00e9tant que tr\u00e8s rarement des entiers parfaits). Cependant, la pr\u00e9servation de la pr\u00e9cision num\u00e9rique en virgule flottante (standard IEEE 754) est primordiale pour \u00e9viter l&rsquo;introduction d&rsquo;artefacts d&rsquo;arrondi lors du calcul de la statistique de test.<\/p>\n<h3>5.3 Contr\u00f4les pr\u00e9alables de coh\u00e9rence des donn\u00e9es<\/h3>\n<p>Avant d&rsquo;initier le traitement inf\u00e9rentiel, une routine d&rsquo;assertions pr\u00e9-analytiques doit \u00eatre impl\u00e9ment\u00e9e sous Python afin de s\u00e9curiser l&rsquo;int\u00e9grit\u00e9 des op\u00e9rations. Trois v\u00e9rifications \u00e9l\u00e9mentaires s&rsquo;imposent :<\/p>\n<p>En premier lieu, l&rsquo;\u00e9galit\u00e9 des masses totales : la somme des effectifs observ\u00e9s doit \u00eatre strictement \u00e9gale \u00e0 la somme des effectifs attendus, \u00e0 une tol\u00e9rance num\u00e9rique pr\u00e8s (<span class=\"arabpsy-math-inline\" data-latex=\"\\approx 10^{-7}\">$\\approx 10^{-7}$<\/span>). Dans les versions r\u00e9centes de SciPy, si <span class=\"arabpsy-math-inline\" data-latex=\"\\sum f_obs \\neq \\sum f_\\exp\">$\\sum f_obs \\neq \\sum f_\\exp$<\/span>, la fonction ajuste proportionnellement les valeurs de <code>f_exp<\/code>, mais une telle divergence signale le plus souvent une erreur de sp\u00e9cification de la part du chercheur qu&rsquo;il convient d&rsquo;intercepter imm\u00e9diatement.<\/p>\n<p>En deuxi\u00e8me lieu, la v\u00e9rification dimensionnelle : la longueur du vecteur <code>f_obs<\/code> doit co\u00efncider rigoureusement avec celle de <code>f_exp<\/code>, sous peine de d\u00e9clencher une exception de non-conformit\u00e9 dimensionnelle (<code>ValueError<\/code>).<\/p>\n<p>En troisi\u00e8me lieu, l&rsquo;\u00e9valuation automatique de la r\u00e8gle de Cochran : un simple filtre bool\u00e9en NumPy permet de quantifier la part des cellules th\u00e9oriques ne satisfaisant pas au seuil critique de 5 unit\u00e9s :<\/p>\n<p><code>cellules_invalides = np.sum(f_exp < 5)<\/code><br \/>\n<code>pourcentage_invalide = (cellules_invalides \/ len(f_exp)) * 100<\/code><\/p>\n<p>Si ce pourcentage exc\u00e8de 20 %, une notification d'alerte m\u00e9thodologique doit \u00eatre \u00e9mise par le pipeline d'analyse.<\/p>\n<h2>6. Impl\u00e9mentation pas \u00e0 pas avec scipy.stats.chisquare<\/h2>\n<p>La concr\u00e9tisation logicielle du test sous Python offre une ergonomie remarquable, mais requiert une ma\u00eetrise rigoureuse de ses options de param\u00e9trage, notamment la gestion des correctifs de degr\u00e9s de libert\u00e9.<\/p>\n<h3>6.1 Syntaxe fondamentale et ex\u00e9cution sous hypoth\u00e8se d'\u00e9quiprobabilit\u00e9<\/h3>\n<p>L'ex\u00e9cution du test sous l'hypoth\u00e8se nulle d'uniformit\u00e9 probabiliste repr\u00e9sente la configuration la plus directe. Consid\u00e9rons un cas o\u00f9 un d\u00e9 \u00e0 6 faces est lanc\u00e9 120 fois. Le chercheur d\u00e9sire tester si le d\u00e9 est \u00e9quilibr\u00e9. Les effectifs observ\u00e9s pour chaque face de 1 \u00e0 6 sont regroup\u00e9s dans un tableau :<\/p>\n<p><code>import numpy as np<\/code><br \/>\n<code>from scipy import stats<\/code><\/p>\n<p><code>f_obs = np.array([22, 17, 18, 25, 12, 26])<\/code><br \/>\n<code>resultat = stats.chisquare(f_obs=f_obs)<\/code><br \/>\n<code>print(f\"Statistique chi2 : {resultat.statistic:.4f}\")<\/code><br \/>\n<code>print(f\"P-valeur : {resultat.pvalue:.4f}\")<\/code><\/p>\n<p>Dans ce sc\u00e9nario, <code>chisquare<\/code> d\u00e9rive automatiquement <span class=\"arabpsy-math-inline\" data-latex=\"N = 120\">$N = 120$<\/span>, g\u00e9n\u00e8re <span class=\"arabpsy-math-inline\" data-latex=\"f_\\exp = [20., 20., 20., 20., 20., 20.]\">$f_\\exp = [20., 20., 20., 20., 20., 20.]$<\/span>, attribue <span class=\"arabpsy-math-inline\" data-latex=\"\\nu = 6 - 1 = 5\">$\\nu = 6 - 1 = 5$<\/span> degr\u00e9s de libert\u00e9, et r\u00e9sout l'int\u00e9grale de la loi continue. La sortie renvoie un objet typ\u00e9 contenant la valeur de la statistique de test et la probabilit\u00e9 critique bilat\u00e9rale.<\/p>\n<h3>6.2 Impl\u00e9mentation avec une distribution th\u00e9orique asym\u00e9trique personnalis\u00e9e<\/h3>\n<p>Lorsque le mod\u00e8le sous-jacent postule une h\u00e9t\u00e9rog\u00e9n\u00e9it\u00e9 des proportions, le vecteur <code>f_exp<\/code> doit \u00eatre explicitement aliment\u00e9. Supposons une \u00e9tude en g\u00e9n\u00e9tique comportementale o\u00f9 les ph\u00e9notypes d'une descendance animale doivent suivre les ratios de s\u00e9gr\u00e9gation th\u00e9oriques 9:3:3:1 issus d'un croisement dih\u00e9t\u00e9rozygote classique.<\/p>\n<p>Pour un \u00e9chantillon total de 320 sujets observ\u00e9s, la mod\u00e9lisation sous Python s'articule comme suit :<\/p>\n<p><code>f_obs = np.array([185, 55, 62, 18])<\/code><br \/>\n<code>ratios = np.array([9, 3, 3, 1])<\/code><br \/>\n<code>proportions = ratios \/ np.sum(ratios)<\/code><br \/>\n<code>f_exp = proportions * np.sum(f_obs)<\/code><\/p>\n<p><code>res = stats.chisquare(f_obs=f_obs, f_exp=f_exp)<\/code><br \/>\n<code>print(f\"Chi2 = {res.statistic:.4f}, p = {res.pvalue:.4f}\")<\/code><\/p>\n<p>Le calcul v\u00e9rifie si la structure empirique d\u00e9vie de la distribution mend\u00e9lienne [180, 60, 60, 20]. L'affectation d'un vecteur flottant permet de conserver une pr\u00e9cision absolue lors des divisions matricielles, pr\u00e9venant ainsi toute distorsion de la p-valeur finale.<\/p>\n<h3>6.3 Ajustement des degr\u00e9s de libert\u00e9 via le param\u00e8tre ddof<\/h3>\n<p>L'un des \u00e9cueils techniques les plus fr\u00e9quents r\u00e9side dans l'omission du param\u00e8tre <code>ddof<\/code> (<em>delta degrees of freedom<\/em>). Par d\u00e9faut, <code>scipy.stats.chisquare<\/code> applique la formule <span class=\"arabpsy-math-inline\" data-latex=\"\\nu = k - 1\">$\\nu = k - 1$<\/span>, ce qui correspond \u00e0 <code>ddof=0<\/code>. Or, si le mod\u00e8le th\u00e9orique d\u00e9pend de param\u00e8tres de population inconnus qui ont d\u00fb \u00eatre pr\u00e9alablement estim\u00e9s \u00e0 partir des donn\u00e9es empiriques de l'\u00e9chantillon, chaque estimation consomme un degr\u00e9 de libert\u00e9 suppl\u00e9mentaire.<\/p>\n<p>Par exemple, si l'on souhaite tester si une variable discr\u00e8te suit une loi de Poisson de param\u00e8tre <span class=\"arabpsy-math-inline\" data-latex=\"lambda\">$lambda$<\/span>, et que ce param\u00e8tre <span class=\"arabpsy-math-inline\" data-latex=\"lambda\">$lambda$<\/span> est estim\u00e9 par la moyenne arithm\u00e9tique de l'\u00e9chantillon (<span class=\"arabpsy-math-inline\" data-latex=\"\\hat{\\lambda} = \\bar{X}\">$\\hat{\\lambda} = \\bar{X}$<\/span>), alors un param\u00e8tre (<span class=\"arabpsy-math-inline\" data-latex=\"m = 1\">$m = 1$<\/span>) a \u00e9t\u00e9 estim\u00e9. Les degr\u00e9s de libert\u00e9 th\u00e9oriques effectifs deviennent :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\nu = k - 1 - 1 = k - 2\">$$\\nu = k - 1 - 1 = k - 2$$<\/span><\/p>\n<p>Pour informer SciPy de cette r\u00e9duction, il est indispensable de renseigner <code>ddof=1<\/code> :<\/p>\n<p><code>resultat_ajuste = stats.chisquare(f_obs=f_obs, f_exp=f_exp, ddof=1)<\/code><\/p>\n<p>Une mauvaise configuration de ce param\u00e8tre modifie directement l'abscisse de la fonction de r\u00e9partition cumulative et fausse int\u00e9gralement la p-valeur g\u00e9n\u00e9r\u00e9e, conduisant potentiellement \u00e0 des erreurs de d\u00e9cision statistique dramatiques dans un cadre exp\u00e9rimental contr\u00f4l\u00e9.<\/p>\n<h2>7. \u00c9tude de cas empirique : Analyse de fr\u00e9quences comportementales<\/h2>\n<p>Afin d'ancrer ces d\u00e9veloppements th\u00e9oriques dans la r\u00e9alit\u00e9 pratique de la recherche, d\u00e9veloppons une \u00e9tude de cas appliqu\u00e9e et d\u00e9taillons l'ensemble du cycle de traitement quantitatif.<\/p>\n<h3>7.1 Contexte m\u00e9thodologique et description du jeu de donn\u00e9es<\/h3>\n<p>Imaginons une recherche en \u00e9pid\u00e9miologie psychiatrique portant sur l'occurrence temporelle des admissions d'urgence au sein d'un p\u00f4le hospitalier r\u00e9gional. Une controverse th\u00e9orique subsiste dans la litt\u00e9rature clinique : certains auteurs postulent une homog\u00e9n\u00e9it\u00e9 stricte de la charge d'admissions tout au long de la semaine ouvr\u00e9e (du lundi au vendredi), tandis que d'autres d\u00e9fendent l'existence d'un pic d'admissions le lundi cons\u00e9cutif \u00e0 l'effet de rebond de la d\u00e9compensation durant le week-end.<\/p>\n<p>Un \u00e9chantillon al\u00e9atoire repr\u00e9sentatif de <span class=\"arabpsy-math-inline\" data-latex=\"N = 1,250\">$N = 1,250$<\/span> admissions collig\u00e9es au cours d'une ann\u00e9e sur les jours ouvr\u00e9s a \u00e9t\u00e9 extrait du registre informatis\u00e9 de l'\u00e9tablissement. Les donn\u00e9es observ\u00e9es sont les suivantes :<\/p>\n<ul>\n<li>Lundi : 295 admissions<\/li>\n<li>Mardi : 240 admissions<\/li>\n<li>Mercredi : 225 admissions<\/li>\n<li>Jeudi : 230 admissions<\/li>\n<li>Vendredi : 260 admissions<\/li>\n<\/ul>\n<p>La question scientifique se formalise ainsi : la r\u00e9partition journali\u00e8re des admissions pr\u00e9sente-t-elle une d\u00e9viation statistiquement significative par rapport \u00e0 une hypoth\u00e8se d'\u00e9quiprobabilit\u00e9 parfaite (<span class=\"arabpsy-math-inline\" data-latex=\"p_{0i} = 0{,}20 \\quad \\forall i in {1, dots, 5}\">$p_{0i} = 0{,}20 \\quad \\forall i in {1, dots, 5}$<\/span>) ? Le niveau de significativit\u00e9 est fix\u00e9 de mani\u00e8re standard \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"\\alpha = 0{,}05\">$\\alpha = 0{,}05$<\/span>.<\/p>\n<h3>7.2 Script Python complet et reproductible<\/h3>\n<p>Le traitement programmatique complet de cette \u00e9tude s'orchestre au moyen du script Python document\u00e9 ci-apr\u00e8s :<\/p>\n<p><code>import numpy as np<\/code><br \/>\n<code>import pandas as pd<\/code><br \/>\n<code>from scipy import stats<\/code><\/p>\n<p><code>jours = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi']<\/code><br \/>\n<code>f_obs = np.array([295, 240, 225, 230, 260])<\/code><br \/>\n<code>N = np.sum(f_obs)<\/code><br \/>\n<code>k = len(f_obs)<\/code><\/p>\n<p><code># Calcul des effectifs attendus sous H0 uniforme<\/code><br \/>\n<code>p_theorique = 1.0 \/ k<\/code><br \/>\n<code>f_exp = np.full(shape=k, fill_value=N * p_theorique)<\/code><\/p>\n<p><code># Ex\u00e9cution du test d'ad\u00e9quation<\/code><br \/>\n<code>test_res = stats.chisquare(f_obs=f_obs, f_exp=f_exp)<\/code><\/p>\n<p><code># Restitution structur\u00e9e<\/code><br \/>\n<code>print(f\"Nombre total d'observations (N) : {N}\")<\/code><br \/>\n<code>print(f\"Degr\u00e9s de libert\u00e9 (ddl) : {k - 1}\")<\/code><br \/>\n<code>print(f\"Statistique du Chi-deux (Chi2) : {test_res.statistic:.4f}\")<\/code><br \/>\n<code>print(f\"P-valeur associ\u00e9e : {test_res.pvalue:.6e}\")<\/code><\/p>\n<p>L'ex\u00e9cution de ce code produit une statistique <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2 \\approx 12{,}36\">$\\chi^2 \\approx 12{,}36$<\/span> et une p-valeur de <span class=\"arabpsy-math-inline\" data-latex=\"p \\approx 0{,}0149\">$p \\approx 0{,}0149$<\/span>. \u00c9tant donn\u00e9 que $p < 0{,}05$, nous rejetons l'hypoth\u00e8se nulle d'uniformit\u00e9 des admissions au seuil de confiance de 95 %. Il appara\u00eet avec certitude que la charge d'admissions n'est pas \u00e9quitablement r\u00e9partie sur l'ensemble des cinq jours ouvr\u00e9s.<\/p>\n<h3>7.3 D\u00e9composition manuelle algorithmique pour validation p\u00e9dagogique<\/h3>\n<p>Afin d'illustrer la m\u00e9canique sous-jacente et de valider les sorties de la biblioth\u00e8que scientifique, d\u00e9composons l'algorithme sous forme d'op\u00e9rations vectorielles pures avec NumPy :<\/p>\n<p><code># D\u00e9composition manuelle pas \u00e0 pas<\/code><br \/>\n<code>ecarts_bruts = f_obs - f_exp<\/code><br \/>\n<code>ecarts_quadratiques = ecarts_bruts ** 2<\/code><br \/>\n<code>contributions_cellules = ecarts_quadratiques \/ f_exp<\/code><br \/>\n<code>chi2_manuel = np.sum(contributions_cellules)<\/code><\/p>\n<p><code># Calcul de la p-valeur via la survie de la fonction de r\u00e9partition (sf)<\/code><br \/>\n<code>p_manuel = stats.chi2.sf(chi2_manuel, df=k - 1)<\/code><\/p>\n<p><code>df_details = pd.DataFrame({<\/code><br \/>\n<code>    'Jour': jours,<\/code><br \/>\n<code>    'Observe (O)': f_obs,<\/code><br \/>\n<code>    'Attendu (E)': f_exp,<\/code><br \/>\n<code>    'O - E': ecarts_bruts,<\/code><br \/>\n<code>    '(O - E)^2': ecarts_quadratiques,<\/code><br \/>\n<code>    'Contribution': contributions_cellules<\/code><br \/>\n<code>})<\/code><br \/>\n<code>print(df_details.to_string(index=False))<\/code><\/p>\n<p>Ce calcul d\u00e9compos\u00e9 d\u00e9montre rigoureusement que la contribution pr\u00e9pond\u00e9rante \u00e0 la statistique d'\u00e9cart global provient de la modalit\u00e9 \"Lundi\" (<span class=\"arabpsy-math-inline\" data-latex=\"(295 - 250)^2 \/ 250 = 8{,}10\">$(295 - 250)^2 \/ 250 = 8{,}10$<\/span>), qui concentre \u00e0 elle seule plus de 65 % de l'amplitude du <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2\">$\\chi^2$<\/span> total. La validation crois\u00e9e avec <code>stats.chi2.sf<\/code> (qui impl\u00e9mente la fonction de survie <span class=\"arabpsy-math-inline\" data-latex=\"1 - F(x)\">$1 - F(x)$<\/span> plus stable num\u00e9riquement que <span class=\"arabpsy-math-inline\" data-latex=\"1 - \\text{cdf}\">$1 - \\text{cdf}$<\/span>) confirme \u00e0 l'identique les r\u00e9sultats de la fonction packag\u00e9e.<\/p>\n<h2>8. Analyse post-hoc et identification des \u00e9carts significatifs<\/h2>\n<p>Le rejet de l'hypoth\u00e8se nulle globale au terme d'un test d'ad\u00e9quation pr\u00e9sente une nature omnibus. Il indique qu'une discordance globale existe, mais demeure incapable d'indiquer pr\u00e9cis\u00e9ment quelles cat\u00e9gories sp\u00e9cifiques sont responsables du rejet. L'exploration cibl\u00e9e n\u00e9cessite une analyse post-hoc approfondie au moyen de r\u00e9sidus standardis\u00e9s.<\/p>\n<h3>8.1 Calcul des r\u00e9sidus bruts et des r\u00e9sidus standardis\u00e9s de Pearson<\/h3>\n<p>L'erreur analytique classique consiste \u00e0 se focaliser uniquement sur l'\u00e9cart brut <span class=\"arabpsy-math-inline\" data-latex=\"O_i - E_i\">$O_i - E_i$<\/span>. Or, un \u00e9cart de 10 unit\u00e9s pour un effectif attendu de 20 poss\u00e8de une charge probabiliste infiniment plus d\u00e9terminante qu'un m\u00eame \u00e9cart de 10 unit\u00e9s pour un effectif attendu de 1 000. Les r\u00e9sidus standardis\u00e9s de Pearson (not\u00e9s <span class=\"arabpsy-math-inline\" data-latex=\"r_i\">$r_i$<\/span>) compensent cette distorsion en divisant l'\u00e9cart par l'\u00e9cart-type th\u00e9orique sous mod\u00e8le de Poisson :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"r_i = \\frac{O_i - E_i}{\\sqrt{E_i}}\">$$r_i = \\frac{O_i - E_i}{\\sqrt{E_i}}$$<\/span><\/p>\n<p>On remarque imm\u00e9diatement que le carr\u00e9 du r\u00e9sidu standardis\u00e9 de Pearson correspond exactement \u00e0 la contribution de la cellule \u00e0 la statistique omnibus : <span class=\"arabpsy-math-inline\" data-latex=\"r_i^2 = \\frac{(O_i - E_i)^2}{E_i}\">$r_i^2 = \\frac{(O_i - E_i)^2}{E_i}$<\/span>. Sous <span class=\"arabpsy-math-inline\" data-latex=\"H_0\">$H_0$<\/span>, ces r\u00e9sidus suivent approximativement une loi normale standard <span class=\"arabpsy-math-inline\" data-latex=\"\\mathcal{N}(0, 1)\">$\\mathcal{N}(0, 1)$<\/span> lorsque l'\u00e9chantillon est volumineux. Par cons\u00e9quent, les valeurs empiriques dont la magnitude exc\u00e8de en valeur absolue les seuils conventionnels <span class=\"arabpsy-math-inline\" data-latex=\"\\pm 1{,}96\">$\\pm 1{,}96$<\/span> (pour un seuil de risque bilat\u00e9ral <span class=\"arabpsy-math-inline\" data-latex=\"\\alpha = 0{,}05\">$\\alpha = 0{,}05$<\/span>) sont indicatives de cellules pr\u00e9sentant un \u00e9cart significatif.<\/p>\n<h3>8.2 Calcul des r\u00e9sidus ajust\u00e9s standardis\u00e9s<\/h3>\n<p>Bien que les r\u00e9sidus de Pearson offrent une premi\u00e8re approximation intuitive, ils souffrent d'une variance th\u00e9orique inf\u00e9rieure \u00e0 1 en raison de la d\u00e9pendance lin\u00e9aire globale (<span class=\"arabpsy-math-inline\" data-latex=\"\\sum O_i = N\">$\\sum O_i = N$<\/span>). Pour corriger cette distorsion et obtenir une v\u00e9ritable loi normale centr\u00e9e r\u00e9duite sous <span class=\"arabpsy-math-inline\" data-latex=\"H_0\">$H_0$<\/span>, le statisticien Shelby Haberman a formalis\u00e9 en 1973 les r\u00e9sidus standardis\u00e9s ajust\u00e9s (ou r\u00e9sidus d'Haberman), not\u00e9s <span class=\"arabpsy-math-inline\" data-latex=\"z_i\">$z_i$<\/span> :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"z_i = \\frac{O_i - E_i}{\\sqrt{E_i (1 - p_{0i})}}\">$$z_i = \\frac{O_i - E_i}{\\sqrt{E_i (1 - p_{0i})}}$$<\/span><\/p>\n<p>Le terme correctif <span class=\"arabpsy-math-inline\" data-latex=\"\\sqrt{1 - p_{0i}}\">$\\sqrt{1 - p_{0i}}$<\/span> au d\u00e9nominateur compense l'impact de la proportion marginale de chaque modalit\u00e9 sur sa propre variance. Impl\u00e9mentons sous Python une fonction r\u00e9utilisable pour calculer les r\u00e9sidus d'Haberman :<\/p>\n<p><code>def calculer_residus_haberman(f_obs, f_exp):<\/code><br \/>\n<code>    N = np.sum(f_obs)<\/code><br \/>\n<code>    p0 = f_exp \/ N<\/code><br \/>\n<code>    residus = (f_obs - f_exp) \/ np.sqrt(f_exp * (1.0 - p0))<\/code><br \/>\n<code>    return residus<\/code><\/p>\n<p><code>z_scores = calculer_residus_haberman(f_obs, f_exp)<\/code><\/p>\n<p>Ces scores <span class=\"arabpsy-math-inline\" data-latex=\"z_i\">$z_i$<\/span> constituent de v\u00e9ritables m\u00e9triques normalis\u00e9es directement comparables aux quantiles de la loi normale univari\u00e9e, permettant de situer pr\u00e9cis\u00e9ment les foyers d'anomalie au sein de la s\u00e9rie multinomiale.<\/p>\n<h3>8.3 Ajustement du risque global d'erreur par corrections multiples<\/h3>\n<p>L'\u00e9valuation simultan\u00e9e de <span class=\"arabpsy-math-inline\" data-latex=\"k\">$k$<\/span> r\u00e9sidus cat\u00e9goriels expose in\u00e9vitablement l'analyste au probl\u00e8me de l'inflation de l'erreur de premi\u00e8re esp\u00e8ce li\u00e9e aux comparaisons multiples (<em>Family-Wise Error Rate<\/em>). Si l'on teste ind\u00e9pendamment 5 r\u00e9sidus au seuil nominal de 0,05, la probabilit\u00e9 d'observer au moins un faux positif accidentel s'\u00e9l\u00e8ve \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"1 - (1 - 0{,}05)^5 \\approx 22{,}6,%\">$1 - (1 - 0{,}05)^5 \\approx 22{,}6,%$<\/span>.<\/p>\n<p>Pour neutraliser ce risque, deux options m\u00e9thodologiques s'offrent au chercheur :<\/p>\n<ul>\n<li><strong>La correction de Bonferroni<\/strong> : approche hautement conservatrice divisant le seuil nominal par le nombre de cellules test\u00e9es : <span class=\"arabpsy-math-inline\" data-latex=\"\\alpha_{adj} = \\frac{\\alpha}{k}\">$\\alpha_{adj} = \\frac{\\alpha}{k}$<\/span>. Dans notre cas d'\u00e9tude \u00e0 5 cat\u00e9gories, le seuil ajust\u00e9 devient <span class=\"arabpsy-math-inline\" data-latex=\"0{,}05 \/ 5 = 0{,}01\">$0{,}05 \/ 5 = 0{,}01$<\/span>, correspondant \u00e0 une valeur critique normale de <span class=\"arabpsy-math-inline\" data-latex=\"|z| ge 2{,}576\">$|z| ge 2{,}576$<\/span>.<\/li>\n<li><strong>La proc\u00e9dure de Benjamini-Hochberg (FDR)<\/strong> : m\u00e9thode plus puissante r\u00e9gulant le taux de fausses d\u00e9couvertes (<em>False Discovery Rate<\/em>), particuli\u00e8rement adapt\u00e9e lorsque le nombre de cat\u00e9gories <span class=\"arabpsy-math-inline\" data-latex=\"k\">$k$<\/span> est substantiel.<\/li>\n<\/ul>\n<p>L'int\u00e9gration de la correction de Benjamini-Hochberg sous Python s'op\u00e8re \u00e9l\u00e9gamment via le module <code>statsmodels<\/code> :<\/p>\n<p><code>from statsmodels.stats.multitest import multipletests<\/code><\/p>\n<p><code># Calcul des p-valeurs bilat\u00e9rales associ\u00e9es aux scores z de Haberman<\/code><br \/>\n<code>p_valeurs_locales = 2 * (1 - stats.norm.cdf(np.abs(z_scores)))<\/code><br \/>\n<code>rejet, p_ajustees, _, _ = multipletests(p_valeurs_locales, alpha=0.05, method='fdr_bh')<\/code><\/p>\n<p>Cette rigueur post-hoc garantit que toute conclusion relative \u00e0 la surrepr\u00e9sentation ou sous-repr\u00e9sentation d'une modalit\u00e9 sp\u00e9cifique repose sur une assise math\u00e9matique robuste, immunis\u00e9e contre les art\u00e9facts de s\u00e9lection empirique.<\/p>\n<h2>9. Quantification de la taille d'effet et calcul de puissance<\/h2>\n<p>La statistique du chi-deux et sa p-valeur associ\u00e9e sont structurellement d\u00e9pendantes de la taille totale de l'\u00e9chantillon <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span>. Une d\u00e9viation infime et sans port\u00e9e substantielle appara\u00eetra hautement significative d\u00e8s lors que <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span> atteint des milliers d'observations. Il est donc fondamental de compl\u00e9ter le test par une quantification standardis\u00e9e de la taille d'effet et une analyse de puissance.<\/p>\n<h3>9.1 Mesure de la taille d'effet : Le V de Cramer et le W de Cohen<\/h3>\n<p>Pour le test d'ad\u00e9quation unidimensionnel, l'indice d'effet standardis\u00e9 universellement admis est le <span class=\"arabpsy-math-inline\" data-latex=\"w\">$w$<\/span> de Cohen (Cohen's <span class=\"arabpsy-math-inline\" data-latex=\"w\">$w$<\/span>). Il se d\u00e9finit formellement comme la racine carr\u00e9e de la statistique du chi-deux divis\u00e9e par la taille globale de l'\u00e9chantillon :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"w = \\sqrt{\\sum_{i=1}^k \\frac{(p_i - p_{0i})^2}{p_{0i}}} = \\sqrt{\\frac{\\chi^2}{N}}\">$$w = \\sqrt{\\sum_{i=1}^k \\frac{(p_i - p_{0i})^2}{p_{0i}}} = \\sqrt{\\frac{\\chi^2}{N}}$$<\/span><\/p>\n<p>Lorsque la comparaison s'effectue dans un cadre unidimensionnel \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"k\">$k$<\/span> modalit\u00e9s, le <span class=\"arabpsy-math-inline\" data-latex=\"V\">$V$<\/span> de <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Cram%C3%A9r%27s_V\">Cramer<\/a> (Cram\u00e9r's <span class=\"arabpsy-math-inline\" data-latex=\"V\">$V$<\/span>) converge structurellement vers une m\u00e9trique normalis\u00e9e relative au nombre de cat\u00e9gories :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"V = \\sqrt{\\frac{\\chi^2}{N(k - 1)}} = \\frac{w}{\\sqrt{k - 1}}\">$$V = \\sqrt{\\frac{\\chi^2}{N(k - 1)}} = \\frac{w}{\\sqrt{k - 1}}$$<\/span><\/p>\n<p>Pour notre \u00e9tude sur les admissions d'urgence (<span class=\"arabpsy-math-inline\" data-latex=\"N = 1,250, \\chi^2 \\approx 12{,}36, k = 5\">$N = 1,250, \\chi^2 \\approx 12{,}36, k = 5$<\/span>), l'impl\u00e9mentation en Python calcule ces m\u00e9triques instantan\u00e9ment :<\/p>\n<p><code>w_cohen = np.sqrt(test_res.statistic \/ N)<\/code><br \/>\n<code>v_cramer = np.sqrt(test_res.statistic \/ (N * (k - 1)))<\/code><br \/>\n<code>print(f\"Taille d'effet w de Cohen : {w_cohen:.4f}\")<\/code><br \/>\n<code>print(f\"V de Cramer : {v_cramer:.4f}\")<\/code><\/p>\n<p>Selon les conventions \u00e9tablies par <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Jacob_Cohen_(statistician)\">Jacob Cohen<\/a> (1988), la magnitude du <span class=\"arabpsy-math-inline\" data-latex=\"w\">$w$<\/span> de Cohen s'interpr\u00e8te selon les seuils qualitatifs suivants :<\/p>\n<ul>\n<li><span class=\"arabpsy-math-inline\" data-latex=\"w \\approx 0{,}10\">$w \\approx 0{,}10$<\/span> : effet faible (d\u00e9viation mineure difficilement d\u00e9celable sans un grand \u00e9chantillon).<\/li>\n<li><span class=\"arabpsy-math-inline\" data-latex=\"w \\approx 0{,}30\">$w \\approx 0{,}30$<\/span> : effet moyen (d\u00e9viation visible et substantielle sur le plan pratique).<\/li>\n<li><span class=\"arabpsy-math-inline\" data-latex=\"w ge 0{,}50\">$w ge 0{,}50$<\/span> : effet fort (restructuration profonde de la distribution).<\/li>\n<\/ul>\n<p>Dans notre cas, avec <span class=\"arabpsy-math-inline\" data-latex=\"w \\approx 0{,}099\">$w \\approx 0{,}099$<\/span>, l'effet est statistiquement significatif mais de faible magnitude pratique, ce qui temp\u00e8re consid\u00e9rablement l'interpr\u00e9tation alarmiste d'une surcharge hospitali\u00e8re hebdomadaire.<\/p>\n<h3>9.2 Intervalles de confiance de la taille d'effet par bootstrap<\/h3>\n<p>Rapporter une estimation ponctuelle de la taille d'effet ne suffit pas \u00e0 traduire l'incertitude d'\u00e9chantillonnage. En l'absence de distribution analytique simple pour le <span class=\"arabpsy-math-inline\" data-latex=\"w\">$w$<\/span> de Cohen sous des conditions g\u00e9n\u00e9rales, le r\u00e9\u00e9chantillonnage bootstrap non param\u00e9trique constitue la m\u00e9thodologie de r\u00e9f\u00e9rence pour g\u00e9n\u00e9rer un intervalle de confiance robuste \u00e0 95 %.<\/p>\n<p>Le principe consiste \u00e0 r\u00e9\u00e9chantillonner avec remise <span class=\"arabpsy-math-inline\" data-latex=\"B = 2,000\">$B = 2,000$<\/span> fois l'\u00e9chantillon initial, recalculer la statistique <span class=\"arabpsy-math-inline\" data-latex=\"w\">$w$<\/span> sur chaque r\u00e9plique empirique, et extraire les percentiles 2,5 % et 97,5 % de la distribution empirique ainsi construite :<\/p>\n<p><code>np.random.seed(42)<\/code><br \/>\n<code>B = 2000<\/code><br \/>\n<code>boot_w = []<\/code><\/p>\n<p><code># Reconstitution de la population empirique \u00e9tiquet\u00e9e<\/code><br \/>\n<code>population_categories = np.repeat(np.arange(k), f_obs)<\/code><\/p>\n<p><code>for _ in range(B):<\/code><br \/>\n<code>    echantillon_b = np.random.choice(population_categories, size=N, replace=True)<\/code><br \/>\n<code>    counts_b = np.bincount(echantillon_b, minlength=k)<\/code><br \/>\n<code>    chi2_b, _ = stats.chisquare(f_obs=counts_b, f_exp=f_exp)<\/code><br \/>\n<code>    boot_w.append(np.sqrt(chi2_b \/ N))<\/code><\/p>\n<p><code>ic_inf = np.percentile(boot_w, 2.5)<\/code><br \/>\n<code>ic_sup = np.percentile(boot_w, 97.5)<\/code><br \/>\n<code>print(f\"w de Cohen = {w_cohen:.3f}, IC 95% [{ic_inf:.3f} ; {ic_sup:.3f}]\")<\/code><\/p>\n<p>Cette approche moderne renforce la transparence scientifique de la restitution et s'inscrit pleinement dans les exigences contemporaines de la recherche reproductible.<\/p>\n<h3>9.3 Analyse de puissance statistique a priori et a posteriori<\/h3>\n<p>La planification m\u00e9thodologique rigoureuse impose de d\u00e9terminer <em>a priori<\/em> la taille d'\u00e9chantillon n\u00e9cessaire pour garantir une puissance statistique ad\u00e9quate (usuellement <span class=\"arabpsy-math-inline\" data-latex=\"1 - \\beta = 0{,}80\">$1 - \\beta = 0{,}80$<\/span>). La puissance repr\u00e9sente la probabilit\u00e9 d'invalider l'hypoth\u00e8se nulle lorsque celle-ci est effectivement erron\u00e9e de l'amplitude postul\u00e9e.<\/p>\n<p>La biblioth\u00e8que <code>statsmodels<\/code> met \u00e0 disposition la classe <code>GofChisquarePower<\/code> pour op\u00e9rer ces calculs pr\u00e9-exp\u00e9rimentaux complexes :<\/p>\n<p><code>from statsmodels.stats.power import GofChisquarePower<\/code><\/p>\n<p><code>power_analyzer = GofChisquarePower()<\/code><br \/>\n<code>n_requis = power_analyzer.solve_power(<\/code><br \/>\n<code>    effect_size=0.10,      # Taille d'effet minimale \u00e0 d\u00e9tecter (w)<\/code><br \/>\n<code>    nobs=None,             # Valeur recherch\u00e9e<\/code><br \/>\n<code>    alpha=0.05,            # Risque de premi\u00e8re esp\u00e8ce<\/code><br \/>\n<code>    power=0.80,            # Puissance d\u00e9sir\u00e9e<\/code><br \/>\n<code>    n_bins=5               # Nombre de modalit\u00e9s k<\/code><br \/>\n<code>)<\/code><br \/>\n<code>print(f\"Taille d'\u00e9chantillon N requise a priori : {int(np.ceil(n_requis))}\")<\/code><\/p>\n<p>\u00c0 l'inverse, il est imp\u00e9ratif d'\u00e9mettre une mise en garde m\u00e9thodologique formelle contre la pratique de la <em>puissance observ\u00e9e a posteriori<\/em> (calcul\u00e9e apr\u00e8s le test \u00e0 partir de l'effet observ\u00e9). De multiples d\u00e9monstrations math\u00e9matiques (notamment Hoenig & Heisey, 2001) ont d\u00e9montr\u00e9 que la puissance post-hoc est une transformation tautologique monotone directe de la p-valeur obtenue, n'apportant rigoureusement aucune information additionnelle et g\u00e9n\u00e9rant de graves confusions d'interpr\u00e9tation.<\/p>\n<h2>10. Gestion des violations de postulats et approches alternatives<\/h2>\n<p>En pratique empirique, le chercheur fait fr\u00e9quemment face \u00e0 des distributions r\u00e9calcitrantes o\u00f9 les effectifs attendus s'av\u00e8rent inf\u00e9rieurs au seuil de Cochran. Plusieurs strat\u00e9gies correctives s'imposent selon la nature du plan exp\u00e9rimental.<\/p>\n<h3>10.1 Strat\u00e9gies de regroupement des modalit\u00e9s<\/h3>\n<p>Lorsque certains effectifs th\u00e9oriques sont trop faibles ($E_i < 5$), la solution la plus classique consiste \u00e0 fusionner deux ou plusieurs cat\u00e9gories conceptuellement proches ou adjacentes. Par exemple, au sein d'une \u00e9chelle ordinale d'appr\u00e9ciation \u00e0 7 niveaux, si les modalit\u00e9s extr\u00eames \u00ab Fortement en d\u00e9saccord \u00bb et \u00ab En d\u00e9saccord \u00bb comportent trop peu de r\u00e9pondants, leur agr\u00e9gation au sein d'une cat\u00e9gorie unifi\u00e9e r\u00e9sout la distorsion num\u00e9rique.<\/p>\n<p>Sous Pandas, cette fusion s'ex\u00e9cute avec fluidit\u00e9 via la m\u00e9thode <code>replace()<\/code> ou l'utilisation d'intervalles avec <code>pd.cut()<\/code> :<\/p>\n<p><code>df['categorie_fusionnee'] = df['categorie'].replace({<\/code><br \/>\n<code>    'Tres_Rare': 'Rare_ou_Tres_Rare',<\/code><br \/>\n<code>    'Rare': 'Rare_ou_Tres_Rare'<\/code><br \/>\n<code>})<\/code><\/p>\n<p>Cependant, cette op\u00e9ration modifie irr\u00e9vocablement la question scientifique pos\u00e9e : le nombre de cat\u00e9gories passe de <span class=\"arabpsy-math-inline\" data-latex=\"k\">$k$<\/span> \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"k&#039;\">$k'$<\/span>, ce qui r\u00e9duit les degr\u00e9s de libert\u00e9 (<span class=\"arabpsy-math-inline\" data-latex=\"\\nu = k&#039; - 1\">$\\nu = k' - 1$<\/span>) et modifie la sensibilit\u00e9 du test. En outre, le regroupement ne doit jamais \u00eatre dict\u00e9 par une tentative d'optimisation r\u00e9troactive de la significativit\u00e9 statistique, ce qui constituerait une entorse grave \u00e0 l'\u00e9thique scientifique.<\/p>\n<h3>10.2 Tests exacts et m\u00e9thodes de randomisation (Monte Carlo)<\/h3>\n<p>Lorsque la structure th\u00e9orique interdit tout regroupement cat\u00e9goriel sans d\u00e9truire la coh\u00e9rence du protocole, l'approximation asymptotique continue doit \u00eatre abandonn\u00e9e au profit du calcul exact de la distribution multinomiale, ou \u00e0 d\u00e9faut, d'une m\u00e9thode de simulation stochastique par permutation de Monte Carlo.<\/p>\n<p>L'\u00e9valuation par Monte Carlo simule des dizaines de milliers d'\u00e9chantillons al\u00e9atoires tir\u00e9s directement sous le profil th\u00e9orique sp\u00e9cifi\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"\\mathbf{p_0}\">$\\mathbf{p_0}$<\/span>, calcule la statistique de Pearson sur chaque r\u00e9plique et d\u00e9termine empiriquement la p-valeur sans recourir \u00e0 la table th\u00e9orique du chi-deux :<\/p>\n<p><code>def test_chisquare_monte_carlo(f_obs, f_exp, n_simulations=100000):<\/code><br \/>\n<code>    N = np.sum(f_obs)<\/code><br \/>\n<code>    p0 = f_exp \/ np.sum(f_exp)<\/code><br \/>\n<code>    chi2_obs = np.sum((f_obs - f_exp)**2 \/ f_exp)<\/code><br \/>\n<code>    <\/code><br \/>\n<code>    # G\u00e9n\u00e9ration multivari\u00e9e sous H0<\/code><br \/>\n<code>    simulations = np.random.multinomial(n=N, pvals=p0, size=n_simulations)<\/code><br \/>\n<code>    chi2_simules = np.sum((simulations - f_exp)**2 \/ f_exp, axis=1)<\/code><br \/>\n<code>    <\/code><br \/>\n<code>    # Fraction des statistiques simul\u00e9es sup\u00e9rieures ou \u00e9gales \u00e0 l'observ\u00e9e<\/code><br \/>\n<code>    p_valeur_mc = np.mean(chi2_simules >= chi2_obs)<\/code><br \/>\n<code>    return chi2_obs, p_valeur_mc<\/code><\/p>\n<p><code>stat_mc, p_mc = test_chisquare_monte_carlo(f_obs, f_exp)<\/code><\/p>\n<p>Cette approche conf\u00e8re une pr\u00e9cision d'estimation irr\u00e9prochable m\u00eame en pr\u00e9sence de micro-effectifs th\u00e9oriques, immunisant l'analyse contre les approximations imparfaites des lois continues.<\/p>\n<h3>10.3 Test G (Log-Likelihood Ratio Test) en Python<\/h3>\n<p>Alternative th\u00e9orique majeure au test de Pearson, le test <span class=\"arabpsy-math-inline\" data-latex=\"G\">$G$<\/span> (ou test du rapport de vraisemblance logarithmique, <em>Log-Likelihood Ratio test<\/em>) repose sur les principes de l'estimation du maximum de vraisemblance formalis\u00e9s par Ronald Fisher. Sa statistique s'exprime par la relation :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"G = 2 \\sum_{i=1}^k O_i \\ln\\left(\\frac{O_i}{E_i}\\right)\">$$G = 2 \\sum_{i=1}^k O_i \\ln\\left(\\frac{O_i}{E_i}\\right)$$<\/span><\/p>\n<p>Sur le plan math\u00e9matique, le test <span class=\"arabpsy-math-inline\" data-latex=\"G\">$G$<\/span> pr\u00e9sente des propri\u00e9t\u00e9s d'additivit\u00e9 remarquables permettant de partitionner hi\u00e9rarchiquement les composantes de la d\u00e9viation, ce que ne permet pas la statistique quadratique de Pearson. Sous <span class=\"arabpsy-math-inline\" data-latex=\"H_0\">$H_0$<\/span>, <span class=\"arabpsy-math-inline\" data-latex=\"G\">$G$<\/span> converge \u00e9galement vers la loi du chi-deux \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"k - 1\">$k - 1$<\/span> degr\u00e9s de libert\u00e9.<\/p>\n<p>Dans l'\u00e9cosyst\u00e8me SciPy, le test <span class=\"arabpsy-math-inline\" data-latex=\"G\">$G$<\/span> s'ex\u00e9cute directement via la fonction g\u00e9n\u00e9rique <code>scipy.stats.power_divergence<\/code> en sp\u00e9cifiant le param\u00e8tre Cressie-Read <code>lambda_=0<\/code> (qui correspond analytiquement \u00e0 la limite menant au rapport de vraisemblance) :<\/p>\n<p><code>from scipy.stats import power_divergence<\/code><\/p>\n<p><code>res_g_test = power_divergence(f_obs=f_obs, f_exp=f_exp, lambda_=\"log-likelihood\")<\/code><br \/>\n<code>print(f\"Statistique G : {res_g_test.statistic:.4f}, p : {res_g_test.pvalue:.4f}\")<\/code><\/p>\n<p>Sur de tr\u00e8s grands \u00e9chantillons, le test de Pearson et le test <span class=\"arabpsy-math-inline\" data-latex=\"G\">$G$<\/span> livrent des conclusions rigoureusement convergentes. Sur des \u00e9chantillons plus modestes, le test <span class=\"arabpsy-math-inline\" data-latex=\"G\">$G$<\/span> se montre souvent plus r\u00e9actif aux d\u00e9viations multiplicatives locales.<\/p>\n<h2>11. Visualisation graphique avanc\u00e9e des r\u00e9sultats<\/h2>\n<p>La communication des r\u00e9sultats quantitatifs gagne consid\u00e9rablement en lisibilit\u00e9 lorsqu'elle est \u00e9tay\u00e9e par des repr\u00e9sentations graphiques vectorielles \u00e9l\u00e9gantes et informatives. L'interaction entre Matplotlib et Seaborn permet de concevoir des figures r\u00e9pondant aux exigences strictes des revues acad\u00e9miques internationales.<\/p>\n<h3>11.1 Comparaison visuelle des effectifs avec Seaborn et Matplotlib<\/h3>\n<p>Le premier imp\u00e9ratif de restitution consiste \u00e0 juxtaposer clairement les fr\u00e9quences empiriques observ\u00e9es et le profil th\u00e9orique attendu au sein d'un diagramme en barres group\u00e9es :<\/p>\n<p><code>import matplotlib.pyplot as plt<\/code><br \/>\n<code>import seaborn as sns<\/code><\/p>\n<p><code>sns.set_theme(style=\"whitegrid\", palette=\"muted\")<\/code><br \/>\n<code>fig, ax = plt.subplots(figsize=(9, 5), dpi=300)<\/code><\/p>\n<p><code>x = np.arange(len(jours))<\/code><br \/>\n<code>largeur = 0.35<\/code><\/p>\n<p><code>barres1 = ax.bar(x - largeur\/2, f_obs, largeur, label='Observ\u00e9 (O)', color='#2b5c8f')<\/code><br \/>\n<code>barres2 = ax.bar(x + largeur\/2, f_exp, largeur, label='Attendu (E)', color='#d95f02', alpha=0.85)<\/code><\/p>\n<p><code>ax.set_ylabel(\"Nombre d'admissions\", fontsize=12, fontweight='bold')<\/code><br \/>\n<code>ax.set_title(\"Comparaison des admissions observ\u00e9es et attendues par jour\", fontsize=14, pad=15)<\/code><br \/>\n<code>ax.set_xticks(x)<\/code><br \/>\n<code>ax.set_xticklabels(jours, fontsize=11)<\/code><br \/>\n<code>ax.legend(frameon=True, facecolor='white', framealpha=1)<\/code><\/p>\n<p><code># Annotations num\u00e9riques sur les barres<\/code><br \/>\n<code>for b in barres1:<\/code><br \/>\n<code>    ax.annotate(f'{int(b.get_height())}',<\/code><br \/>\n<code>                xy=(b.get_x() + b.get_width() \/ 2, b.get_height()),<\/code><br \/>\n<code>                xytext=(0, 3), textcoords=\"offset points\",<\/code><br \/>\n<code>                ha='center', va='bottom', fontsize=9)<\/code><\/p>\n<p><code>plt.tight_layout()<\/code><br \/>\n<code>plt.savefig('admissions_comparaison.svg', format='svg')<\/code><br \/>\n<code>plt.show()<\/code><\/p>\n<p>Ce graphique met imm\u00e9diatement en relief le diff\u00e9rentiel positif saillant du lundi et le d\u00e9ficit relatif observ\u00e9 en milieu de semaine ouvr\u00e9e.<\/p>\n<h3>11.2 Repr\u00e9sentation graphique des r\u00e9sidus standardis\u00e9s<\/h3>\n<p>Pour valoriser l'analyse post-hoc, la conception d'un graphique de divergence illustrant les scores de r\u00e9sidus standardis\u00e9s de Pearson ou de Haberman avec rep\u00e9rage des seuils de significativit\u00e9 apporte une forte valeur ajout\u00e9e diagnostique :<\/p>\n<p><code>fig, ax = plt.subplots(figsize=(8, 4.5), dpi=300)<\/code><br \/>\n<code>couleurs = ['#e41a1c' if np.abs(z) >= 1.96 else '#4daf4a' for z in z_scores]<\/code><\/p>\n<p><code>ax.axhline(0, color='black', linewidth=0.8, linestyle='-')<\/code><br \/>\n<code>ax.axhline(1.96, color='red', linestyle='--', linewidth=1, label='Seuil critique alpha=0.05 (+1.96)')<\/code><br \/>\n<code>ax.axhline(-1.96, color='red', linestyle='--', linewidth=1, label='Seuil critique alpha=0.05 (-1.96)')<\/code><\/p>\n<p><code>ax.bar(jours, z_scores, color=couleurs, width=0.5, edgecolor='black')<\/code><br \/>\n<code>ax.set_ylabel(\"R\u00e9sidus ajust\u00e9s de Haberman (z)\", fontsize=11, fontweight='bold')<\/code><br \/>\n<code>ax.set_title(\"Diagnostic post-hoc des d\u00e9viations par cat\u00e9gorie\", fontsize=13, pad=12)<\/code><br \/>\n<code>ax.set_ylim(-3, 3.5)<\/code><br \/>\n<code>ax.legend(loc='upper right', frameon=True)<\/code><\/p>\n<p><code>plt.tight_layout()<\/code><br \/>\n<code>plt.savefig('residus_haberman.pdf', format='pdf')<\/code><br \/>\n<code>plt.show()<\/code><\/p>\n<p>La d\u00e9marcation par code couleur conditionnel isole sans ambigu\u00eft\u00e9 visuelle la journ\u00e9e du lundi comme exc\u00e9dant la fronti\u00e8re critique de significativit\u00e9 bilat\u00e9rale.<\/p>\n<h3>11.3 Trac\u00e9 de la fonction de densit\u00e9 th\u00e9orique et positionnement du test<\/h3>\n<p>Sur le plan didactique, repr\u00e9senter la fonction de densit\u00e9 de probabilit\u00e9 de la loi th\u00e9orique du chi-deux, colorer la r\u00e9gion de rejet critique au seuil <span class=\"arabpsy-math-inline\" data-latex=\"\\alpha\">$\\alpha$<\/span> et positionner la valeur observ\u00e9e du test concr\u00e9tise le m\u00e9canisme probabiliste ayant dict\u00e9 le rejet de <span class=\"arabpsy-math-inline\" data-latex=\"H_0\">$H_0$<\/span> :<\/p>\n<p><code>df_nu = k - 1<\/code><br \/>\n<code>valeur_critique = stats.chi2.ppf(0.95, df=df_nu)<\/code><br \/>\n<code>x_axe = np.linspace(0, 20, 1000)<\/code><br \/>\n<code>y_axe = stats.chi2.pdf(x_axe, df=df_nu)<\/code><\/p>\n<p><code>fig, ax = plt.subplots(figsize=(9, 4.5), dpi=300)<\/code><br \/>\n<code>ax.plot(x_axe, y_axe, label=f'Densit\u00e9 Chi2 (ddl={df_nu})', color='#377eb8', linewidth=2)<\/code><\/p>\n<p><code># Coloration de la zone de rejet<\/code><br \/>\n<code>x_rejet = np.linspace(valeur_critique, 20, 500)<\/code><br \/>\n<code>ax.fill_between(x_rejet, stats.chi2.pdf(x_rejet, df=df_nu), color='red', alpha=0.3, label='R\u00e9gion de rejet (alpha=0.05)')<\/code><\/p>\n<p><code># Marqueur de la statistique observ\u00e9e<\/code><br \/>\n<code>ax.axvline(test_res.statistic, color='darkgreen', linestyle='-', linewidth=2, label=f'Chi2 observ\u00e9 = {test_res.statistic:.2f}')<\/code><\/p>\n<p><code>ax.set_title(\"Distribution th\u00e9orique et positionnement de la statistique empirique\", fontsize=13)<\/code><br \/>\n<code>ax.set_xlabel(\"Statistique Chi-deux\", fontsize=11)<\/code><br \/>\n<code>ax.set_ylabel(\"Densit\u00e9 de probabilit\u00e9\", fontsize=11)<\/code><br \/>\n<code>ax.legend(loc='upper right', frameon=True)<\/code><\/p>\n<p><code>plt.tight_layout()<\/code><br \/>\n<code>plt.savefig('densite_chi2.png', format='png', dpi=300)<\/code><br \/>\n<code>plt.show()<\/code><\/p>\n<p>Cette visualisation permet d'appr\u00e9hender intuitivement la p-valeur comme l'aire sous la courbe situ\u00e9e au-del\u00e0 de la ligne verte mat\u00e9rialisant l'observation de l'\u00e9chantillon.<\/p>\n<h2>12. Bonnes pratiques de restitution acad\u00e9mique et reproductibilit\u00e9<\/h2>\n<p>L'\u00e9tape finale du travail d'analyse statistique consiste \u00e0 traduire les calculs algorithmiques en \u00e9nonc\u00e9s textuels et tabulaires normalis\u00e9s, conformes aux standards r\u00e9dactionnels de la communaut\u00e9 scientifique.<\/p>\n<h3>12.1 R\u00e9daction des r\u00e9sultats selon les normes APA (7e \u00e9dition)<\/h3>\n<p>Le manuel de publication de l'<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/apastyle.apa.org\/\">American Psychological Association<\/a> (APA, 7e \u00e9dition) codifie de mani\u00e8re extr\u00eamement stricte la typographie et la structure des \u00e9nonc\u00e9s statistiques. La r\u00e8gle impose d'indiquer :<\/p>\n<ul>\n<li>La lettre grecque chi au carr\u00e9 en italique : <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2\">$\\chi^2$<\/span>.<\/li>\n<li>Les degr\u00e9s de libert\u00e9 entre parenth\u00e8ses, accompagn\u00e9s de la taille de l'\u00e9chantillon total <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span>.<\/li>\n<li>La valeur de la statistique arrondie \u00e0 deux d\u00e9cimales.<\/li>\n<li>La p-valeur exacte arrondie \u00e0 trois d\u00e9cimales (ou formul\u00e9e comme $p < .001$ si elle est infinit\u00e9simale, sans jamais \u00e9crire <span class=\"arabpsy-math-inline\" data-latex=\"p = .000\">$p = .000$<\/span>).<\/li>\n<li>La taille d'effet standardis\u00e9e (<span class=\"arabpsy-math-inline\" data-latex=\"w\">$w$<\/span> de Cohen ou <span class=\"arabpsy-math-inline\" data-latex=\"V\">$V$<\/span> de Cramer).<\/li>\n<\/ul>\n<p>Voici un exemple paradigmatique de formulation acad\u00e9mique pour un test significatif :<\/p>\n<p><em>\u00ab Un test d'ad\u00e9quation du chi-deux de Pearson a \u00e9t\u00e9 conduit afin de d\u00e9terminer si la r\u00e9partition hebdomadaire des admissions hospitali\u00e8res d'urgence suivait une distribution uniforme \u00e0 travers les cinq jours ouvr\u00e9s. Les r\u00e9sultats indiquent un \u00e9cart statistiquement significatif par rapport \u00e0 l'hypoth\u00e8se d'\u00e9quiprobabilit\u00e9, <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2(4, N = 1250) = 12{,}36\">$\\chi^2(4, N = 1250) = 12{,}36$<\/span>, <span class=\"arabpsy-math-inline\" data-latex=\"p = .015\">$p = .015$<\/span>, avec une taille d'effet de faible magnitude, <span class=\"arabpsy-math-inline\" data-latex=\"w = 0{,}10\">$w = 0{,}10$<\/span>, IC 95 % [0{,}04 ; 0{,}16]. L'analyse post-hoc des r\u00e9sidus standardis\u00e9s ajust\u00e9s de Haberman, assortie d'une correction du risque par la m\u00e9thode de Benjamini-Hochberg, r\u00e9v\u00e8le que seules les admissions du lundi sont significativement sup\u00e9rieures aux attentes th\u00e9oriques (<span class=\"arabpsy-math-inline\" data-latex=\"z = 3{,}18\">$z = 3{,}18$<\/span>, <span class=\"arabpsy-math-inline\" data-latex=\"p_{adj} = .007\">$p_{adj} = .007$<\/span>), les autres jours ne pr\u00e9sentant pas de d\u00e9viation significative. \u00bb<\/em><\/p>\n<p>Dans l'\u00e9ventualit\u00e9 d'un r\u00e9sultat non significatif, la r\u00e9daction type adopte la structure suivante :<\/p>\n<p><em>\u00ab La distribution empirique des choix ne s'\u00e9carte pas de mani\u00e8re statistiquement significative de la distribution th\u00e9orique postul\u00e9e, <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2(3, N = 240) = 2{,}45\">$\\chi^2(3, N = 240) = 2{,}45$<\/span>, <span class=\"arabpsy-math-inline\" data-latex=\"p = .484\">$p = .484$<\/span>, <span class=\"arabpsy-math-inline\" data-latex=\"w = 0{,}06\">$w = 0{,}06$<\/span>. Les donn\u00e9es ne permettent pas de rejeter l'hypoth\u00e8se nulle d'\u00e9quiprobabilit\u00e9. \u00bb<\/em><\/p>\n<p>Sur le plan tabulaire, il est recommand\u00e9 de structurer la restitution selon la disposition normalis\u00e9e suivante :<\/p>\n<table border=\"1\" cellpadding=\"6\" cellspacing=\"0\" style=\"border-collapse: collapse; width: 100%; text-align: center; margin: 20px 0;\">\n<thead style=\"background-color: #f2f2f2;\">\n<tr>\n<th>Cat\u00e9gorie<\/th>\n<th>Effectif observ\u00e9 (<span class=\"arabpsy-math-inline\" data-latex=\"O\">$O$<\/span>)<\/th>\n<th>Effectif attendu (<span class=\"arabpsy-math-inline\" data-latex=\"E\">$E$<\/span>)<\/th>\n<th>Pourcentage (%)<\/th>\n<th>R\u00e9sidu d'Haberman (<span class=\"arabpsy-math-inline\" data-latex=\"z\">$z$<\/span>)<\/th>\n<th><span class=\"arabpsy-math-inline\" data-latex=\"p\">$p$<\/span>-valeur ajust\u00e9e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Lundi<\/td>\n<td>295<\/td>\n<td>250,0<\/td>\n<td>23,6 %<\/td>\n<td>+3,18<\/td>\n<td>.007*<\/td>\n<\/tr>\n<tr>\n<td>Mardi<\/td>\n<td>240<\/td>\n<td>250,0<\/td>\n<td>19,2 %<\/td>\n<td>-0,71<\/td>\n<td>.596<\/td>\n<\/tr>\n<tr>\n<td>Mercredi<\/td>\n<td>225<\/td>\n<td>250,0<\/td>\n<td>18,0 %<\/td>\n<td>-1,77<\/td>\n<td>.192<\/td>\n<\/tr>\n<tr>\n<td>Jeudi<\/td>\n<td>230<\/td>\n<td>250,0<\/td>\n<td>18,4 %<\/td>\n<td>-1,41<\/td>\n<td>.264<\/td>\n<\/tr>\n<tr>\n<td>Vendredi<\/td>\n<td>260<\/td>\n<td>250,0<\/td>\n<td>20,8 %<\/td>\n<td>+0,71<\/td>\n<td>.596<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>12.2 Structuration d'un pipeline d'analyse modulaire et automatis\u00e9<\/h3>\n<p>Dans un contexte professionnel ou de recherche \u00e0 grande \u00e9chelle, il est judicieux de consolider l'ensemble des proc\u00e9dures exploratoires, inf\u00e9rentielles et post-hoc au sein d'une fonction Python robuste et typ\u00e9e. Cette d\u00e9marche d'ing\u00e9nierie logicielle garantit la r\u00e9utilisabilit\u00e9 et la fiabilit\u00e9 des traitements :<\/p>\n<p><code>from typing import Dict, Any, List, Optional<\/code><br \/>\n<code>import numpy as np<\/code><br \/>\n<code>from scipy import stats<\/code><br \/>\n<code>from statsmodels.stats.multitest import multipletests<\/code><\/p>\n<p><code>def pipeline_chi2_adequation(<\/code><br \/>\n<code>    f_obs: np.ndarray,<\/code><br \/>\n<code>    f_exp: Optional[np.ndarray] = None,<\/code><br \/>\n<code>    labels: Optional[List[str]] = None,<\/code><br \/>\n<code>    alpha: float = 0.05<\/code><br \/>\n<code>) -> Dict[str, Any]:<\/code><br \/>\n<code>    \"\"\"<\/code><br \/>\n<code>    Ex\u00e9cute un pipeline complet d'ad\u00e9quation du chi-deux : v\u00e9rifications,<\/code><br \/>\n<code>    test omnibus, taille d'effet, r\u00e9sidus de Haberman et post-hoc FDR.<\/code><br \/>\n<code>    \"\"\"<\/code><br \/>\n<code>    f_obs = np.asarray(f_obs, dtype=int)<\/code><br \/>\n<code>    N = np.sum(f_obs)<\/code><br \/>\n<code>    k = len(f_obs)<\/code><br \/>\n<code>    <\/code><br \/>\n<code>    if f_exp is None:<\/code><br \/>\n<code>        f_exp = np.full(k, N \/ k, dtype=float)<\/code><br \/>\n<code>    else:<\/code><br \/>\n<code>        f_exp = np.asarray(f_exp, dtype=float)<\/code><br \/>\n<code>        <\/code><br \/>\n<code>    # V\u00e9rification de la r\u00e8gle de Cochran<\/code><br \/>\n<code>    cochran_invalides = np.sum(f_exp < 5)<\/code><br \/>\n<code>    cochran_ok = (cochran_invalides \/ k) <= 0.20 and np.all(f_exp >= 1)<\/code><br \/>\n<code>    <\/code><br \/>\n<code>    # Test d'ad\u00e9quation Omnibus<\/code><br \/>\n<code>    res = stats.chisquare(f_obs=f_obs, f_exp=f_exp)<\/code><br \/>\n<code>    ddl = k - 1<\/code><br \/>\n<code>    w = np.sqrt(res.statistic \/ N)<\/code><br \/>\n<code>    v = np.sqrt(res.statistic \/ (N * ddl))<\/code><br \/>\n<code>    <\/code><br \/>\n<code>    # R\u00e9sidus de Haberman et post-hoc<\/code><br \/>\n<code>    p0 = f_exp \/ N<\/code><br \/>\n<code>    z_scores = (f_obs - f_exp) \/ np.sqrt(f_exp * (1.0 - p0))<\/code><br \/>\n<code>    p_brutes = 2.0 * (1.0 - stats.norm.cdf(np.abs(z_scores)))<\/code><br \/>\n<code>    rejets, p_ajustees, _, _ = multipletests(p_brutes, alpha=alpha, method='fdr_bh')<\/code><br \/>\n<code>    <\/code><br \/>\n<code>    return {<\/code><br \/>\n<code>        \"N\": N,<\/code><br \/>\n<code>        \"ddl\": ddl,<\/code><br \/>\n<code>        \"cochran_respecte\": cochran_ok,<\/code><br \/>\n<code>        \"chi2_stat\": float(res.statistic),<\/code><br \/>\n<code>        \"p_valeur\": float(res.pvalue),<\/code><br \/>\n<code>        \"w_cohen\": float(w),<\/code><br \/>\n<code>        \"v_cramer\": float(v),<\/code><br \/>\n<code>        \"residus_haberman\": z_scores,<\/code><br \/>\n<code>        \"p_ajustees_fdr\": p_ajustees,<\/code><br \/>\n<code>        \"cellules_significatives\": rejets<\/code><br \/>\n<code>    }<\/code><\/p>\n<p>Ce pipeline modulaire g\u00e8re les contr\u00f4les de validit\u00e9 pr\u00e9liminaires, orchestre les calculs complexes et renvoie un dictionnaire structur\u00e9 contenant l'ensemble des m\u00e9triques d'int\u00e9r\u00eat pr\u00eates \u00e0 \u00eatre int\u00e9gr\u00e9es dans des rapports d'analyse automatis\u00e9s.<\/p>\n<h3>12.3 Synth\u00e8se critique et perspectives pour la recherche quantitative<\/h3>\n<p>Le test d'ad\u00e9quation du chi-deux demeure un jalon fondamental de l'arsenal inf\u00e9rentiel moderne. Sa robustesse computationnelle et son \u00e9l\u00e9gance conceptuelle en font un outil privil\u00e9gi\u00e9 pour l'investigation empirique des variables qualitatives. N\u00e9anmoins, une pratique statistique \u00e9clair\u00e9e exige d'en reconna\u00eetre les limites intrins\u00e8ques li\u00e9es au cadre classique des tests d'hypoth\u00e8se nulle (NHST).<\/p>\n<p>La focalisation exclusive sur la p-valeur doit s'effacer au profit d'une analyse triadique indissociable : direction et pertinence substantielle de la d\u00e9viation empirique, magnitude standardis\u00e9e de la taille d'effet et pr\u00e9cision d\u00e9limit\u00e9e par les intervalles de confiance. De surcro\u00eet, lorsque les structures de donn\u00e9es s'av\u00e8rent complexes \u2014 int\u00e9grant des facteurs hi\u00e9rarchiques, des mesures r\u00e9p\u00e9t\u00e9es ou des covariables individuelles \u2014, le cadre univari\u00e9 du test de Pearson doit \u00eatre d\u00e9pass\u00e9 pour s'orienter vers les <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Generalized_linear_model\">mod\u00e8les lin\u00e9aires g\u00e9n\u00e9ralis\u00e9s<\/a> (GLM), notamment les r\u00e9gressions logistiques multinomiales et les mod\u00e9lisations log-lin\u00e9aires.<\/p>\n<p>Enfin, l'essor des m\u00e9thodes d'inf\u00e9rence bay\u00e9sienne fournit aujourd'hui des alternatives conceptuelles majeures. Plut\u00f4t que de contraindre la d\u00e9cision \u00e0 une dichotomie de rejet d'une hypoth\u00e8se nulle souvent invraisemblable dans la nature, les mod\u00e8les bay\u00e9siens permettent de quantifier directement la probabilit\u00e9 <em>a posteriori<\/em> des diff\u00e9rents mod\u00e8les th\u00e9oriques concurrents conditionnellement aux donn\u00e9es recueillies. L'\u00e9cosyst\u00e8me Python, via des biblioth\u00e8ques avanc\u00e9es telles que PyMC ou ArviZ, ouvre ainsi de nouveaux horizons m\u00e9thodologiques prolongeant l'h\u00e9ritage centenaire ouvert par Karl Pearson.<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li>American Psychological Association. (2020). <em>Publication manual of the American Psychological Association<\/em> (7th ed.). American Psychological Association. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1037\/0000165-000\">https:\/\/doi.org\/10.1037\/0000165-000<\/a><\/li>\n<li>Benjamini, Y., & Hochberg, Y. (1995). Controlling the false discovery rate: A practical and powerful approach to multiple testing. <em>Journal of the Royal Statistical Society: Series B (Methodological)<\/em>, 57(1), 289\u2013300. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1111\/j.2517-6161.1995.tb02031.x\">https:\/\/doi.org\/10.1111\/j.2517-6161.1995.tb02031.x<\/a><\/li>\n<li>Cochran, W. G. (1952). The <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2\">$\\chi^2$<\/span> test of goodness of fit. <em>The Annals of Mathematical Statistics<\/em>, 23(3), 315\u2013345. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1214\/aoms\/1177729380\">https:\/\/doi.org\/10.1214\/aoms\/1177729380<\/a><\/li>\n<li>Cochran, W. G. (1954). Some methods for strengthening the common <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2\">$\\chi^2$<\/span> tests. <em>Biometrics<\/em>, 10(4), 417\u2013451. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.2307\/3001616\">https:\/\/doi.org\/10.2307\/3001616<\/a><\/li>\n<li>Cohen, J. (1988). <em>Statistical power analysis for the behavioral sciences<\/em> (2nd ed.). Lawrence Erlbaum Associates.<\/li>\n<li>Cressie, N., & Read, T. R. C. (1984). Multinomial goodness-of-fit tests. <em>Journal of the Royal Statistical Society: Series B (Methodological)<\/em>, 46(3), 440\u2013464. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1111\/j.2517-6161.1984.tb01318.x\">https:\/\/doi.org\/10.1111\/j.2517-6161.1984.tb01318.x<\/a><\/li>\n<li>Haberman, S. J. (1973). The analysis of residuals in cross-classified tables. <em>Biometrics<\/em>, 29(1), 205\u2013220. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.2307\/2529686\">https:\/\/doi.org\/10.2307\/2529686<\/a><\/li>\n<li>Harris, C. R., Millman, K. J., van der Walt, S. J., Gommers, R., Virtanen, P., Cournapeau, D., ... & Oliphant, T. E. (2020). Array programming with NumPy. <em>Nature<\/em>, 585(7825), 357\u2013362. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1038\/s41586-020-2649-2\">https:\/\/doi.org\/10.1038\/s41586-020-2649-2<\/a><\/li>\n<li>Hoenig, J. M., & Heisey, D. M. (2001). The abuse of power: The pervasive fallacy of power calculations for data analysis. <em>The American Statistician<\/em>, 55(1), 19\u201324. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1198\/000313001300339897\">https:\/\/doi.org\/10.1198\/000313001300339897<\/a><\/li>\n<li>Pearson, K. (1900). On the criterion that a given system of deviations from the probable in the case of a correlated system of variables is such that it can be reasonably supposed to have arisen from random sampling. <em>The London, Edinburgh, and Dublin Philosophical Magazine and Journal of Science<\/em>, 50(302), 157\u2013175. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1080\/14786440009463897\">https:\/\/doi.org\/10.1080\/14786440009463897<\/a><\/li>\n<li>Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T., Cournapeau, D., ... & SciPy 1.0 Contributors. (2020). SciPy 1.0: Fundamental algorithms for scientific computing in Python. <em>Nature Methods<\/em>, 17(3), 261\u2013272. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1038\/s41592-019-0686-2\">https:\/\/doi.org\/10.1038\/s41592-019-0686-2<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Guide acad\u00e9mique complet pour r\u00e9aliser, interpr\u00e9ter et visualiser un test d&rsquo;ad\u00e9quation du chi-deux avec Python, SciPy et l&rsquo;analyse de donn\u00e9es psychologiques.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[2141,2465,1835],"tags":[5134,16,2468,4352,4699],"class_list":["post-3082","psych_stat","type-psych_stat","status-publish","hentry","category-methodologie-quantitative","category-programmation-python","category-statistiques-en-psychologie","tag-chi-deux","tag-psychometrie","tag-python","tag-scipy","tag-test-dadequation"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/3082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat"}],"about":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/types\/psych_stat"}],"author":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3082"}],"version-history":[{"count":0,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/3082\/revisions"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}