Méta-analyse en Python

introduction

Python a également un package appelé PythonMeta qui effectue une méta-analyse, mais cette fois je vais essayer de mettre en œuvre une méta-analyse avec des pandas dans le but d'étudier. J'ai fait.

Il existe deux principaux types de modèles de méta-analyse, ** Modèle à effets fixes ** et ** Modèle à effets aléatoires **, alors implémentons chacun d'eux.

Exemple de données

Cette fois, je vais expérimenter en utilisant les données suivantes.

import pandas as pd
import numpy as np
data = pd.DataFrame({
    "g": [0.12, 0.23, 0.34, 0.45, 0.42, 0.39, 0.49, 0.65, 0.76, 0.87],
    "V": [0.01, 0.04, 0.03, 0.02, 0.01, 0.02, 0.03, 0.04, 0.02, 0.01]
})

Ici, g est Hedges'g (= montant de l'effet) et V est la dispersion du montant de l'effet.

Modèle à effet fixe

Dans le modèle à effet fixe, le poids de l'élément est simplement l'inverse de la distribution du montant de l'effet. Par conséquent, le montant d'effet moyen à calculer est calculé comme le montant d'effet de chaque élément pondéré et divisé par le poids total. La formule de calcul est la suivante. Même en Python, il peut être écrit en 3 lignes.

#Modèle à effet fixe
data['W'] = 1 / data.V
data['Wg'] = data['g'] * data['W']
result = data['Wg'].sum() / data['W'].sum()
result
>> 0.4776

Modèle à effet variable

La partie calcul du poids est un peu compliquée dans le modèle à effets variables. Afin de tenir compte de la variation du montant de l'effet entre les études, une fois que le montant de l'effet est moyenné, l'écart de chaque élément par rapport à celui-ci est incorporé dans le calcul du poids. La formule de calcul est la suivante.

g_hat = data.g.mean()
Q = (data.W * (data.g - g_hat)**2).sum()
data['W2'] = data.W ** 2
C = data.W.sum() - (data.W2.sum()/data.W.sum())
d = len(data) - 1
#Dispersion inter-études
if (Q-d) > 0:
    V_between = (Q - d) / C
else:
    V_between = 0
data['V_str'] = data.V + V_between
data['W_str'] = 1 / data.V_str
result = (data.g * data.W_str).sum() / data.W_str.sum()
result

Autre

Les modèles à effets fixes et à effets variables peuvent calculer un intervalle de confiance de 95% à partir de la somme des poids calculés.

std_err = np.sqrt(1/data.W_str.sum())
lwr = result - 1.96 * std_err
upr = result + 1.96 * std_err
[lwr, upr]

Les références

["Introduction to Meta-Analysis for Systematic Review of Psychology / Educational Research" édité par Takeshi Yamada et Toshiya Inoue](https://www.amazon.co.jp/%E3%83%A1%E3%82%BF% E5% 88% 86% E6% 9E% 90% E5% 85% A5% E9% 96% 80-% E5% BF% 83% E7% 90% 86% E3% 83% BB% E6% 95% 99% E8 % 82% B2% E7% A0% 94% E7% A9% B6% E3% 81% AE% E7% B3% BB% E7% B5% B1% E7% 9A% 84% E3% 83% AC% E3% 83 % 93% E3% 83% A5% E3% 83% BC% E3% 81% AE% E3% 81% 9F% E3% 82% 81% E3% 81% AB-% E5% B1% B1% E7% 94% B0-% E5% 89% 9B% E5% 8F% B2 / dp / 4130420720)

Recommended Posts

Méta-analyse en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
SendKeys en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Liste triée en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Modifier les polices en Python
Motif singleton en Python
Opérations sur les fichiers en Python
Lire DXF avec python
Daily AtCoder # 53 en Python
Séquence de touches en Python
Utilisez config.ini avec Python
Daily AtCoder # 33 en Python
Résoudre ABC168D en Python
Distribution logistique en Python
AtCoder # 7 tous les jours avec Python