<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola a todos. Estoy tratando de ejecutar un Mann-Kendall para probar si una tendencia temporal es significativa. No puedo encontrarlo en el manual de JMP ni nada en línea. ¿Alguien tiene alguna idea?
¡Gracias!
gracias MS y Dave! No estaba seguro de si la Tau de Kendall y la prueba de Mann-Kendall eran iguales (y/o relacionadas) tampoco. ¡Gracias por la información sobre la prueba multivariante y también por el guión!
Incluso si las definiciones de la estadística de prueba de Mann-Kendall y Kendall Tau b a menudo se describen en términos diferentes (desde la perspectiva de la serie temporal y la correlación, respectivamente), son esencialmente las mismas hasta donde puedo decir.
A continuación se muestra un guión que escribí hace bastante tiempo. Calcula y muestra la pendiente de Theil y realiza la prueba de Mann-Kendall. En el gráfico se muestra una línea de regresión lineal paramétrica solo a modo de comparación. Planeé generalizar el script al incluir una función "Por", así como la posibilidad de tener en cuenta los patrones estacionales. Pero aún no he tenido tiempo de realizar esos planes. Espero que esto te dé algunas ideas.
dt = Tabla de datos actual () ;
dlg = Diálogo de columna (
"Estime la pendiente de Theil y Kendall Tau a partir de la tabla de datos" ||
Carbonizarse ( dt << obtener nombre ) ,
Sí = ColList ( "Seleccionar Y" ,
maxicol ( 1 ) ,
mincol ( 1 ) ,
Tipo de datos ( numérico )
) ,
Xs = ColList ( "Seleccionar X" ,
maxicol ( 1 ) ,
mincol ( 1 ) ,
Tipo de datos ( numérico )
) ,
Grupo = ColList ( "Por (no funciona)" , maxicol ( 1 ) )
) ;
COLY = Columna ( dt , dlg [ "Sí" ] ) ;
colX = Columna ( dt , dlg [ "X" ] ) ;
colGrupo = Columna ( dt , dlg [ "Grupo" ] ) ;
//Cálculo de la pendiente de Theil
norte = n filas ( dt ) ;
pendientes = j ( norte , norte , . ) ;
Para ( i = 1 , i < norte , i ++,
Para ( j = i + 1 , j <= norte , j ++,
pendientes [ i , j ] = ( COLY [ j ] - COLY [ i ]) / ( colX [ j ] - colX [ i ])
)
) ;
ellos = cuantil ( 0.5 , pendientes ) ;
//Tau b de Kendall para probar si la pendiente difiere de cero
m.v. = multivariante (
Y ( COLY , colX ) ,
Matriz de diagrama de dispersión ( 0 ) ,
Correlaciones multivariadas ( 0 ) ,
Tau de Kendall ( 1 )
) ;
//Trazar datos y agregar regresión lineal y pendiente de Theil
vivac = bivariado (
Y ( COLY ) ,
X ( colX ) ,
Línea de ajuste ( { Color de linea ( "Rojo" )} ) ,
Ajuste especial ( Pendiente ( ellos ) , { Color de linea ( "Verde" )} ) ,
invisible
) ;
rbiv = vivac << informe ;
rbiv [ "Ajuste lineal" ] << cierra todo asi ;
rbiv [ Cuadro de esquema ( 7 )] << establecer título ( "La pendiente de Theil" ) ;
base de datos = Informe ( m.v. )[ "Multivariado" ] << padre ;
base de datos << anteponer ( rbiv ) ;
base de datos [ Caja de texto ( 4 )] << establecer texto ( "La pendiente de Theil" ) ;
rbiv << Cerrar ventana ;
No estoy seguro de hasta qué punto (si es que lo está) la prueba de Mann-Kendall está relacionada con la estadística Kendall Tau para la correlación no paramétrica.Se puede acceder a este último en la plataforma multivariante: Analizar>Métodos multivariantes y, a continuación, desde el informe multivariante, seleccione Correlaciones no paramétricas en el punto de acceso.
Si las pruebas son completamente diferentes, estaría interesado en cualquier referencia que tenga para este método.Estoy considerando crear un complemento que implemente una serie de métodos (p. ej., índice de Hurst) que se han desarrollado para el campo de la hidrología.
Saludos
dave
Hola, aquí hay una actualización de este script que cubre la situación en la que se especifica una columna en Por rol (con 2 niveles), usando el ejemplo de clase grande.
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" );