Circadian rhythms have become a topic of intensive research during the last 40 years. Often the period is fixed as 24 hours due to the entrainment. However, for situations such as when individuals are denied exposure to zeitgebers or are living on irregular sleep/wake schedule, the period of the rhythm must be estimated from data. Several methods such as spectral analysis, autocorrelation, Enright's periodgram and linear regression of onset have been proposed in literature (Arendt et al., 1989; Refinetti, 1993). The first three methods require equidistant samples and the last method requires a marker for the onset of activity. All four methods requres several cycles of observations. Our method illustrated below, under the assumption that the shape of circadian rhythm remains unchanged, can be used for iregular design with few cycles.
This dataset is taken from a study on mood disorders. We thank
Daniel Buysse, MD, and Hernando Ombao, PhD, from the University
of Pittsburgh for permission to use part of the data. For several
healthy and depressed subjects, core body temperature (bt) is
measured over time every 5 minutes for 48 hours. Each subject
is put into an isolated room free of time cues. We only use
data from one subject and scale time variable into .
Measurements of this subject are shown in Figure
.
The goal was to investigate possible effects of mode disorder
on the biological rhythms. For other physiological measurements,
it is known that biological rhythms exist. They are controlled
by the internal clock with a period close to 25 hours.
We will assume that biological rhythms exist for core body
temperature with a similar period. Then the 48 hour observations
contain at least one period. We need to estimate the period
and the shape function for each subject.
The common practice of fitting a sinusoidal function to each
subject may not be appropriate (Wang and Brown, 1996). We
demonstrate how to use SNR models to fit such data for
further analyses. See Hall et al. (2001) for another interesting
example and discussions on identifiability.
![]() |
We consider the following model
> cbt.fit1 <- snr(bt~f(time-a**2*floor(time/a**2)), func=f(u)~list(~1, periodic(u)), params=list(a~1), data=cbt, spar="m", start=list(params=c(sqrt(.5))), cor=corAR1()) > cbt.fit1 Semi-parametric Nonlinear Regression Model Fit Model: bt ~ f(time - a^2 * floor(time/a^2)) Data: cbt Log-likelihood: 1141.090 Coefficients: a 0.7094294 Correlation Structure: AR(1) Formula: ~1 Parameter estimate(s): Phi 0.8456162 Smoothing spline: GML estimate(s) of smoothing parameter(s): 6.161782e-08 Equivalent Degrees of Freedom (DF): 21.72078 Residual standard error: 0.06496144 Number of Observations: 576 Converged after 4 iterations > p.cbt.fit1 <- predict(cbt.fit1)
We can also fit an equivalent model
> cbt.fit2 <- snr(bt~f(a**2*time), func=f(u)~list(~1, periodic(u)), params=list(a~1), data=cbt, spar="m", start=list(params=c(sqrt(2))), cor=corAR1()) > cbt.fit2 Semi-parametric Nonlinear Regression Model Fit Model: bt ~ f(a^2 * time) Data: cbt Log-likelihood: 1143.045 Coefficients: a 1.412535 Correlation Structure: AR(1) Formula: ~1 Parameter estimate(s): Phi 0.8471175 Smoothing spline: GML estimate(s) of smoothing parameter(s): 4.377812e-07 Equivalent Degrees of Freedom (DF): 21.38732 Residual standard error: 0.0649923 Number of Observations: 576 Converged after 4 iterations > p.cbt.fit2 <- predict(cbt.fit2)Fits from these two models are shown in Figure