Merci pour votre réponse.
Cependant, la régression de Poisson modifiée calcule les intervalles de confiance corrects en utilisant une variance robuste, n'est-ce pas ?
Oui. Pour être plus précis sur le terme « correct », je dirais qu'il est correct lorsque la taille de l'échantillon est importante. Plus précisément encore, je dirais que les résultats estimés à l'aide d'un modèle supposant une distribution de Poisson, même si la variable réponse ne suit pas réellement une distribution de Poisson, seront corrects si la taille de l'échantillon est importante. En utilisant le jargon statistique, je pense pouvoir dire que « quelle que soit la distribution de probabilité de la variable réponse, la variance sandwich est un estimateur cohérent de la matrice de variance-covariance de l'estimateur d'un modèle supposant un modèle spécifique (dans ce cas, une distribution de Poisson). »
Ai-je raison de comprendre que la variance robuste et la variance sandwich font référence à la même chose ?
Oui. Dans ce contexte, j'entends exactement la même chose par « variance robuste » et « variance sandwich ». On parle également de « variance empirique ». Cette variance sandwich peut être utilisée pour l'estimation M (sous certaines conditions). L'estimation par maximum de vraisemblance est également incluse dans l'estimation M.
■Comme vous l'avez dit, la régression de Poisson modifiée effectue d'abord une estimation de vraisemblance maximale de la régression de Poisson, puis calcule l'erreur standard à l'aide d'une variance robuste, puis calcule le test et l'intervalle de confiance à partir de l'erreur standard prise en sandwich.
Dans l'estimation par maximum de vraisemblance de la régression de Poisson, on suppose une distribution de Poisson, et donc pas une distribution binomiale. En utilisant la variance robuste, même si la distribution de probabilité réelle de la variable réponse n'est pas une distribution de Poisson, mais que le modèle suppose une distribution de Poisson, l'estimation est valide tant que la taille de l'échantillon est importante.
■En épidémiologie en particulier, je crois que la régression de Poisson modifiée est une méthode proposée avec les motivations suivantes.
Si la probabilité d'un événement est p, le modèle logistique est couramment utilisé. Par souci de simplicité, s'il n'y a qu'une seule variable explicative, la formule du modèle est la suivante :
Si le côté gauche de l'équation lorsque x = 1 est log(p1/(1-p1)), et le côté gauche lorsque x = 0 est log(p0/(1-p0)), alors β1 est
β1 = log(p1/(1-p1)) - log(p0/(1-p0))
D'après les propriétés des logarithmes, c'est
β1 = log({p1/(1-p1)}/{p0/(1-p0)})
En transformant exponentiellement les deux côtés, nous obtenons exp(log(a))=a,
exp(β1) = {p1/(1-p1)}/{p0/(1-p0)}
Autrement dit, β1 représente le logarithme du rapport de cotes (lorsque x varie de 1), et exp(β1) représente le rapport de cotes (lorsque x varie de 1). C'est correct, mais son interprétation peut parfois être difficile. Si p1 et p0 sont proches de zéro,
{p1/(1-p1)}/{p0/(1-p0)}≒p1/p0
Ainsi, le rapport de cotes peut être approximé par le rapport de risque (rapport des proportions). Cependant, cette approximation n'est valable que si p1 et p0 sont proches de zéro. L'un des avantages de la régression logistique est que p est supérieur à 0 et inférieur à 1 lorsque le membre droit du modèle, β0+β1x, évolue entre -∞ et +∞. Autrement dit, quelle que soit la forme du membre droit du modèle, p conservera presque toujours les propriétés d'une probabilité (comprise entre 0 et 1). (Cependant, dans un modèle de régression logistique, des problèmes surviennent lorsque la probabilité est exactement égale à 0 ou exactement à 1.)
Les rapports de cotes étant difficiles à interpréter, le modèle correspondant aux ratios de risque est facile à interpréter pour les analystes.
En d’autres termes, le côté gauche est le logarithme de la proportion plutôt que le logit.
(Les formules de transformation telles que logit (log(p/(1-p))) et logarithme (log(p)) sont appelées fonctions de liaison.)
Dans ce cas, log(p1) - log(p0) = β1, donc
log(p1/p0) = β1
p1/p0 = exp(β1)
En d'autres termes, dans ce modèle avec une fonction de lien logarithmique, β1 est le ratio de risque logarithmique et exp(β1) est le ratio de risque.
Cependant, ce modèle présente un problème. Si le côté droit devient, par exemple, β0 + β1x = 1,0, alors log(p) = 1,0, ou p = exp(1,0) ≒ 2,72, et même s'il s'agit d'une probabilité, p peut parfois dépasser 1. Pour cette raison, si vous effectuez une estimation du maximum de vraisemblance basée sur la vraisemblance d'une distribution binomiale, le calcul peut échouer à mi-chemin.
Pour éviter ce problème, on pourrait envisager d'effectuer une estimation du maximum de vraisemblance basée sur la distribution de Poisson, qui fonctionne bien lorsque la fonction de lien est logarithmique. Cependant, cela conduirait à calculer les erreurs types, les tests et les intervalles de confiance à l'aide de la distribution de Poisson (même s'ils sont en réalité considérés comme suivant une distribution binomiale). Par conséquent, il a été proposé d'utiliser la variance sandwich (variance robuste/variance empirique), qui est robuste lors de la spécification de la distribution de probabilité de la variable réponse. Lorsque la variance sandwich est spécifiée, même si la distribution de probabilité spécifiée pour la variable réponse est incorrecte, les erreurs types sandwich (et la matrice de covariance sandwich) pour les estimateurs de paramètres seront raisonnables si la taille de l'échantillon est grande (ce sont des estimateurs cohérents des véritables erreurs types).
Il y a probablement deux raisons à la difficulté d'interprétation des rapports de cotes. La première est qu'ils sont intuitivement complexes. Le rapport « a ÷ b » est facile à comprendre, mais « (a ÷ (1-a)) ÷ (b ÷ (1-b)) » est un peu plus complexe à comprendre intuitivement. De plus, si les différences de risque et les rapports de risque ont une propriété appelée « collapsibility », les rapports de cotes n'en ont pas.
Comme mentionné précédemment, la régression de Poisson modifiée suscite un intérêt croissant car elle compense la difficulté d'interprétation des rapports de cotes. Je pense donc personnellement que si ces rapports ne sont pas particulièrement complexes, il serait judicieux de s'en tenir au modèle de régression logistique traditionnel. (Par exemple, si l'objectif de l'analyse est la « prédiction » ou la « classification » et que l'interprétation des coefficients de régression n'est pas importante, je pense que la régression logistique est plus facile à utiliser que la régression de Poisson modifiée.)
■Les méthodes que j'ai mentionnées l'autre jour (appeler R ou Python, et programmer de A à Z avec le langage de script JMP) nécessitent de la programmation, ce qui prive JMP de son principal atout : l'analyse statistique interactive sans codage. Cependant, même parmi les utilisateurs de JMP, notamment les utilisateurs intensifs effectuant des traitements statistiques de routine, la programmation est réalisée en JMP.
Avec JMP Pro 19, vous pourrez réaliser une régression de Poisson modifiée à l'aide de la souris. Actuellement, pour réaliser cette opération dans JMP, vous devrez programmer un peu. C'est une méthode bien plus complexe qu'avec JMP standard.
Vous trouverez ci-dessous une petite pseudo-donnée à titre d'exemple :
1Comment appeler R depuis JMP et exécuter une régression de Poisson modifiée
②Comment exécuter une régression de Poisson modifiée en appelant Python depuis JMP
3) Comment programmer vous-même une régression de Poisson modifiée à partir de zéro en utilisant le langage de script JMP
Tout d'abord, j'aimerais que vous y jetiez un coup d'œil rapide pour avoir une idée de la charge de travail que cela représente. Le code ci-dessous est simplement un exemple créé par moi-même et ne constitue en aucun cas un produit fourni par notre entreprise (j'en assume l'entière responsabilité, mais s'agissant d'un exemple, il ne comporte aucune garantie).
De plus, l’explication suivante est conçue pour fonctionner uniquement avec les petites pseudo-données présentées ici.
Bien que nous utilisions ici des ensembles de données assez petits à des fins d’explication, la variance sandwich est en fait une méthode valable pour des quantités de données relativement importantes (c’est une méthode basée sur la théorie asymptotique).
Concernant les points 1 et 2, si les noms de colonnes contiennent des caractères japonais, ils risquent de ne pas fonctionner correctement. De plus, je ne connais ni R ni Python ; il existe donc peut-être des packages ou des méthodes de programmation plus élégants. Pour la programmation Python suivante, j'ai utilisé les suggestions de Copilot comme référence.
Concernant le point ③, les points suivants ne sont pas du tout pris en considération.
a) Gestion des valeurs manquantes : les valeurs manquantes dans les données entraîneront une erreur.
b) Traitement des erreurs liées à l'insuffisance de rang dans la matrice de conception : dans les modèles linéaires généralisés tels que la régression linéaire et la régression de Poisson, s'il existe une dépendance linéaire entre les variables explicatives, les estimations des paramètres ne peuvent être déterminées de manière unique. Aucun traitement n'est effectué pour résoudre ce problème.
c) Gestion des erreurs de séparation : la régression logistique et la régression de Poisson peuvent rencontrer un problème de séparation selon les données, ce qui peut entraîner des estimations de paramètres de +∞ ou -∞. Ce problème n'est pas traité. Concernant le point ③, nous privilégions la lisibilité et avons programmé sans nous soucier de l'efficacité du traitement (notamment de la consommation mémoire).
J'ai joint un fichier avec le code JSL qui combine les étapes 1 et 3. Pour l'exécuter, vous devez avoir R installé et pouvoir l'appeler depuis JMP.
J'ai également joint le fichier de code Python pour l'étape 2. Pour l'exécuter, vous devez ouvrir une table de données JMP, comme indiqué aux lignes 1 à 7 du fichier JSL ci-dessus. De plus, pour la première exécution, vous devez exécuter les lignes 2 à 4.
■0) Tout d’abord, créez les données d’échantillon à utiliser dans ①, ② et ③ ci-dessous.
0-1) Sélectionnez Fichier (F) > Nouveau (N) > Script JSL (Ctrl + T).
0-2) Faites un clic droit dans l'éditeur de scripts appelé et sélectionnez [Afficher la fenêtre de journalisation] dans le menu contextuel. La fenêtre de journalisation s'affichera en bas.
0-3) Copiez et collez le code suivant en haut de l'éditeur de script. Ce code crée des exemples de données.
New Table("Test",
New Column("X1", Nominal, Character,Values({"A","A","A","A","A","A","B","B","B","B","B","B","B","B","B"})),
New Column("X2", Values([5,4,3,2,1,4,5,4,3,3,3,2,1,5,4])),
New Column("Y", Values([0,1,0,1,0,1,1,0,1,1,0,1,1,0,1]));
);
0-4) Cliquez avec le bouton droit de la souris dans l'éditeur de script et sélectionnez [Exécuter le script] dans le menu contextuel.
0-5) Une table de données JMP avec les valeurs de données ci-dessus sera créée.
■①Comment appeler R depuis JMP et exécuter une régression de Poisson modifiée
1) Installez R et vérifiez qu'il peut être appelé depuis JMP
Tout d’abord, pour appeler R depuis JMP, R doit être installé sur la machine sur laquelle JMP (JMP, JMP Pro, JMP Student Edition) est installé.
Si R est déjà installé, ou après l'avoir installé, vérifiez si R peut être appelé depuis JMP. Voici comment procéder à l'aide des menus pour la version Windows.
1-1) Copiez et collez le code suivant dans l'éditeur de script :
R Init();
R Submit("
R.Version();
print('Hello, World!')
");
1-2) Cliquez avec le bouton droit de la souris dans l'éditeur de script et sélectionnez [Exécuter le script] dans le menu contextuel.
1-3) Si le journal sous l'éditeur de script affiche la version R et une chaîne telle que « Bonjour le monde ! », alors R a été appelé avec succès depuis JMP.
2) Ensuite, envoyez la table de données JMP à R, qui est connecté à JMP par la fonction R Init() ci-dessus. Vous pouvez envoyer une table de données JMP à R grâce à la fonction R Send.
2-1) Avec la table de données ouverte, exécutez le code suivant (si vous êtes déjà connecté à R, vous n'avez pas besoin d'exécuter R Init() au début).
R Init();
dt = Current Data Table();
dt << New Column("ID", Nominal, Formula(Row()));
Wait(0);
R Send(dt);
Current Data Table() obtient une référence à la table de données JMP qui est actuellement la table de données actuelle.
« dt << New Column("ID", Nominal, Formula(Row())); » crée une colonne de numéros séquentiels pour chaque ligne. Si vous disposez déjà d'une colonne de numéros séquentiels (numéros d'identification), cette ligne n'est pas nécessaire.
Le dernier R Send(dt) envoie la table de données à R.
3) Exécutez le code R.
Une fois les données envoyées à R, l'étape suivante consiste à estimer une régression de Poisson modifiée dans R. Ci-dessous, nous montrons d'abord un exemple utilisant la fonction geeglm de la bibliothèque geepack, puis la fonction rqlm du package rqlm.
L'estimation par équation généralisée (GEE) a été initialement proposée comme méthode d'estimation pour les données corrélées, telles que les données de fréquence, et la variance sandwich a été utilisée pour calculer les erreurs types. Cette fonction de calcul de la variance sandwich peut être utilisée même pour les données dont chaque ligne est indépendante. Pour ce faire, utilisez une colonne d'ID unique pour chaque ligne (et utilisez l'indépendance comme structure de corrélation). Pour les raisons mentionnées ci-dessus, spécifiez la distribution de Poisson comme distribution de probabilité de la variable réponse et le multilogarithme comme fonction de lien.
Le code suivant utilise geeglm pour effectuer une régression de Poisson modifiée avec X1 et X2 comme variables explicatives (en termes de GEE, une fonction de lien logarithmique, une distribution de Poisson et des variances sandwich, chaque ligne étant considérée comme indépendante). Les estimations des paramètres et les intervalles de confiance sont transformés de manière exponentielle.
Les résultats sont affichés dans le journal en bas de la fenêtre de script.
R Submit("
if (!require('geepack')) {
install.packages('geepack')
}
library(geepack)
gee.result <- geeglm(Y~X1 + X2, data=dt, id = ID, family=poisson('log'))
summary(gee.result)
est <- coef(gee.result)
se <- diag(vcov(gee.result))
z <- qnorm(0.975)
print('Risk Ratios and the Confidence Interlvals')
print(cbind(exp(est), exp(est - se*z), exp(est + se*z)))
");
Vous trouverez ci-dessous un exemple utilisant le paquet rqlm. Il a été programmé en référence aux éléments externes suivants. Je pense qu'il est plus facile à spécifier que l'exemple geepack ci-dessus.
Noma, Hisashi (2025)
rqlm : un package R permettant d'effectuer des analyses de régression de Poisson modifiée et de régression des moindres carrés modifiée
/* 以下のURLを参考にしました。https://www.ism.ac.jp/~noma/file/software/rqlm_JPN.pdf */
R Submit("
if (!require('rqlm')) {
install.packages('rqlm')
}
library(rqlm)
mpr.result <- rqlm(Y ~ X1 + X2, data=dt, family=poisson, eform=TRUE)
mpr.result
");
■①Comment appeler Python depuis JMP et exécuter une régression de Poisson modifiée
À partir de JMP 18, l'installation de JMP installe également Python, qui s'exécute uniquement dans JMP, il n'est donc pas nécessaire d'installer Python séparément.
1-0) Ce qui suit sera écrit en code Python. Pour créer du code Python dans JMP, sélectionnez Fichier (F) > Nouveau (N) > Code Python. Vous pouvez également faire un clic droit dans l'éditeur de script Python et sélectionner « Afficher la fenêtre de journalisation » pour afficher la fenêtre de journalisation en bas.
1-1) Installez les packages Python nécessaires. Dans cet exemple, les packages requis sont numpy, pandas et statsmodels. Copiez-collez le code suivant dans l'éditeur de script Python et exécutez-le.
from jmputils import jpip
jpip('install --upgrade', 'pip setuptools certifi')
jpip('install', 'numpy pandas statsmodels')
Ce code ne doit être exécuté qu'une seule fois et il n'est pas nécessaire de l'exécuter à nouveau.
1-2) Importez le package ou la fonction.
Copiez et collez le code suivant dans votre éditeur de script Python et exécutez-le.
import jmp
import numpy as np
import pandas as pd
import statsmodels as sm
from statsmodels.genmod.generalized_estimating_equations import GEE
from statsmodels.genmod.families import Poisson
from statsmodels.genmod.families.links import log
from statsmodels.genmod.cov_struct import Independence
1-3)
Lisez une table de données JMP en Python et convertissez-la en un cadre de données pandas.
Dans cet exemple, la table de données JMP actuelle (la table de données JMP actuellement ouverte) est lue et les données sont converties en une trame de données pandas.
Le code ci-dessous doit être modifié en fonction de vos données.
dt = jmp.current()
data = pd.DataFrame(
{
'Y': dt['Y'][0:n],
'X1': dt['X1'][0:n],
'X2': dt['X2'][0:n],
'ID': dt['ID'][0:n]
}
)
Pour utiliser la fonction GEE de Python, il semble nécessaire de créer vous-même des variables indicatrices (variables factices).
Dans cet exemple, X1 est une variable binaire. Nous créons ici une variable fictive valant 1 si X1=="B" et 0 sinon.
data['X1B'] = (data['X1'] == 'B').astype(int)
print(data)
1-4)
Exécutez GEE. Spécifiez la distribution de Poisson comme distribution de probabilité de la variable de réponse et le logarithme comme fonction de liaison.
De plus, les estimations des paramètres et leurs intervalles de confiance ont été transformés de manière exponentielle.
model = GEE.from_formula( "Y ~ X1B + X2", groups="ID",
data=data,
family=Poisson(link=log()),
cov_struct=Independence())
model = GEE(Ydata, Xdata, groups=ID, cov_struct=cov_struct, family=Poisson(link=Log()))
result = model.fit()
print(result.summary())
print(result.cov_robust)
print(np.exp(result.params))
print(np.exp(result.conf_int()))
■③Comment programmer vous-même une régression de Poisson modifiée à partir de zéro en utilisant le langage de script JMP
La régression de Poisson modifiée trouve d’abord des estimations ponctuelles en utilisant l’estimation de vraisemblance maximale de la régression de Poisson.
Dans ce cas, la méthode de Newton-Raphson est souvent utilisée. Cette méthode est un calcul itératif : à chaque itération, la fonction de vraisemblance logarithmique doit être différenciée une fois par rapport aux paramètres (pente, gradient) et deux fois par rapport à la matrice hessienne. La régression de Poisson appartient à une famille de modèles appelés « modèles linéaires généralisés », qui facilitent le calcul de la pente et de la matrice hessienne.
De plus, si vous programmez vous-même à partir de zéro, vous devrez créer vos propres variables indicatrices (variables factices) pour les variables d'échelle nominale.
Je n'entrerai pas dans les détails, mais si vous ignorez la gestion des erreurs (comment gérer les valeurs manquantes, comment gérer le déficit de rang, comment gérer la séparation), vous pouvez effectuer une régression de Poisson modifiée avec la quantité de code suivante :
Names Default To Here(1);
dt = Current Data Table();
/* 自分で指示変数(ダミー変数)を作成しないといけない */
x1 = Design(Column(dt, "X1")<
<GET as="" matrix=""></GET>
<DIV>Veuillez m'excuser pour la longueur de l'explication. Pour réaliser cette opération dans JMP Pro 18 (JMP Édition Étudiant), vous devrez effectuer le travail de programmation indiqué ci-dessus. Le langage de script JMP permet également de créer des applications avec interface graphique. Certaines fonctionnalités non disponibles dans JMP sont disponibles sur la Marketplace JMP (les extensions proposées sont fournies telles quelles). Malheureusement, la fonctionnalité de régression de Poisson modifiée n'est pas disponible sur la Marketplace JMP. Si vous pouvez patienter, je vous recommande d'attendre la sortie de JMP Pro 19.</DIV>
<DIV>
</DIV>
<DIV>La possibilité d'exécuter un processus dans JMP peut être classée selon les niveaux suivants. Dans ce cas, je pense qu'il correspond au niveau d).</DIV>
<DIV>a) Fonctions généralement disponibles dans JMP et JMP Pro → Peuvent être réalisées en un rien de temps</DIV>
<DIV>
<DIV>b) Si vous utilisez les fonctions de JMP ou JMP Pro, vous pouvez le faire rapidement avec un peu d'ingéniosité.</DIV>
</DIV>
<DIV>
<DIV>c) Fonctionnalités fournies sur la Marketplace JMP → Telles quelles, mais prêtes à l'emploi</DIV>
<DIV>d) Une fonction simple qui n'est pas fournie ci-dessus → Elle peut être réalisée par programmation (notamment en R ou Python)</DIV>
<DIV>e) Fonctions très avancées non fournies ci-dessus → Possible uniquement avec une expertise considérable</DIV>
<DIV>
</DIV>
<DIV>Enfin, un point m'a dérangé, et j'aimerais donc ajouter un commentaire sur la « correction » mentionnée au début. L'analyse de régression elle-même, y compris la régression linéaire par les moindres carrés la plus simple, a de nombreuses applications. Par exemple, l'article suivant la divise en description, prédiction et contrôle/intervention.</DIV>
<DIV>Iwasaki, M. (2021)</DIV>
<DIV>Analyse de régression multiple du point de vue de l'inférence causale statistique</DIV>
<DIV>Journal de la Société statistique japonaise, 50(2), 363-379</DIV>
<DIV>
<A class="bluelink-style" href="https://doi.org/10.11329/jjssj.50.363" target="_blank" rel="nofollow noopener noreferrer">https://doi.org/10.11329/jjssj.50.363</A>
</DIV>
<DIV>L'explication ci-dessus décrit simplement comment réaliser une régression de Poisson modifiée et ne garantit en aucun cas la « correction » de l'analyse de régression dans la situation actuelle, ni la validité de la régression de Poisson modifiée, ni même la conformité de la situation actuelle aux principales hypothèses de l'analyse de régression. Je recommande de consulter un statisticien spécialisé dans ce domaine pour déterminer si votre analyse statistique actuelle est « correcte » dans votre situation actuelle (car je n'ai pas la capacité de le juger). Je n'en ai jamais consulté, mais je pense qu'il pourra vous proposer des alternatives à l'analyse elle-même et vous fournir des instructions détaillées sur la réalisation d'une régression de Poisson modifiée.</DIV>
<DIV>
</DIV>
</DIV>