¿Cómo comparar filas con 0 y 1 para averiguar la prevalencia y agrupamiento de dos condiciones médicas?Hola, soy un usuario nuevo y sin experiencia de JMP que trabaja en mi tesis doctoral. Simplemente no puedo averiguar cómo comparar una parte de mis datos y necesito ayuda. Mis datos constan de 146 columnas con 1 o 0 (sí / no) para 146 afecciones médicas respectivamente. Tengo alrededor de 14000 filas (pacientes) para comparar estos datos. Necesito averiguar el orden de las combinaciones más comunes para dos afecciones médicas en la misma persona. ¿Cómo puedo hacer eso?
muy agradecido por la ayuda,
Emma
AnalíticaRe: ¿cómo comparar filas con 0 y 1 para averiguar la prevalencia y agrupación de dos condiciones médicas?Hola @EmmaLT ,
Creo que tengo una idea de cómo hacer lo que está preguntando, pero ayudaría si pudiera compartir algunos de sus datos; puede anonimizarlos si es necesario. No es necesario que sea el conjunto de datos completo, solo un subconjunto para que pueda comprender mejor cómo están estructurados los datos, ya que eso podría afectar la forma de hacer el análisis.
DS
Re: ¿cómo comparar filas con 0 y 1 para averiguar la prevalencia y agrupación de dos condiciones médicas?He creado un script de muestra, que genera una tabla de datos de ejemplo para ejecutar el análisis.Solo estoy creando 100 filas de datos porque lleva un tiempo crear los pares de datos.La tabla resultante proporciona el recuento del número de pacientes en los que se encontró cada combinación de afecciones médicas.

La secuencia de comandos tomará bastante tiempo si la ejecuta en los 14000 pacientes a la vez.Puede ejecutarlo fácilmente en subconjuntos de datos y luego combinar las tablas resultantes.
Names Default To Here( 1 );
dt = New Table( "raw Data" );
dt << add rows( 100 );
dt << New Column( "Patient", set each value( Row() ) );
Try( dt << delete columns( "Column 1" ) );
For( i = 1, i <= 146, i++,
dt << New Column( "Med Cond " || Char( i ),
set each value( Round( Random Uniform( 0, 1 ), 0 ) )
)
);
// Create the paired data table
dtPair = New Table( "Pairs",
New Column( "Patient" ),
New Column( "First Med Cond", Character ),
New Column( "Second Med Cond", Character )
);
//Populate the Pairs Table
For( theRow = 1, theRow <= N Rows( dt ), theRow++,
For( theFirstCond = 2, theFirstCond <= N Cols( dt ), theFirstCond++,
If( Column( dt, theFirstCond )[theRow] == 1,
thePatient = dt:Patient[theRow];
firstCond = (Column( dt, theFirstCond )) << get name;
For( theSecondCond = theFirstCond + 1, theSecondCond <= N Cols( dt ),
theSecondCond++,
If( Column( dt, theSecondCond )[theRow] == 1,
dtPair << add row( 1 );
pairRow = N Rows( dtPair );
dtPair:Patient[pairRow] = thePatient;
dtPair:First Med Cond[pairRow] = firstCond;
dtPair:Second Med Cond[pairRow] = (Column( dt, theSecondCond )) << get name;
)
);
)
)
);
dtSummary = dtPair << Summary(
Group( :First Med Cond, :Second Med Cond ),
Freq( "None" ),
Weight( "None" )
);
dtSummary << sort( by(N Rows), order(descending), replace table(11));Re: ¿cómo comparar filas con 0 y 1 para averiguar la prevalencia y agrupación de dos condiciones médicas?Ocurre que " el orden de las combinaciones más comunes para dos condiciones médicas en la misma persona "podría implicar algunos objetivos de análisis diferentes. Pero, sea cual sea el análisis implícito, recomendaría encarecidamente echar un vistazo primero a lo que está 'en' sus datos.
Un enfoque sería usar "Cols> Utilities> Combine Columns ..." para crear una nueva columna que contenga el estado de cada paciente para cada condición. Luego, puede usar 'Gráfico> Generador de gráficos' para hacer un mapa de árbol de esta nueva columna e inspeccionar los resultados a través de la información sobre herramientas. Si no está seguro de los detalles de cómo hacer esto, pruebe el documentación en línea . Tenga en cuenta que, con tantas condiciones, esto puede ser un desastre.
Como nuevo usuario, probablemente no esté interesado en las secuencias de comandos. Pero el siguiente script simula algunos datos y crea el mapa de árbol. Debido a la aleatoriedad, lo que ve puede ser diferente cada vez. Pero ejecutar este código debería producir un gráfico como:

Para ejecutar el script, haga 'Archivo> Nuevo> Nuevo script', pegue el código en la ventana que aparece, luego haga 'Editar> Ejecutar script'.
NamesDefaultToHere(1);
// Generate some fake binary data for each condition (maximum possible incidence for one condition is 20% of the patients):
// This is unrepresentative since the incidences of the conditions are treated as independent, but the in practice this may not
// be the case
nr = 1400; // Number of patients
nc = 15; // Number of conditions
m = J(nr, nc, 0);
for(c=1, c<=nc, c++,
incidence = RandomInteger(0, Round(0.2 * nr));
m[RandomIndex(nr, incidence), c] = 1;
);
dt = asTable(m);
dt << setName("Fake Incidence Data");
// Use 'Combine Columns' to make a binary string for each patient indicating what conditions they have
cols = dt << getColumnNames;
dt << combineColumns(columns(Eval(cols)), ColumnName("Patient Condition"), Delimiter( "" ), MultipleResponse(0));
// Make a Treemap of the patient conditions
dt << Graph Builder(
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :Patient Condition ) ),
Elements( Treemap( X, Legend( 1 ) ) )
);
// Aggregate the patient comnditions to a new table and sort it (descending)
//dt2 = dt << Summary(Group(:Patient Condition));
//dt2 << Sort(By(:N Rows), ReplaceTable, Order(Descending));