Erstellen einer benutzerdefinierten (Formel-)Statistikfunktion mit byVarBezogen auf diesen Wunschlisteneintrag, den ich erstellt habe: Normalisierung und robuste statistische Funktionen (und Matrixfunktionen) hinzufügen . Ich dachte, ich könnte versuchen, diese vorerst als benutzerdefinierte Funktionen zu schreiben (obwohl ich weiß, dass es unmöglich sein wird, sie zu teilen und für alle zu aktualisieren), aber ich stand fast sofort vor meinem ersten Problem: Wie man auf Spalten verweist ... Wenn ich benutzerdefinierte Formeln verwende, stecke ich fest, indem ich Berechnungen auf Zeilenebene verwende oder Spalten als Zeichenfolgen anstelle von :colname verweise, was mich daran hindern würde, sie direkt aus dem Formel-Editor zu verwenden.
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)));DatentabelleSkripterstellungBetreff: Erstellen einer benutzerdefinierten statistischen (Formel-)Funktion mit byVarArtikel auf der Wunschliste, von dem ich glaube, dass er dies viel einfacher machen würde:
Option oder Funktion zum gleichzeitigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen Zeilen
Betreff: Erstellen einer benutzerdefinierten statistischen (Formel-)Funktion mit byVarZwei Kommentare:
- Ich kann den Verweis darauf anscheinend nicht finden, aber ich erinnere mich, dass mir irgendwann definitiv gesagt wurde, dass es keine Möglichkeit gibt, eine benutzerdefinierte Spaltenformel zu schreiben, die ihren Wert zwischen Zeilen zwischenspeichert, wie es interne Formeln tun.Daher müssten Sie eine Funktion schreiben, die im Kontext jeder Zeile ausgewertet wird, was bedeutet, dass sie jeweils einen einzelnen Wert zurückgibt.(Ich würde mich freuen, wenn mich hier jemand korrigiert, wenn das möglich ist.)
- JMP wertet die Spaltenreferenz aus, bevor sie an die Funktion übergeben wird (eifrige Bewertung), was bedeutet, dass Sie den Wert in dieser Zeile anstelle der gesamten Spalte erhalten.Sie müssen JMP anweisen, einen Verweis auf die Spalte zu übergeben, und das können Sie mit Expr tun.
Ich glaube, dass dies beide Probleme behebt, aber ich bin mir nicht sicher, ob es sehr intuitiv oder benutzerfreundlich ist.
Update: Die benutzerdefinierte Funktion kann auf den Zeilenkontext zugreifen, sodass Sie den Wert für die aktuelle Zeile nicht an die Funktion übergeben müssen, wie in 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))));Betreff: Erstellen einer benutzerdefinierten statistischen (Formel-)Funktion mit byVarGuter Punkt!Ich war so darauf konzentriert, die Spaltenreferenzen auszuwerten, dass ich nicht einmal bemerkte, dass die Werte unsinnig waren.Ich werde weiter darüber nachdenken.
Betreff: Erstellen einer benutzerdefinierten statistischen (Formel-)Funktion mit byVarDas scheint keine richtige Antwort zu liefern, da es sie höchstwahrscheinlich "Zeile für Zeile" und nicht als Spalten auswertet

Betreff: Erstellen einer benutzerdefinierten statistischen (Formel-)Funktion mit byVarMacht das was du willst?Es sieht so aus, als müssten Sie die Funktionsparameter explizit auswerten, wenn Sie erwarten, dass es sich um Spaltenreferenzen handelt.
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);