2017-05-17 4 views
1

Hintergrund

Ich habe zwei Variablen namens x und y (bitte R-Code unter dem Bild sehen). Wenn ich plot(x, y) bekomme, erhalte ich das Top-Row-Plot (siehe unten). y Werte sind über die Oberseite von jeder x Wert gestapelt. Ich versuche dann , um aus diesen y Werte zu probieren und eine zweite Handlung unter dem Mutterplot zu machen.Sampling in der falschen Richtung R

Frage

Ich frage mich, warum, wenn ich den predit.range (siehe R Code unten) verwende 10:0 zu sein (das Problem tritt nicht auf, wenn ich 0:10 verwenden) mein Verfahren Probenahme geht völlig in den falschen Richtung? (bitte die Top-Reihe Grundstück an der unteren Reihe Grundstück vergleichen)

enter image description here

############# Input Values ################ 
         each.sub.pop.n = 150; 
         sub.pop.means = 20:10; 
         predict.range = 10:0; 
         sub.pop.sd = .75; 
         n.sample = 2; 
############################################# 
par(mar = c(2, 4.1, 2.1, 2.1)) 

m = matrix(c(1, 2), nrow = 2, ncol = 1); layout(m) 

Vec.rnorm <- Vectorize(function(n, mean, sd) rnorm(n, mean, sd), 'mean') 

y <- c(Vec.rnorm(each.sub.pop.n, sub.pop.means, sub.pop.sd)) 

x <- rep(predict.range, each = each.sub.pop.n) 

plot(x, y) 

## Unsuccessful Sampling ## The problem must be lying in here: 

sampled <- lapply(split(y, x), function(z) sample(z, n.sample, replace = TRUE)) 
sampled <- data.frame(y = unlist(sampled), 
       x = rep(predict.range, each = n.sample)) 
plot(sampled$x, sampled$y) 

Antwort

3

Dies ist ausreichend zu erläutern, warum.

x <- 10:0; y <- 10:0 

Haben Sie bemerkt, wie

split(y, x) 

sortiert die Liste? Um die gewünschte Bestellung, Steuerfaktorstufen zu erhalten:

split(y, factor(x, levels = unique(x)) 

In Ihrem Kontext, können Sie effizient ohne unique verwenden:

split(y, factor(x, levels = predict.range)) 
+0

Zheyuan, meine Probenahme Frage mit dieser Frage zu tun hat, die ich gestern gefragt. Kann ich hier verwenden: 'sampled <- lapply (Split (y, x), Funktion (z) Sample (z, n.beispiel, prob = dnorm (x, sub.pop.means, sub.pop.sd), ersetzen = TRUE)) ' – rnorouzian

+0

Lass uns hier reden! Siehe meinen obigen Kommentar zurück Fehler! – rnorouzian

+0

Neben dieser Stichprobe gibt es interessantere Fragen. Anscheinend ist die Sample-Regressionslinie nie so von der Populationsregressionslinie entfernt! – rnorouzian