Skip to content

[R-es] Regresión lineal para una serie temporal

7 messages · Jorge Virto, Oscar Perpiñan, Paco Pastor +1 more

#
Hola a todos

Estoy intentando hacer un análisis rápido de una serie temporal de datos 
diarios pero me encuentro con algunos problemas. Me gustaría en primera 
instancia hacer una regresión lineal pero no encuentro la forma.

Tras leer los datos diarios creo un objeto de la clase zoo y sobre éste 
no puedo utilizar lm(). He leído algo sobre dynlm pero no encuentro la 
forma.

Se agradece cualquier sugerencia,

Paco
#
El Thu, 17 Feb 2011 10:52:42 +0100
Paco Pastor <paco en ceam.es> escribió:
A falta de un ejemplo, me invento uno con lo que he entendido de tu
mensaje:

library(zoo)
library(lattice)

##Dos variables relacionadas entre sí
x=rnorm(100)
y=2*x+1

##Indice temporal
idx=seq(as.POSIXct('2011-01-01'), length=100, by='day')

##Creo el objeto zoo y lo pinto
z <- zoo(data.frame(x, y), idx)
xyplot(z, superpose=TRUE)

##Hago un ajuste entre las variables
lmZ <- lm(y~x, z)
summary(lmZ)

Saludos.

Oscar.

-------------------
Oscar Perpiñán Lamigueiro
Dpto. Ingeniería Eléctrica
EUITI-UPM
#
Hola

Tienes razón, me falta un ejemplo. Mis datos son de la forma:


"date"              "temp"
01/01/2000     21.6
02/01/2000     22.4
.....                    ....
31/12/2010      22.3

No tengo dos variables x-y para hacer la regresión sino solamente una 
variable "temp". Leo los datos, creo un objeto zoo para representar la 
serie temporal pero no sé como seguir para hacer la regresión lineal.

Adjunto los datos de ejemplo guardados con write.csv

Gracias

El 17/02/2011 11:18, Oscar Perpiñan Lamigueiro escribió:

  
    
#
Hola Paco,

creo que el problema está en que no le dices a R que tu primera variable es 
una fecha. Prueba lo siguiente:

datos <- read.csv("dat.csv",header=T)

# Das formato fecha a los datos
# Fecha del tipo: Año-Mes-Día
fecha <- as.Date(datos[,1],format="%Y-%m-%d")

reg <- lm(datos[,2]~fecha)
summary(reg)

Un saludo,

Jorge

El Thursday 17 February 2011 11:38:40 Paco Pastor escribió:
#
El Thu, 17 Feb 2011 11:38:40 +0100
Paco Pastor <paco en ceam.es> escribió:
OK. 

Entonces el objeto zoo lo creas así:
dat <- read.zoo(file='dat.csv', sep=',', dec='.',
	format='%Y-%m-%d', header=TRUE) 

Y cuando hablas de regresión lineal con una sola variable, ¿te refieres
a ajustar frente al tiempo?

lmZ <- lm(coredata(dat)~index(dat))
summary(lmZ)

¿o necesitas algo más elaborado?:
dat.fit <- StructTS(dat, type='level')
plot(dat)
lines(fitted(dat.fit), col='green')


Saludos.

Oscar.
-------------------
Oscar Perpiñán Lamigueiro
Dpto. Ingeniería Eléctrica
EUITI-UPM
#
Hola Jorge y Óscar

Efectivamente, quiero hacer la regresión de la variable respecto al tiempo.

He probado vuestras dos sugerencias y obtengo la regresión pero resulta 
que dan valores ligeramente diferentes. ¿Qué método debo escoger? 
supongo que dependerá del tipo de datos con los que se trabaja. Además, 
ésta es solamente una primera aproximación a la tendencia de la serie y 
luego tendrá que venir algo más complejo.

library(zoo)
temperatura=read.csv("temp_maxima_C.dat",header=F,sep=",")
tdat=temperatura[2:8]
mitja=rowMeans(tdat, na.rm=TRUE)
temp2=cbind(temperatura,mitja)
tfecha=as.Date(temp2[,1],"%d/%m/%Y")
tdata=zoo(temp2$mitja,tfecha)

lm1=lm(coredata(tdata)~index(tdata))

lm1
Call:
lm(formula = coredata(tdata) ~ index(tdata))
Coefficients:
(Intercept)  index(tdata)
2.136e+01     1.119e-04

lm2=lm(tdata~tfecha)

lm2
Call:
lm(formula = tdata ~ tfecha)
Coefficients:
(Intercept)       tfecha
  2.155e+01    8.312e-05


Gracias


El 17/02/2011 11:56, Jorge Virto escribió:

  
    
#
Paco,

Ya que tienes una serie temporal (temperaturas que evolucionan a lo  
largo del tiempo),
y parece que tu objetivo es estudiar esta evolución (regresión  
respecto al tiempo).
Resulta que es precisamente el objeto básico de la teoría de las  
series temporales.
Es decir que puedes utilizar los modelos clásicos de este área:  
modelos ArMa, Arima,
.... y puedes también incluir una tendencia y un componente estacional.
Echa, por ejemplo, un vistazo al paquete "tseries".
Un saludo. Olivier
--  
____________________________________

Olivier G. Nuñez
Email: onunez en iberstat.es
Tel : +34 663 03 69 09
Web: http://www.iberstat.es

____________________________________




El 17/02/2011, a las 12:42, Paco Pastor escribió: