help for csipolate

Cubic spline interpolation

csipolate yvar xvar [if exp] [in range] , generate(newvar)

by ... : may be used with csipolate; see help by.


csipolate creates newvar by averaging non-missing values of yvar and using natural cubic spline interpolation of missing values of yvar, given xvar. That is, provided that xvar is not missing,

1. When yvar is not missing, newvar is the mean of yvar over observations with the same value of xvar. If a value of xvar is unique, then each mean is just the same as the value of yvar at that point.

2. When yvar is missing, newvar is filled in using natural cubic spline interpolation.


Extrapolation is not provided. Some users may wish to extrapolate any remaining missing values linearly using ipolate.

csipolate is a wrapper using Mata functions spline3() and spline3eval(). If desired see help and in turn Mata source code here. That code is a translation of code originally given by Herriot and Reinsch (1973).

The examples are based on the help for ipolate in Stata 10. Stata 9 users will need to substitute their own.


generate() is not optional; it specifies the name of the new variable to be created.


--------------------------------------------------------------------------- Setup . webuse ipolxmpl1

List the data . list, sep(0)

Create y1 containing a natural cubic spline interpolation of y on x for missing values of y . csipolate y x, gen(y1)

List the result . list, sep(0)

--------------------------------------------------------------------------- Setup . webuse ipolxmpl2

Show years for which the circulation data are missing . tabulate circ year if circ == ., missing

Create csicirc containing a natural cubic spline interpolation of circ on year for missing values of circ and perform this calculation separately for each magazine . by magazine: csipolate circ year, gen(csicirc) ---------------------------------------------------------------------------


Nicholas J. Cox, Durham University, U.K. n.j.cox@durham.ac.uk


Ben Ammar reported an example which underlined that there is point in asking for interpolation of singleton values. If that value is known, there is nothing to interpolate. If that value is unknown, there is nothing to do it with.


Hamming, R.W. 1973. Numerical methods for scientists and engineers. New York: McGraw-Hill. See pp.349-356.

Herriot, J.G. and C.H. Reinsch. 1973. Algorithm 472: procedures for natural spline interpolation. Communications of the Association for Computing Machinery 16: 763-768.

Lancaster, P. and K. Salkauskas. 1986. Curve and surface fitting: an introduction. London: Academic Press. [capital S of Salkauskas should bear caron or wedge diacritic]

Press, W.H., S.A. Teukolsky, W.T. Vetterling, B.P. Flannery. 2007. Numerical recipes: the art of scientific computing. Cambridge: Cambridge University Press. See pp.120-124.

Also see

Manual: [D] ipolate