Necesita ayuda con las secuencias de comandos: ajuste lineal donde la pendiente es la más grande<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Estoy estudiando el crecimiento de una bacteria en medio de crecimiento líquido en los pocillos de una placa de 96 pocillos. Quiero obtener la tasa de crecimiento máxima, que es la pendiente de una línea recta en la fase de crecimiento exponencial, como se muestra a continuación:

Lo que debo hacer es cortar los datos de ambas direcciones para que la línea se ajuste a los 10 puntos de datos que tienen la mayor pendiente.

Cada una de mis tablas de datos tiene 96 de estas curvas indicadas con una designación de letra y número ("Pozo").

Los datos del eje y se transforman en logaritmo natural "(Ln OD 600") y los datos del eje x están en horas ("Tiempo [hrs]"). Actualmente, he escrito un script que usa la plataforma Fit Y by X, coloca "Ln OD 600" en la respuesta Y, "Time [hrs]" en el factor X y "Well" en By-box. Así que obtengo un informe con 96 gráficos diferentes, para cada gráfico se ajusta a una línea y abre un filtro de datos local usando "Tiempo [horas]" y lo corta a 10 puntos de datos/filas coincidentes.

Luego tengo que deslizar manualmente ese filtro/control deslizante a lo largo del tiempo para encontrar la pendiente más grande de la línea. ¡Tengo un par de cientos de archivos de datos, por lo que lleva mucho tiempo hacerlo!

