Comprendre la productivité ou les dépenses au fil du temps sans être victime d'interruptions stochastiques


8

Aidez-moi ici, s'il vous plaît. Peut-être avant même de me donner une réponse, vous devrez peut-être m'aider à poser la question. Je n'ai jamais appris l'analyse des séries chronologiques et je ne sais pas si c'est bien ce dont j'ai besoin. Je n'ai jamais entendu parler des moyennes lissées dans le temps et je ne sais pas si c'est bien ce dont j'ai besoin. Mes antécédents statistiques: J'ai 12 crédits en biostatistique (régression linéaire multiple, régression logistique multiple, analyse de survie, anova multifactorielle mais anova jamais de mesures répétées).

Veuillez donc regarder mes scénarios ci-dessous. Quels sont les mots à la mode que je devrais rechercher et pouvez-vous suggérer une ressource pour apprendre ce que je dois apprendre?

Je veux regarder plusieurs ensembles de données différents à des fins totalement différentes, mais commun à tous, il y a des dates comme une variable. Donc, quelques exemples me viennent à l'esprit: la productivité clinique au fil du temps (comme dans combien de chirurgies ou de visites au bureau) ou la facture d'électricité dans le temps (comme en argent payé à la compagnie d'électricité par mois).

Pour les deux ci-dessus, la manière quasi universelle de le faire est de créer un tableur du mois ou du trimestre dans une colonne et dans l'autre colonne serait quelque chose comme le paiement de l'électricité ou le nombre de patients vus à la clinique. Cependant, compter par mois conduit à beaucoup de bruit qui n'a pas de sens. Par exemple, si je paie habituellement la facture d'électricité le 28 de chaque mois mais à une occasion j'oublie et donc je ne la paie que 5 jours plus tard le 3 du mois suivant, alors un mois apparaîtra comme s'il n'y avait aucune dépense et le mois prochain affichera des dépenses gigantesques. Puisqu'on a les dates réelles de paiement, pourquoi jeter délibérément les données très granulaires en les encadrant dans les dépenses par mois civil.

De même, si je suis absent de la ville pendant 6 jours lors d'une conférence, ce mois-ci semblera être très improductif et si ces 6 jours sont tombés vers la fin du mois, le mois suivant sera inhabituellement occupé car il y aura toute une liste d'attente des gens qui voulaient me voir mais ont dû attendre mon retour.

Ensuite, bien sûr, il y a les variations saisonnières évidentes. Les climatiseurs consomment beaucoup d'électricité, donc il faut évidemment s'adapter à la chaleur estivale. Des milliards d'enfants me sont référés pour une otite moyenne aiguë récurrente en hiver et presque pas en été et au début de l'automne. Aucun enfant d'âge scolaire n'est programmé pour une chirurgie élective au cours des 6 premières semaines de retour des écoles après les longues vacances d'été. La saisonnalité n'est qu'une variable indépendante qui affecte la variable dépendante. Il doit y avoir d'autres variables indépendantes dont certaines peuvent être devinées et d'autres qui ne sont pas connues.

Un tas de problèmes différents surgissent lorsque l'on regarde l'inscription à une étude clinique de longue date.

Quelle branche de la statistique nous permet de regarder cela au fil du temps en regardant simplement les événements et leurs dates réelles mais sans créer de boîtes artificielles (mois / trimestres / années) qui n'existent pas vraiment.

J'ai pensé à faire la moyenne pondérée pour tout événement. Par exemple, le nombre de patients vus cette semaine est égal à 0,5 * nr vu cette semaine + 0,25 * nr vu la semaine dernière + 0,25 * nr vu la semaine prochaine.

Je veux en savoir plus à ce sujet. Quels mots à la mode dois-je rechercher?


1
Astuce: être plus concis vous aidera probablement à obtenir une réponse.

1
Je suis entièrement d'accord avec vous. Ma question est longue et décousue, mais c'est mon problème. Je ne sais pas vraiment quelle est ma question. Pouvez-vous m'aider?
Farrel

très bonne question (en quelque sorte je viens de le voir). +1.
user603

Réponses:


1

Je commencerais par des filtres de séries temporelles robustes (c'est-à-dire des médianes variant dans le temps) car ils sont plus simples et intuitifs.

Fondamentalement, le filtre temporel robuste consiste à lisser les séries temporelles ce que la médiane est à la moyenne; un résumé des mesures (dans ce cas variable dans le temps) qui n'est pas sensible aux observations «câblées» tant qu'elles ne représentent pas la majorité des données. Pour un résumé, voir ici .

Si vous avez besoin de lissoirs plus sophistiqués (c'est-à-dire non linéaires), vous pouvez le faire avec un filtrage de Kalman robuste (bien que cela nécessite un niveau légèrement plus élevé de sophistication mathématique)

Ce document contient l'exemple suivant (un code à exécuter sous R , le logiciel de statistiques open source):

library(robfilter)
data(Nile)
nile <- as.numeric(Nile)
obj <- wrm.filter(nile, width=11)
plot(obj)

où la série chronologique d'origine est en noir et la version filtrée (filtrée par la médiane répétée) est surplotée en rouge. Les derniers documents contiennent un grand nombre de références à des articles et des livres. D'autres types de filtres sont implémentés dans le package, mais la médiane répétée est très simple.


avez-vous une URL vers laquelle vous pouvez me diriger. Je n'ai jamais fait d'analyse de séries chronologiques de ma vie. Mais il semble que c'est ce dont j'ai besoin pour m'enseigner. Y a-t-il un exemple concret que je peux regarder qui utilise des filtres de séries chronologiques?
Farrel

@farel:> si vous cliquez sur les mots bleus, vous serez dirigé vers des sites Web réels. Le dernier document en particulier contient des exemples de travail (répétés dans la version éditée de mon article).
user603

1

Une solution simple qui ne nécessite pas l'acquisition de connaissances spécialisées consiste à utiliser des cartes de contrôle . Ils sont ridiculement faciles à créer et permettent de distinguer facilement les variations de cause spéciale (comme lorsque vous êtes en dehors de la ville) de la variation de cause commune (comme lorsque vous avez un mois de faible productivité), ce qui semble être le genre d'informations que vous souhaitez.

Ils conservent également les données. Puisque vous dites que vous utiliserez les graphiques à de nombreuses fins différentes, je vous déconseille d'effectuer des transformations dans les données.

Voici une introduction douce . Si vous décidez que vous aimez les cartes de contrôle, vous voudrez peut-être approfondir le sujet. Les avantages pour votre entreprise seront énormes. Les cartes de contrôle sont réputées avoir été un contributeur majeur au boom économique japonais d'après-guerre .

Il y a même un package R .


1

J'ai entendu parler de fonctions de «wagons couverts basés sur le temps» qui pourraient résoudre votre problème. Un wagon couvert basé sur le temps de la «taille de la fenêtre»Δt est défini au moment t être la somme de toutes les valeurs entre tΔt et t. Cela fera l'objet de discontinuités que vous souhaiterez ou non. Si vous souhaitez que les anciennes valeurs soient pondérées, vous pouvez utiliser une moyenne mobile simple ou exponentielle dans votre fenêtre temporelle.

Éditer:

J'interprète la question comme suit: supposons que certains événements se produisent parfois ti avec des grandeurs xi. (par exemple,xi peut être le montant d'une facture payée.) Trouver une fonction f(t)qui estime la somme des grandeurs de la xi parfois "proche" t. Pour l'un des exemples posés par le PO,f(t) représenterait "combien on payait pour l'électricité" dans le temps t.

Un problème similaire à celui de l'estimation de la valeur "moyenne" dans le temps t. Par exemple: régression , interpolation (généralement pas appliquée aux données bruyantes) et filtrage . Vous pourriez passer votre vie à étudier un seul de ces trois problèmes.

Un problème apparemment sans rapport, de nature statistique, est l' estimation de la densité . Ici, le but est, compte tenu des observations de magnitudesyi généré par un processus, pour estimer, en gros, la probabilité que ce processus génère un événement de magnitude y. Une approche de l'estimation de la densité est via une fonction de noyau . Ma suggestion est d'abuser de l'approche noyau pour ce problème.

Laisser w(t) être une fonction telle que w(t)0 pour tous t, w(0)=1 (les noyaux ordinaires ne partagent pas tous cette propriété), et w(t)0. Laisserh être la bande passante , qui contrôle l'influence de chaque point de données. Données donnéesti,xi, définissez la somme estimée par

f(t)=i=1nxiw(|tti|/h).
Quelques valeurs possibles de la fonction w(t) sont les suivants:
  • un noyau uniforme (ou «boxcar»): w(t)=1 pour t1 et 0 autrement;
  • un noyau triangulaire: w(t)=max(0,1t);
  • un noyau quadratique: w(t)=max(0,1t2);
  • un noyau tricube: w(t)=max(0,(1t2)3);
  • un noyau gaussien: w(t)=exp(t2/2);

J'appelle ces noyaux, mais ils sont décalés d'un facteur constant ici et là; voir aussi une liste complète des noyaux .

Quelques exemples de code dans Matlab:

%%kernels
ker0 = @(t)(max(0,ceil(1-t))); %uniform
ker1 = @(t)(max(0,1-t)); %triangular
ker2 = @(t)(max(0,1-t.^2)); %quadratic
ker3 = @(t)(max(0,(1-t.^2).^3)); %tricube
ker4 = @(t)(exp(-0.5 * t.^2)); %Gaussian

%%compute f(t) given x_i,t_i,kernel,h
ff = @(x_i,t_i,t,kerf,h)(sum(x_i .* kerf(abs(t - t_i) / h)));

%%some sample data: irregular electric bills
sdata = [
datenum(2009,12,30),141.73;...
datenum(2010,01,25),100.45;...
datenum(2010,02,23),98.34;...
datenum(2010,03,30),83.92;...
datenum(2010,05,01),56.21;...       %late this month;
datenum(2010,05,22),47.33;...       
datenum(2010,06,14),62.84;...       
datenum(2010,07,30),83.34;...       
datenum(2010,09,10),93.34;...       %really late this month
datenum(2010,09,22),78.34;...
datenum(2010,10,22),93.25;...
datenum(2010,11,14),83.39;...       %early this month;
datenum(2010,12,30),133.82];

%%some irregular observation times at which to sample the filtered version;
t_obs  = sort(datenum(2009,12,01) + 400 * rand(1,400));

t_i = sdata(:,1);x_i = sdata(:,2);

%%compute f(t) for each of the kernel functions;
h   = 60;    %bandwidth of 60 days;

fx0 = arrayfun(@(t)(ff(x_i,t_i,t,ker0,h)),t_obs);
fx1 = arrayfun(@(t)(ff(x_i,t_i,t,ker1,h)),t_obs);
fx2 = arrayfun(@(t)(ff(x_i,t_i,t,ker2,h)),t_obs);
fx3 = arrayfun(@(t)(ff(x_i,t_i,t,ker3,h)),t_obs);
fx4 = arrayfun(@(t)(ff(x_i,t_i,t,ker4,0.5*h)),t_obs);   %!!use smaller bandwidth

%%plot them;
lhand = plot(t_i,x_i,'--rs',t_obs,fx0,'m-+',t_obs,fx1,'b-+',t_obs,fx2,'k-+',...
t_obs,fx3,'g-+',t_obs,fx4,'c-+');
set(lhand(1),'MarkerSize',12);
set(lhand(2:end),'MarkerSize',4);
datetick(gca());
legend(lhand,{'data','uniform','triangular','quadratic','tricube','gaussian'});

Le graphique montre l'utilisation de quelques noyaux sur certains exemples de données de facture d'électricité. texte alternatif

Notez que le noyau uniforme est soumis aux «chocs stochastiques» que l'OP essaie d'éviter. Les noyaux tricube et gaussien donnent des approximations beaucoup plus lisses. Si cette approche est acceptable, il suffit de choisir le noyau et la bande passante (en général, c'est un problème difficile, mais étant donné certaines connaissances du domaine et certaines boucles de code-test-recode, cela ne devrait pas être trop difficile.)


Shabbychef:> je pense que Farrel a spécifiquement mentionné un argument contre cette approche dans sa question.
user603

La question est quelque peu ambiguë; ma conclusion était que le PO recherchait des «mots à la mode».
shabbychef

J'ai recherché Google wagon couvert basé sur le temps et j'ai trouvé très peu. Pouvez-vous nous indiquer un exemple concret?
Farrel

1

Mots à la mode: interpolation, rééchantillonnage, lissage.

Votre problème est similaire à celui rencontré fréquemment en démographie: les gens peuvent avoir des chiffres de recensement décomposés en intervalles d'âge, par exemple, et ces intervalles ne sont pas toujours de largeur constante. Vous souhaitez interpoler la distribution par âge. Ce que cela partage avec votre problème, à part la largeur variable (= intervalles de temps variables), c'est que les données ont tendance à être non négatives. En outre, de nombreux ensembles de données de ce type peuvent avoir du bruit, mais il présente une forme particulière de corrélation négative: un décompte qui apparaît dans un bac n'apparaîtra pas dans les bacs voisins, mais pourrait avoir été affecté au mauvais bac. Par exemple, les personnes âgées peuvent avoir tendance à arrondir leur âge aux cinq années les plus proches. Ils ne sont pas négligés, mais ils pourraient contribuer au mauvais groupe d'âge. Dans l'ensemble, cependant, les données sont complètes et fiables. En termes de cette analogie, nous ' re parler d'un recensement complet; dans vos jeux de données, vous avez des factures d'électricité réelles, des inscriptions réelles, etc. Il s'agit donc simplement de répartir les données raisonnablement en un ensemble d'intervalles utiles pour une analyse plus approfondie (comme des temps également espacés pour l'analyse des séries chronologiques): c'est là que l'interpolation et le rééchantillonnage sont impliqués.

Il existe de nombreuses techniques d'interpolation. Les plus courants en démographie ont été développés pour un calcul simple et sont basés sur des splines polynomiales. Beaucoup partagent une astuce qui mérite d'être connue, quelle que soit la façon dont vous envisagez de traiter vos données: n'essayez pas d'interpoler les données brutes; au lieu de cela, interpolez leur somme cumulée. Ce dernier augmentera de façon monotone en raison de la non-négativité des valeurs d'origine, et aura donc tendance à être relativement lisse. C'est pourquoi les splines polynomiales peuvent fonctionner du tout. Un autre avantage de cette approche est que, bien que l'ajustement puisse s'écarter des points de données (légèrement, on l'espère), dans l'ensemble, il reproduit correctement la totaux, afin que rien ne soit net perdu ou gagné. Bien sûr, après avoir ajusté les valeurs cumulatives (en fonction du temps ou de l'âge), vous prenez d'abord les différences pour estimer les totaux dans n'importe quel bac que vous aimez.

L'exemple le plus simple de cette approche est une spline linéaire: il suffit de connecter des points successifs sur le tracé du cumulatif x vs cumulatif tpar segments de ligne. Estimer les comptes dans n'importe quel intervalle de temps[t0,t1] en lisant les valeurs x0 et x1 de la courbe cannelée à t0 et t1 respectivement et en utilisant x1x0. De meilleures splines (cubiques dans certaines régions; quintiques dans de nombreuses applications démographiques) améliorent parfois les estimations. Cela équivaut à votre intuition de pondérer les données et leur donne une belle interprétation graphique.


Semble intéressant. Connaissez-vous une implémentation R simple?
Farrel

Cher @whuber, je veux vraiment implémenter cela dans R, j'ai donc posté une question dans stackoverflow. Cela pourrait vous intéresser. Si vous utilisez RI, vous aimeriez y répondre, sinon vous voudrez peut-être simplement vous asseoir et pleurer
Farrel
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.