J'ai le tableau suivant dans R
df <- structure(list(x = structure(c(12458, 12633, 12692, 12830, 13369,
13455, 13458, 13515), class = "Date"), y = c(6080, 6949, 7076,
7818, 0, 0, 10765, 11153)), .Names = c("x", "y"), row.names = c("1",
"2", "3", "4", "5", "6", "8", "9"), class = "data.frame")
> df
x y
1 2004-02-10 6080
2 2004-08-03 6949
3 2004-10-01 7076
4 2005-02-16 7818
5 2006-08-09 0
6 2006-11-03 0
8 2006-11-06 10765
9 2007-01-02 11153
Je peux tracer les points et l'ajustement linéaire d'un Tukey ( line
fonction dans R
) via
plot(data=df, y ~ x)
lines(df$x, line(df$x, df$y)$fitted.values)
qui produit:
Tout va bien. Le graphique ci-dessus montre les valeurs de consommation d'énergie, qui ne devraient qu'augmenter, donc je suis satisfait de l'ajustement ne passant pas par ces deux points (qui seront ensuite signalés comme des valeurs aberrantes).
Cependant, "juste" supprimer le dernier point et replacer à nouveau
df <- df[-nrow(df),]
plot(data=df, y ~ x)
lines(df$x, line(df$x, df$
)$fitted.values)
Le résultat est complètement différent.
Mon besoin est d'avoir idéalement le même résultat dans les deux scénarios ci-dessus. R ne semble pas avoir de fonction prête à l'emploi pour la régression monotone, isoreg
qui est d'ailleurs constante par morceaux.
ÉDITER:
Comme l'a souligné @Glen_b, le rapport de taille des valeurs aberrantes sur échantillon est trop élevé (~ 28%) pour la technique de régression utilisée ci-dessus. Cependant, je pense qu'il pourrait y avoir autre chose à considérer. Si j'ajoute les points au début du tableau:
df <- rbind(data.frame(x=c(as.Date("2003-10-01"), as.Date("2003-12-01")), y=c(5253,5853)), df)
et recalculer à nouveau comme ci-dessus plot(data=df, y ~ x); lines(df$x, line(df$x,df$y)$fitted.values)
j'obtiens le même résultat, avec une ration de ~ 22%
la source
line
. Vous pouvez avoir plus de détails en tapant?line
dans la console rnnls
paquet (moindres carrés non négatifs). Cela devrait vous aider avec les contraintes de positivité, mais pas avec les valeurs aberrantes.Réponses:
Je note qu'après avoir supprimé le dernier point, vous n'avez que sept valeurs dont deux (28,6%!) Sont aberrantes. De nombreuses méthodes robustes n'ont pas un point de ventilation aussi élevé (par exemple, la régression de Theil se décompose juste à ce point pour n = 7, bien qu'en généraln il passe à 29,3%), mais si vous devez avoir une ventilation si élevée qu'elle peut gérer autant de valeurs aberrantes, vous devez choisir une approche qui a réellement ce point de panne plus élevé.
Il y en a dans R; la
rlm
fonction dansMASS
(M-estimation) devrait traiter ce cas particulier (elle présente une ventilation élevée par rapport aux valeurs aberrantes), mais elle n'aura pas la robustesse aux valeurs aberrantes influentes .La fonction
lqs
dans le même paquet devrait traiter les valeurs aberrantes influentes, ou il existe un certain nombre de bons paquets pour une régression robuste sur CRAN.Vous pouvez trouver Fox and Weisberg's Robust Regression in R ( pdf ) une ressource utile sur plusieurs concepts de régression robustes.
Tout cela ne concerne que la régression linéaire robuste et ignore la contrainte de monotonie, mais j'imagine que ce sera moins problématique si vous obtenez le problème de panne trié. Si vous obtenez toujours une pente négative après avoir effectué une régression robuste à fort claquage, mais que vous souhaitez une ligne non décroissante, vous devez définir la ligne sur une pente nulle, c'est-à-dire choisir une estimation d'emplacement robuste et définir la ligne pour qu'elle y soit constante. (Si vous voulez une régression robuste non linéaire mais monotone, vous devez le mentionner spécifiquement.)
En réponse à l'édition:
Vous semblez avoir interprété mon exemple de la régression de Theil comme un commentaire sur le point de rupture de
line
. Ce n'était pas; ce fut simplement le premier exemple d'une ligne robuste qui m'est venue qui est tombée en panne avec une moindre proportion de contamination.Comme nous l'avons déjà expliqué, nous ne pouvons pas facilement dire laquelle de plusieurs lignes est utilisée
line
. La raison pour laquelle illine
se décompose comme il dépend de celui de plusieurs estimateurs robustes possibles que Tukey mentionne etline
pourrait utiliser.Par exemple, si c'est la ligne qui va `` diviser les données en trois groupes et pour la pente, utiliser la pente de la ligne joignant les médianes des deux tiers extérieurs '' (parfois appelée ligne résistante à trois groupes ou ligne médiane-médiane ), alors son point de rupture est asymptotiquement 1/6, et son comportement dans de petits échantillons dépend exactement de la façon dont les points sont attribués aux groupes lorsquen n'est pas un multiple de 3.
S'il vous plaît noter que je ne dis pas qu'il est la ligne résistant à trois groupes qui est mis en œuvre
line
- en fait , je pense que ce n'est pas - mais simplement que tout ce qu'ils ont mis en œuvreline
pourrait bien avoir un point de rupture telle que la ligne qui en résulte ne peut pas traiter 2 points impairs sur 8, s'ils sont dans la «bonne» position.En fait, la ligne implémentée dans
line
a un comportement bizarre - si étrange que je me demande si elle pourrait avoir un bug - si vous faites cela:Ensuite, la
line
ligne a une pente de 1,2:Du haut de ma tête, je ne me souviens d'aucune des répliques de Tukey ayant ce comportement.
Ajouté beaucoup plus tard: j'ai signalé ce problème aux développeurs il y a quelque temps; il a fallu quelques versions avant qu'il ne soit corrigé mais maintenant
line
(qui s'est avéré être une forme de la ligne à trois groupes de Tukey) n'a plus ce bogue; il semble maintenant se comporter comme je m'y attendais dans tous les cas que j'ai essayés.la source
lqs
fait le boulot! J'accepte donc votre réponse :-) merci beaucoup. Si vous pouviez encore m'aider à comprendre le troisième graphique, ce serait génial! Acclamationslqs
pour l'instant. Merci encore