Nouveau dans

Tests non-paramétriques de tendance

Les tests de tendance concernent les réponses dans des groupes ordonnés. Ils vérifient si les valeurs des réponses ont tendance à augmenter ou à diminuer dans les groupes.
Les tests de tendance sont généralement utilisés lorsqu’il n’y a qu’une petite quantité de données et aucune covariable à contrôler, et qu’un test donnant une valeur p valide dans de petits échantillons est souhaité. nptrend a une option pour calculer des valeurs p exactes basées sur des permutations de Monte Carlo ou une énumération complète de la distribution de permutation (cette dernière option n’est pratique que pour des échantillons extrêmement petits).
nptrend effectue quatre tests différents pour la tendance :

  • le test de Cochran-Armitage,
  • le test de Jonckheere-Terpstra,
  • le test de tendance linéaire par linéaire, et
  • un test utilisant les rangs développé par Cuzick.

Pour calculer la statistique de Cochran-Armitage pour la tendance, vous tapez

. nptrend relief, group(dose) carmitage

Points forts

  • nptrend réalise quatre tests non paramétriques de tendance
    • Test de Cochran-Armitage
    • test de Jonckheere-Terpstra
    • test linéaire par linéaire
    • test de Cuzick avec rangs
  • option pour les p-values exactes

Voyons comment cela fonctionne

Pour le test de Cochran-Armitage (lorsque la réponse est 0/1), le test de tendance linéaire et le test de Cuzick, les groupes ont également des scores. Il teste la tendance des proportions de réponses positives dans les groupes.
Nous avons ici des données fictives provenant d’un essai clinique d’un nouveau médicament pour le traitement des migraines. La variable dose contient la dose de médicament administrée à un sujet. La variable soulagement est 0/1, 0 indiquant aucun soulagement et 1 un soulagement partiel ou total.
Voici un tableau de ces données :

. webuse migraine
(Fictional migraine drug data)

. tabulate dose relief, row nokey

Relief of migraine
Mycureit after 2 hours
dose in mg 0 1 Total
10 80 120 200
40.00 60.00 100.00
20 92 108 200
46.00 54.00 100.00
30 83 117 200
41.50 58.50 100.00
40 63 137 200
31.50 68.50 100.00
Total 318 482 800
39.75 60.25 100.00

Nous vérifierons s’il existe une tendance par dose dans la proportion de sujets rapportant un soulagement.

. nptrend relief, group(dose) carmitage

Cochran–Armitage test for trend

   Number of observations =      800
         Number of groups =        4
Number of response levels =        2

Mean
response Number
Group Group score score of obs
dose
10 10 .6 200
20 20 .54 200
30 30 .585 200
40 40 .685 200
Statistic = .003 Std. err. = .0015476 z = 1.939 Prob > |z| = 0.0526 Test of departure from trend: chi2(2) = 5.45 Prob > chi2 = 0.0656

nptrend affiche d’abord un tableau du score moyen de réponse par groupe. Dans ce cas, le score moyen de réponse est simplement la proportion de sujets du groupe qui se disent soulagés.
La statistique z de Cochran-Armitage teste une tendance linéaire. Une statistique X2 qui teste l’écart par rapport à une tendance linéaire est également calculée.
Lorsque la statistique z pour la tendance linéaire ou la statistique X2 pour l’écart par rapport à la tendance linéaire est grande, cela signifie que le test d’indépendance entre la réponse et le groupe est rejeté. z étant grand signifie qu’il y a une tendance linéaire qui rejette l’indépendance.X2 étant grand signifie qu’il y a des différences autres que la tendance linéaire qui rejettent l’indépendance.
Dans l’exemple ci-dessus, le test linéaire de tendance a donné une valeur p de 0,0526, ce qui n’est pas tout à fait significatif au niveau de 0,05. Le test d’écart par rapport à la tendance a donné une valeur p de 0,0656, ce qui signifie qu’il existe des preuves faibles, n’atteignant pas le seuil de signification, d’une association non linéaire entre la dose et le soulagement.
Des tendances autres que linéaires peuvent également être testées à l’aide de l’option scoregroup(). Dans cet exemple, l’option scoregroup(1 4 9 16) permet de tester une tendance quadratique de la dose.
Le test de Cochran-Armitage exige que les réponses soient 0/1 ou que l’indicateur de groupe soit 0/1. Les autres tests de tendance calculés par nptrend n’ont aucune restriction sur la réponse ; la variable réponse peut avoir n’importe quelle valeur.
Voici un exemple dont les réponses sont l’exposition oculaire aux rayons ultraviolets pour 32 paires de lunettes de soleil. Les lunettes de soleil sont classées en 3 groupes en fonction de la quantité de lumière visible transmise. Nous énumérons certaines des données :

