Dunnett pour plusieurs YJ'essaie d'obtenir un script qui exécutera automatiquement Dunnett sur plusieurs Y dans le modèle d'ajustement, mes problèmes :
Si je modifie la partie des comparaisons multiples où le facteur et le niveau ne sont pas une variable, cela fonctionne mais uniquement pour le premier Y, cela ne répétera pas la partie de Dunnett pour les Y restants. Alors mes questions :
1. Pourquoi cela ne fonctionne-t-il pas comme le modèle d'ajustement avec une variable utilisée pour le facteur et le niveau de contrôle pour Dunnett's ?
2. Pouvons-nous obtenir automatiquement des Dunnett's pour plusieurs Y ?
Lisa
Voilà ce que j'ai pour l'instant :
Names Default To Here( 1 );
Clear Log();
lbwidth = 130;
Tolerance = .01;
If( Not( Is Scriptable( dt ) ),
// Check that there is a data set open;
//ca=Caption("Please Open Design Data Set", Back Color(yellow));
//Stop();
dtsel = Pick File( "Open File", {"JMP|jmp", "All files|*"} );
If( dtsel == "",
Stop(),
Try( dt = Open( dtsel ), Stop() )
);
);
Dia_Window = Expr(
// Window to get list of factors and response;
Factorws = New Window( "Fit Model With Dunnetts",
show toolbars( 0 ),
Show Menu( 0 ),
Border Box( Left( 3 ), top( 2 ),
V List Box(
H List Box(
Panel Box( "Select Column to be used as the Factor and the Response(s)",
colListData = Col List Box(
All,
width( lbWidth ),
nLines( Min( nc, 10 ) )
)
),
Panel Box( "The Factor",
Lineup Box( N Col( 2 ), Spacing( 3 ),
Button Box( "Factor",
colListW << Append( colListData << GetSelected )
),
colListW = Col List Box(
width( lbWidth ),
nLines( 1 ),
MinItems( 1 )
),
)
),
Panel Box( "The Response(s)",
Lineup Box( N Col( 2 ), Spacing( 3 ),
Button Box( "Response(s)",
colListY << Append( colListData << GetSelected )
),
colListY = Col List Box(
width( lbWidth ),
nLines( 8 ),
MinItems( 1 )
),
)
),
Panel Box( "Action",
Lineup Box( N Col( 1 ),
Button Box( "OK",
nm = colListW << GetItems;
nY = colListY << GetItems;
If( N Items( nm ) > 0,
dm = dt << Get As Matrix( nm );
Factorws << Close Window;
Eval( next );
);
),
Button Box( "Cancel",
Factorws << Close Window;
Stop();
),
Text Box( " " ),
Button Box( "Remove",
colListW << RemoveSelected;
colListY << RemoveSelected;
)
)
)
),
Text Box( "Written by Lisa Winland lisawinland@icloud.com" )
)
)
)
);
next = Expr(
Show( nm );
colvalues = Associative Array( Column( nm ) ) << Get Keys;
Show( colvalues );
listvalues = {};
Show( nY );
nw = New Window( "User Input for Dunnett's",
Outline Box( "Level Selection for Dunnett's",
values = {};
i = 1;
For( i = 1, i <= N Items( colvalues ), i += 1,
Values[i] = Char( colvalues[i] )
);
Show( Values );
H List Box(
Text Box( "Select Value for Control" ),
listvalues = List Box( Values )
);,
Button Box( "OK",
level = (listvalues << Get selected);
nw << Close Window;
Eval( fiteval );
Show( level );
)
)
);
);
Fiteval = Expr(
Show( nm );
Show( nY );
Show( level );
controllevel = (Char( nm ) || ":" || Char( level ));
Show( controllevel );
Fit Model(
Y( Eval( nY ) ),
Effects( Eval( nm ) ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
:Y << {Summary of Fit( 1 ), Analysis of Variance( 1 ), Parameter Estimates( 1 ),
Lack of Fit( 0 ), Expanded Estimates( 1 ), Show Prediction Expression( 1 ),
Sorted Estimates( 1 ), Scaled Estimates( 0 ), Plot Actual by Predicted( 0 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Studentized Residuals( 0 ), Plot Effect Leverage( 0 ),
Plot Residual by Normal Quantiles( 0 ), Box Cox Y Transformation( 0 ), Show VIF( 1 ),
Multiple Comparisons(
Effect( Eval( nm ) ),
Comparisons with Control(
1,
Control Level( Eval( Parse( controllevel ) ) ),
Comparisons with Control Decision Chart(
Control Differences Chart( 1, Point Options( "Show Needles" ) )
)
)
)},
)
);
);
dt = Current Data Table();
nc = N Col( dt );
nr = N Row( dt );
Eval( Dia_Window );ScriptRe: Dunnett's pour plusieurs YJ'ai d'abord essayé d'atteindre votre objectif de manière interactive, puis j'ai enregistré le script. Il semble que vous puissiez le faire, mais vous devez envoyer la liste des options à chaque réponse. Vous pouvez insérer des expressions pour accueillir plusieurs réponses.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fit = dt << Fit Model(
Y( :height, :weight ),
Effects( :age ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run(
:height << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Lack of Fit( 0 ), Scaled Estimates( 0 ),
Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ),
Plot Effect Leverage( 1 ), Plot Residual by Normal Quantiles( 0 ),
Box Cox Y Transformation( 0 ),
Multiple Comparisons( Effect( :age ), Tukey HSD( 1 ) )},
:weight << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Lack of Fit( 0 ), Scaled Estimates( 0 ),
Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ),
Plot Effect Leverage( 1 ), Plot Residual by Normal Quantiles( 0 ),
Box Cox Y Transformation( 0 ),
Multiple Comparisons(
Effect( :age ),
Comparisons with Control(
1,
Control Level( "age:12" ),
Comparisons with Control Decision Chart(
Control Differences Chart( 1, Point Options( "Show Needles" ) )
)
)
)}
)
);Re: Dunnett's pour plusieurs YJe n'ai pas réussi à faire accepter aux Dunnett une variable pour l'effet ou le niveau de contrôle. Comment faire pour qu'il accepte une variable ?
J'ai besoin de quelque chose où ils sélectionnent la variable et le niveau, puis il est répété pour chaque réponse. Comment vous l'avez dans votre réponse est le nom réel de la colonne et le niveau réel.
Re: Dunnett's pour plusieurs YJ'ai encore modifié mon exemple pour vous montrer comment utiliser des expressions pour créer le script adaptatif pour un nombre quelconque de réponses.
For( c = 1, c <= N Items( y ), c++,
Insert Into( run expr,
Substitute(
Expr(
yyy << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Lack of Fit( 0 ), Scaled Estimates( 0 ),
Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ),
Plot Effect Leverage( 1 ), Plot Residual by Normal Quantiles( 0 ),
Box Cox Y Transformation( 0 ),
Multiple Comparisons(
Effect( :age ),
Comparisons with Control(
1,
Control Level( "age:12" ),
Comparisons with Control Decision Chart(
Control Differences Chart( 1, Point Options( "Show Needles" ) )
)
)
)}
),
Expr( yyy ),
y[c];
)
)
);
Eval(
Substitute(
Expr(
fit = dt << Fit Model(
Y( Eval( y ) ),
Effects( Eval( x ) ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
rrr
)
),
Expr( rrr ),
Name Expr( run expr )
)
);Re: Dunnett's pour plusieurs YMais dans votre exemple, l'effet est toujours le nom de la colonne, de même que le niveau de contrôle. Pouvez-vous faire quelque chose comme :
effet(eval(x))
Comparaisons avec le contrôle(
1,
niveau de contrôle (eval(level)),
Je n'arrive pas à faire fonctionner ça. Ou devez-vous l'avoir comme noms réels?

Re : Dunnett pour plusieurs YQu'est-ce qui est capturé dans votre boîte de dialogue pour les sélections de colonnes ? Est-ce une référence de colonne ou un nom (chaîne de caractères) ?
En supposant qu'il s'agisse d'une chaîne de caractères, ce code peut fonctionner.
Names Default to Here( 1 );
// example
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// values from dialog
y = List( "height", "weight" );
x = "age";
level = 12;
// empty run argument for Fit Model message
run expr = Expr( Run() );
// iteratively add the optons for each response
For( c = 1, c <= N Items( y ), c++,
Insert Into( run expr,
Substitute(
Expr(
yyy << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Lack of Fit( 0 ), Scaled Estimates( 0 ),
Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ),
Plot Effect Leverage( 1 ), Plot Residual by Normal Quantiles( 0 ),
Box Cox Y Transformation( 0 ),
Multiple Comparisons(
Effect( xxx ),
Comparisons with Control(
1,
Control Level( ccc ),
Comparisons with Control Decision Chart(
Control Differences Chart( 1, Point Options( "Show Needles" ) )
)
)
)}
),
Expr( yyy ),
Parse( ":" || y[c] ),
Expr( xxx ),
Parse( ":" || x ),
Expr( ccc ),
x || ":" || Char( level )
)
)
);
// complete message and evaluate it
Eval(
Substitute(
Expr(
fit = dt << Fit Model(
Y( Eval( y ) ),
Effects( Eval( x ) ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
rrr
)
),
Expr( rrr ),
Name Expr( run expr )
)
);