<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut tout le monde. J'essaie d'exécuter un Mann-Kendall pour tester si une tendance temporelle est significative. Impossible de le trouver dans le manuel JMP ou quoi que ce soit en ligne. Quelqu'un a des idées?
Merci!
merci MS et Dave ! Je ne savais pas non plus si le Tau de Kendall et le test de Mann-Kendall étaient identiques (et/ou liés). Merci pour l'info sur le test multivarié et ensuite pour le script aussi !
Même si les définitions de la statistique du test de Mann-Kendall et du Tau b de Kendall sont souvent décrites en des termes différents (du point de vue des séries chronologiques et de la corrélation, respectivement), elles sont essentiellement les mêmes pour autant que je sache.
Voici un script que j'ai écrit il y a assez longtemps. Il calcule et affiche la pente de Theil et effectue le test de Mann-Kendall. Une ligne de régression linéaire paramétrique est affichée dans le graphique uniquement à des fins de comparaison. J'ai prévu de généraliser le script en incluant une fonction "By" ainsi que la possibilité de tenir compte des modèles saisonniers. Mais je n'ai pas encore eu le temps de réaliser ces plans. J'espère que cela vous donnera des idées.
dt = Tableau de données actuel () ;
dlg = Boîte de dialogue Colonne (
"Estimer la pente de Theil et Kendall Tau à partir du tableau de données " ||
Carboniser ( dt << obtenir le nom ) ,
Oui = ListeCol ( "Sélectionnez Y" ,
maxcol ( 1 ) ,
mincol ( 1 ) ,
Type de données ( numérique )
) ,
X = ListeCol ( "Sélectionner X" ,
maxcol ( 1 ) ,
mincol ( 1 ) ,
Type de données ( numérique )
) ,
Groupe = ListeCol ( "En (ne travaillant pas)" , maxcol ( 1 ) )
) ;
colY = Colonne ( dt , dlg [ "Oui" ] ) ;
colX = Colonne ( dt , dlg [ "X" ] ) ;
colGroupe = Colonne ( dt , dlg [ "Groupe" ] ) ;
//Calcul de la pente de Theil
n = N lignes ( dt ) ;
pentes = J ( n , n , . ) ;
Pour ( je = 1 , je < n , je ++,
Pour ( j = je + 1 , j <= n , j ++,
pentes [ je , j ] = ( colY [ j ] - colY [ je ]) / ( colX [ j ] - colX [ je ])
)
) ;
theil = quantile ( 0,5 , pentes ) ;
//Tau b de Kendall pour tester si la pente diffère de zéro
m.v. = Multivarié (
Oui ( colY , colX ) ,
Matrice de nuage de points ( 0 ) ,
Corrélations multivariées ( 0 ) ,
Tau de Kendall ( 1 )
) ;
//Tracer les données et ajouter la régression linéaire et la pente de Theil
bivouac = Bivarié (
Oui ( colY ) ,
X ( colX ) ,
Ligne d'ajustement ( { Couleur de la ligne ( "Rouge" )} ) ,
Ajustement spécial ( Pente ( theil ) , { Couleur de la ligne ( "Vert" )} ) ,
invisible
) ;
biv = bivouac << rapport ;
biv [ "Ajustement linéaire" ] << fermer tout comme ça ;
biv [ Boîte de contour ( 7 )] << définir le titre ( "Pente de Theil" ) ;
db = Rapport ( m.v. )[ "Multivarié" ] << parent ;
db << ajouter ( biv ) ;
db [ Zone de texte ( 4 )] << Définir le texte ( "Pente de Theil" ) ;
biv << Fermer la fenêtre ;
Je ne sais pas dans quelle mesure (le cas échéant) le test de Mann-Kendall est lié à la statistique Kendall Tau pour la corrélation non paramétrique.Ces derniers sont accessibles sous la plate-forme multivariée : Analyser>Méthodes multivariées, puis dans le rapport multivarié, sélectionnez Corrélations non paramétriques à partir du hotspot.
Si les tests sont complètement différents, je serais intéressé par toutes les références que vous avez pour cette méthode.J'envisage de créer un complément qui implémente un certain nombre de méthodes (par exemple, Hurst Index) qui ont été développées pour le domaine de l'hydrologie
Salutations
David
Bonjour, voici une mise à jour de ce script qui couvre la situation où une colonne dans le Par rôle (avec 2 niveaux) est spécifiée, en utilisant l'exemple Big Class.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dlg = Column Dialog(
"Estimate Theil slope and Kendall Tau from Data Table " ||
Char( dt << get name ),
Ys = ColList( "Select Y",
maxcol( 1 ),
mincol( 1 ),
Datatype( numeric )
),
Xs = ColList( "Select X",
maxcol( 1 ),
mincol( 1 ),
Datatype( numeric )
),
Group = ColList( "By", maxcol( 1 ) )
);
colY = Column( dt, dlg["Ys"] );
colX = Column( dt, dlg["Xs"] );
colGroup = Column( dt, dlg["Group"] );
//create subset data tables when By Role is used
subdt = dt << Subset(
By( :sex ),
All rows,
Selected columns only( 0 ),
);
//hide subset data tables, for 2 levels of the Group column in the By Role
subdt[1] << Show Window(0);
subdt[2] << Show Window(0);
//Calculation of Theil-Sen slope: A robust non-parametric estimate of trend magnitude.
theil = {}; //create empty list call 'theil'to store Theil-Sen slopes
for (k = 1, k <= Nitems(subdt), k++,
curY = Column( subdt[k], dlg["Ys"] );
curX = Column( subdt[k], dlg["Xs"] );
n = N Rows( subdt[k] );
slopes = J( n, n, . ); //this is initialized not as an empty matrix but it's full of missing values
For( i = 1, i < n, i++,
For( j = i+1, j <= n, j++,
slopes[i, j] = (curY[j] - curY[i]) / (curX[j] - curX[i])
)
);
insert into(theil, Quantile( 0.5, slopes )); //calculate the median of all the slopes
);
new window("windowname",
/*Kendall's Tau b to test if slope differs from zero. Analogous to the Mann-Kendall significance test, which Outputs the S statistic and p-value.*/
mv = dt << Multivariate(
Y( colY, colX ),
Scatterplot Matrix( 0 ),
Correlations multivariate( 0 ),
Kendall's Tau( 1 ), /*see above*/
By(colGroup)
);
//Plot data and add linear regression and Theil's slope
biv = dt << Bivariate(
Y( colY ),
X( colX ),
By(colGroup),
Fit Line( {Line Color( "Red" )} ),
//invisible
);
);
//Plot Theil's Slopes using Fit special in Bivariate report
biv[1] << Fit Special( Slope( theil[1] ), {Line Color( "Green" )});
biv[2] << Fit Special( Slope( theil[2] ), {Line Color( "Green" )});
rbiv = biv << Report;
rbiv[1]["Linear Fit"] << close all like this;
//all of the second linear fit outline boxes under an outline box that contains the word "sex" in the title is what I want
tsb = rbiv << Xpath("(//OutlineBox[text()='Linear Fit'])[2]"); //this returns the list of display boxes titled "Linear Fit" that I want to change to "Thiel's slope" and then I am capturing this reference with the variable name tsb
tsb << set title( "Theil's Slope" );