. webuse sg
(Ultraviolet radiation exposure with sunglasses)

. list in 1/12, separator(6)

  group exposure
1. < 25% 1.4
2. < 25% 1.4
3. < 25% 1.4
4. < 25% 1.6
5. < 25% 2.3
6. < 25% 2.5
7. 25% to 35% .9
8. 25% to 35% 1
9. 25% to 35% 1.1
10. 25% to 35% 1.1
11. 25% to 35% 1.2
12. 25% to 35% 1.2

Le test de Jonckheere-Terpstra est utile lorsque la tendance n’est pas claire et que l’on veut simplement tester une tendance quelconque. Il permet de vérifier si l’ordre des réponses est associé à l’ordre des groupes.
Pour calculer le test de Jonckheere-Terpstra, nous spécifions l’option jterpstra.

. nptrend exposure, group(group) jterpstra

Jonckheere–Terpstra test for trend

   Number of observations =       32
         Number of groups =        3
Number of response levels =       23

Mean
response Number
Group Group score score of obs
group
< 25% 1 1.766667 6
25% to 35% 2 2.311111 18
> 35% 3 4.85 8
Statistic = 82 Std. err. = 54.80056 z = 1.496 Prob > |z| = 0.1346

Nous constatons que le score moyen des réponses augmente avec l’indicateur de groupe, mais la valeur p du test de Jonckheere-Terpstra est de 0,1346, ce qui n’est pas significatif au niveau de 0,05.
Étant donné que la statistique de Jonckheere-Terpstra teste tout type de tendance dans les réponses entre les groupes ordonnés, elle ne sera pas aussi puissante qu’un test qui émet une hypothèse précise sur la véritable tendance. Le test de tendance linéaire par linéaire vous permet de faire exactement cela. Le test de tendance linéaire par linéaire utilise les valeurs numériques des réponses pour spécifier la tendance testée. La manière dont la tendance est supposée varier entre les groupes est spécifiée par les valeurs numériques de la variable de groupe.
La statistique linéaire-par-linéaire est équivalente au coefficient de corrélation de Pearson, la différence étant que le coefficient de corrélation de Pearson est normalisé par les écarts types des scores. Les valeurs p sont légèrement différentes car la valeur p du test linéaire par ligne est basée sur sa distribution de permutation alors que la valeur p du coefficient de corrélation de Pearson suppose la normalité.
Pour calculer le test linéaire par linéaire, nous spécifions l’option linear. Nous spécifions également notable pour supprimer l’affichage des scores moyens des réponses par groupe.

. nptrend exposure, group(group) linear notable

Linear-by-linear test for trend

   Number of observations =       32
         Number of groups =        3
Number of response levels =       23

                Statistic = .7035156
                Std. err. = .3063377
                        z =    2.297
               Prob > |z| =   0.0216

La valeur p du test linéaire par ligne est de 0,0216, ce qui est considérablement différent de la valeur p calculée par le test de Jonckheere-Terpstra, qui était de 0,1346. Cela n’est pas surprenant car le test linéaire par ligne suppose une tendance spécifique basée sur des valeurs numériques, alors que la statistique de Jonckheere-Terpstra teste toute tendance.
Le quatrième test de tendance calculé par nptrend est un test basé sur les rangs développé par Cuzick.

