Intepolation avec R
Imaginons que nous détenons des valeurs pour des dates précises, par exemple des données électorales d'un parti, ici le Parti québécois (PQ), mais que vous voulons estimer les valeurs entre les années. Créons une base avec les données initiales. Créons ensuite une séquence (date2) avec toutes les données souhaitées. Une fois cela fait, il suffit d'utiliser la fonction approx().
Code pour interpolation
date=c(1970,1973, 1976, 1981, 1985, 1989, 1994, 1998, 2003, 2007, 2008, 2012, 2014)
PQ=c(23.06, 30.22, 41.37,49.26,38.69,40.16,44.75, 42.87, 33.24, 28.35, 35.17, 31.95, 25.38)
basePQInitiale=data.frame(date,PQ)
basePQInitiale
date2=seq(1970,2014,1)
resultat=approx(date, PQ, xout = date2, method="linear", ties="ordered")$y
basePQFinale=data.frame(date2,resultat)
basePQFinale
Code et résultat
>
> date=c(1970,1973, 1976, 1981, 1985, 1989, 1994, 1998, 2003, 2007, 2008, 2012, 2014)
> PQ=c(23.06, 30.22, 41.37,49.26,38.69,40.16,44.75, 42.87, 33.24, 28.35, 35.17, 31.95, 25.38)
>
> basePQInitiale=data.frame(date,PQ)
> basePQInitiale
date PQ
1 1970 23.06
2 1973 30.22
3 1976 41.37
4 1981 49.26
5 1985 38.69
6 1989 40.16
7 1994 44.75
8 1998 42.87
9 2003 33.24
10 2007 28.35
11 2008 35.17
12 2012 31.95
13 2014 25.38
>
> date2=seq(1970,2014,1)
>
> resultat=approx(date, PQ, xout = date2, method="linear", ties="ordered")$y
> basePQFinale=data.frame(date2,resultat)
> basePQFinale
date2 resultat
1 1970 23.06000
2 1971 25.44667
3 1972 27.83333
4 1973 30.22000
5 1974 33.93667
6 1975 37.65333
7 1976 41.37000
8 1977 42.94800
9 1978 44.52600
10 1979 46.10400
11 1980 47.68200
12 1981 49.26000
13 1982 46.61750
14 1983 43.97500
15 1984 41.33250
16 1985 38.69000
17 1986 39.05750
18 1987 39.42500
19 1988 39.79250
20 1989 40.16000
21 1990 41.07800
22 1991 41.99600
23 1992 42.91400
24 1993 43.83200
25 1994 44.75000
26 1995 44.28000
27 1996 43.81000
28 1997 43.34000
29 1998 42.87000
30 1999 40.94400
31 2000 39.01800
32 2001 37.09200
33 2002 35.16600
34 2003 33.24000
35 2004 32.01750
36 2005 30.79500
37 2006 29.57250
38 2007 28.35000
39 2008 35.17000
40 2009 34.36500
41 2010 33.56000
42 2011 32.75500
43 2012 31.95000
44 2013 28.66500
45 2014 25.38000
Code pour intrapolation et extrapolation
Ici on veut extrapoler dans le passé et dans l'avenir. Donc, avant 1970 (1966,1967,1968,1969) et après 2014 (2015,2016,2017). On utilise la fonction approxExtrap() du package Hmisc.
library(Hmisc)
date2=seq(1966,2017,1)
resultat=approxExtrap(date, PQ, xout = date2, method="linear", ties="ordered")$y
basePQFinale=data.frame(date2,resultat)
basePQFinale
Code et résultat
> library(Hmisc)
> date2=seq(1966,2017,1)
> resultat=approxExtrap(date, PQ, xout = date2, method="linear", ties="ordered")$y
> basePQFinale=data.frame(date2,resultat)
> basePQFinale
date2 resultat
1 1966 13.51333
2 1967 15.90000
3 1968 18.28667
4 1969 20.67333
5 1970 23.06000
6 1971 25.44667
7 1972 27.83333
8 1973 30.22000
9 1974 33.93667
10 1975 37.65333
11 1976 41.37000
12 1977 42.94800
13 1978 44.52600
14 1979 46.10400
15 1980 47.68200
16 1981 49.26000
17 1982 46.61750
18 1983 43.97500
19 1984 41.33250
20 1985 38.69000
21 1986 39.05750
22 1987 39.42500
23 1988 39.79250
24 1989 40.16000
25 1990 41.07800
26 1991 41.99600
27 1992 42.91400
28 1993 43.83200
29 1994 44.75000
30 1995 44.28000
31 1996 43.81000
32 1997 43.34000
33 1998 42.87000
34 1999 40.94400
35 2000 39.01800
36 2001 37.09200
37 2002 35.16600
38 2003 33.24000
39 2004 32.01750
40 2005 30.79500
41 2006 29.57250
42 2007 28.35000
43 2008 35.17000
44 2009 34.36500
45 2010 33.56000
46 2011 32.75500
47 2012 31.95000
48 2013 28.66500
49 2014 25.38000
50 2015 22.09500
51 2016 18.81000
52 2017 15.52500