2008-09-18 18 views
60

J'ai été mystifié par la fonction quantile R toute la journée. J'ai une notion intuitive de la façon dont les quantiles fonctionnent, et une M.S. dans les statistiques, mais garçon oh garçon, la documentation pour elle est confuse pour moi.Expliquer la fonction quantile() dans R

De la documentation:

Q [i] (p) = (1 - gamma) x [J] + gamma x [j + 1],

je suis avec jusqu'à présent. Pour un type i quantile, il est une interpolation entre x [j] et x [j + 1], sur la base de certains mystérieuse constante gamma

où 1 < = i < = 9, (jm)/n < = p < (j-m + 1)/n, x [j] est le jième ordre statistique, n est la taille de l'échantillon, et m est une constante déterminée par l'échantillon type quantile. Ici, gamma dépend de la partie fractionnaire de g = np + m-j.

Alors, comment calculer j? m?

Pour les quantiles continu de l'échantillon types (4 à 9), l'échantillon quantiles peuvent être obtenus en linéaire interpolation entre la statistique d'ordre k-ième et p (k):

p (k) = (k - alpha)/(n - alpha - bêta + 1), où α et β sont des constantes déterminées par le type. De plus, m = alpha + p (1 - alpha - bêta), et gamma = g.

Maintenant, je suis vraiment perdu. p, qui était une constante avant, est maintenant apparemment une fonction.

Donc, pour le type 7 quantiles, la valeur par défaut ...

Type 7

p (k) = (k - 1)/(n - 1). Dans ce cas, p (k) = mode [F (x [k])]. Ceci est utilisé par S.

Est-ce que quelqu'un veut m'aider? En particulier, je suis confus par la notation de p étant une fonction et une constante, ce que le m est est, et maintenant de calculer j pour certains particulier.

J'espère que basé sur les réponses ici, nous pouvons soumettre une documentation révisée qui explique mieux ce qui se passe ici.

quantile.R source code ou le type: quantile.default

Répondre

54

Vous êtes naturellement confus. Cette documentation est terrible. Je devais revenir à l'article sur la base de (Hyndman, RJ, Fan, Y. (Novembre 1996). "Sample Quantiles dans les paquets statistiques." Statisticien américain 50 (4): 361-365. doi:10.2307/2684934) pour obtenir une compréhension. Commençons par le premier problème.

où 1 < = i < = 9, (jm)/n < = p < (jm + 1)/n, x [j] est la statistique d'ordre j-ième, n est la taille de l'échantillon, et m est une constante déterminée par le type de quantile d'échantillon. Ici, gamma dépend de la partie fractionnaire de g = np + m-j.

La première partie vient directement de l'article, mais ce que les auteurs de la documentation ont omis était j = int(pn+m). Cela signifie que Q[i](p) ne dépend que des statistiques de deux ordres les plus proches d'être p fraction de chemin à travers les observations (triées). (Pour ceux, comme moi, qui ne sont pas familiers avec le terme, les "statistiques d'ordre" d'une série d'observations est la série triée.)

Aussi, cette dernière phrase est juste fausse. Il faut lire

Ici gamma dépend de la fraction de np + m, g = np + m-j

Quant à m qui est simple. m dépend du choix des 9 algorithmes. Donc, tout comme Q[i] est la fonction quantile, m doit être considéré m[i]. Pour les algorithmes 1 et 2, m vaut 0, pour 3, m est -1/2, et pour les autres, c'est dans la partie suivante.

Pour les types continus échantillon de quantiles (4 à 9), l'échantillon quantiles peut être obtenu par interpolation linéaire entre la statistique d'ordre k-ième et p (k):

p (k) = (k - alpha)/(n - alpha - beta + 1), où α et β sont des constantes déterminées par le type. De plus, m = alpha + p (1 - alpha - bêta), et gamma = g.

Ceci est vraiment déroutant. Ce que la documentation appelle p(k) n'est pas le même que le p d'avant. p(k) est le plotting position. Dans l'article, les auteurs l'écrivent comme pk, ce qui aide. D'autant plus que dans l'expression m, le p est le p d'origine, et le . Conceptuellement, pour les algorithmes 4-9, les points (pk, x[k]) sont interpolés pour obtenir la solution (p, Q[i](p)). Chaque algorithme diffère seulement dans l'algorithme pour pk. Comme pour le dernier bit, R indique simplement ce que S utilise.

L'article original donne une liste de 6 "propriétés souhaitables pour un échantillon quantile" fonction, et indique une préférence pour # 8 qui satisfait à tous par 1. # 5 satisfait à tous, mais ils ne l'aime pas sur d'autres raisons (c'est plus phénoménologique que dérivé de principes). # 2 est ce que les geeks non stateurs comme moi considéreraient les quantiles et ce qui est décrit dans wikipedia. BTW, en réponse à dreeves answer, Mathematica fait les choses de façon très différente. Je pense que je comprends la cartographie. Alors que Mathematica est plus facile à comprendre, (a) il est plus facile de se tirer une balle dans le pied avec des paramètres absurdes, et (b) il ne peut pas faire l'algorithme # 2 de R. (Voici Mathworld's Quantile page, qui indique que Mathematica ne peut pas faire # 2, mais donne une généralisation plus simple de tous les autres algorithmes en termes de quatre paramètres.)

+0

Merci d'avoir répondu à ma question :) C'était une sérieuse quantité de détective travail. –

+0

Pas de problème. J'essaye d'écrire une fonction quantile pour Python/Numpy pour notre groupe, ce qui m'amène à cette question. Quand j'ai finalement trouvé la réponse, j'ai pensé que je partagerais. – AFoglia

+31

J'ai écrit la fonction quantile() et le fichier d'aide associé et l'ai soumis à l'équipe de base R en août 2004 (en remplacement des versions précédentes). Je viens de vérifier et toutes ces erreurs ont été causées par la modification de mon fichier d'aide après l'avoir envoyé. (Je suis responsable de l'utilisation de p et p [k] cependant.) Je ne l'avais jamais remarqué car je supposais que mon fichier ne serait pas touché. Je vais voir si je peux obtenir le fichier d'aide corrigé pour R 2.10.0. –

5

Il existe différentes façons de calculer quantiles lorsque vous donner un vecteur, et ne dispose pas d'un CDF connu.Pensez à la question de savoir quoi faire lorsque vos observations ne tombent pas exactement sur les quantiles.

Les "types" déterminent simplement comment procéder. Ainsi, les méthodes disent, "utiliser une interpolation linéaire entre la statistique de l'ordre k et p (k)".

Alors, qu'est-ce que p (k)? Un gars dit, "bien, j'aime utiliser k/n". Un autre gars dit: "J'aime utiliser (k-1)/(n-1)", etc. Chacune de ces méthodes a des propriétés différentes qui conviennent mieux à un problème ou un autre.

Les \ alpha et \ beta ne sont que des moyens de paramétrer les fonctions p. Dans un cas, ils sont 1 et 1. Dans un autre cas, ils sont 3/8 et -1/4. Je ne pense pas que les p sont toujours une constante dans la documentation. Ils ne montrent pas toujours la dépendance explicitement.

Voir ce qui se passe avec les différents types lorsque vous mettez des vecteurs comme 1: 5 et 1: 6. (Notez également que même si vos observations tombent exactement sur les quantiles, certains types utiliseront toujours l'interpolation linéaire).