Funciones de pendiente e intersección.Me sorprendió mucho descubrir que JMP no tiene función de pendiente o intersección. ¿Puede esto realmente ser así?
Sería fantástico si funciones como Slope(xMatrix, yMatrix), Intercept (xMatrix, yMatrix), Col Slope(xCol, yCol, By Vraiables) y Col Intercept(xCol, yCol, By Vraiables) se agregaron (y funciones de diagnóstico como R2, SE, etc.), produciendo coeficientes de regresión lineal RMS simples.
Sé que puedo hacer las regresiones en bivariado, generar una tabla de datos de pendientes, etc. y actualizar mi tabla original con estas, pero esto no es dinámico y no es práctico para una gran cantidad de análisis de regresión.
Espero que agregue tales funciones en el futuro.
Re: Funciones de pendiente e intersección** Editar:
Basado en esta publicación, agregué la función JSL Regresión lineal() en JMP 14. El JSL para extraer la pendiente y la intersección es mucho más sencillo ahora:
coefs = Linear Regression( y, X )[1]; <BR />coefs[1]; // intercept
coefs[2]; // slope
También se devuelven y (opcionalmente) se imprimen claramente en la ventana de registro varios diagnósticos, como la estadística de la prueba t, el valor p y el R cuadrado.Tenga en cuenta que la regresión lineal() es capaz de más que una simple regresión lineal. Consulte el Índice de secuencias de comandos para ver tres ejemplos diferentes del uso de la función con todas las funciones opcionales.
***
Jesper,
Gracias por la recomendación. Esta es una buena sugerencia y buscaré agregar una solución mejor en una versión futura de JMP.Mientras tanto, agregué una función JSL en JMP 13 llamada Resolución de mínimos cuadrados que puede resultarle útil.
En dos líneas de código, puede obtener estimaciones de la intersección, la pendiente y los errores estándar (sin contar el código para extraer los resultados).Es más general de lo que solicita y es más fácil de entender con algunos conocimientos de álgebra lineal. Tampoco informa valores R^2 ni diagnósticos de ajuste de modelos que están disponibles en plataformas como Fit Y by X.
Para mostrarte cómo ajustar una regresión lineal simple con resolución de mínimos cuadrados, generé un vector aleatorio para x y luego generé y que depende linealmente de x.
// Generating some data
intercept = 2; slope = 4;
x = J(100,1,Random Normal());
y = intercept + x * slope +J (100,1,Random Normal(0,.3));
En JMP 13, la resolución de mínimos cuadrados requiere una matriz de diseño y no agregará un término de intersección. Para agregar una intersección, debes agregar una columna de unos a la x observada. El JSL para hacer esto es:
// add an intercept term by adding a column of 1s to the design matrix, X
X.design = J(nrow(x),1) || x;
Si está familiarizado con el álgebra lineal, la solución de mínimos cuadrados resolverá las ecuaciones normales asociadas con el modelo:
y = X.diseño * beta + error
Sin embargo, dado que X.design tiene 2 columnas y la primera es una columna de unos, este modelo se simplifica a una regresión lineal simple, es decir, para el individuo i:
y_i = intercepto + pendiente * x_i + error_i.
// Solve for intercept, slope, and variance terms for each
{beta, var} = Least Squares Solve(X.design, y);
Least Squares Solve() devuelve los coeficientes beta estimados (intersección y pendiente en este caso), así como sus varianzas y covarianzas asociadas. Tenga en cuenta que el error estándar es la raíz cuadrada de la varianza de una estimación. Para extraer la intersección, la pendiente y sus respectivos errores estándar, el código es:
// To retrieve the intercept, slope, and their associated standard errors:
beta[1]; //the intercept
beta[2]; //the slope
sqrt(var[1,1]); // the standard error for the intercept
sqrt(var[2,2]); // the standard error for the slope
Espero que esto ayude,
Milón
Re: Funciones de pendiente e intersecciónHace los cálculos que quiero, pero no de la forma que preferiría. Nuevamente, puedo hacer los cálculos, así que ese no es el problema. Simplemente creo que podría (debería) haber una manera más fácil.
Re: Funciones de pendiente e intersecciónHola Jesper,
Has visto el complemento para recopilar pendientes e intersecciones ?
Creo que esto hará lo que quieras.
Salud,
estan
Re: Funciones de pendiente e intersecciónGracias
Creo que también vi el último ejemplo cuando estaba buscando la solución. Aunque todavía no creo que resuelva mi problema. Mi problema no es que no pueda calcular la pendiente y la intersección, sino que me parece innecesariamente engorroso hacerlo.
En su ejemplo, necesito escribir un script para las funciones y también generar código para extraer las matrices x e y para cada variable By relevante de mi tabla.
Mi pregunta no es que me ayuden a hacer los cálculos. Sólo quiero expresar mi deseo por dichas funciones integradas. Si estuvieran ahí los usaría regularmente. Y ahora los extraño con la misma frecuencia.
Jesper
Re: Funciones de pendiente e intersecciónEl Guía de secuencias de comandos JMP tiene una sección sobre Ejemplos estadísticos en el Estructuras de datos sección sobre matrices que muestra cómo utilizar las operaciones matriciales para calcular una regresión lineal.
He usado ese ejemplo para crear las funciones pendiente() e interceptar() que estabas buscando.
slope = Function( {x, y},
{beta},
If( !(Is Matrix( x ) & Is Matrix( y ) & N Col( x ) == 1 & N Col( y ) == 1),
Show( "x or y arguments are not matrices or they have more than one column" );
Throw();
,
x = J( N Row( x ), 1 ) || x; // put in an intercept column of 1s
beta = Inv( X` * X ) * X` * Y; // the least square estimates
beta[2];
)
);
intercept = Function( {x, y},
{beta},
If( !(Is Matrix( x ) & Is Matrix( y ) & N Col( x ) == 1 & N Col( y ) == 1),
Show( "x or y arguments are not matrices or they have more than one column" );
Throw();
,
x = J( N Row( x ), 1 ) || x; // put in an intercept column of 1s
beta = Inv( X` * X ) * X` * Y; // the least square estimates
beta[1];
)
);
Y = [98, 112.5, 84, 102.5, 102.5, 50.5, 90, 77, 112, 150, 128, 133, 85, 112];
X = [65.3, 69, 56.5, 62.8, 63.5, 51.3, 64.3, 56.3, 66.5, 72, 64.8, 67, 57.5, 66.5];
s = slope( x, y );
i = intercept( x, y );
Show( s, i );
El Ejemplos estadísticos La sección amplía el ejemplo para mostrar cómo calcular los residuos y otros resultados de diagnóstico también para la regresión múltiple.
Repetiré ese ejemplo a continuación.
// open the data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// get data into matrices
x = (Column( "Age" ) << Get Values) || (Column( "Height" ) << Get Values);
x = J( N Row( x ), 1, 1 ) || x;
y = Column( "Weight" ) << Get Values;
// regression calculations
xpxi = Inv( x` * x );
beta = xpxi * x` * y; // parameter estimates
resid = y - x * beta; // residuals
sse = resid` * resid; // sum of squared errors
dfe = N Row( x ) - N Col( x ); // degrees of freedom
mse = sse / dfe; // mean square error, error variance estimate
// additional calculations on estimates
stdb = Sqrt( Vec Diag( xpxi ) * mse ); // standard errors of estimates
alpha = .05;
qt = Students t Quantile( 1 - alpha / 2, dfe );
betau95 = beta + qt * stdb; // upper 95% confidence limits
betal95 = beta - qt * stdb; // lower 95% confidence limits
tratio = beta :\</img> stdb; // Student's T ratios
probt = (1 - t Distribution( Abs( tratio ), dfe )) * 2; // p-values
// present results
New Window( "Big Class Regression",
Table Box(
String Col Box( "Term", {"Intercept", "Age", "Height"} ),
Number Col Box( "Estimate", beta ),
Number Col Box( "Std Error", stdb ),
Number Col Box( "TRatio", tratio ),
Number Col Box( "Prob>|t|", probt ),
Number Col Box( "Lower95%", betal95 ),
Number Col Box( "Upper95%", betau95 )
)
);
Re: Funciones de pendiente e intersecciónVeo que proporciona una solución. Ya pude hacer los cálculos, pero no de forma fácil. Mi publicación fue más una solicitud de función. La falta de dichas funciones parece una extraña omisión.
Re: Funciones de pendiente e intersecciónQuizás ya lo hayas visto, pero si no hay un hilo relacionado aquí .