Formule de la ligne d'ajustement et de la colonne d'interception, aide en cas d'erreurJMP18.1.1
Je travaille avec des données de mesure, où je voudrais calculer une ligne d'ajustement à un point de données particulier, en utilisant les points de données voisins. Pour ensuite obtenir une interception sur l'axe des x pour y=0.
En regardant autour de moi et en essayant de résoudre ce problème moi-même, il semble que je puisse le faire en utilisant soit la fonction « Régression linéaire » soit la fonction « Résolution des moindres carrés » dans JMP.
J'ai fait cela dans une formule de colonne (avec une instruction if pour identifier le point de données sur lequel évaluer) :
x = J( 2, 1, 0 );
y = J( 2, 1, 0 );
x[1, 1] = Lag( :y_column, 1 );
x[2, 1] = Lag( :y_column, -1 );
y[1, 1] = Lag( :x_column, 1 );
y[2, 1] = Lag( :x_column, -1 );
Coeffs = Linear Regression( y, x )[1];
Coeffs[1];
Ce code produit le bon résultat, mais lorsqu'il s'exécute, il génère une erreur :
« Impossible d'estimer la variance des estimations de paramètres car le rang de X est égal au nombre de lignes de X »
Je ne comprends pas vraiment quel est le problème ici. De toute façon, je veux seulement l'interception. Existe-t-il un moyen simple de résoudre ce problème ? Ou de désactiver l'avertissement ?
Je peux essayer une approche similaire avec la fonction des moindres carrés, mais cela génère la même erreur.
J'ai créé un exemple de tableau qui montre le problème. Réexécutez la formule sur ce tableau pour voir l'erreur.
Merci
Analyse et modélisation de données de baseRe: Formule de la ligne d'ajustement et de la colonne d'interception, aide en cas d'erreurIl semble que j'aie immédiatement résolu ce problème moi-même en augmentant le nombre de points de données dans la régression à 3, y compris le point de données actuel.
x = J( 3, 1, 0 );
y = J( 3, 1, 0 );
x[1, 1] = Lag( :y_column, 1 );
x[2, 1] = :y_column;
x[3, 1] = Lag( :y_column, -1 );
y[1, 1] = Lag( :x_column, 1 );
y[2, 1] = :x_column;
y[3, 1] = Lag( :x_column, -1 );
Coeffs = Linear Regression( y, x )[1];
Coeffs[1];
Cela empêche l'apparition de l'erreur, ce qui peut être acceptable pour l'instant. J'aimerais néanmoins pouvoir éventuellement calculer les interceptions à partir de seulement 2 points à l'avenir. Ma question reste donc toujours d'actualité.
Merci
Re: Formule de la ligne d'ajustement et de la colonne d'interception, aide en cas d'erreurVous pourriez inclure le point auquel vous faites le calcul (donc 3 points au lieu de deux)
If(Row() > 1 & Row() < Col Number(:y_column),
Linear Regression(:y_column[Index(Row() - 1, Row() + 1)]`, :x_column[Index(Row() - 1, Row() + 1)]`)[1][1];
,
.
);
Re: Formule de la ligne d'ajustement et de la colonne d'interception, aide en cas d'erreurJ'ai maintenant un problème avec la valeur d'interception renvoyée qui n'est pas correcte...
Je devrai montrer un extrait de données réelles pour le démontrer. Fichier ci-joint.
J'évalue l'interception à la ligne où une autre colonne est à sa valeur maximale.
Le script prend correctement les valeurs des lignes adjacentes, je peux voir dans la sortie du journal qu'il forme correctement la matrice.
Il donne une valeur de sortie pour l'interception de '-1053478758'. Mais si je prends ces valeurs x/y manuellement dans une table séparée et que j'exécute un ajustement de ligne bivarié sur elles, cela donne une interception de '-1,22', ce qui est correct.
Code:
If( :"dlogIds/dVgs"n == Col Maximum( :"dlogIds/dVgs"n ),
x = J( 3, 1, 0 );
y = J( 3, 1, 0 );
x[1, 1] = Lag( :I_Drain Abs, 1 );
x[2, 1] = :I_Drain Abs;
x[3, 1] = Lag( :I_Drain Abs, -1 );
y[1, 1] = Lag( :V_GATE, 1 );
y[2, 1] = :V_GATE;
y[3, 1] = Lag( :V_GATE, -1 );
Show( x );
Show( y );
Coeffs = Linear Regression( y, x )[1];
Coeffs[1];
)
Je n'arrive pas du tout à comprendre pourquoi ce n'est pas bien...
Re: Formule de la ligne d'ajustement et de la colonne d'interception, aide en cas d'erreurIl peut s'agir d'un problème de précision/d'oubli/d'un bug. Vous pouvez contacter le support JMP @mzwald
Names Default To Here(1);
ys = [-0.999986, -1.49994, -1.99997];
xs = [1.3500e-12, 1.0600e-10, 1.9700e-9];
xs2 = Matrix(Eval List({1.3500e-12*10^12, 1.0600e-10*10^12, 1.9700e-9*10^12}));
ls = Linear Regression(ys, xs, << print to log);
ls2 = Linear Regression(ys, xs2, << print to log);
dt = New Table("",
New Column("Y", Numeric, Continuous, Values(ys)),
New Column("X1", Numeric, Continuous, Values(xs)),
New Column("X2", Numeric, Continuous, Values(xs2)),
);
biv1 = dt << Bivariate(Y(:Y), X(:X1), Fit Line({Line Color({230, 159, 0})}));
biv_estimates1 = Report(biv1)[Outline Box("Parameter Estimates"), Number Col Box("Estimate")];
Show(biv_estimates1 << get);
biv2 = dt << Bivariate(Y(:Y), X(:X2), Fit Line({Line Color({230, 159, 0})}));
biv_estimates2 = Report(biv2)[Outline Box("Parameter Estimates"), Number Col Box("Estimate")];
Show(biv_estimates2 << get);
Write();Re: Formule de la ligne d'ajustement et de la colonne d'interception, aide en cas d'erreurJe me demandais si c'était un problème de précision. Il semble que quelque chose dans cette fonction ne gère pas l'entrée avec suffisamment de chiffres significatifs.
Pour l'instant, cela fonctionne d'utiliser votre correctif et de multiplier les valeurs de l'axe des x par quelque chose qu'il peut gérer.
Merci!
Re: Formule de la ligne d'ajustement et de la colonne d'interception, aide en cas d'erreurBonjour @GRoberts86 : Pour être complet, le message d'erreur « Impossible d'estimer la variance des estimations de paramètres car le rang de X est égal au nombre de lignes de X » est dû au fait que vous n'avez que deux points et que vous les reliez par une ligne droite. Par conséquent, il n'y a pas de variabilité autour de la ligne... c'est-à-dire que vous n'effectuez pas vraiment une procédure statistique , vous reliez simplement mathématiquement deux points. Cependant, vous utilisez un logiciel statistique pour le faire, via l'algèbre matricielle comme indiqué ici.
https://www.stat.cmu.edu/~cshalizi/mreg/15/lectures/13/lecture-13.pdf.
La procédure statistique que vous avez appelée (Régression linéaire( y, x )[1]) tente de faire bien plus que simplement relier mathématiquement deux points. Elle fournit également des intervalles de confiance, des valeurs p, etc. pour la pente et l'intercept. Mais dans votre cas, comme vous n'avez que deux points (rang de X = 2), il n'y a pas de variabilité et donc pas d'intervalles de confiance, etc.
Donc, pour faire court, « l’erreur » n’est en réalité qu’une notification indiquant qu’il n’y aura pas de résultat statistique (par opposition à un résultat mathématique ).
Re: Formule de la ligne d'ajustement et de la colonne d'interception, aide en cas d'erreur@MRB3855
J'ai réalisé cela après y avoir réfléchi un peu. Si vous ne travaillez qu'avec 2 points, alors la bonne vieille « équation d'une ligne » y=mc+c est la chose appropriée à utiliser.
Néanmoins, un drapeau « silencieux » serait bien haha.