Hallo Community,
Ich versuche, ein Skript zu erstellen, das dynamisch ein Modell mit Haupteffekten und Interaktionen erstellt.
Ich könnte zum Beispiel eine Teilmenge von Effektspalten haben, die wie folgt definiert ist:
all_cols = Current Data Table () << Get Column Names(String);
effect_cols = all_cols[3::8];
Und dann baue ich eine Reihe von Modellen, indem ich die effect_cols reduziere.
Anschließend betrachte ich Interaktionsterme. Allerdings habe ich Probleme beim Erstellen einer Liste mit Spaltennamen oder Spaltenverweisen für Interaktionsbegriffe.
Ich habe so etwas versucht:
if(length(effect_cols) > 1,
interaction_effects = {};
for(i = 1, i < length(effect_cols), i++,
for(j=i+1,j<= length(effect_cols), j ++,
inter_tmp = effect_cols[i] || "*" || effect_cols[j];
interaction_effects = insert(interaction_effects,inter_tmp);
)
)
);und daraus ein Modell bauen mit:
Fit Model(
Y( :"Result"n ),
Effects(
concat(effect_cols,interaction_effects),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Screening" ),
Run( ),
)
Dies führt jedoch immer zu einem Fehler und meine anderen Versuche, parse() und eval() zu verwenden, funktionieren nicht.
Jede Hilfe wird sehr geschätzt.
Danke
Hallo @mkiesz ,
Haben Sie versucht, die schrittweise Plattform zu skripten? Möglicherweise sind einige Ihrer Modellauswahlkriterien integriert.
Wenn ich mich richtig erinnere, habe ich es mit so etwas versucht
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Tiretread.jmp");
effect_cols = {"SILICA", "HARDNESS", "SILANE", "SULFUR"};
terms = {};
For Each({first_term, idx}, effect_cols[1::N Items(effect_cols) - 1],
For Each({second_term}, effect_cols[idx+1::N Items(effect_cols)],
cur_interaction = Substitute(Expr(_firstterm_*_secondterm_),
Expr(_firstterm_), NameExpr(AsColumn(first_term)),
Expr(_secondterm_), NameExpr(AsColumn(second_term))
);
Insert Into(terms, Name Expr(cur_interaction));
);
);
fitm = dt << Fit Model(
Y(:ABRASION),
Effects(Eval(terms)),
Personality("Standard Least Squares"),
Emphasis("Effect Screening")
);
