Création d'une fonction statistique personnalisée (formule) qui a byVarEn rapport avec cet élément de liste de souhaits que j'ai créé : Ajoutez une normalisation et des fonctions statistiques robustes (et des fonctions matricielles) . Je pensais que je pourrais simplement essayer de les écrire en tant que fonctions personnalisées pour le moment (même si je sais qu'il sera impossible de les partager et de les mettre à jour pour tout le monde), mais j'ai été confronté à mon premier problème presque immédiatement : comment référencer les colonnes... Lorsque j'utilise des formules personnalisées, je suis obligé d'utiliser des calculs au niveau des lignes ou de référencer des colonnes sous forme de chaînes au lieu de :colname, ce qui m'empêcherait de les utiliser directement depuis l'éditeur de formules.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
my_min = New Custom Function(
"custom",
"My Min1",
Function({x, y},
As Constant(
vals = Column(x) << get values;
groups = Column(y) << get values;
);
cur_group = Loc(groups, As Column(y));
vals[cur_group[Loc Min(vals[cur_group])]];
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
my_min = New Custom Function(
"custom",
"My Min2",
Function({x, y},
Col Minimum(Column(x), Column(y));
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
my_min = New Custom Function(
"custom",
"My Min3",
Function({x, y},
Col Minimum(x, y);
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
dt << New Column("ColMin", Numeric, Continuous, Formula(Col Minimum(:height, :sex)));
dt << New Column("MyMin1_str", Numeric, Continuous, Formula(custom:My Min1("height", "sex")));
dt << New Column("MyMin2_str", Numeric, Continuous, Formula(custom:My Min2("height", "sex")));
dt << New Column("MyMin3_str", Numeric, Continuous, Formula(custom:My Min3("height", "sex")));
dt << New Column("MyMin1_ref", Numeric, Continuous, Formula(custom:My Min1(:height, :sex)));
dt << New Column("MyMin2_ref", Numeric, Continuous, Formula(custom:My Min2(:height, :sex)));
dt << New Column("MyMin3_ref", Numeric, Continuous, Formula(custom:My Min3(:height, :sex)));Mélange et nettoyage des donnéesExploration et visualisation des donnéesPersonnalisation de masseRe : Création d'une fonction statistique personnalisée (formule) dotée de byVarÉlément de la liste de souhaits qui, je pense, rendrait cela beaucoup plus facile :
Option ou fonction pour évaluer une formule de colonne personnalisée en même temps ou mettre en cache les valeurs entre les lignes
Re : Création d'une fonction statistique personnalisée (formule) dotée de byVarDeux commentaires :
- Je n'arrive pas à trouver la référence, mais je me souviens qu'on m'a définitivement dit à un moment donné qu'il n'y avait aucun moyen d'écrire une formule de colonne personnalisée qui met en cache sa valeur entre les lignes comme le font les formules internes.Ainsi, vous devrez écrire une fonction qui évalue dans le contexte de chaque ligne, ce qui signifie qu'elle renvoie une seule valeur à la fois.(J'aimerais que quelqu'un me corrige ici si cela est possible.)
- JMP évalue la référence de la colonne avant de la transmettre à la fonction (évaluation hâtive), ce qui signifie que vous obtenez la valeur de cette ligne au lieu de la colonne entière.Vous devez dire à JMP de transmettre une référence à la colonne, et vous pouvez le faire avec Expr.
Je pense que cela résout les deux problèmes, mais je ne suis pas sûr que ce soit très intuitif ou convivial.
Mise à jour : la fonction personnalisée peut accéder au contexte de la ligne, vous pouvez donc éviter d'avoir à transmettre la valeur de la ligne actuelle dans la fonction, comme dans le Test2.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
my_min = New Custom Function(
"custom",
"Test1",
Function({x,y,yval},
show(yval);
show(Name Expr(x)<< get values);
show(Loc(Name Expr(y) << Get Values, yval));
Min((Name Expr(x)<< get values)[Loc(Name Expr(y) << Get Values, yval)]);
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
custom:Test1(Expr(:age),Expr(:sex),"F");
dt << New Column("Test1", Numeric, Continuous, Formula(custom:Test1(Expr(:height), Expr(:sex), :sex)));
my_min = New Custom Function(
"custom",
"Test2",
Function({x,y},
xvals = Name Expr(x)<< get values;
yvals = Name Expr(y) << Get Values;
Min(xvals[Loc(yvals, yvals[row()])]);
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
dt << New Column("Test2", Numeric, Continuous, Formula(custom:Test2(Expr(:height), Expr(:sex))));Re : Création d'une fonction statistique personnalisée (formule) dotée de byVarBon point!J'étais tellement concentré sur l'évaluation des références de colonnes que je n'ai même pas remarqué que les valeurs n'avaient aucun sens.Je vais y réfléchir davantage.
Re : Création d'une fonction statistique personnalisée (formule) dotée de byVarCela ne semble pas fournir une réponse correcte car il s'agit très probablement de les évaluer "ligne par ligne" et non sous forme de colonnes.

Re : Création d'une fonction statistique personnalisée (formule) dotée de byVarEst-ce que cela fait ce que tu veux ?Il semble que vous deviez évaluer explicitement les paramètres de la fonction si vous vous attendez à ce qu'ils soient des références de colonne.
my_min = New Custom Function(
"custom",
"My Min4",
Function({x, y},
EvalExpr(Col Minimum(Expr(x), Expr(y)));
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);