Calcular y agregar un rango de dosis según los valores proporcionadosEstoy creando un script para importar y analizar datos de muestras sin procesar generados en un bioensayo.
Para ello es necesario identificar datos de referencia y datos de muestra y establecer el rango de dosis correspondiente.
En mi script incluí una ventana emergente de "información de la muestra" en la que los operadores pueden identificar las ubicaciones de las muestras (fila x + x) e ingresar el rango de dosis deseado para estas muestras. ¡Y aquí es donde comienza mi problema!

Los nombres de muestra se agregan correctamente a la tabla de datos, pero ¿cómo obtengo los puntos de dosis en función de los valores ingresados allí?
El script debería poder calcular cada punto de dosis basándose en una concentración inicial y un factor de dilución.
Cómo quiero que se vea (ver la columna 'Dosis', ingresada manualmente para este ejemplo):

¿Alguna sugerencia?
Estoy trabajando en JMP 18, mi script para la información de muestra aparece hasta ahora:
nw = New Window( "Sample info", << Modal,
H List Box(
Panel Box( "Enter Sample names",
V List Box(
Text Box( "Row A+E" ),
AE = Text Edit Box( "", << Set Width( 200 ) ),
Text Box( "Row B+F" ),
BF = val2 = Text Edit Box( "", << Set Width( 200 ) ),
Text Box( "Row C+G" ),
CG = val3 = Text Edit Box( "", << Set Width( 200 ) ),
Text Box( "Row D+H" ),
DH = val4 = Text Edit Box( "", << Set Width( 200 ) );
)
),
Spacer Box( Size( 10, 10 ) ),
V List Box(
Panel Box("Calculate dosepoints",
V List Box(
Text Box( "Start Conc. (ng/mL)" ),
Conc = Number Edit Box( ),
Text Box( "n Dosepoints" ),
nDP = Number Edit Box( 12 ),
Text Box( "Factor" ),
xF = Number Edit Box( 0.2 ),
)
),
Spacer Box( Size( , 8 ) ),
H List Box(
Spacer Box( Size( 77, 1 ) ),
Button Box("Ok",
val1 = AE << Get text ();
val2 = BF << Get text ();
val3 = CG << Get text ();
val4 = DH << Get text ();
val5 = Conc << Get ();
val6 = nDP << Get ();
val7 = xF << Get ();
Current Data Table() << New Column( "Sample", Character, "Nominal",
Formula(
Match( :Row,
"A", val1,
"E", val1,
"B", val2,
"F", val2,
"C", val3,
"G", val3,
"D", val4,
"H", val4
)
)
);
Current Data Table() << New Column( "Dose", Character, "Nominal",
//Formula( ????
// )
),
)
)
)
)
);He agregado una tabla de datos de ejemplo en la que debería funcionar el script anterior.
Automatización y scriptingExploración y visualización de datosRe: Calcular y agregar un rango de dosis según los valores proporcionadosQuizás algo como esto
Eval(EvalExpr(
dt << New Column("R", Numeric, Continuous, Formula(
Expr(start_conc)/ Expr(factor) ^ (Col Number(:Sample, :Sample) - Col Cumulative Sum(1, :Sample))
));
));
Re: Calcular y agregar un rango de dosis según los valores proporcionados¡Casi!
Adapté un poco su script y pude calcular el rango de dosis correcto para una de las réplicas (ver archivo adjunto). La otra réplica debería tener los mismos valores (es decir, 20.000 - 0.0004), pero en su lugar sigue dividiendo el último resultado de la réplica 2.
Entonces, para la muestra 'RS', ubicada en la fila A (réplica 1) y E (réplica 2), los valores de la fila E varían desde el rango deseado de 20.000 a 0.0004, pero para la fila A el rango es 0.0008 - 1.67e-12.
nw = New Window( "Sample info", << Modal,
H List Box(
Panel Box( "Enter Sample names",
V List Box(
Text Box( "Row A+E" ),
AE = Text Edit Box( "", << Set Width( 200 ) ),
Text Box( "Row B+F" ),
BF = val2 = Text Edit Box( "", << Set Width( 200 ) ),
Text Box( "Row C+G" ),
CG = val3 = Text Edit Box( "", << Set Width( 200 ) ),
Text Box( "Row D+H" ),
DH = val4 = Text Edit Box( "", << Set Width( 200 ) );
)
),
Spacer Box( Size( 10, 10 ) ),
V List Box(
Panel Box("Calculate dosepoints",
V List Box(
Text Box( "Start Conc. (ng/mL)" ),
Conc = Number Edit Box( ),
Text Box( "n Dosepoints" ),
nDP = Number Edit Box( 12 ),
Text Box( "Factor" ),
xF = Number Edit Box( 0.2 ),
)
),
Spacer Box( Size( , 8 ) ),
H List Box(
Spacer Box( Size( 77, 1 ) ),
Button Box("Ok",
val1 = AE << Get text ();
val2 = BF << Get text ();
val3 = CG << Get text ();
val4 = DH << Get text ();
val5 = Conc << Get ();
val6 = nDP << Get ();
val7 = xF << Get ();
Current Data Table() << New Column( "Sample", Character, "Nominal",
Formula(
Match( :Row,
"A", val1,
"E", val1,
"B", val2,
"F", val2,
"C", val3,
"G", val3,
"D", val4,
"H", val4
)
)
);
Eval(
EvalExpr(
Current Data Table() << New Column( "R", Numeric, Continuous,
Formula(
Expr(val5) / Expr(val7) ^ ( Col Number( :Sample, :Sample ) - Col Cumulative Sum( 1, :Sample ))
)
);
)
);
)
)
)
)
);
Re: Calcular y agregar un rango de dosis según los valores proporcionadosDebe agregar una agrupación adicional a Número de columna y Suma acumulativa de columna (la fila podría funcionar, por ejemplo)
20000 / 5 ^ (Col Number(:Sample, :Sample, :Row) - Col Cumulative Sum(1, :Sample, :Row))

Re: Calcular y agregar un rango de dosis según los valores proporcionados¡Sí, funciona perfectamente! ¡Gracias!