Variance sur la somme des valeurs prédites à partir d'un modèle à effets mixtes sur une série temporelle

32

J'ai un modèle à effets mélangés (en fait, un modèle mélangé additif généralisé) qui me donne des prévisions pour une série temporelle. Pour contrer l'autocorrélation, j'utilise un modèle corCAR1, compte tenu du fait qu'il me manque des données. Les données sont supposées me donner une charge totale, je dois donc faire la somme sur tout l'intervalle de prédiction. Mais je devrais aussi obtenir une estimation de l’erreur type sur cette charge totale.

Si toutes les prédictions étaient indépendantes, cela pourrait être facilement résolu en:

V a r ( E [ X i ] ) = S E ( E [ X i ] ) 2Var(i=1nE[Xi])=i=1nVar(E[Xi]) avecVar(E[Xi])=SE(E[Xi])2

Le problème, c'est que les valeurs prédites proviennent d'un modèle et que les données d'origine sont autocorrélées. Tout le problème conduit aux questions suivantes:

  1. Ai-je raison de supposer que la SE sur les prévisions calculées peut être interprétée comme la racine de la variance sur la valeur attendue de cette prévision? J'ai tendance à interpréter les prédictions comme des "prédictions moyennes", et donc à résumer tout un ensemble de moyens.
  2. Comment incorporer l'autocorrélation dans ce problème ou puis-je bien supposer que cela n'influencera pas trop les résultats?

Ceci est un exemple en R. Mon jeu de données réel contient environ 34 000 mesures, donc la scalabilité est un problème. C’est la raison pour laquelle je modélise l’autocorrélation tous les mois, sinon les calculs ne sont plus possibles. Ce n'est pas la solution la plus correcte, mais la plus correcte n'est pas réalisable.

set.seed(12)
require(mgcv)

Data <- data.frame(
    dates = seq(as.Date("2011-1-1"),as.Date("2011-12-31"),by="day")
)

Data <- within(Data,{
X <- abs(rnorm(nrow(Data),3))
Y <- 2*X + X^2 + scale(Data$dates)^2
month <- as.POSIXlt(dates)$mon+1
mday <- as.POSIXlt(dates)$mday
})

model <- gamm(Y~s(X)+s(as.numeric(dates)),correlation=corCAR1(form=~mday|month),data=Data)

preds <- predict(model$gam,se=T)

Total <- sum(preds$fit)

Modifier :

Leçon à apprendre: parcourez d’abord tous les exemples de tous les fichiers d’aide avant de paniquer. Dans les fichiers d'aide de Predict.gam, je peux trouver:

#########################################################
## now get variance of sum of predictions using lpmatrix
#########################################################

Xp <- predict(b,newd,type="lpmatrix") 

## Xp %*% coef(b) yields vector of predictions

a <- rep(1,31)
Xs <- t(a) %*% Xp ## Xs %*% coef(b) gives sum of predictions
var.sum <- Xs %*% b$Vp %*% t(Xs)

Ce qui semble être proche de ce que je veux faire. Cela ne me dit toujours pas exactement comment c'est fait. Je pourrais aller aussi loin sur le fait que cela est basé sur la matrice de prédicteur linéaire. Toutes les idées sont toujours les bienvenues.

Joris Meys
la source
6
Je ne sais pas ce que fait le programme r mais nous avons Où est un vecteur colonne de uns et est la covariance matrice . est-ce que cela aide?
var(iE[Xi])=aTvar(E[X])a
avar(E[X])E[X]=(E[X1],,E[Xn])T
probabilitéislogic
@probabilityislogic C'est essentiellement ce que fait le programme r. Merci pour le calcul
Joris Meys
2
@probabilityislogic Si vous pouvez intégrer cela dans une réponse, vous pouvez récupérer ma prime de +50. ;)
e-sushi
Un problème que je vois et je me trompe peut-être simplement dans votre notation, mais qui est une constante donc c'est là où je suis le plus confus Σ n i = 1 V a r ( E [ X i ] ) = 0E(Xi)=μii=1nVar(E[Xi])=0
user52220
@ user52220 C'est là que vous vous trompez. E (Xi) est la valeur attendue et donc une variable aléatoire, tandis que mu_i est la moyenne de la population et donc un nombre fixe. Var (mu) = 0, mais ce n'est pas le cas pour E (Xi).
Joris Meys

Réponses:

1

En notation matricielle, un modèle mixte peut être représenté par

y = X * bêta + Z * u + epsilon

où X et Z sont des matrices de conception connues relatives aux observations à effets fixes et aux observations à effets aléatoires, respectivement.

J'appliquerais une transformation simple et adéquate (mais pas la meilleure) pour corriger l'auto-corrélation impliquant la perte de la première observation et remplacer le vecteur colonne de [y1, y2, ... yn] par une plus petite de un vecteur de colonne d'observation, à savoir: [y2 - rho * y1, y3 - rho * y2, ..., yn - rho * y (n-1)], où rho est votre valeur estimée pour l'auto-corrélation en série.

Ceci peut être effectué en multipliant par une matrice T, formant T * y, où la 1ère ligne de T est composée comme suit: [-rho, 1, 0, 0, ....], la 2e ligne: [0, -rho, 1, 0, 0, ...], etc. De même, les autres matrices de conception sont modifiées en T * X et T * Z. En outre, la matrice de variance-covariance des termes d'erreur est également modifiée, désormais avec des termes d'erreur indépendants.

Maintenant, calculez simplement la solution avec les nouvelles matrices de conception.

AJKOER
la source