Comment gérer les covariables circulaires (par exemple avec un GAM)?

8

Je construis un modèle dans lequel plusieurs de mes covariables vivent sur un "cercle", dans le sens où elles prennent des valeurs dans l'intervalle [0,1), et 0 = 1. Je m'interroge sur les techniques pour faire face à cette situation. Une idée est de représenter une variable circulaire thêta comme une paire de variables (sin (thêta), cos (thêta)). Avez-vous des réflexions sur cette approche ou de meilleures approches?

J'utilise spécifiquement les GAM du package mgcv. Existe-t-il un moyen de dire au modèle que certaines pièces additives devraient avoir les mêmes valeurs aux points limites? Un autre paquet?

Merci!

DavidR
la source
2
Je n'ai vu que du sinus et du cosinus comme vous l'avez mentionné, voici une autre question sur le site qui pose une question similaire, la régression logistique avec des données directionnelles comme IV . Dans cette question sur SO, Iterator a un commentaire pointant vers un circularpackage qui peut éventuellement être intéressant. J'espère que vous obtiendrez de meilleures réponses.
Andy W
2
@Andy sinus et cosinus ne sont pas la seule base, ni même la seule base orthogonale, pour les fonctions périodiques (carré intégrable). L'un de leurs mérites est que souvent la théorie physique les implique dans les relations avec d'autres variables. Cela suggère que nous devrions être très intéressés par la relation hypothétique ou attendue entre la DV et ces covariables. DavidR, que pouvez-vous nous en dire?
whuber
J'essaie de modéliser un processus temporel périodique. Mes données d'origine sont la date et l'heure des événements, et j'aimerais modéliser le taux de ces événements au fil du temps. Je m'attends à ce qu'il y ait une périodicité en ce qui concerne l'heure de la journée, le jour de la semaine et la période de l'année, pour les débutants. Ce sont les variables circulaires évidentes. Je commence par un Poisson-GAM. Je suis intéressé à examiner les effets de chacun de ces éléments séparément, ainsi qu'à faire des prévisions de taux pour les temps futurs.
DavidR

Réponses:

6

Il existe deux façons de traiter les variables circulaires, une méthode hacky serait de dupliquer manuellement votre ensemble de données de chaque côté des conditions aux limites, mais la solution la plus élégante à mon avis serait d'utiliser les fonctions de base de spline intégrées avec des conditions aux limites périodiques !

Par exemple:

bs="cc"spécifie une spline de régression cubique cyclique (voir cyclic.cubic.spline). c'est-à-dire une spline de régression cubique pénalisée dont les extrémités correspondent, jusqu'à la dérivée seconde.

Splines sur la sphère

bs="sos". Ce sont des splines bidimensionnelles sur une sphère. Les arguments sont la latitude et la longitude, et ils sont l'analogue des splines à plaques minces pour la sphère. Utile pour les données échantillonnées sur une grande partie du globe, lorsque l'isotropie est appropriée. Voir Spherical.Splinepour plus de détails.

bs="cp" donne une version cyclique d'une spline P

Markus Loecher
la source
Cela semble parfait! Je vais essayer ça. J'avais pensé à la méthode hacky, mais comme j'ai plusieurs variables circulaires, je pensais que je devrais créer un grand nombre de points de données en double pour montrer toutes les différentes symétries du problème.
DavidR
@DavidR J'ai réussi à utiliser des splines cubiques circulaires pour les phénomènes à basse fréquence. Vous en avez besoin pour représenter la fréquence la plus élevée que vous souhaitez modéliser. Cela va exclure les périodes horaires et quotidiennes, mais pourrait bien fonctionner pour la saisonnalité. Pour les deux premiers, la parcimonie suggère de commencer avec une petite base comme un sinus et un cosinus pour chaque fréquence attendue.
whuber
@whuber, je pense que vous avez mal compris l'approche de modélisation de DavidR. David utilise des variables distinctes pour l'heure, le jour de la semaine, etc. Il appliquerait donc une spline distincte pour chacun. (
J'accueillerais
Whuber, je suis d'accord avec votre point de vue, par exemple que la modélisation des achats plus lourds en décembre nécessiterait une spline de commande élevée sur les mois variables.
seanv507
0

Vous voudrez peut-être examiner Gill et Hangartner (2010). Données circulaires en science politique et comment les gérer . Ils parlent de divers modèles de données circulaires / horloge / saisonnières, et Jeff Gill fournit le code R pour le papier que vous pouvez consulter pour vous inspirer. Il devrait y avoir une version de présentation de ce matériel qui tisse la méthodologie et le code R ensemble.

StasK
la source
Merci pour ce pointeur dans la littérature sur les données circulaires. Cela semble être un bon point de départ. J'ai rapidement survolé cet article en particulier, et il semble traiter des réponses circulaires, plutôt que des covariables circulaires.
DavidR