Obtener un promedio de un subconjunto de datosHola,
Tengo intensidades de 4 muestras tratadas y 5 no tratadas tomadas en un rango de longitudes de onda (400 - 600 nm) en tres puntos de tiempo diferentes (0, 1, 3 horas).
A la larga, trato de normalizar mis datos para que la intensidad promedio a 400 nm de las muestras no tratadas sea 1 en cada punto de tiempo. Para hacer eso, necesito descubrir cómo obtener la intensidad promedio de 400 nm sin tratar a las 0, 1, 3 horas.
Este es mi código actual:
Col Mean(
:Intensity,
:Time == 1 & :Wavelength( nm ) == 400 & :Treat == "No"
)
A partir de los gráficos que hice (y una hoja dinámica de Excel), sé que el valor debería ser de aproximadamente 0,72 durante 1 hora, pero obtengo 1,3 para la mayoría de las filas. También obtengo 0.68 para las filas que satisfacen mis 3 declaraciones "y", pero sé que las hojas dinámicas de Excel a veces normalizan cosas divertidas, por lo que no estoy seguro de si me preocupan las diferencias allí.
Cualquier sugerencia para hacer que mi código sea consistente sería muy apreciada.
Re: Obtener un promedio de un subconjunto de datosNo importa 
Col Media ( :altura, :edad)
Gracias
Re: Obtener un promedio de un subconjunto de datosJim,
¿Cómo obtendría la columna Ejemplo para contener la columna media de alturas solo para la edad de la persona en la fila?
Por ejemplo, en los datos de muestra, Katie tiene 12 años, me gustaría que su columna Ejemplo contenga la altura media de la columna solo para los niños de 12 años, y para Alice, que tiene 13 años, me gustaría que su columna Ejemplo contenga la columna media altura para sólo los 13 años de edad.
Espero que haya una manera más fácil que usar ifs anidados para cada edad.
Gracias,
Marca
Re: Obtener un promedio de un subconjunto de datosTerminé usando su segunda opción, pero todavía tengo que ingresar manualmente ese factor de normalización para mi cálculo... Mi código final se ve así:
If( :Time == 0,
:Intensity / 1.11175075,
If( :Time == 1,
:Intensity / 0.772546829268293,
If( :Time == 3,
:Intensity / 1.2335052,
"Error"
)
)
Re: Obtener un promedio de un subconjunto de datosEso funcionó, pero no es fácil aplicar un valor particular (algo así como usar $$ en Excel) a todas las filas que considero del mismo tipo.
Creo que es solo una diferencia en el software, y tendré que acostumbrarme a las diferencias.
Re: Obtener un promedio de un subconjunto de datosQuizás esto sea obvio, pero parece más sencillo que lo que acabas de esbozar.Usando su ejemplo, creé una nueva columna con la fórmula Col Mean (: Intensidad,: Período de tiempo,: Tratamiento,: Longitud de onda).No uso guiones si puedo evitarlos y se pueden evitar aquí.La función Col Mean (en el grupo Estadística) permite calcular la media como una función de un número de variables de agrupación y esto produce exactamente la tabla que muestra.
Re: Obtener un promedio de un subconjunto de datosHola,
Si entiendo su pregunta correctamente, está solicitando calcular la estadística media para una columna en particular mediante una o más columnas de agrupación.
En la tabla de datos de ejemplo adjunta, guardé dos scripts para ilustrar cómo puede hacer esto usando dos enfoques diferentes. El titulado "Media por Trt y período de tiempo y longitud de onda" crea una tabla dinámica con un filtro de datos local para que pueda ver las intensidades medias para varios períodos de tiempo, tratamientos y longitudes de onda. El filtro de datos locales se puede aplicar de forma condicional (mediante el uso de "Condicional" en la opción del triángulo rojo) para que, al seleccionar una categoría, limite las categorías del siguiente filtro de columna solo a aquellas que se encuentran en la categoría seleccionada.
Tabulate (pivot table) with local data filterTabulate (pivot table) with local data filterTabular (tabla dinámica) con filtro de datos locales
El segundo guión titulado "Resumen de tablas" es un ejemplo del uso de Tablas-->Resumen con el tratamiento, el período de tiempo y la longitud de onda como columnas de agrupación.
Tables Summary Dialog with Group ColumnsTables Summary Dialog with Group ColumnsDiálogo de resumen de tablas con columnas de grupo
Y para los demás que quieran ver cómo realizar la tabla dinámica con un script.
Tabulate(
Show Control Panel( 0 ),
Set Format( Mean( :Intensity( 12, 1 ) ) ),
Add Table(
Row Table(
Grouping Columns( :Time Period, :Treatment, :Wavelength ),
Analysis Columns( :Intensity ),
Statistics( Mean )
)
),
Local Data Filter(
Add Filter(
columns( :Wavelength, :Time Period, :Treatment ),
Where( :Time Period == "0" ),
Display( :Treatment, Size( 309, 232 ), List Display )
)
)
)
Y finalmente, las Tablas-->Resumen con el JSL correspondiente:
Data Table( "Getting an average of a subset of data.jmp" ) <<
Summary(
Group( :Time Period, :Treatment, :Wavelength ),
Mean( :Intensity ),
Freq( "None" ),
Weight( "None" )
)
¿Es esto más hacia lo que esperas?
mejor,
Stan
Re: Obtener un promedio de un subconjunto de datosEstoy seguro de que no sigo en total detalle las diferentes condiciones que debe implementar para que esto funcione, sin embargo, he reunido un ejemplo que creo ilustrará el método que funcionará para generar la respuesta. necesitas.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << New Column( "Example",
formula(
If( :sex == "F" & :age == 12 | :sex == "M" & :age == 13,
Col Mean( If( :sex == "F" & :age == 12 | :sex == "M" & :age == 13, :height, . ) ),
.
)
)
);
Echa un vistazo a la fórmula. Usó 2 decisiones diferentes para obtener su respuesta. Primero, solo aquellas filas donde se cumplen las combinaciones específicas de sexo y edad, deben calcularse las medias. Y si no se cumplen esos detalles, el valor debe ser un valor faltante. La segunda decisión se realiza cuando la primera decisión es correcta, y luego queremos calcular la media de la columna, pero solo incluir los valores donde los valores específicos de las combinaciones de sexo y edad son verdaderos.
Re: Obtener un promedio de un subconjunto de datosNo, esto no es en absoluto lo que esperaba.
Solo estoy tratando de obtener el valor promedio de la intensidad usando todos los
valores donde el tiempo es 1 h, la longitud de onda es 400 y no ha habido
tratamiento (I@1,400,N). Haré lo mismo durante 0 y 3 horas (I@ 0, 400,N y
I@3, 400,N)
Eventualmente voy a hacer una fórmula que use sentencias if para verificar la hora
para la fila, luego divide la intensidad de esa fila por el tiempo
valor "I@" apropiado.
Apenas:
Si t = 0, I/I@0,400,n
De lo contrario, si t= 1, I/I@1,400,n
De lo contrario, si t = 3, I/I@3,400,n
otro error
Espero que eso explique mejor lo que estoy tratando de hacer.
Re: Obtener un promedio de un subconjunto de datosNo estoy seguro de que esté interpretando lo que realmente está haciendo su código. El segundo elemento dentro de la función Col Mean() es una declaración "Por". Es decir, de la forma en que lo tiene codificado, calculará una media de Intensidad para todos los rews que cumplan con lo siguiente
:Time == 1 & :Wavelength( nm ) == 400 & :Treat == "No"
y para todas las filas que no cumplan con ese criterio, calculará la media de Intensidad para todas esas filas. Entonces, cuando se aplica la fórmula, solo puede generar uno de dos valores diferentes. ¿Es esto lo que estás esperando?