Zufällige Teilmengenauswahl für eine gegebene VerteilungHallo ...
Ich versuche, eine zufällige Auswahl aus einer Datenspalte für eine bestimmte Normalverteilung vorzunehmen. Die angegebene Verteilung unterscheidet sich von der der Daten.
Gibt es eine einfache Möglichkeit, dies mit den aktuellen Optionen von Table Subset zu erreichen? Ich konnte nichts sehen, was mir helfen könnte.
Ich habe auch eine Formel ausprobiert, im Grunde NormalDensity (X, mu, Sigma), um die Dichten der „Daten“ gegen die gegebene Verteilung darzustellen.
Aber ich weiß immer noch nicht, wie ich sagen soll, dass aus dieser Formel gleichmäßig und zufällig ausgewählt wird, damit mein Ergebnis so nah wie möglich an der gegebenen Verteilung liegt.
Danke. Schätzen Sie die Unterstützung.
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungIch würde auch den kostenlosen Kurs Statistical Thinking for Industrial Problem Solving empfehlen ( https://www.jmp.com/en_us/online-statistics-course.html ). Auch wenn Sie die Statistik möglicherweise nicht erlernen müssen, zeigen die Demonstrationen, wie Sie allgemeine Analysen in JMP durchführen. Ich denke, diese Demonstrationen können Ihnen zeigen, wie gut JMP in einem Statistikkurs abschneiden kann, und außerdem einige grundlegende Datenmanipulations- und Diagrammtechniken zeigen.
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungIch empfehle Ihnen, Zeit auf der JMP-Website zu verbringen. Oben auf der Startseite gibt es einen Menüpunkt, Lernen Sie JMP , über die Sie auf eine der vielen Ressourcen zugreifen können, die wir erstellt haben, um Ihnen beim Erlernen der Verwendung von JMP zu helfen. Ein weiterer Lernbereich ist der Entdeckungsgipfel Website in der Veranstaltungen Speisekarte. Einige Einblicke wird Ihnen beispielsweise die Keynote-Präsentation von John Sall in den letzten Jahren geben.
Unterrichten Sie einen Statistikkurs? Es gibt mehrere Abschnitte, die den Ausbildern gewidmet sind. Einige der Materialien könnten als Aufgaben für Ihre Schüler ausgelagert werden.
Ich stimme Ihnen zu, dass JMP in Version 15 komplex und anspruchsvoll ist. Einige seiner besten Eigenschaften sind nicht offensichtlich. Zu Ihrer Denkweise gehört es, viel zu lernen und ein neues Tool zu übernehmen. Ich unterrichte zum Beispiel JMP und viele neue Benutzer sehen eine JMP-Datentabelle und denken: „Das ist nur eine weitere Tabellenkalkulation.“ An diesem Ausgangspunkt beginnt die Frustration. (Ich sage nicht, dass das Ihr erster Eindruck war, aber es ist üblich. BI glaubt, dass Sie den Unterschied zwischen statistischer Analyse und Tabellenkalkulationsanalyse zu schätzen wissen, weil Sie MINITAB verwenden.) Die Ressourcen, die ich oben erwähnt habe, sollen die JMP-Denkweise offenlegen, damit sie Sinn ergibt und Sie schnell vorhersehen können, wie JMP Ihnen bei der Lösung eines neuen Problems helfen wird.
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungIch weiß das, aber eine Suche nach dem, wonach ich gesucht habe, hat mich zu dieser Antwort geführt.Ich versuche herauszufinden, ob der Wechsel zu JMP für einen Statistikkurs sinnvoll ist.Es wird deutlich, dass JMP für einfache Dinge nicht intuitiv und schwierig ist.Selbst die Antwort, die Sie auf ein einfaches Beispiel gegeben haben, ist nicht einfach oder intuitiv.
Mein bisheriger Eindruck von JMP ist, dass die Lernkurve hoch ist, sich aber wahrscheinlich lohnt, wenn Sie komplexere statistische Modelle erstellen oder Experimente entwerfen.Allerdings bin ich mir nicht sicher, ob JMP Vorteile gegenüber anderen Produkten wie R oder SPSS hat. JMP ist wie viele andere Produkte heutzutage von Experten oder Computerprogrammierern für die Verwendung durch Experten oder Computerprogrammierer entwickelt worden, während es für diejenigen, die nicht in diesen Bereichen tätig sind, relativ unzugänglich bleibt. Nur sehr wenige Produkte sind in der Lage, eine breite Benutzerbasis in Betracht zu ziehen und anzusprechen.
Vielleicht ändert sich meine Meinung, da ich JMP noch nicht aufgegeben habe, aber bisher weiß ich die einfache Benutzeroberfläche von Minitab zu schätzen.
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungDie ursprüngliche Anfrage betraf hier nicht die einfache Zufallsstichprobe einer anderen Spalte.
Wenn das alles ist, was Sie brauchen, können Sie das verwenden Col Shuffle()-Funktion um eine neue Spalte mit zufälliger Auswahl aus einer anderen zu generieren.

Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungDas soll doch wohl ein Scherz sein.Eine Zufallsstichprobe aus einer anderen Spalte zu erhalten und sie Ihnen in einer separaten Spalte anzuzeigen, ist eine Menüauswahl in Minitab.Die Antwort darauf erforderte zwei Seiten Diskussion und Dutzende Zeilen Code.Warum sind einfache Dinge in JMP so schwierig?
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungJeff
Ihre Änderung an Ians ursprünglicher Lösung hat perfekt funktioniert. Ich kann jetzt Zufallsdaten mit einer vorgeschriebenen Verteilung extrahieren. Es wäre schön, dies als Option unter Table Subsetting zu sehen ...
Mein Problem ist zu 100% gelöst.
danke für deine Unterstützung.
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungDer Ansatz, der @ian_jmp Das, was ich gefunden habe, war das erste, was ich versucht habe, aber ich habe es offenbar zu früh aufgegeben, da Ian einen Weg gefunden hat, einige der Mängel, auf die ich gestoßen bin, zu beheben. Gut gemacht.
Was die Eliminierung des Resamplings von Zeilen betrifft, glaube ich, dass Ian vorgeschlagen hat, die Zeile hinzuzufügen:
bv[Loc Min( dist )] = .;
zur for()-Schleife. Also:
Names Default To Here( 1 );
// Make a big table
dt1 = New Table( "Big",
New Column( "Values", Numeric, Continuous, Formula( Random Uniform( -3, 3 ) ) ),
New Column("Row", Formula(Row()))
);
dt1 << addRows( 40000 );
dt1 << runFormulas;
Column( dt1, "Values" ) << deleteFormula;
// Make a small table
dt2 = New Table( "Small",
New Column( "Values", Numeric, Continuous, Formula( Random Normal( 0, 1 ) ) )
);
dt2 << addRows( 40 );
dt2 << runFormulas;
Column( dt2, "Values" ) << deleteFormula;
// For each value in dt2, find a value in dt1 that's closest
bv = Column( dt1, "Values" ) << getValues;
sv = Column( dt2, "Values" ) << getValues;
selectedRows = J( N Row( sv ), 1, . );
For( i = 1, i <= N Row( sv ), i++,
dist = (bv - sv[i]) ^ 2;
selectedRows[i] = Loc Min( dist );
//the line below prevents rows from the "Big" table from being re-sampled
bv[Loc Min( dist )] = .;
);
// Subset dt1
dt3 = dt1 << subset( rows( selectedRows ), LinkToOriginalDataTable( 1 ) );
// Look at the distributions
New Window( "Compare Distributions",
H List Box(
dt1 << Distribution( Continuous Distribution( Column( :Values ) ) ),
dt2 << Distribution( Continuous Distribution( Column( :Values ) ) ),
dt3 << Distribution( Continuous Distribution( Column( :Values ) ) )
)
);
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungEs tut mir leid, ich werde aufgrund eines Urlaubs einige Tage lang keinen Zugang zu einem Computer haben. Aber ich bin mir sicher, dass es jemand anderes kann. . .
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungIan
Mein Ziel war es, ca. 46.000 Teilstichprobendaten zu erhalten, von denen 44.000 Duplikate waren.
Könnten Sie mir bitte diese Zeile für „bv“ für Ihren Vorschlag schreiben?
Danke nochmal.
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungJa, das habe ich mich gefragt. Im Moment ist dies der Fall, aber wenn Sie keine Duplikate möchten, fügen Sie einfach eine zusätzliche Zeile hinzu, die das gefundene Element des Vektors „bv“ auf das fehlende „.“ setzt.
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungIan,
Ich habe vergessen, eine Frage zu stellen. Erfolgt Ihre Auswahl ausschließlich aus der Originaltabelle oder besteht die Möglichkeit, dass doppelte Auswahlen in der Untertabelle vorgenommen werden?
Danke
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungIan,
Das ist brilliant. Ich habe über einen ähnlichen Ansatz nachgedacht, war aber aufgrund meiner grundlegenden Skriptkenntnisse nicht dazu in der Lage.
Ich konnte es an meine Daten anpassen und bekomme, was ich will. Vielleicht erweitere ich dies auf eine 2-Parameter-Verteilungsauswahl, die ich über Ihr Skript durchführen könnte.
danke für deine Unterstützung.
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungJeff,
Danke für Ihre Bemühungen.
Ihr Vorschlag hatte eine leichte Chance. Ich habe es auf meine Daten angewendet und leider hat es nicht funktioniert, da die Auswahl zufällig ist. Ich habe es etwa 3000 Mal ausgeführt und nach 10 Stunden gestoppt. Die Veränderung des Datenmittelwerts war unbedeutend.
Dies ist keine einfache Technik (es sei denn, Sie heißen Ian). Ich könnte mir vorstellen, dass eine Art Optimierer beteiligt ist, der versucht, zufällig aus der Richtung zu ziehen, in der es sinnvoller ist. GAs mögen übertrieben sein, können diese Art der Optimierung aber durchaus durchführen.
Aus statistischer Sicht ist das für das, was ich mache, völlig in Ordnung. Die 400+K stellen eine große Datenmenge an Vermögenswerten dar. Ich versuche, Vermögenswerte zu finden, die einer untersuchten Untergruppe ähneln.
Danke noch einmal.
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungWenn " Unterm Strich muss ich also aus mehr als 400.000 Zeilen eine Reihe von Teilstichproben auswählen, damit die Verteilung für die ausgewählte Teilstichprobe so nah wie möglich an der gegebenen Verteilung liegt " ist das, was Sie wollen. Vielleicht könnten Sie diesen oder einen ähnlichen Ansatz verwenden?
NamesDefaultToHere(1);
// Make a big table
dt1 = NewTable("Big", NewColumn("Values", Numeric, Continuous, Formula(RandomUniform(-3,3))));
dt1 << addRows(40000);
dt1 << runFormulas;
Column(dt1, "Values") << deleteFormula;
// Make a small table
dt2 = NewTable("Small", NewColumn("Values", Numeric, Continuous, Formula(RandomNormal(0,1))));
dt2 << addRows(40);
dt2 << runFormulas;
Column(dt2, "Values") << deleteFormula;
// For each value in dt2, find a value in dt1 that's closest
bv = Column(dt1, "Values") << getValues;
sv = Column(dt2, "Values") << getValues;
selectedRows = J(NRow(sv), 1, .);
for(i=1, i<=NRow(sv), i++,
dist = (bv - sv[i])^2;
selectedRows[i] = LocMin(dist);
);
// Subset dt1
dt3 = dt1 << subset(rows(selectedRows), LinkToOriginalDataTable(1));
// Look at the distributions
NewWindow("Compare Distributions",
HListBox(
dt1 << Distribution( Continuous Distribution( Column( :Values ) ) ),
dt2 << Distribution( Continuous Distribution( Column( :Values ) ) ),
dt3 << Distribution( Continuous Distribution( Column( :Values ) ) )
)
);
Betreff: Zufällige Teilmengenauswahl für eine bestimmte Verteilung
Abhängig von Ihrem Zweck kann es statistisch fraglich sein, eine solche Teilmenge zu erhalten. Eine Möglichkeit besteht jedoch darin, sie brutal zu erzwingen, indem Sie Resample Freq() verwenden, um zufällige Stichproben zu generieren, und diese Stichprobe dann überprüfen, um festzustellen, ob sie Ihren gewünschten Eigenschaften entspricht. Hier ist ein Prototyp, der eine Tabelle generiert, um Ihre Originaldaten zu simulieren, sie dann erneut abzutasten und die Verteilungsplattform zum Testen der Stichprobe verwendet.
dt = New Table( "original",
Add Rows( 1000 ),
//:parameter will have a random normal distribution with mean=0
//and a stddev=1
New Column( "parameter",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Random Normal() )
),
New Column( "Row", Numeric, "Continuous", Format( "Best", 12 ), Formula( Row() ) ),
//The Resample Freq() function generates a frequence count for sample with replacement
//the .05 argument is the sample rate, i.e. we want a sample size of 5% of the original table
New Column( "Resample Freq",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Resample Freq( 0.05 ) ),
)
);
//Generate a distribution of :parameter using the resample frequency as a Freq column to get
//Automatic Recalc will cause the Distribution to rerun when the Resample Freq column is re-evaluated
//to get a new sample
New Window( "Dist comparison",
H List Box(
dt << Distribution( Continuous Distribution( Column( :parameter ) ) ),
dist = dt << Distribution(
Automatic Recalc( 1 ),
Freq( :Resample Freq ),
Continuous Distribution( Column( :parameter ) )
)
)
);
//set the minimum mean value we will accept for the subsample
target_mean_min = .249;
//set the minimum mean value we will accept for the subsample
target_mean_max = .251;
//how many iterations are we willing to try before giving up?
max_iter = 1000;
iter = 1;
While(
//Report( dist )[Number Col Box( 2 )][1] is the mean value from the Distribution report
!(target_mean_min <= Report( dist )[Number Col Box( 2 )][1] <= target_mean_max) &
iter <= max_iter,
//get a new sample
Column( "Resample Freq" ) << eval formula;
iter++;
);
If(
//check to see if we exited because we hit max_iter or got a good sample
iter > max_iter & !(target_mean_min <= Report( dist )[Number Col Box( 2 )][1] <=
target_mean_max)
,
Print( "No result in " || Char( max_iter ) || " random samples." ),
//got a good sample so get the subset
dt << select where( :resample freq != 0 );
dt << Subset( Selected Rows( 1 ), Selected columns only( 0 ) );
);
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungIch denke hier nur frei, aber vielleicht könnten Sie versuchen, die Verteilungsform mithilfe der Verteilungsplattform zu bestimmen und die Daten dann in eine Normalverteilung umzuwandeln.Führen Sie dann die Ausgabe der Ebenen und anschließend die Unterteilung mit Schichtung durch.Nur ein Gedanke.
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungJim, danke für deinen Vorschlag.
Ihr Vorschlag bietet jedoch keine Möglichkeit, die Auswahl entsprechend der angegebenen Verteilung zu erzwingen. Es würde also nicht das produzieren, was ich suche. Zur Validierung habe ich die Schritte befolgt und es wurde ein Dist erstellt, der dem Original sehr ähnlich ist.
Vielleicht erkläre ich es nicht klar und deutlich.
Ich habe mehr als 400.000 Zeilen XN Datenspalten (riesige Matrix). Wenn ich einen von N Parametern nenne, der Argumentation halber als „X“.
Die Verteilung von X aus diesen Daten – nennen Sie sie X.dist1.
Ich habe einen zweiten Datensatz, der Xagain enthält, und dieses Mal mit X.dist2
X.dist1 ist nicht zu weit entfernt, unterscheidet sich aber von X.dist2.
Angesichts der Tatsache, dass ich im ersten Datensatz viele Daten habe (über 400.000), versuche ich daher, den Datensatz 1 unterzuwählen, sodass die X-Verteilung der ausgewählten Daten so nah wie möglich an X.dist2 herankommt.
Daher suchte ich nach einer Möglichkeit unter „Tabelle – Teilmenge“, mit der ich die Normalverteilungscharakteristik ODER mithilfe einer Formel und dann mithilfe der Tabelle „Teilmenge“ angeben kann.
Für die Formel setze ich die Dichten von Datensatz1 gegen meinen gewünschten X.dist2.
Aber jetzt brauche ich eine einheitliche Zufallsmethode zur Stichprobenziehung aus den Formelausgaben, um zu erzwingen, dass die Ergebnisverteilung ~ X.dist2 ist
ODER auf irgendeine andere Weise ...
Wenn ich eine Tabellenteilmenge verwenden möchte, muss die Lösung eine Normalverteilung aus einem Parameter angeben, aus dem gezogen werden soll.
Andernfalls muss ich eine einheitliche Zufallsauswahl aus einem Parameter finden (Formelansatz).
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungIch glaube, dass Sie durch einen einfachen zweistufigen Prozess das bekommen können, was Sie wollen.
1. Öffnen Sie die Vertriebsplattform für die betreffende Spalte.Dann
Speichern==>Ebenennummern.
Dadurch wird eine neue Spalte mit einer Verteilung erstellt, die direkt aus den tatsächlichen Daten übernommen wird
2. Erstellen Sie eine Teilmenge der Daten und geben Sie sie an
Zufällig – Abtastrate:
und auch
Schichtung basierend auf der neuen Level-Spalte, die im obigen Schritt erstellt wurde
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungMein eigentliches Ziel besteht darin, N (andere) Parameter aus zwei bereits verfügbaren Datensätzen zu vergleichen. Ich versuche nicht, eine fiktive Verteilung zu erstellen. (Vielleicht verstehe ich Ihren Vorschlag falsch).
Die gegebene Verteilung stellt eine Einschränkung für einen wichtigen Parameter dar, der andere beeinflussen kann. Ich versuche, Vermögenswerte mit ähnlicher Verteilung von „Daten“ zu einer bestimmten Verteilung auszuwählen, um die Auswirkungen dieses einflussreichen Parameters zu minimieren. In diesem Zusammenhang gilt „Verteilung“ nur für einen einzelnen Parameter und nicht für mehrere.
Unterm Strich muss ich also aus mehr als 400.000 Zeilen eine Reihe von Teilstichproben auswählen, damit die Verteilung für die ausgewählte Teilstichprobe so nah wie möglich an der gegebenen Verteilung liegt.Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungIch verstehe ... ich habe Ihren ursprünglichen Beitrag nicht vollständig verstanden. Sie haben Recht, mein Vorschlag wird nur eine Verteilung mit sehr ähnlichen Parametern wie die ursprüngliche Verteilung zurückgeben. Wenn Sie Beobachtungen einer Zufallsvariablen mit den gewünschten Parameterschätzungen wünschen, warum können Sie dann nicht einfach eine Spalte mit diesen Parametern erstellen und fortfahren? Sicher, die spezifischen Beobachtungen werden nicht unbedingt in der ursprünglichen Spalte enthalten sein, aber das kann Einfluss darauf haben, was Sie analytisch oder praktisch erreichen möchten oder auch nicht? Es handelt sich zumindest um plausible Beobachtungen, wenn auch nicht um exakte Übereinstimmungen.
Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungPeter ... danke für deinen Vorschlag.
aber das scheint nicht zu funktionieren.
Der Mittelwert/die Standardabweichung meiner Originaldaten beträgt: 12816 und 1726 aus einer sehr großen Stichprobe (400.000 +).
Ich versuche, eine Teilstichprobe herunterzuwählen, die näher an 14300 und 2050 liegt
Ich habe Ihren Vorschlag zur Formel ausprobiert (z. B. Dichten der Daten bezüglich 14300, 2050), und wenn ich nicht erzwingen kann, dass dieser zufällige Abstand gleichmäßig unter den Dichten ausgewählt wird, glaube ich nicht, dass ich das bekomme, was ich brauche. Tatsächlich verlief die Unterabtastung wie erwartet mit der ursprünglichen Verteilung.Betreff: Zufällige Teilmengenauswahl für eine bestimmte VerteilungSobald Sie die Bevölkerungsspalte haben, aus der Sie Stichproben ziehen möchten, probieren Sie diesen Workflow aus:
1. Wählen Sie die Spalte aus, aus der Sie eine Probe entnehmen möchten.
2. Wählen Sie in der JMP-Hauptmenüleiste Zeilen -> Zeilenauswahl -> Zufällig auswählen -> und dann Ihre Stichprobengröße oder Stichprobenrate.
Dadurch werden ausgewählte Spalten in Ihrer ursprünglichen Datentabelle zurückgegeben, und von dort aus erhalten Sie mit Row Subset eine Datentabelle.