Alternative explanations for disease and other population cycles typically include extrinsic environmental drivers, such as climate variability, and intrinsic nonlinear dynamics resulting from feedbacks within the system, such as species interactions and density dependence. Because these different factors can interact in nonlinear systems and can give rise to oscillations whose frequencies differ from those of extrinsic drivers, it is difficult to identify their respective contributions from temporal population patterns. In the case of disease, immunity is an important intrinsic factor. However, for many diseases, such as cholera, for which immunity is temporary, the duration and decay pattern of immunity is not well known. We present a nonlinear time series model with two related objectives: the reconstruction of immunity patterns from data on cases and population sizes and the identification of the respective roles of extrinsic and intrinsic factors in the dynamics. Extrinsic factors here include both seasonality and long-term changes or interannual variability in forcing. Results with simulated data show that this semiparametric method successfully recovers the decay of immunity and identifies the origin of interannual variability. An application to historical cholera data indicates that temporary immunity can be long-lasting and decays in approximately 9 yr. Extrinsic forcing of transmissibility is identified to have a strong seasonal component along with a long-term decrease. Furthermore, noise appears to sustain the multiple frequencies in the long-term dynamics. Similar semiparametric models should apply to population data other than for disease.