<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo alle. Ich versuche, ein Mann-Kendall-Verfahren durchzuführen, um zu testen, ob ein zeitlicher Trend signifikant ist. Ich kann es weder im JMP-Handbuch noch im Internet finden. Hat jemand irgendwelche Ideen?
Danke!
Danke, MS und Dave! Ich war mir auch nicht sicher, ob Kendalls Tau und der Mann-Kendall-Test gleich (und/oder verwandt) sind. Vielen Dank für die Infos zum multivariaten Test und dann auch für das Skript!
Auch wenn die Definitionen der Mann-Kendall-Teststatistik und des Kendall Tau b oft unterschiedlich beschrieben werden (aus Sicht der Zeitreihen bzw. Korrelationen), sind sie, soweit ich das beurteilen kann, im Wesentlichen gleich.
Unten ist ein Skript, das ich vor ziemlich langer Zeit geschrieben habe. Es berechnet und zeigt die Theil-Steigung und führt den Mann-Kendall-Test durch. Nur zum Vergleich wird im Diagramm eine parametrische lineare Regressionslinie angezeigt. Ich hatte vor, das Skript zu verallgemeinern, indem ich eine „By“-Funktion sowie die Möglichkeit einfügte, saisonale Muster zu berücksichtigen. Aber ich hatte noch nicht die Zeit, diese Pläne umzusetzen. Ich hoffe, dass dies Ihnen einige Anregungen gibt.
dt = Aktuelle Datentabelle () ;
dlg = Spaltendialog (
„Schätzen Sie die Theil-Steigung und das Kendall-Tau anhand der Datentabelle.“ ||
Verkohlen ( dt << Namen bekommen ) ,
Ja = ColList ( „Wähle Y“ ,
maxcol ( 1 ) ,
mincol ( 1 ) ,
Datentyp ( numerisch )
) ,
Xs = ColList ( „X auswählen“ ,
maxcol ( 1 ) ,
mincol ( 1 ) ,
Datentyp ( numerisch )
) ,
Gruppe = ColList ( „Von (funktioniert nicht)“ , maxcol ( 1 ) )
) ;
colY = Spalte ( dt , dlg [ „Ja“ ] ) ;
colX = Spalte ( dt , dlg [ „Xs“ ] ) ;
colGroup = Spalte ( dt , dlg [ "Gruppe" ] ) ;
//Berechnung der Theil-Steigung
N = N Zeilen ( dt ) ;
Pisten = J ( N , N , . ) ;
Für ( ich = 1 , ich < N , ich ++,
Für ( J = ich + 1 , J <= N , J ++,
Pisten [ ich , J ] = ( colY [ J ] - colY [ ich ]) / ( colX [ J ] - colX [ ich ])
)
) ;
theil = Quantil ( 0,5 , Pisten ) ;
//Kendalls Tau b zum Testen, ob die Steigung von Null abweicht
mv = Multivariat (
Y ( colY , colX ) ,
Streudiagrammmatrix ( 0 ) ,
Korrelationen multivariat ( 0 ) ,
Kendalls Tau ( 1 )
) ;
//Daten grafisch darstellen und lineare Regression und Theil-Steigung hinzufügen
biv = Bivariat (
Y ( colY ) ,
X ( colX ) ,
Linie anpassen ( { Linienfarbe ( "Rot" )} ) ,
Passform Spezial ( Neigung ( theil ) , { Linienfarbe ( "Grün" )} ) ,
unsichtbar
) ;
rbiv = biv << Bericht ;
rbiv [ "Lineare Anpassung" ] << schließe alles so ;
rbiv [ Gliederungsfeld ( 7 )] << Titel festlegen ( „Theils Hang“ ) ;
db = Bericht ( mv )[ „Multivariat“ ] << Elternteil ;
db << voranstellen ( rbiv ) ;
db [ Textfeld ( 4 )] << Text setzen ( „Theils Hang“ ) ;
rbiv << Fenster schließen ;
Ich bin mir nicht sicher, inwieweit (wenn überhaupt) der Mann-Kendall-Test mit der Kendall-Tau-Statistik für nichtparametrische Korrelation zusammenhängt.Auf Letzteres kann über die multivariate Plattform zugegriffen werden: Analysieren>Multivariate Methoden. Wählen Sie dann im multivariaten Bericht Nichtparametrische Korrelationen aus dem Hotspot aus.
Wenn die Tests völlig unterschiedlich sind, würden mich Ihre Referenzen zu dieser Methode interessieren.Ich denke darüber nach, ein Add-In zu erstellen, das eine Reihe von Methoden (z. B. Hurst-Index) implementiert, die für den Bereich Hydrologie entwickelt wurden
Grüße
Dave
Hallo, hier ist ein Update zu diesem Skript, das die Situation abdeckt, in der eine Spalte in der Rolle „Nach Rolle“ (mit 2 Ebenen) angegeben ist, und zwar anhand des Beispiels „Große Klasse“.
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" );