<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao a tutti. Sto cercando di eseguire un Mann-Kendall per verificare se una tendenza temporale è significativa. Non riesco a trovarlo nel manuale JMP o altro online. Qualcuno ha qualche idea?
Grazie!
grazie MS e Dave! Non ero sicuro che il Tau di Kendall e il test di Mann-Kendall fossero uguali (e/o correlati). Grazie per le informazioni sul test multivariato e poi anche per lo script!
Anche se le definizioni Mann-Kendall test statistic e Kendall Tau b sono spesso descritte in termini diversi (rispettivamente dalle serie temporali e dalle prospettive di correlazione), sono essenzialmente le stesse per quanto ne so.
Di seguito è riportato uno script che ho scritto molto tempo fa. Calcola e mostra la pendenza di Theil ed esegue il test di Mann-Kendall. Una linea di regressione lineare parametrica è mostrata nel grafico solo per confronto. Ho pianificato di generalizzare lo script includendo una funzione "By" e la possibilità di tenere conto dei modelli stagionali. Ma non ho ancora avuto il tempo di realizzare quei piani. Spero che questo ti dia qualche idea.
dt = Tabella dei dati correnti () ;
dlg = Finestra di dialogo Colonna (
"Stima la pendenza di Theil e Kendall Tau dalla tabella dei dati" ||
Car ( dt << ottenere nome ) ,
Sì = ColList ( "Seleziona Y" ,
maxcol ( 1 ) ,
mincol ( 1 ) ,
Tipo di dati ( numerico )
) ,
Xs = ColList ( "Seleziona X" ,
maxcol ( 1 ) ,
mincol ( 1 ) ,
Tipo di dati ( numerico )
) ,
Gruppo = ColList ( "Da (non funzionante)" , maxcol ( 1 ) )
) ;
COLY = Colonna ( dt , dlg [ "Sì" ] ) ;
colX = Colonna ( dt , dlg [ "X" ] ) ;
colGroup = Colonna ( dt , dlg [ "Gruppo" ] ) ;
//Calcolo della pendenza di Theil
N = N righe ( dt ) ;
pendii = J ( N , N , . ) ;
Per ( io = 1 , io < N , io ++,
Per ( J = io + 1 , J <= N , J ++,
pendii [ io , J ] = ( COLY [ J ] - COLY [ io ]) / ( colX [ J ] - colX [ io ])
)
) ;
theil = Quantile ( 0,5 , pendii ) ;
//Tau b di Kendall per verificare se la pendenza differisce da zero
mv = Multivariato (
Y ( COLY , colX ) ,
Matrice del grafico a dispersione ( 0 ) ,
Correlazioni multivariate ( 0 ) ,
Tau di Kendall ( 1 )
) ;
//Traccia i dati e aggiungi la regressione lineare e la pendenza di Theil
biv = Bivariato (
Y ( COLY ) ,
X ( colX ) ,
Linea adatta ( { Colore linea ( "Rosso" )} ) ,
Vestibilità speciale ( Pendenza ( theil ) , { Colore linea ( "Verde" )} ) ,
invisibile
) ;
rbiv = biv << rapporto ;
rbiv [ "Vestibilità lineare" ] << chiudi tutto così ;
rbiv [ Casella di contorno ( 7 )] << imposta il titolo ( "Theil's Slope" ) ;
db = Rapporto ( mv )[ "Multivariato" ] << genitore ;
db << anteporre ( rbiv ) ;
db [ Casella di testo ( 4 )] << impostare il testo ( "Theil's Slope" ) ;
rbiv << chiudi la finestra ;
Non sono sicuro in che misura (se non del tutto) il test di Mann-Kendall sia correlato alla statistica di Kendall Tau per la correlazione non parametrica.È possibile accedere a quest'ultima dalla piattaforma multivariata: Analizza>Metodi multivariati, quindi dal report multivariato selezionare Correlazioni non parametriche dall'hotspot.
Se i test sono completamente diversi, sarei interessato a tutti i riferimenti che hai per questo metodo.Sto valutando la possibilità di creare un componente aggiuntivo che implementi una serie di metodi (ad es. Indice Hurst) che sono stati sviluppati per il campo dell'idrologia
Saluti
Dave
Ciao, ecco un aggiornamento a questo script che copre la situazione in cui viene specificata una colonna in Per ruolo (con 2 livelli), utilizzando l'esempio 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" );