Bonjour la communauté JMP,
J'essaie actuellement d'écrire un script qui ouvre une table de données existante qui contient une colonne "X1" et une colonne "Y1" avec 10 lignes. Le script prédit ensuite Y1 dans une nouvelle colonne, crée une colonne résiduelle (Prédite Y1 - Y1), puis crée une colonne résiduelle prédite. À partir de là, je veux que le script ajoute un certain nombre de valeurs "composées" X1 / Y1 à la table de données existante, dans l’espoir d’automatiser le processus. Je crois que le code suivant est responsable de l’ajout des points de données à la table de données. Le problème est que le script suivant n'ajoute pas une liste précise des valeurs X1 (les valeurs X1 sont simplement des entiers compris entre 1 et 10, et lorsque j'exécute le code suivant, d'habitude je n'obtiens que les entiers 1 et 10).
d = DOE (Augmenter la conception, X (: X1), Y (: Y1) / *, {Créer la conception, Créer la table} * /);
d << Construire le design;
dt3 = d << Make Table;
dt2 << concatenate (dt3, ajouter au premier tableau (1));
Voici mon script entier si cela aide:
// 1. Crée la colonne X1 et la colonne Y1 correspondante
Fermer tout (tables de données, aucune sauvegarde);
sourceDT = Open ("SH2.jmp");
dt2 = sourceDT << Sous-ensemble (Columns (), Rows (), Nom de la table en sortie ("Fixed.jmp"));
// 2. Crée la colonne Ystat prévue et enregistre les formules dans le même tableau de données (première itération)
PredictedY1 = dt2 << Neural (
Y (: Y1),
X (: X1),
Informatif manquant (0),
Méthode de validation ("Holdback", 0.3333),
Fit (NTanH (3))
)
PredictedY1 << Enregistrer les formules de profil;
// 3. Ajoute la colonne résiduelle
dt2 << Nouvelle colonne ("Résiduel 1", formule (Abs (: PredictedY1 -: Y1)));
// 4. Crée et prédit la colonne résiduelle
PredictedResidual1 = dt2 << Neural (
Y (: résiduel 1),
X (: X1),
Informatif manquant (0),
Méthode de validation ("Holdback", 0.3333),
Fit (NTanH (3))
)
PredictedResidual1 << Enregistrer les formules de profil;
// Itération 2
d = DOE (Augmenter la conception, X (: X1), Y (: Y1) / *, {Créer la conception, Créer la table} * /);
d << Construire le design;
dt3 = d << Make Table;
dt2 << concatenate (dt3, ajouter au premier tableau (1));
PredictedY2 = dt2 << Neural (
Y (: Y1),
X (: X1),
Informatif manquant (0),
Méthode de validation ("Holdback", 0.3333),
Fit (NTanH (3))
)
PredictedY2 << Enregistrer les formules de profil;
// 3. Ajoute la colonne résiduelle
dt2 << Nouvelle colonne ("Résidu 2", formule (Abs (: PredictedY1 2 -: Y1)));
// 4. Crée et prédit la colonne résiduelle
PredictedResidual2 = dt2 << Neural (
Y (: résiduel 2),
X (: X1),
Informatif manquant (0),
Méthode de validation ("Holdback", 0.3333),
Fit (NTanH (3))
)
PredictedResidual2 << Enregistrer les formules de profil;
Column (dt2, "X1") << Supprimer Formula Eval ();
Column (dt2, "Y1") << Supprimer Formula Eval ();
dt2 << Sélectionnez où (: résiduel 1 <= 3);
dt2 << supprimer des lignes;
Merci,
Kyle
Je ne sais pas trop ce que tu veux. Mon interprétation est que vous souhaitez ajouter de nouvelles lignes aux lignes précédentes. Augment Design crée de nouveaux traitements et le message Make Table génère le nouveau tableau combiné. Il crée les nouvelles lignes optimales pour le modèle spécifié et les lignes données.
Je pense que vous souhaitez créer une deuxième table de données avec les niveaux que vous déterminez et les concaténer avec les lignes existantes. Sinon, vous pouvez envoyer de manière itérative le message << Add Rows () »à la première table de données pour ajouter les nouveaux niveaux.
Je m'excuse pour toute confusion. Vous avez raison de dire que je veux créer une deuxième table de données avec les niveaux que je détermine et les concaténer avec les lignes existantes. Le problème est que la deuxième table de données crée une table avec des valeurs explicitement 1 ou 10. Je veux que la deuxième table de données ait des valeurs réparties aléatoirement entre 1 et 10 (ce qui correspond à la plage de valeurs de la table de données d'origine). Augmenter la conception n'est peut-être pas la meilleure façon de le faire, mais je suis très novice en JSL, je ne suis donc pas sûr de la façon de procéder.
Merci
Vous pouvez toujours utiliser l'une des méthodes que j'ai suggérées: créer un deuxième tableau de données et le concaténer ou ajouter directement des lignes au tableau de données d'origine.
Esquisse d'idée:
dt2 = New Table( "Augmentation Runs",<BR />Add Rows( 10 ),<BR />New Column( "X1", Numeric, Continuous, Values( J( 10, 1, Random Uniform() ) )<BR />);<BR /><BR />dt << Concatenate( dt2 );
Alternativement:
For( I = 1, I < 11, I++,
dt << Add Rows( { X1 = Random Uniform() } );
);