Gelman und Hill erklären Simulation in R. Auf Seite 139 sagen sie:R: Wie funktioniert vektorisierte ifelse im Zusammenhang mit mehrwertigen Ja/Nein-Parametern?
52% der Erwachsenen in den Vereinigten Staaten sind Frauen und 48% sind Männer. Die Höhen der Männer sind ungefähr normal verteilt mit mittleren 69,1 Zoll und Standard Abweichung 2,9 Zoll; Frauen mit Mittelwert 63,7 und Standardabweichung 2,7. Angenommen, wir wählen zufällig 10 Erwachsene. Was können wir über ihre durchschnittliche Höhe sagen?
sex <- rbinom (10, 1, .52) R code
height <- ifelse (sex==0, rnorm (***10***, 69.1, 2.9), rnorm (***10***, 64.5, 2.7)) #"***"s added for emphasis.
avg.height <- mean (height)
print (avg.height)
Ich verstehe nicht, was die beiden 10 tun in der Funktion rnorm.
Sex ist ein 10-Vektor. Wenn Geschlecht [1] 0 ist, wählt ifelse zehn Werte für die Höhe aus der Normalverteilung mit Mittelwert 69.1 ..., wenn Geschlecht [2] 1 ist, wählt iffelse 10 Werte für die Höhe von normal mit Mittelwert 64.5 und so weiter und nur Wert von Sex [10] wird bestimmen, was schließlich der Höhe zugeordnet wird.
Offensichtlich ist mein Verständnis falsch und es wählt die zehn Werte aus der richtigen Verteilung aus. Ich habe den Mittelwert der ersten Normalverteilung auf 669.1 geändert, um zu verstehen, wie er der Höhe einen Wert zuweist, und der obige Code tut, was er tun soll. Ich verstehe immer noch nicht, was die beiden 10 in den rnorm-Funktionen tun. Als ich die zwei 10 zu zwei 1 geändert habe, funktioniert alles wie es sollte. Kann mir bitte jemand erklären, wie zehn Werte für die Höhe im obigen Code zugewiesen sind.
Es läuft 'rnorm' unter verschiedenen Parametern, abhängig vom Ergebnis von' sex == 0'. 'ifelse()' gibt einen Vektor mit der Länge seiner ersten Eingabe (10) zurück, also muss das Ergebnis die Länge 10 haben. –
Das Ergebnis muss die Länge 10 haben, aber nicht die Werte 'ja' und' nein'. Ich denke, das ist die Verwirrung. – joemienko
Sie können 'ifelse' einfach so in die Konsole eingeben, um seinen Code zu sehen. Es läuft auf 'ans <- Test hinaus; ans [Test] <- ja [Test]; ans [! test] <- nein [! test]; return (ans) ' – Frank