Lo que estoy tratando de hacer es escribir un script que mueva automáticamente el control deslizante a lo largo del tiempo y encuentre la pendiente más grande de la línea. Desafortunadamente, la creación de scripts y la codificación no son una de mis habilidades, por lo que estoy perplejo. He adjuntado mi script JSL a partir de ahora. ¡Gracias por cualquier ayuda o pensamiento!
Re: Necesito ayuda con las secuencias de comandos: ajuste lineal donde la pendiente es mayor
Hola Jim -
¿Cómo modificaría la secuencia de comandos para encontrar la mayor pendiente de los datos ejemplificados en el gráfico anterior en el transcurso del rango?Traté de modificar su secuencia de comandos, pero no excluyó correctamente ninguna fila. Está en el mismo formato que el OP.Cada "pozo" tiene una forma de onda similar.
Gracias,
Dibujó
Re: Necesito ayuda con las secuencias de comandos: ajuste lineal donde la pendiente es mayorJim,
¡Esto es maravilloso! Lo ejecuté en 1 conjunto completo de datos y las pendientes de línea calculadas por el script están correlacionadas con las pendientes calculadas a mano con un R-cuadrado de 0.98. Sospecho que la pequeña variación se debe al error que implica calcularlos a mano. Haré un poco más con él, ¡pero esto parece exactamente lo que necesitaba!Publicaré nuevamente una vez que lo haya ejecutado en algunos de mis archivos de datos ya analizados sobre su rendimiento.
Muchas gracias por la ayuda,
natan
Re: Necesito ayuda con las secuencias de comandos: ajuste lineal donde la pendiente es mayorPruebe este script en sus datos y vea si se acerca más a lo que desea:
Nombres predeterminados hasta aquí ( 1 ) ;
// abre la tabla de datos
dt = Tabla de datos actual () ;
Resumir ( dt , Lista de pozos = por ( : Bien ) ) ;
dt << color por columna ( : Bien ) ;
// Pasar por los datos de cada Pozo y encontrar los mejores 10 puntos contiguos
// con la mejor pendiente
Para ( i = 1 , i <= N elementos ( Lista de pozos ) , i ++,
// Configure las listas para que contengan los 10 puntos de datos determinados con la pendiente más alta
dt << selecciona donde ( : Bien == Lista de pozos [ i ] ) ;
mejorbeta = 0 ;
comienzo = 0 ;
todos ustedes = : Ln DE 600 [ dt << obtener filas seleccionadas ] ;
xall = : Tiempo [ dt << obtener filas seleccionadas ] ;
Para ( k = 1 , k <= n filas ( xall ) - 10 , k ++,
X = xall [ k :: k + 9 ] ;
X = j ( Fila N ( X ) , 1 , 1 ) || X ;
y = todos ustedes [ k :: k + 9 ] ;
// cálculos de regresión
xxi = Inverso ( X ` * X ) ;
beta = xxi * X ` * y ;
Si ( Abdominales ( beta [ 2 ] ) > mejorbeta ,
mejorbeta = Abdominales ( beta [ 2 ] ) ;
comienzo = ( dt << obtener filas seleccionadas )[ k ] ;
) ;
) ;
Para ( k = mínimo ( dt << obtener filas seleccionadas ) , k <= máx. ( dt << obtener filas seleccionadas ) , k ++,
Si ( comienzo <= k <= comienzo + 9 ,
Estado de fila ( k ) = Estado excluido ( 0 ) , Estado de fila ( k ) = Estado excluido ( 1 )
) ;
) ;
) ;
// Crea la salida gráfica
bivariado ( Y ( : Ln DE 600 ) , X ( : Tiempo ) , Agrupar por ( : Bien ) , Línea de ajuste ( 1 ) ) ;
Re: Necesito ayuda con las secuencias de comandos: ajuste lineal donde la pendiente es mayorJim,
¡Maravilloso, gracias! Probablemente no lo aclaré. Esta es mi primera incursión en el scripting. agradezco la ayuda,
natan
Re: Necesito ayuda con las secuencias de comandos: ajuste lineal donde la pendiente es mayorMi error al pensar que cada uno de los diferentes valores de Well estaba en columnas diferentes.No será un gran proyecto modificar el script para satisfacer sus necesidades.No podré conseguirlo hasta mañana por la tarde, pero te lo haré llegar entonces.
Re: Necesito ayuda con las secuencias de comandos: ajuste lineal donde la pendiente es mayorJim,
¡Gracias por la respuesta y los pensamientos! Pude modificar el script para aplicarlo a mi tabla y ejecutarlo. Sin embargo, en realidad necesito que la línea se ajuste a cada curva, cuando cada curva se traza con el tiempo como el eje x. Luego necesito seleccionar 10 puntos contiguos (contiguos según el tiempo) que producen la mayor pendiente. Mis disculpas si no fui claro al respecto. Básicamente, si hay 10 minutos entre cada punto, busco el período de 100 minutos que tiene la mayor pendiente de la línea.
Aquí hay una instantánea de mis hojas de datos. Básicamente, en la columna "Pozo" hay 96 identificadores de combinación de letras y números. Cada identificador tiene alrededor de 140 filas. Luego trazo el "Tiempo [hrs]" en la x y el "OD 600" en la y, "Bueno" en el cuadro Por. ¿Eso ayuda?

Aquí está el cuadro de diálogo:

¡Muchas gracias por la ayuda!
~ Nathan
Re: Necesito ayuda con las secuencias de comandos: ajuste lineal donde la pendiente es mayorAquí hay un script que creo que hará lo que quieras.Se configura como un ejemplo usando la tabla de datos de JMP Sample llamada Big Class.Sin embargo, si solo apunta la secuencia de comandos a la tabla de datos con la que desea ejecutar y cambia Y Var = "edad"; a la columna Y contra la que desea correr, debe obtener lo que desea.Hay 2 suposiciones con el script... la primera es que todas las columnas continuas numéricas en la tabla de datos deben ser analizadas, y el segundo supuesto es que los datos de las columnas están ordenados por la variable X.Si este no es el caso, la secuencia de comandos se puede modificar para manejar esa situación.Solo agregará más tiempo de procesamiento Cambié el script para hacer la clasificación.
Nombres predeterminados hasta aquí ( 1 ) ;
// abre la tabla de datos
dt = Abierto ( "$SAMPLE_DATA/Clase grande.jmp" ) ;
Var Y = "edad" ;
// obtener datos en matrices
ColList = dt << obtener nombres de columna ( continuo , cadena ) ;
// Deshágase de la variable Y de la lista
ColList = Eliminar ( ColList , Contiene ( ColList , Var Y ) , 1 ) ;
// Configure las listas para que contengan los 10 puntos de datos determinados con la pendiente más alta
Mejores datos = {} ;
Mejor Y = {} ;
Nombres de columna = {} ;
mejorbeta = 0 ;
comienzo = 0 ;
// Bucle a través de las columnas
Para ( i = 1 , i <= N artículos ( ColList ) , i ++,
// Ordenar los datos para asegurar que los datos estén en X ascendente
dt << clasificar ( por ( Colista [ i ] ) , orden ( ascendente ) , reemplazar mesa ( 1 ) ) ;
todos ustedes = Columna ( Var Y ) << obtener valores ;
xall = ( Columna ( dt , colista [ i ] ) << obtener valores ) ;
Para ( k = 1 , k <= n filas ( xall ) - 10 , k ++,
X = xall [ k :: k + 9 ] ;
X = j ( Fila N ( X ) , 1 , 1 ) || X ;
y = todos ustedes [ k :: k + 9 ] ;
// cálculos de regresión
xxi = Inverso ( X ` * X ) ;
beta = xxi * X ` * y ;
Si ( Abdominales ( beta [ 2 ] ) > mejorbeta ,
mejorbeta = Abdominales ( beta [ 2 ] ) ;
comienzo = k ;
) ;
) ;
Mejores datos = Mejores datos || como lista ( xall [ comienzo :: comienzo + 9 ] ) ;
Mejor Y = Mejor Y || como lista ( todos ustedes [ comienzo :: comienzo + 9 ] ) ;
Para ( k = 1 , k <= 10 , k ++,
Insertar en ( Nombres de columna , ColList [ i ] )
) ;
) ;
// Crea la nueva tabla de datos con los mejores 10 puntos para todas las columnas
juntos = Nueva tabla ( "Los resultados" ,
Nueva columna ( "Nombre de la columna" , personaje , valores ( Nombres de columna ) ) ,
Nueva columna ( "Y" , valores ( Mejor Y ) ) ,
Nueva columna ( "Datos" , valores ( Mejores datos ) )
) ;
// Crea la salida gráfica
juntos << color por columna ( : nombre de la columna ) ;
bivariado ( Y ( : Y ) , X ( : Datos ) , Agrupar por ( : Nombre de columna ) , Línea de ajuste ( 1 ) ) ;