. nptrend exposure, group(group) cuzick

. nptrend exposure, group(group) cuzick notable

Cuzick's test with rank scores

   Number of observations =       32
         Number of groups =        3
Number of response levels =       23

                Statistic =  1.65625
                Std. err. = 1.090461
                        z =    1.519
               Prob > |z| =   0.1288

Dans ce cas, il produit une valeur p similaire à la valeur p du test de Jonckheere-Terpstra.

Valeurs p exactes

nptrend calcule également les valeurs p exactes en utilisant les permutations de Monte Carlo lorsque l’option exact est spécifiée. Ici, nous calculons la valeur p exacte pour le test de Jonckheere-Terpstra.

. nptrend exposure, group(group) jterpstra notable exact

Permutations (10,000): ..........1,000..........2,000..........3,000..........4,000..........5,00
> 0..........6,000..........7,000..........8,000..........9,000..........10,000 done

Jonckheere–Terpstra test for trend

   Number of observations =       32
         Number of groups =        3
Number of response levels =       23

                Statistic =       82
                Std. err. = 54.80056
                        z =    1.496
               Prob > |z| =   0.1346
               Exact prob =   0.1510 (10,000 Monte Carlo permutations)

Par défaut, 10 000 permutations de Monte Carlo sont utilisées. Cela a donné une valeur p exacte de 0,1510, légèrement différente de la valeur p de 0,1346, calculée en utilisant une approximation normale.
Les permutations de Monte Carlo donnent des résultats avec une erreur aléatoire, donc pour plus de précision, plus de permutations peuvent être calculées. Ci-dessous, nous utilisons 100 000 permutations, et un point est affiché toutes les 1 000 permutations pour suivre la progression. Nous spécifions une graine de nombres aléatoires pour pouvoir dupliquer les résultats et l’option show, qui affiche un tableau détaillé des résultats de Monte Carlo.

. nptrend exposure, group(group) jterpstra notable ///
> exact(montecarlo, reps(100000) dots(1000) rseed(1234) show)

Permutations (100,000): ..........10,000..........20,000..........30,000..........40,000....
> ......50,000..........60,000..........70,000..........80,000..........90,000..........100,
> 000 done

Monte Carlo permutation results                Number of observations =      32
Permutation variable: group                    Number of permutations = 100,000

Monte Carlo error
T T(obs) Test c n p SE(p) [95% CI(p)]
_pm_1 82 lower 93358 100000 .9336 .0008 .9320 .9351
upper 6874 100000 .0687 .0008 .0672 .0703
two-sided .1375 .0011 .1353 .1396
Notes: For lower one-sided test, c = #{T <= T(obs)} and p = p_lower = c/n. For upper one-sided test, c = #{T >= T(obs)} and p = p_upper = c/n. For two-sided test, p = 2*min(p_lower, p_upper); SE and CI approximate. Jonckheere–Terpstra test for trend Number of observations = 32 Number of groups = 3 Number of response levels = 23 Statistic = 82 Std. err. = 54.80056 z = 1.496 Prob > |z| = 0.1346 Exact prob = 0.1375 (100,000 Monte Carlo permutations)

a valeur p exacte issue du calcul de Monte Carlo est de 0,1375, proche de la valeur p approximative de 0,1346. D’après le tableau détaillé des résultats, nous voyons que l’intervalle de confiance à 95% pour la valeur p de Monte Carlo est de [0.1353, 0.1396], qui n’inclut pas la valeur p approximative.
Cet exemple ne comporte que 32 observations. Si nous souhaitons publier les résultats, nous voudrons probablement exécuter à nouveau nptrend, en spécifiant 1 000 000 de permutations ou plus pour réduire davantage l’erreur de Monte Carlo. Les permutations sont générées à l’aide d’un algorithme rapide, et le calcul ne prend pas beaucoup de temps.
Pour les ensembles de données extrêmement petits, l’option exact(enumerate) peut être utilisée pour énumérer complètement la distribution de permutation. Cela donne une valeur p exacte sans aucune erreur de Monte Carlo