2014-05-21 3 views
0

J'ai quelques problèmes avec la compréhension du prob dans sample. Par exemple, je veux créer un échantillon de données de taille 100 avec des entiers 1,2,3 & 4. J'utilise une probabilité de 0,1,0.2,0.3 & 0.4 respectivement.R_Sample avec des probabilités

sample1 < -sample (1: 4.100, remplacez = T, prob = suivants (0.1,0.4,0.1))

Alors, maintenant, je me attends un échantillon avec des nombres entiers de 1,2 3 répétition de 10,20,30 & 40 fois respectivement. Mais le résultat est différent

> table(sample1) 
sample1 
1 2 3 4 
7 24 33 36 

Quelqu'un peut-il expliquer cela? Et que dois-je faire si je veux obtenir les résultats attendus qui est

> table(sample1) 
    sample1 
    1 2 3 4 
    10 20 30 40 

Répondre

1

sample(...) prend un échantillon aléatoire avec des probabilités données dans prob=..., de sorte que vous ne se exactement cette proportion à chaque fois. D'autre part, les proportions se rapprochent de celles spécifiées dans prob comme n augmente:

f <- function(n)sample(1:4,n,replace=T,prob=(1:4)/10) 
samples <- lapply(10^(2:6),f) 
t(sapply(samples,function(x)c(n=length(x),table(x)/length(x)))) 
#   n  1  2  3  4 
# [1,] 1e+02 0.090000 0.220000 0.260000 0.430000 
# [2,] 1e+03 0.076000 0.191000 0.309000 0.424000 
# [3,] 1e+04 0.095300 0.200200 0.310100 0.394400 
# [4,] 1e+05 0.099720 0.199800 0.302250 0.398230 
# [5,] 1e+06 0.099661 0.199995 0.300223 0.400121 

Si vous avez besoin d'un échantillon aléatoire avec exactement les proportions, utilisez rep(...) et un ordre aléatoire.

g <- function(n) rep(1:4,n*(1:4)/10)[sample(1:n,n)] 
samples <- lapply(10^(2:6),g) 
t(sapply(samples,function(x)c(n=length(x),table(x)/length(x)))) 
#   n 1 2 3 4 
# [1,] 1e+02 0.1 0.2 0.3 0.4 
# [2,] 1e+03 0.1 0.2 0.3 0.4 
# [3,] 1e+04 0.1 0.2 0.3 0.4 
# [4,] 1e+05 0.1 0.2 0.3 0.4 
# [5,] 1e+06 0.1 0.2 0.3 0.4 
+0

Merci pour votre réponse détaillée @jlhoward – user3420448

2

sample prend un échantillon avec les probabilités spécifiées. Cela implique l'aléatoire - vous n'obtiendrez pas le même résultat à chaque fois. Pour faire ce que vous voulez utiliser tout représentant

rep(1:4, 100*seq(0.1,0.4,0.1)) 
+0

Merci. Mais existe-t-il un moyen de définir la taille de la population à partir de laquelle il prend l'échantillon? – user3420448

+0

Le deuxième argument indique juste combien de fois répéter chacun des éléments du premier argument. Modifier cela pourrait obtenir ce que vous voulez. Vos probabilités sont égales à 1, donc le modificateur de multiplier par 100 devrait nous donner quelque chose qui vaut 100 (mais en l'arrondissant, il peut être égal à 1 de temps en temps). – Dason

Questions connexes