Fonctions de pente et d'interceptionJ'ai été très surpris de constater que JMP n'a pas de fonction de pente ou d'interception. Est-ce vraiment possible ?
Ce serait formidable si des fonctions telles que Slope(xMatrix, yMatrix), Intercept (xMatrix, yMatrix), Col Slope(xCol, yCol, By Vraiables) et Col Intercept(xCol, yCol, By Vraiables) ont été ajoutés (ainsi que des fonctions de diagnostic telles que R2, SE, etc.), donnant ainsi de simples coefficients de régression linéaire RMS.
Je sais que je peux faire les régressions en bivarié, générer un tableau de données de pentes, etc. et mettre à jour mon tableau d'origine avec celles-ci, mais ce n'est pas dynamique et ce n'est pas pratique pour un grand nombre d'analyses de régression.
J'espère que vous ajouterez de telles fonctions à l'avenir.
Re : Fonctions de pente et d'interception** Modifier:
Sur la base de cet article, j'ai ajouté la fonction JSL Linear Regression() dans JMP 14. Le JSL pour extraire la pente et l'interception est maintenant beaucoup plus simple :
coefs = Linear Regression( y, X )[1]; <BR />coefs[1]; // intercept
coefs[2]; // slope
Divers diagnostics tels que la statistique du test t, la valeur p et le R-carré sont également renvoyés et (éventuellement) imprimés proprement dans la fenêtre du journal.Notez que la régression linéaire() est capable de plus qu’une simple régression linéaire. Consultez l'index des scripts pour trois exemples différents d'utilisation de la fonction avec toutes les fonctionnalités facultatives.
***
Jesper,
Merci pour la recommandation. C'est une bonne suggestion et j'envisagerai d'ajouter une meilleure solution dans une future version de JMP.En attendant, j'ai ajouté une fonction JSL dans JMP 13 appelée Least Squares Solve qui pourrait vous être utile.
En deux lignes de code, vous pouvez obtenir des estimations de l'interception, de la pente et des erreurs standard (sans compter le code pour extraire les résultats).C'est plus général que ce que vous demandez et est plus facile à comprendre avec une certaine connaissance de l'algèbre linéaire. Il ne signale pas non plus les valeurs R ^ 2 ni les diagnostics d'ajustement de modèle disponibles sur des plates-formes telles que Fit Y by X.
Pour vous montrer comment ajuster une régression linéaire simple avec la résolution des moindres carrés, j'ai généré un vecteur aléatoire pour x, puis j'ai généré y qui dépend linéairement 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));
Dans JMP 13, la résolution des moindres carrés nécessite une matrice de conception et n'ajoute pas de terme d'interception à votre place. Pour ajouter une interception, vous devez ajouter une colonne de 1 au x observé. Le JSL pour ce faire est :
// add an intercept term by adding a column of 1s to the design matrix, X
X.design = J(nrow(x),1) || x;
Si vous êtes familier avec l'algèbre linéaire, la résolution des moindres carrés résoudra les équations normales associées au modèle :
y = X.design * bêta + erreur
Cependant, puisque X.design a 2 colonnes et que la première est une colonne de 1, ce modèle se simplifie en une simple régression linéaire, c'est-à-dire pour l'individu i :
y_i = intercept + pente * x_i + error_i.
// Solve for intercept, slope, and variance terms for each
{beta, var} = Least Squares Solve(X.design, y);
Les moindres carrés Solve() renvoie les coefficients bêta estimés (ordonnée à l’origine et pente dans ce cas) ainsi que leurs variances et covariances associées. Notez que l'erreur type est la racine carrée de la variance d'une estimation. Pour extraire l'ordonnée à l'origine, la pente et leurs erreurs types respectives, le code est :
// 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
J'espère que ça aide,
Milo
Re : Fonctions de pente et d'interceptionIl fait les calculs que je souhaite, mais pas de la manière que je préférerais. Encore une fois, je peux faire les calculs, donc là n'est pas le problème. Je pense simplement qu'il pourrait (devrait) y avoir un moyen plus simple.
Re : Fonctions de pente et d'interceptionBonjour Jesper,
Avez-vous vu la complément pour collecter les pentes et les interceptions ?
Je crois que cela fera ce que vous voulez.
Acclamations,
Stan
Re : Fonctions de pente et d'interceptionMerci
Je pense avoir vu ce dernier exemple également lorsque je cherchais la solution. Je ne pense toujours pas que cela résout mon problème. Mon problème n'est pas que je ne peux pas calculer la pente et l'interception, mais que cela semble inutilement fastidieux.
Dans votre exemple, je dois scripter les fonctions et également générer du code pour extraire les matrices x et y pour chaque variable By pertinente de ma table.
Ma question n'est pas d'aider à faire les calculs. Je veux juste exprimer mon désir pour ces fonctions intégrées. S'ils étaient là, je les utiliserais régulièrement. Et maintenant, ils me manquent avec la même fréquence.
Jesper
Re : Fonctions de pente et d'interceptionLe Guide de script JMP a une section sur Exemples statistiques dans le Structures de données section sur Matrices qui montre comment utiliser les opérations matricielles pour calculer une régression linéaire.
J'ai utilisé cet exemple pour créer les fonctions pente() et intercept() que vous recherchiez.
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 );
Le Exemples statistiques La section développe l'exemple pour montrer comment calculer les résidus et d'autres résultats de diagnostic pour la régression multiple également.
Je vais répéter cet exemple ci-dessous.
// 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 : Fonctions de pente et d'interceptionJe vois que cela fournit une solution de contournement. J'ai déjà pu faire les calculs, mais pas de manière simple. Mon message était plutôt une demande de fonctionnalité. L’absence de ces fonctions semble être une étrange omission.
Re : Fonctions de pente et d'interceptionPeut-être que vous l'avez déjà vu, mais sinon, il y a un fil de discussion connexe ici .