Ermitteln eines Durchschnitts aus einer Teilmenge von DatenHallo,
Ich habe Intensitäten von 4 behandelten und 5 unbehandelten Proben in einem Wellenlängenbereich (400–600 nm) zu drei verschiedenen Zeitpunkten (0, 1, 3 Stunden) entnommen.
Langfristig versuche ich, meine Daten so zu normalisieren, dass die durchschnittliche Intensität bei 400 nm der unbehandelten Proben zu jedem Zeitpunkt 1 beträgt. Dazu muss ich herausfinden, wie ich die durchschnittliche unbehandelte 400-nm-Intensität nach 0, 1, 3 Stunden erreichen kann.
Das ist mein aktueller Code:
Col Mean(
:Intensity,
:Time == 1 & :Wavelength( nm ) == 400 & :Treat == "No"
)
Aus den von mir erstellten Diagrammen (und einem Excel-Pivot-Sheet) weiß ich, dass der Wert für eine Stunde etwa 0,72 betragen sollte, für die meisten Zeilen erhalte ich jedoch 1,3. Ich erhalte auch 0,68 für die Zeilen, die meine 3 „und“-Anweisungen erfüllen, aber ich weiß, dass Excel-Pivotsheets manchmal seltsame Normalisierungsfunktionen bewirken, daher bin ich mir nicht sicher, ob mir die Unterschiede dort Sorgen bereiten.
Für Vorschläge zur Konsistenz meines Codes wären wir sehr dankbar.
Betreff: Einen Durchschnitt einer Teilmenge von Daten ermittelnEgal 
Col Mean ( :Größe, :Alter)
Danke
Betreff: Einen Durchschnitt einer Teilmenge von Daten ermittelnJim,
Wie kann ich erreichen, dass die Spalte „Beispiel“ den Spaltenmittelwert der Körpergröße nur für das Alter der Person in der Zeile enthält?
In den Beispieldaten ist beispielsweise Katie 12 Jahre alt. Ich möchte, dass ihre Beispielspalte nur die mittlere Körpergröße der 12-Jährigen enthält, und für Alice, die 13 Jahre alt ist, möchte ich, dass ihre Beispielspalte den Spaltenmittelwert enthält Größe nur für die 13-Jährigen.
Ich hoffe, dass es einen einfacheren Weg gibt, als für jedes Alter verschachtelte Ifs zu verwenden.
Danke schön,
Markieren
Betreff: Einen Durchschnitt einer Teilmenge von Daten ermittelnAm Ende habe ich Ihre zweite Option verwendet, aber ich muss diesen Normalisierungsfaktor für meine Berechnung immer noch manuell eingeben ... Mein endgültiger Code sieht so aus:
If( :Time == 0,
:Intensity / 1.11175075,
If( :Time == 1,
:Intensity / 0.772546829268293,
If( :Time == 3,
:Intensity / 1.2335052,
"Error"
)
)
Betreff: Einen Durchschnitt einer Teilmenge von Daten ermittelnDas hat irgendwie funktioniert, aber es ist nicht einfach, einen bestimmten Wert (ähnlich wie bei der Verwendung von $$ in Excel) auf alle Zeilen anzuwenden, die meiner Meinung nach vom gleichen Typ sind.
Ich denke, es ist einfach ein Unterschied in der Software, und ich werde mich an die Unterschiede gewöhnen müssen.
Betreff: Einen Durchschnitt einer Teilmenge von Daten ermittelnVielleicht ist das offensichtlich, aber es scheint einfacher zu sein als das, was Sie gerade dargelegt haben.Anhand Ihres Beispiels habe ich eine neue Spalte mit der Formel Col Mean( :Intensity, :Time Period, :Treatment, :Wavelength ) erstellt.Ich verwende keine Skripte, wenn ich sie vermeiden kann, und sie können hier vermieden werden.Die Funktion „Col Mean“ (in der Gruppe „Statistical“) ermöglicht die Berechnung des Mittelwerts als Funktion einer Reihe von Gruppierungsvariablen. Dadurch entsteht genau die Tabelle, die Sie anzeigen.
Betreff: Einen Durchschnitt einer Teilmenge von Daten ermittelnHallo,
Wenn ich Ihre Frage richtig verstehe, möchten Sie die Durchschnittsstatistik für eine bestimmte Spalte anhand einer oder mehrerer Gruppierungsspalten berechnen.
In der beigefügten Beispieldatentabelle habe ich zwei Skripte gespeichert, um zu veranschaulichen, wie Sie dies mit zwei verschiedenen Ansätzen tun können. Die Seite mit dem Titel „Mittelwert nach Trt und Zeitraum und Wellenlänge“ erstellt eine Pivot-Tabelle mit einem lokalen Datenfilter, sodass Sie die mittleren Intensitäten für verschiedene Zeiträume, Behandlungen und Wellenlängen anzeigen können. Der lokale Datenfilter kann bedingt angewendet werden (durch Verwendung von „Bedingt“ unter der Option „Rotes Dreieck“), sodass bei der Auswahl einer Kategorie die Kategorien des nächsten Spaltenfilters nur auf diejenigen beschränkt werden, die in der ausgewählten Kategorie enthalten sind.
Tabulate (pivot table) with local data filterTabulate (pivot table) with local data filterTabellieren (Pivot-Tabelle) mit lokalem Datenfilter
Das zweite Skript mit dem Titel „Tabellenzusammenfassung“ ist ein Beispiel für die Verwendung von Tabellen -> Zusammenfassung mit der Behandlung, dem Zeitraum und der Wellenlänge als Gruppierungsspalten.
Tables Summary Dialog with Group ColumnsTables Summary Dialog with Group ColumnsTabellenzusammenfassungsdialog mit Gruppenspalten
Und für die anderen, die sehen möchten, wie man die Pivot-Tabelle mit einem Skript ausführt.
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 )
)
)
)
Und schließlich die Tabellen -> Zusammenfassung mit der entsprechenden JSL:
Data Table( "Getting an average of a subset of data.jmp" ) <<
Summary(
Group( :Time Period, :Treatment, :Wavelength ),
Mean( :Intensity ),
Freq( "None" ),
Weight( "None" )
)
Entspricht das eher Ihren Erwartungen?
am besten,
Stan
Betreff: Einen Durchschnitt einer Teilmenge von Daten ermittelnIch bin mir sicher, dass ich die verschiedenen Bedingungen, die Sie schaffen müssen, damit dies funktioniert, nicht in allen Einzelheiten beschreibe. Ich habe jedoch ein Beispiel zusammengestellt, das meiner Meinung nach die Methode veranschaulichen wird, mit der die Antwort generiert werden kann du brauchst.
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, . ) ),
.
)
)
);
Schauen Sie sich die Formel an. Es wurden zwei verschiedene Entscheidungen getroffen, um die Antwort zu erhalten. Zunächst sollten die Mittelwerte nur für die Zeilen berechnet werden, in denen die spezifischen Kombinationen von Geschlecht und Alter erfüllt sind. Und wenn diese Spezifikationen nicht erfüllt sind, sollte der Wert ein fehlender Wert sein. Die zweite Entscheidung wird durchgeführt, wenn die erste Entscheidung richtig ist, und dann möchten wir den Spaltenmittelwert berechnen, aber nur die Werte einbeziehen, bei denen die spezifischen Werte der Geschlechts- und Alterskombinationen wahr sind.
Betreff: Einen Durchschnitt einer Teilmenge von Daten ermittelnNein, das ist überhaupt nicht das, was ich erwartet habe.
Ich versuche nur, den Durchschnittswert der Intensität unter Verwendung aller zu ermitteln
Werte, bei denen die Zeit 1 Stunde beträgt, die Wellenlänge 400 und es keine gibt
Behandlung( I@1.400,N). Ich mache das Gleiche für 0 und 3 Stunden (I@ 0, 400,N und
I@3, 400,N)
Ich werde irgendwann eine Formel erstellen, die if-Anweisungen verwendet, um die Zeit zu überprüfen
für die Zeile und dividiert dann die Intensität für diese Zeile durch die Zeit
entsprechenden „I@“-Wert.
Grob:
Wenn t = 0, I/I@0,400,n
Sonst, wenn t= 1, I/I@1.400,n
Sonst, wenn t = 3, I/I@3.400,n
Sonst Fehler
Ich hoffe, das erklärt besser, was ich versuche.
Betreff: Einen Durchschnitt einer Teilmenge von Daten ermittelnIch bin nicht sicher, ob Sie interpretieren, was Ihr Code tatsächlich tut. Das zweite Element innerhalb der Col Mean()-Funktion ist eine „By“-Anweisung. Das heißt, so wie Sie es codiert haben, wird ein Mittelwert für die Intensität für alle Rews berechnet, die Folgendes erfüllen
:Time == 1 & :Wavelength( nm ) == 400 & :Treat == "No"
und für alle Zeilen, die dieses Kriterium nicht erfüllen, wird der Mittelwert der Intensität für alle diese Zeilen berechnet. Wenn die Formel angewendet wird, kann sie also nur einen von zwei verschiedenen Werten erzeugen. Ist es das, was Sie erwarten?