existe-t-il un moyen de trouver l'aire commune à deux courbes de distribution normale différentes à l'aide de JMP ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'essaie de trouver l'aire sous la partie commune de deux courbes de distribution normale différentes. Comment puis-je faire cela avec JMP ? Un moyen simple de le faire?
Re : existe-t-il un moyen de trouver l'aire commune à deux courbes de distribution normale différentes à l'aide de JMP ?Salut,
La plage du graphique était des moyens codés en dur dans les chiffres simples plutôt que dans les chiffres doubles, de sorte que l'intrigue était "hors page" pour ainsi dire. J'ai ajouté du code pour calculer les axes appropriés pour le graphique afin que les courbes apparaissent.
J'ai également eu des problèmes avec la fonction Integrate() utilisée ici, et j'ai opté pour des sommes de Riemann sous le polygone. Ce sera raisonnablement précis de cette façon.
Names Default to Here( 1 );
// Define curves and calculate overlap area
mean1 = 46.17;
stdev1 = 16.27;
mean2 = 82.08;
stdev2 = 17.68;
<BR />N1 = Expr(Normal Density(x, mean1, stdev1));<BR />N2 = Expr(Normal Density(x, mean2, stdev2));
//––––––––––
// calculate graph ranges
rangemin = Minimum(mean1-6*stdev1,mean2-6*stdev2);
rangemax = Maximum(mean1+6*stdev1,mean2+6*stdev2);
// Illustration
ym = zm = 1 :: 2000; // 2000 has to do with how detailed the plot should be
multiplier = (rangemax-rangemin)/(Maximum(ym)-Minimum(ym));
xm = (ym-Minimum(ym))*multiplier+rangemin;
ovl = 0;
For(i = 1, i <= N Col(xm), i++,
ym[i] = Minimum(Normal Density(xm[i], mean1, stdev1), Normal Density(xm[i], mean2, stdev2));
zm[i] = Maximum(Normal Density(xm[i], mean1, stdev1), Normal Density(xm[i], mean2, stdev2));
If(i>1, ovl += 0.5*(ym[i-1]+ym[i])*(xm[i]-xm[i-1]));
);
New Window("Overlap Coefficient",
y = Graph Box(
Y Scale(0, 1.2*Maximum(zm)),
X Scale(rangemin, rangemax),
Y Function(N1, x);
Y Function(N2, x);
Text({Mean(xm), 0.6*Maximum(zm)}, "OVL% = ", ovl*100);
Fill Color(1);
Polygon(xm, ym);
)
);Re : existe-t-il un moyen de trouver l'aire commune à deux courbes de distribution normale différentes à l'aide de JMP ?Quelqu'un peut-il aider à résoudre ce script. Mon JSL n'est tout simplement pas assez bon pour comprendre ce qui ne va pas lorsque nous utilisons un ensemble de données réelles et que le graphique n'est pas correctement mis à l'échelle et n'affiche/calcule pas l'OVL ?
données d'exemple :
| moyenne1 = 46,17 | type1 = 16,27 |
| moyenne2 = 82,08 | std2 = 17,68 |
Erreurs constatées
- En utilisant les données ci-dessus, OVL n'est pas affiché/calculé (je ne suis pas sûr de ce qui est vrai)
- Les axes sont réglés à la mauvaise échelle (une fonction automatique aiderait)
- Lorsque les échelles sont ajustées dans le code ou à l'aide d'un outil manuel, nous voyons les courbes PDF mais pas de zone ombrée
Re : existe-t-il un moyen de trouver l'aire commune à deux courbes de distribution normale différentes à l'aide de JMP ?Le graphique de JMP (merci @SP ). Bon à savoir qu'il existe également une solution analytique.
overlapoverlapchevaucher
Re : existe-t-il un moyen de trouver l'aire commune à deux courbes de distribution normale différentes à l'aide de JMP ?@SP Merci pour ce partage !J'ai comparé ce script à un exemple donné sur le site Web suivant grâce à un de mes collègues : https://stats.stackexchange.com/questions/103800/calculate-probability-area-under-the-overlapping-area-of-two-normal-distributi
Avec les paramètres moyenne et sigma pour les première et deuxième distributions respectivement :
"Pour votre exemple, avec µ 1 = 5.28 , µ 2 = 8.45 , σ 1 = 0,91 , σ 2 = 1.36 μ1=5.28,μ2=8.45,σ1=0.91,σ2=1.36 , cela donne : c = 6.70458... c=6.70458... , et l'aire de la section verte est : 0,158413"
Le script .JSL donne exactement le même résultat pour la zone de la section superposée !
Names Default To Here(1);
// Define curves and calculate overlap area
mean1 = 5.28;
stdev1 = 0.91;
mean2 = 8.45;
stdev2 = 1.36;
N1 = Expr(Normal Density(x, mean1, stdev1));
N2 = Expr(Normal Density(x, mean2, stdev2));
ovl = Integrate(Min(N1, N2), x, ., .);
Show(ovl);
//––––––––––
// Illustration
ym = xm = (-1000 :: 1000) / 100;
For(i = 1, i <= N Col(xm), i++,
ym[i] = Min(Normal Density(xm[i], mean1, stdev1), Normal Density(xm[i], mean2, stdev2))
);
New Window("Overlap Coefficient",
y = Graph Box(
Y Scale(0, 1),
X Scale(-5, 12),
Y Function(N1, x);
Y Function(N2, x);
Text({0, 0.6}, "OVL% = ", ovl*100);
Fill Color(1);
Polygon(xm, ym);
)
);

Re : existe-t-il un moyen de trouver l'aire commune à deux courbes de distribution normale différentes à l'aide de JMP ?Dans JMP 12, il existe une fonction Integrate() assez efficace qui peut être utilisée pour calculer la zone confinée par le minimum des deux courbes.
L'exemple ci-dessous n'est pas très utile (vous voudrez probablement obtenir les paramètres de la plateforme de distribution) mais peut vous donner quelques idées...
Names Default To Here(1);
// Define curves and calculate overlap area
N1 = Expr(Normal Density(x, 1, 2));
N2 = Expr(Normal Density(x, 0, 1));
ovl = Integrate(Min(N1, N2), x, ., .);
Show(ovl);
//––––––––––
// Illustration
ym = xm = (-500 :: 500) / 100;
For(i = 1, i <= N Col(xm), i++,
ym[i] = Min(Normal Density(xm[i], 1, 2), Normal Density(xm[i], 0, 1))
);
New Window("Overlap Coefficient",
y = Graph Box(
Y Scale(0, 1),
X Scale(-5, 5),
Y Function(N1, x);
Y Function(N2, x);
Text({0, 0.6}, "OVL = ", ovl);
Fill Color(1);
Polygon(xm, ym);
)
);
