0
votes

Échantillonnage d'une distribution normale à l'aide d'une boucle

J'essaie donc d'échantillonner à partir d'une distribution uniforme 1000 fois à chaque fois calculer la moyenne de 20 échantillons aléatoires de ladite distribution uniforme.

Error in summarise_(.data, .dots = compat_as_lazy_dots(...)) : argument ".data" is missing, with no default


5 commentaires

Vous dites "Distribution normale" dans le corps principal de votre message (deux fois) mais utilisez runiff pour échantillonner dans une distribution uniforme . Est-ce une faute de frappe?


Pour un échantillonnage aléatoire à partir de la distribution uniforme ( runifif () ), vous avez besoin de trois arguments: nombre d'échantillons n , minimum min et maximum > max . Vous ne pouvez pas générer des échantillons aléatoires à partir de runif () avec seulement deux arguments.


@Andamb., runif (1, -1) fonctionne sans erreur.


Je ne savais pas ça, acclamations. Je viens de réaliser runif (1) fonctionne aussi. Mais ceux-ci semblent être des défauts très spécifiques - par exemple. runif (1000, 20) ne fonctionne pas, et même s'il l'a fait (en utilisant la même logique que runif (1, -1) fait), ce ne serait pas faire ce que @salma Abdel-raheem semble vouloir qu'il fasse


Oui Ceci est une faute de frappe, excuses de la distribution uniforme. J'ai mis à jour mon poste pour refléter la question mon prof posté sur les devoirs.


4 Réponses :


0
votes

Vous n'avez pas besoin de dplyr pour cela.

rep<-1000
size<-20

# initialize the dataframe
res<-data.frame(rep=NA,mean=NA)

for ( i in 1:rep) {
        samp<-rnorm(size) # here you actually create your sample of 20 numbers from the normal distribution
        res[i,]$rep<-i #save in the first column the number of the replicate sampling (optional)
        res[i,]$mean<-mean(samp) # here you calculate the mean of the random sample and store it into the datafra
}
res


0 commentaires

0
votes

Si ce que vous voulez faire est de générer 1 000 réplications d'un échantillon de la distribution uniforme aléatoire avec 20 observations (et minimum de 0 et maximum de 1), puis prenez la moyenne de chaque échantillon, voici une façon concise de le faire avec Tidyverse : xxx


7 commentaires

Pourquoi avez-vous besoin dietyverse ? Bien que vous puissiez le faire uniquement ( nul ), car vous pouvez obtenir avec purrr .


1) Je préfère utiliser des formules dans la mesure du possible, ils rendent les choses claires et concises, et afaik labapply () ne les prend pas en charge. 2) Je viens d'essayer de résoudre le problème avec labapply () , et il n'acceptera pas le vecteur 1: 1000 sans vouloir l'utiliser comme n . Donc, au lieu de cela, je devais utiliser labayly (rep (20, 1000), runif, min = 0, max = 1) , qui me semble moins élégant. 3) Pour obtenir le vecteur de moyens (au lieu d'une liste), je devrais utiliser sapply () et sapply est assez connu pour être incohérent.


Lapply (1: 3, Runif, n = 20, min = -1) . Lapply et SAPPLY Par défaut sur le premier argument, mais vous pouvez les faire utiliser le premier argument non spécifié si vous attribuez les autres. Je ne suis pas en désaccord sur les fonctions d'expression, je les finis beaucoup plus concis. La moitié de ma discussion chargait toutes les dizaines de packages de Tidyverse simplement pour deux fonctions. Réalisez que tous ne peuvent pas installer Tidyverse (stratégie ou autres raisons), ou ils veulent essayer cela et doivent s'asseoir à travers une très longue période de compilation juste pour tester deux fonctions. Considérez juste Bibliothèque (Purrr) .


Diable, réplique (1000, runifsi (20, 1, 2)) ou répliqué (1000, runif (20,1,2), simplifier = false) fonctionne comme étant bien.


Les points fers tout autour, je pense juste que Tidyverse en vaut la peine pour les débutants, même avec des tracas supplémentaires, car il enseigne facilement des flux de travail facilement. La base R pourrait être plus efficace de calcul, mais je pense que Hadley Wickham fait bon dire que, de nos jours, le goulot d'étranglement de la programmation moyen est rarement trouvé dans le code lui-même et le plus souvent entre le clavier et la chaise. Qu'est-ce que tu penses?


Je comprends et cela pour beaucoup de discussions contentieuses. Je n'ai pas tout de temps installé (bien que j'utilise dplyr , tiard quotidiennement), probablement jamais, et j'ai vu beaucoup de débutants qui ne le font pas non plus, non plus. La première fois de compilation de n'importe quel système d'exploitation est décourageant, notre société de gratification immédiate ne traite pas vraiment de cela :-) En bout de ligne, c'est votre choix, merci pour le discours.


J'utilise Purrr périodiquement, mais rarement y at-il beaucoup plus utilitaire que l'esthétique (par exemple, ~ fonctions) pour moi; Et pendant que je suis tout à fait d'accord dans Sapply Sapply , je suis assez défensive de mon utilisation de la base * Appliquer Fonctions. stringr est décent, mais je n'ai pas encore trouvé quelque chose qui n'est pas directement effectué avec gsub ou GREGEXPR / REGMATCHES . Peut-être que je manque? ¯ \ _ (ツ) _ / ¯



3
votes

Construction d'un data.frame La ligne par ligne est horrible dans la performance (il effectue une copie complète de toutes les lignes chaque fois que vous en ajoutez une ... de sorte que la ligne 900, ajoutant une ligne avoir les 900 lignes d'origine deux fois ... cette balance mal).

En outre, réalisez que la prise de nombreux petits échantillons aléatoires est beaucoup plus chère que de ne prendre qu'un seul échantillon plus important. < Pré> xxx


0 commentaires

0
votes

étant donné que vous avez étiqueté cette question comme une question dplyr , vous pouvez utiliser sommarise_all : xxx

comme d'autres personnes ont noté, Il est possible de le faire à la base R, aussi.

Mise à jour par OP Commentaire

Oui, possible d'utiliser A pour la boucle, bien que cela ne soit pas conseillé. Voici une approche: xxx


2 commentaires

Y a-t-il de toute façon pour ce faire en utilisant la boucle pour la boucle?


Salma, il y a tellement de raisons que quelque chose comme cela devrait pas être fait avec un pour boucle. Mais, comme c'est souvent le cas, "oui". Une des choses plus difficiles à apprendre lors de l'apprentissage d'un nouveau langage de programmation consiste à ne pas projeter d'efficacité et d'hypothèses d'autres langues sur la langue actuelle. Dans ce cas, pour boucles, bien que non mal, ne soit pas toujours le moyen idiomatique ou même plus efficace de faire des choses dans R. S'il vous plaît ouvrir votre esprit un peu à différentes manières de regarder et de traiter les données.