Risposte:
Dai un'occhiata gls
(minimi quadrati generalizzati) dal pacchetto nlme
È possibile impostare un profilo di correlazione per gli errori nella regressione, ad esempio ARMA, ecc.
gls(Y ~ X, correlation=corARMA(p=1,q=1))
per errori ARMA (1,1).
Oltre alla gls()
funzione da nlme
, puoi anche usare la arima()
funzione nel stats
pacchetto usando MLE. Ecco un esempio con entrambe le funzioni.
x <- 1:100
e <- 25*arima.sim(model=list(ar=0.3),n=100)
y <- 1 + 2*x + e
###Fit the model using gls()
require(nlme)
(fit1 <- gls(y~x, corr=corAR1(0.5,form=~1)))
Generalized least squares fit by REML
Model: y ~ x
Data: NULL
Log-restricted-likelihood: -443.6371
Coefficients:
(Intercept) x
4.379304 1.957357
Correlation Structure: AR(1)
Formula: ~1
Parameter estimate(s):
Phi
0.3637263
Degrees of freedom: 100 total; 98 residual
Residual standard error: 22.32908
###Fit the model using arima()
(fit2 <- arima(y, xreg=x, order=c(1,0,0)))
Call:
arima(x = y, order = c(1, 0, 0), xreg = x)
Coefficients:
ar1 intercept x
0.3352 4.5052 1.9548
s.e. 0.0960 6.1743 0.1060
sigma^2 estimated as 423.7: log likelihood = -444.4, aic = 896.81
Il vantaggio della funzione arima () è che puoi adattare una varietà molto più ampia di processi di errore ARMA. Se si utilizza la funzione auto.arima () dal pacchetto di previsione, è possibile identificare automaticamente l'errore ARMA:
require(forecast)
fit3 <- auto.arima(y, xreg=x)
arima
opzione sembra più diversa da quella di Stata prais
a prima vista, ma è più flessibile e puoi anche usare tsdiag
per avere una buona visione di come si adatta effettivamente il tuo presupposto AR (1).
Utilizzare la funzione gls dal pacchetto nlme . Ecco l'esempio.
##Generate data frame with regressor and AR(1) error. The error term is
## \eps_t=0.3*\eps_{t-1}+v_t
df <- data.frame(x1=rnorm(100), err=filter(rnorm(100)/5,filter=0.3,method="recursive"))
##Create ther response
df$y <- 1 + 2*df$x + df$err
###Fit the model
gls(y~x, data=df, corr=corAR1(0.5,form=~1))
Generalized least squares fit by REML
Model: y ~ x
Data: df
Log-restricted-likelihood: 9.986475
Coefficients:
(Intercept) x
1.040129 2.001884
Correlation Structure: AR(1)
Formula: ~1
Parameter estimate(s):
Phi
0.2686271
Degrees of freedom: 100 total; 98 residual
Residual standard error: 0.2172698
Poiché il modello è montato con la massima probabilità, è necessario fornire i valori iniziali. Il valore iniziale predefinito è 0, ma come sempre è utile provare diversi valori per garantire la convergenza.
Come ha sottolineato il Dr. G, puoi anche usare altre strutture di correlazione, in particolare l'ARMA.
Si noti che in generale le stime dei minimi quadrati sono coerenti se la matrice di covarianza degli errori di regressione non è multipla della matrice di identità, quindi se si adatta il modello a una struttura di covarianza specifica, è necessario prima verificare se è appropriato.
È possibile utilizzare predict sull'output gls. Vedi? Predict.gls. Inoltre puoi specificare l'ordine dell'osservazione con il termine "form" nella struttura di correlazione. Ad esempio:
corr=corAR1(form=~1)
indica che l'ordine dei dati è quello che sono nella tabella.
corr=corAR1(form=~Year)
indica che l'ordine è quello del fattore Anno .. Infine, il valore "0,5" in corr=corAR1(0.5,form=~1)?
è generalmente impostato sul valore del parametro stimato per rappresentare la struttura della varianza (phi, nel caso di AR, theta nel caso di MA .. .). È facoltativo configurarlo e utilizzarlo per l'ottimizzazione, come menzionato da Rob Hyndman.