regresión lineal en editor de fórmulasHola,
Estoy estudiando la pendiente de una variable biológica a lo largo del tiempo en un estudio clínico, utilizando regresión lineal.
¿Es posible calcular la pendiente en una nueva columna, con el editor de fórmulas? ¿O otra forma de generar tal columna?
Estoy usando JMP 12.
Gracias por tu ayuda,
Florent
Re: regresión lineal en editor de fórmulasAquí hay dos ejemplos de fórmulas de columnas para calcular las pendientes de regresión de longitud y peso. Se utiliza la tabla de ejemplo "Clase grande".
El primero calcula la pendiente basándose en todas las observaciones y la muestra solo en la primera fila en lugar de repetir el mismo número en toda la columna.
El segundo calcula la pendiente de forma incremental (que puede ser lo que está pidiendo) y permite ver cómo la pendiente cambia / se estabiliza a medida que se incluyen más datos y finalmente converge con la pendiente de la muestra completa (es decir, el primer ejemplo).
Para aplicar esto a sus propios datos, copie toda la fórmula dentro de los paréntesis en F = Expr () y péguelo en el editor de fórmulas y subtitulado peso y altura para sus variables.
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << New Column("Slope",
Formula(
If(Row() == 1,
Col Sum((:height - Col Mean(:height)) * (:weight - Col Mean(:weight))) /
Col Sum((:height - Col Mean(:height)) ^ 2),
.
)
)
);
F = Expr(
Eval(
Eval Expr(
Col Sum(
(:height - Col Mean(:height, Row() <= Expr(Row()))) * (:weight
-Col Mean(:weight, Row() <= Expr(Row()))),
Row() <= Expr(Row())
) / Col Sum(
(:height - Col Mean(:height, Row() <= Expr(Row()))) ^ 2,
Row() <= Expr(Row())
)
)
)
);
dt << New Column("Incremental Slope", Formula(Name Expr(F)));
Re: regresión lineal en editor de fórmulasSe siente mal colocar el valor de la pendiente en una columna en la misma tabla que los datos.
Pero, si eso es lo que querías decir y quieres evitar el uso de una plataforma JMP, aquí hay una forma de hacerlo en JMP 12:
NamesDefaultToHere(1);
myLinearRegression =
Function({x, y}, {Default Local},
// Add the unit vector to the design matrix
x = J(NRow(x), 1, 1)||x;
// Get the parameters
betas = Transpose(Inv(x`*x)*x`*y);
);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Wait(3);
xVals = Column(dt, "height") << getValues;
yVals = Column(dt, "weight") << getValues;
betas = myLinearRegression(xVals, yVals);
slope = betas[2];
dt << NewColumn("Slope of weight vs. height", Numeric, Continuous, Values(Repeat(slope, NRow(dt))));
Haga 'Archivo> Nuevo> Nuevo script', corte y pegue la JSL arriba en esa ventana, luego 'Editar> Ejecutar script'.
Por supuesto, siempre es una buena idea trazar los datos antes de confiar en cualquier pendiente que calcule, y para eso está diseñado 'Analizar> Ajustar Y por X'.