Question

I ai une série de temps fixe auquel je veux ajuster un modèle linéaire avec un terme autorégressif pour corriger la corrélation en série, soit en utilisant la formule A = c1 * Bt + c2 * Ct + ut, où ut = r * ut -1 + et

(ut est un AR (1) terme pour corriger la corrélation en série dans les termes d'erreur)

Quelqu'un sait-il ce qu'il faut utiliser dans R pour modéliser ce?

Merci Karl

Était-ce utile?

La solution

Le GLMMarp package s'adaptera ces modèles. Si vous voulez juste un modèle linéaire avec des erreurs gaussiennes, vous pouvez le faire avec la fonction arima() où les covariables sont spécifiés par l'argument xreg.

Autres conseils

Il y a plusieurs façons de le faire dans l'affaire R. Voici deux exemples en utilisant le "jeu de données de série temporelle des ceintures de sécurité" dans le bloc d'ensembles de données qui vient avec R.

La fonction arima() est dans le paquet: stats qui est inclus avec R. La fonction prend un argument de la forme order=c(p, d, q) où vous vous pouvez spécifier l'ordre de l'auto-régressif, intégré et la composante moyenne mobile. Dans votre question, vous suggérez que vous voulez créer un modèle AR (1) pour corriger de premier ordre dans les erreurs auto-corrélation et c'est tout. Nous pouvons le faire avec la commande suivante:

arima(Seatbelts[,"drivers"], order=c(1,0,0),
      xreg=Seatbelts[,c("kms", "PetrolPrice", "law")])

La valeur de l'ordre spécifie que nous voulons un modèle AR (1). Le compontent de XREG devrait être une série d'autres Xs nous voulons ajouter dans le cadre d'une régression. La sortie ressemble un peu comme la sortie de summary.lm() tourné sur le côté.

Un autre procédé alternatif pourrait être plus familier à la façon dont vous avez des modèles de régression d'ajustement est d'utiliser gls() dans la section paquet nlme . Le code suivant tourne l'objet de séries temporelles Seatbelt dans une trame de données, puis des extraits et ajoute une nouvelle colonne ( t ) qui est juste un compteur dans l'objet de séries chronologiques Sorted:

Seatbelts.df <- data.frame(Seatbelts)
Seatbelts.df$t <- 1:(dim(Seatbelts.df)[1])

Les deux lignes ci-dessus ne sont que l'obtention des données de forme. Étant donné que la fonction arima() est conçu pour les séries chronologiques, il peut lire des séries temporelles des objets plus facilement. Pour adapter le modèle avec nlme vous exécutez:

library(nlme)
m <- gls(drivers ~ kms + PetrolPrice + law,
         data=Seatbelts.df,
         correlation=corARMA(p=1, q=0, form=~t))
summary(m)

La ligne qui commence par « corrélation » est la façon dont vous passez dans la structure de corrélation ARMA à GLS. Les résultats ne seront pas exactement les mêmes parce que arima() utilise maximum de vraisemblance pour estimer les modèles et gls() utilise maximum de vraisemblance restreint par défaut. Si vous ajoutez method="ML" à l'appel à vous gls() obtiendrez des estimations identiques vous avez obtenu avec la fonction ARIMA ci-dessus.

Quelle est votre fonction de lien?

La façon dont vous décrivez ressemble à une régression linéaire de base avec des erreurs autocorrélées. Dans ce cas, une option est d'utiliser lm pour obtenir une estimation cohérente de vos coefficients et utiliser erreurs standards Newey-West HAC.

Je ne suis pas sûr que la meilleure réponse pour GLM plus généralement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top