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


#Valeurs initiales: années et résultats
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)

#Construction de la base initiale
basePQInitiale=data.frame(date,PQ)
basePQInitiale

#Date souhaitée, ici toutes les années de 1970 à 2014
date2=seq(1970,2014,1)

#Calcul par interpolation
resultat=approx(date, PQ, xout = date2, method="linear", ties="ordered")$y
basePQFinale=data.frame(date2,resultat)
basePQFinale

   
Code et résultat


> #Valeurs initiales: années et résultats
> 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)
> #Construction de la base initiale
> 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

> #Date souhaitée, ici toutes les années de 1970 à 2014
> date2=seq(1970,2014,1)
> #Calcul par interpolation

> 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