Obtenir une moyenne d'un sous-ensemble de donnéesSalut,
J'ai des intensités de 4 échantillons traités et 5 échantillons non traités pris entre une gamme de longueurs d'onde (400 - 600 nm) à trois moments différents (0, 1, 3 heures).
À long terme, j'essaie de normaliser mes données afin que l'intensité moyenne à 400 nm des échantillons non traités soit de 1 à chaque instant. Pour ce faire, je dois trouver comment obtenir l'intensité moyenne non traitée de 400 nm à 0, 1, 3 heures.
Voici mon code actuel :
Col Mean(
:Intensity,
:Time == 1 & :Wavelength( nm ) == 400 & :Treat == "No"
)
D'après les graphiques que j'ai créés (et une feuille de tableau croisé dynamique Excel), je sais que la valeur devrait être d'environ 0,72 pendant 1 heure, mais j'obtiens 1,3 pour la plupart des lignes. J'obtiens également 0,68 pour les lignes qui satisfont mes 3 déclarations "et", mais je sais que les feuilles de pivot Excel font parfois des choses drôles de normalisation, donc je ne sais pas si je suis préoccupé par les différences là-bas.
Toute suggestion pour rendre mon code cohérent serait grandement appréciée.
Re : Obtenir une moyenne d'un sous-ensemble de donnéesPas grave 
Col Moyenne ( :taille, :âge)
Merci
Re : Obtenir une moyenne d'un sous-ensemble de donnéesJim,
Comment puis-je faire en sorte que la colonne Exemple contienne la moyenne des hauteurs de la colonne uniquement pour l'âge de la personne dans la rangée ?
Par exemple, dans les exemples de données, Katie a 12 ans, je voudrais que sa colonne Exemple contienne la hauteur moyenne de la colonne pour les 12 ans seulement, et pour Alice, qui a 13 ans, je voudrais que sa colonne Exemple contienne la moyenne de la colonne taille pour seulement les 13 ans.
J'espère qu'il existe un moyen plus simple que d'utiliser des ifs imbriqués pour chaque âge.
Merci,
Marquer
Re : Obtenir une moyenne d'un sous-ensemble de donnéesJ'ai fini par utiliser votre deuxième option, mais je dois encore entrer manuellement ce facteur de normalisation pour mon calcul... Mon code final ressemble à ceci:
If( :Time == 0,
:Intensity / 1.11175075,
If( :Time == 1,
:Intensity / 0.772546829268293,
If( :Time == 3,
:Intensity / 1.2335052,
"Error"
)
)
Re : Obtenir une moyenne d'un sous-ensemble de donnéesCela a fonctionné, mais il n'est pas facile d'appliquer une valeur particulière (un peu comme utiliser le $$ dans Excel) à toutes les lignes que je considère être du même type.
Je pense que c'est juste une différence dans le logiciel, et je vais devoir m'habituer aux différences.
Re : Obtenir une moyenne d'un sous-ensemble de donnéesC'est peut-être évident, mais cela semble plus simple que ce que vous venez de décrire.En utilisant votre exemple, j'ai créé une nouvelle colonne avec la formule Col Mean( :Intensity, :Time Period, :Treatment, :Wavelength ).Je n'utilise pas de scripts si je peux les éviter et ils peuvent être évités ici.La fonction Col Mean (dans le groupe Statistics) permet de calculer la moyenne en fonction d'un certain nombre de variables de regroupement, ce qui produit exactement le tableau que vous affichez.
Re : Obtenir une moyenne d'un sous-ensemble de donnéesSalut,
Si je comprends bien votre question, vous demandez de calculer une statistique moyenne pour une colonne particulière par une ou plusieurs colonnes de regroupement.
Dans l'exemple de tableau de données ci-joint, j'ai enregistré deux scripts pour illustrer comment vous pouvez le faire en utilisant deux approches différentes. Celui intitulé "Mean by Trt and Time Period and Wavelength" crée un tableau croisé dynamique avec un filtre de données local afin que vous puissiez consulter les intensités moyennes pour différentes périodes de temps, traitements et longueurs d'onde. Le filtre de données local peut être appliqué de manière conditionnelle (en utilisant "Conditionnel" sous l'option triangle rouge) de sorte que lors de la sélection d'une catégorie, il limitera les catégories du filtre de colonne suivant uniquement à celles qui se trouvent dans la catégorie sélectionnée.
Tabulate (pivot table) with local data filterTabulate (pivot table) with local data filterTabuler (tableau croisé dynamique) avec filtre de données local
Le deuxième script intitulé "Tables Summary" est un exemple d'utilisation des Tables-->Summary avec le traitement, la période et la longueur d'onde comme colonnes de regroupement.
Tables Summary Dialog with Group ColumnsTables Summary Dialog with Group ColumnsBoîte de dialogue Résumé des tableaux avec groupes de colonnes
Et pour les autres qui veulent voir comment réaliser le tableau croisé dynamique avec un script.
Tabulate(
Show Control Panel( 0 ),
Set Format( Mean( :Intensity( 12, 1 ) ) ),
Add Table(
Row Table(
Grouping Columns( :Time Period, :Treatment, :Wavelength ),
Analysis Columns( :Intensity ),
Statistics( Mean )
)
),
Local Data Filter(
Add Filter(
columns( :Wavelength, :Time Period, :Treatment ),
Where( :Time Period == "0" ),
Display( :Treatment, Size( 309, 232 ), List Display )
)
)
)
Et enfin, les Tables-->Summary avec le JSL correspondant :
Data Table( "Getting an average of a subset of data.jmp" ) <<
Summary(
Group( :Time Period, :Treatment, :Wavelength ),
Mean( :Intensity ),
Freq( "None" ),
Weight( "None" )
)
Est-ce plus vers ce que vous attendez?
meilleur,
Stan
Re : Obtenir une moyenne d'un sous-ensemble de donnéesJe suis sûr que je ne suis pas dans le détail total, les différentes conditions que vous devez mettre en place, pour que cela fonctionne, cependant, j'ai rassemblé un exemple qui, je pense, illustrera la méthode qui fonctionnera pour générer la réponse vous avez besoin.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << New Column( "Example",
formula(
If( :sex == "F" & :age == 12 | :sex == "M" & :age == 13,
Col Mean( If( :sex == "F" & :age == 12 | :sex == "M" & :age == 13, :height, . ) ),
.
)
)
);
Jetez un oeil à la formule. Il a utilisé 2 décisions différentes pour obtenir sa réponse. Premièrement, seules les lignes où les combinaisons spécifiques de sexe et d'âge sont remplies devraient calculer les moyennes. Et si ces spécificités ne sont pas remplies, la valeur doit être une valeur manquante. La deuxième décision est effectuée lorsque la première décision est correcte, puis nous voulons calculer la moyenne de la colonne, mais n'incluons que les valeurs où les valeurs spécifiques des combinaisons sexe et âge sont vraies.
Re : Obtenir une moyenne d'un sous-ensemble de donnéesNon, ce n'est pas DU TOUT ce à quoi je m'attendais.
J'essaie juste d'obtenir la valeur moyenne de l'intensité en utilisant tous les
valeurs où le temps est de 1 h, la longueur d'onde est de 400 et il n'y a pas eu
traitement( I@1 400,N). Je ferai la même chose pour 0 et 3 heures (I@ 0, 400,N et
I@3, 400,N)
Je vais éventuellement faire une formule utilise des instructions if pour vérifier l'heure
pour la rangée, puis divise l'intensité de cette rangée par le temps
valeur "I@" appropriée.
À peu près:
Si t = 0, I/I@0,400,n
Sinon si t= 1, I/I@1 400,n
Sinon si t = 3, I/I@3 400,n
Sinon erreur
J'espère que cela explique mieux ce que j'essaie de faire.
Re : Obtenir une moyenne d'un sous-ensemble de donnéesJe ne suis pas sûr que vous interprétiez ce que fait réellement votre code. Le deuxième élément de la fonction Col Mean() est une instruction "By". Autrement dit, la façon dont vous l'avez codé, il calculera une moyenne pour l'intensité pour tous les rews qui répondent aux critères suivants
:Time == 1 & :Wavelength( nm ) == 400 & :Treat == "No"
et pour toutes les lignes qui ne répondent pas à ces critères, il calculera la moyenne de l'intensité pour toutes ces lignes. Ainsi, lorsque la formule est appliquée, elle ne peut générer qu'une des deux valeurs différentes. Est-ce ce que vous attendez ?