¿Guion? Aplicación de la fórmula de columna del modelo no lineal a varias columnasTengo una fórmula modelo en la columna 1 con 2 parámetros y me gustaría ajustar este modelo a 80 columnas de datos diferentes (Cols 2 - 82), donde cada columna de datos tiene esos 2 parámetros personalizados. ¿Hay una forma fácil de hacer esto?
¿Tendría que escribir un guión?
Re: Guión? Aplicación de la fórmula de columna del modelo no lineal a varias columnasterminando convergiendo en esto como solución:
Nombres predeterminados aquí ( 1 );
dlg = Diálogo de columna (
Título( "Regresión no lineal"),
yCol = Col List( "Y, Respuesta",
Tipo de datos (numérico),
Columna mínima( 1 )
),
xCol = Col List( "X, fórmula predictora",
Tipo de datos (numérico),
Columna mínima( 1 ),
Columna máxima( 1 )
)
);
Si( dlg["Botón"] != 1,
Throw("Usuario cancelado");
);
Quitar de( dlg );
Lista de evaluación( dlg );
dt = Tabla de datos actuales ();
n ajustes = N elementos (yCol);
fórmula = xCol[1] << Obtener Fórmula;
n parámetros = N elementos (Arg (fórmula, 1));
parm = J( n encaja, 2* n parms, .);
clmnm={};
parmnm = Arg(fórmula,1);
parclnm = Como Lista(J(1,n parms));
For( i = 1, i<= n parámetros,i++,
parmnm[i]=Char(parmnm[i]);
parclnm[i]=Izquierda(parmnm[i],Munger(parmnm[i],1,"=")-1);
);
Para( f = 1, f <= n encaja, f++,
Intentar(
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, Derivadas numéricas solamente (1), Finalizar, Ir );
parm[f,[1,2]] = Transpose( Report( nl fit )["Solution"][NumberColBox(5)] << Get As Matrix );
parm[f,[3,4]] = Transpose( Report( nl fit )["Solution"][NumberColBox(6)] << Get As Matrix );
);
clmnm[f]=Columna(yCol[f])< );
dt = como tabla (parámetro);
dt< col = Columna(1);
Para( f = 1, f <= n encaja, f++,
columna[f]=clmnm[f];
);
For( i = 1, i<= n parámetros,i++,
col = Columna(i+1);
col << Establecer nombre(parclnm[i]||"Estimación");
col = Columna(i+1+n parámetros);
col << Establecer nombre(parclnm[i]||"ApproxStdError");
);
Re: Guión? Aplicación de la fórmula de columna del modelo no lineal a varias columnas¡Me lo imaginé!
¡Gracias!
Re: Guión? Aplicación de la fórmula de columna del modelo no lineal a varias columnassale un error en este paso
parm[f,0] = Transpose( Informe( nl fit )["Estimaciones de parámetros"][NumberColBox(1)] << Obtener como matriz);
Re: Guión? Aplicación de la fórmula de columna del modelo no lineal a varias columnas¡Gracias!
Probando ahora...
recibió el siguiente error al depurar
No se puede subíndice Mostrar cuadro en acceso o evaluación de 'Subíndice', Informe (nl fit) [/*###*/"Estimaciones de parámetros"]
@Mark_Bailey escribió:
Esta solución resulta ser un poco complicada. Solo funciona si el modelo que está utilizando NO es uno de los de la biblioteca Ajustar curva. (Si es así, Nonlinear inicia Fit Curve, que espera que el modelo se especifique por nombre, lo que este script no proporciona). Según su afirmación de que el modelo real es más complicado, me arriesgué a que sea no en la biblioteca Fit Model y escribió este script:
Names Default to Here( 1 );
dlg = Column Dialog(
Title( "Nonlinear Regression" ),
yCol = Col List( "Y, Response",
Data Type( Numeric ),
Min Col( 1 )
),
xCol = Col List( "X, Predictor Formula",
Data Type( Numeric ),
Min Col( 1 ),
Max Col( 1 )
)
);
If( dlg["Button"] != 1,
Throw( "User cancelled" );
);
Remove From( dlg );
Eval List( dlg );
dt = Current Data Table();
n fits = N Items( yCol );
formula = xCol[1] << Get Formula;
n parms = N Items( Arg( formula, 1 ) );
parm = J( n fits, n parms, . );
For( f = 1, f <= n fits, f++,
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, Finish );
parm[f,0] = Transpose( Report( nl fit )["Parameter Estimates"][NumberColBox(1)] << Get As Matrix );
);
As Table( parm );
Primero abra la tabla de datos JMP, luego abra y ejecute este script. Seleccione todas las columnas de respuesta (columnas 2-82 en su ejemplo) y haga clic en Y, Respuesta . Haga clic en la columna con la fórmula del modelo (columna 1 en su ejemplo) y haga clic en X, fórmula predictora , . Luego haga clic DE ACUERDO .
Re: Guión? Aplicación de la fórmula de columna del modelo no lineal a varias columnasEsta solución resulta ser un poco complicada. Solo funciona si el modelo que está utilizando NO es uno de los de la biblioteca Ajustar curva. (Si es así, Nonlinear inicia Fit Curve, que espera que el modelo se especifique por nombre, lo que este script no proporciona). Según su afirmación de que el modelo real es más complicado, me arriesgué a que sea no en la biblioteca Fit Model y escribió este script:
Names Default to Here( 1 );
dlg = Column Dialog(
Title( "Nonlinear Regression" ),
yCol = Col List( "Y, Response",
Data Type( Numeric ),
Min Col( 1 )
),
xCol = Col List( "X, Predictor Formula",
Data Type( Numeric ),
Min Col( 1 ),
Max Col( 1 )
)
);
If( dlg["Button"] != 1,
Throw( "User cancelled" );
);
Remove From( dlg );
Eval List( dlg );
dt = Current Data Table();
n fits = N Items( yCol );
formula = xCol[1] << Get Formula;
n parms = N Items( Arg( formula, 1 ) );
parm = J( n fits, n parms, . );
For( f = 1, f <= n fits, f++,
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, Finish );
parm[f,0] = Transpose( Report( nl fit )["Parameter Estimates"][NumberColBox(1)] << Get As Matrix );
);
As Table( parm );
Primero abra la tabla de datos JMP, luego abra y ejecute este script. Seleccione todas las columnas de respuesta (columnas 2-82 en su ejemplo) y haga clic en Y, Respuesta . Haga clic en la columna con la fórmula del modelo (columna 1 en su ejemplo) y haga clic en X, fórmula predictora , . Luego haga clic DE ACUERDO .
Re: Guión? Aplicación de la fórmula de columna del modelo no lineal a varias columnasPuede hacerlo sin un script, pero requerirá muchos clics. Suponiendo que ya ha configurado el modelo no lineal como una fórmula de columna, siga estos pasos:
- Seleccione Tablas > Apilar.
- Seleccione todas las columnas de respuesta (2-82 en su ejemplo) y haga clic en Apilar.
- Asegúrese de que la opción para copiar las fórmulas esté seleccionada.
- Introduzca un nombre para la columna Datos, como Respuesta.
- Introduzca un nombre para la columna Etiqueta, como Curva.
- Haga clic en Aceptar.
- Seleccione Analizar > Modelos especializados > No lineales.
- Seleccione la columna predictora (83 en su ejemplo) y haga clic en X
- Seleccione la columna del modelo (1 en su ejemplo) y haga clic en Y.
- Seleccione la columna Curva y haga clic en Por.
- Haga clic en Aceptar.
- Ahora haga clic en Ir para cada Curva. (Esta es la parte tediosa.)
- Haga clic con el botón derecho en cualquier informe de Estimaciones de parámetros y seleccione Crear tabla de datos combinados.
Este proceso debería proporcionarle una nueva tabla de datos con todas las estimaciones de parámetros.
Re: Guión? Aplicación de la fórmula de columna del modelo no lineal a varias columnasMarca,
Gracias.
Las respuestas a todas sus preguntas de Verificación son afirmativas.
La fórmula puede ser cualquier cosa, pero digamos que es y = h*exp(-b*x^(0.65)) para simplificar, con h y b como parámetros y x>0.
La fórmula real es mucho más complicada, pero esa complicación adicional no debería afectar la solución.
Re: Guión? Aplicación de la fórmula de columna del modelo no lineal a varias columnasPreguntaré de nuevo: ¿cuál es el modelo no lineal (f(X)) expresado en la fórmula de la columna 1? ¿Cuáles son los dos parámetros?
Verificando: el predictor (X) es la última columna y se usa en la fórmula en la columna 1?
Verificando: ¿las respuestas individuales (Y) están en las columnas 2-82?
Verificando: ¿desea ajustar Y = f(X) por separado a cada Y y capturar las estimaciones de los parámetros para cada Y?
Re: Guión? Aplicación de la fórmula de columna del modelo no lineal a varias columnasSí, existe una variable predictora en otra columna.
Podemos llamarla columna 83 si lo desea.
Y supongo que mi resultado objetivo sería una tabla que muestra los valores de mejor ajuste de los dos parámetros por columna con los intervalos de confianza asociados.
Re: Guión? Aplicación de la fórmula de columna del modelo no lineal a varias columnas¿Cuál es su modelo no lineal que se almacena como una fórmula en la columna 1? Esta fórmula suele ser una función de la variable predictora. ¿Qué columna contiene los valores predictores?
Si este caso es simple, puedo escribir un guión.