Comment calculer la moyenne, la médiane, le mode, l'écart-type à partir de la distribution

9

Comment calculer la moyenne, la variance, la médiane, l'écart type et le modus à partir de la distribution? Si je génère aléatoirement des nombres qui forment la distribution normale, j'ai spécifié la moyenne comme m=24.2écart type sd=2.2:

> dist = rnorm(n=1000, m=24.2, sd=2.2)

Ensuite, je peux faire ce qui suit:

Signifier:

> mean(dist)
[1] 24.17485

Variance:

> var(dist)
[1] 4.863573

Médian:

> median(dist)
[1] 24.12578

Écart-type:

> sqrt(var(dist))
[1] 2.205351

Mode alias Modus (tiré d' ici ):

> names(sort(-table(dist)))[1]
[1] "17.5788181686221"
  1. Est-ce là toute la magie, ou y a-t-il autre chose que je n'ai pas réalisé?
  2. Puis-je en quelque sorte visualiser ma distribution normale en forme de cloche avec des lignes verticales représentant (moyenne, médiane ...)?
  3. Que disent ces attributs sur la distribution?

PS: le code est en R

Wakan Tanka
la source
On ne sait pas exactement ce que vous entendez par votre question 1. La question 3 semble trop large en l'état, car on pourrait écrire beaucoup sur chacun. Pourriez-vous revoir les pages wikipedia sur la moyenne, la médiane, l'écart type et le mode, puis demander quelque chose de plus spécifique?
Glen_b -Reinstate Monica
De plus, votre titre parle d'une "distribution" mais votre corps de texte semble se référer à la place à un échantillon . Votre titre doit-il faire référence à un échantillon?
Glen_b -Reinstate Monica
@Glen_b par 1er, je veux dire que si les méthodes que j'ai publiées sont correctes pour calculer les paramètres (moyenne, variance ...) pour la distribution ou autre chose ou d'une manière ou d'une autre, devraient être utilisées? 3ème Je ne savais pas que c'était trop large, je m'attendais à une réponse comme: si la médiane est plus grande que la moyenne alors vos données .... Concernant le retitrage c'est peut-être OK, en effet je travaillais avec une distribution normale ou je me trompe?
Wakan Tanka
Je suis désolé mais je ne peux pas du tout suivre votre commentaire.
Glen_b -Reinstate Monica
Vous n'avez pas besoin de regrouper une variable continue avant de pouvoir estimer son mode. Voir stats.stackexchange.com/questions/176112/… pour discussion. (Vous devriez éviter le binning car il dépend de choix arbitraires de largeur et d'origine de bin.)
Nick Cox

Réponses:

10

D'abord un commentaire général sur le mode:

Vous ne devez pas utiliser cette approche pour obtenir le mode de données (au moins théoriquement) distribuées en continu; il est peu probable que vous ayez des valeurs répétées (sauf si vous avez des échantillons vraiment énormes, ce serait un miracle mineur, et même alors, divers problèmes numériques pourraient le faire se comporter de manière quelque peu inattendue), et vous obtiendrez généralement la valeur minimale qui façon. Ce serait une façon de trouver l'un des modes globaux dans des données discrètes ou catégoriques, mais je ne le ferais probablement pas de cette façon même alors. Voici plusieurs autres approches pour obtenir le mode de données discrètes ou catégorielles:

x = rpois(30,12.3)

tail(sort(table(x)),1)   #1: category and count; if multimodal this only gives one

w=table(x); w[max(w)==w] #2: category and count; this can find more than one mode

which.max(table(x))      #3: category and *position in table*; only finds one mode

Si vous voulez juste la valeur et non le nombre ou la position, names()l'obtiendrez de ceux

Pour identifier les modes (il peut y avoir plus d'un mode local) pour les données continues de manière basique, vous pouvez regrouper les données (comme avec un histogramme) ou les lisser (en utilisant densitypar exemple) et essayer de trouver un ou plusieurs modes de cette façon.

Moins de cases d'histogramme rendront votre estimation d'un mode moins sujet au bruit, mais l'emplacement ne sera pas plus précis que la largeur de la case (c'est-à-dire que vous n'obtiendrez qu'un intervalle). Plus de bacs peuvent permettre plus de précision dans un bac, mais le bruit peut le faire sauter à travers plusieurs de ces bacs; un petit changement dans l'origine du bac ou la largeur du bac peut produire des changements de mode relativement importants. (Il y a le même compromis biais-variance dans toutes les statistiques.)

Notez que summarycela vous donnera plusieurs statistiques de base.

[Vous devez utiliser sd(x)plutôt que sqrt(var(x)); c'est plus clair pour une chose]

-

Pour q.2 oui; vous pouvez certainement afficher la moyenne et la médiane des données sur un écran tel qu'un histogramme ou un diagramme à boîte. Voir ici pour quelques exemples et du code que vous devriez pouvoir généraliser à tous les cas dont vous avez besoin.

Glen_b -Reinstate Monica
la source
Merci, pouvez-vous expliquer la différence entre la reliure et le lissage?
Wakan Tanka
@Wakan Qu'est-ce qui lie?
Glen_b -Reinstate Monica
1
Extrêmement utile. Très surprenant que le projet R n'en ait pas fait une fonction de base.
Hack-R
7

Quelques statistiques descriptives supplémentaires et peu connues.

x<-rnorm(10)

sd(x) #Standard deviation

fivenum(x) #Tukey's five number summary, usefull for boxplots

IQR(x) #Interquartile range

quantile(x) #Compute sample quantiles

range(x) # Get minimum and maximum

Je suis sûr que vous pouvez en trouver beaucoup d'autres dans l'un de ces Rmanuels disponibles gratuitement .

JohnK
la source
Pouvez-vous publier certaines situations lorsque vous les avez utilisées (fivenum, IQR, quantile ...) et qu'elles étaient utiles?
Wakan Tanka
0

Comme l'a décrit @Glen_b, le mode d'une distribution continue n'est pas aussi simple que pour un vecteur d'entiers.

Ce code R obtiendra le mode pour une distribution continue, en utilisant la hist()fonction incroyablement utile de la base R. Comme @Glen_b l'a décrit, cela implique de mettre des observations dans des bacs - des catégories discrètes où si l'observation tombe dans l'intervalle de bac, elle est comptée comme une instance de ce bac, qui contourne le problème de ce qu'il est hautement improbable dans une distribution continue d'observer exactement la même valeur deux fois.

set.seed(123)
dist <- rnorm(n=1000, m=24.2, sd=2.2)
h <- hist(dist, # vector
          plot = F, # stops hist() from automatically plotting histogram
          breaks = 40) # number of bins

Maintenant, nous traitons le milieu de l'intervalle de bac qui contient le nombre maximal en tant que mode

h$mids[which.max(h$counts)] 

# [1] 23.75

Voila! La mode.

ps vous pouvez également traiter le début de l'intervalle comme le mode via h$breaks[which.max(h$counts)]. Comme nous l'avons vu, les modes de distribution continue ne sont pas simples et nécessitent des décisions, d'où pourquoi il n'y a pas de fonction simple pour eux comme il y a avec mean()etmedian()

llewmills
la source
Cela revient donc à dire que pour trouver le mode, vous trouverez le bac le plus fréquent. Que faites-vous quand il y a des liens? Comment choisissez-vous systématiquement les bacs?
Nick Cox
Ce sont de très bonnes questions @ Nick Cox? J'adorerais connaître la réponse. Je suppose que vous auriez besoin d'une règle quand il y a des liens.
llewmills