What is the interpretation of an S-shaped curve in the plot of eigenvalues of covariance matrix From PCA's point of view, eigenvalues of covariance matrix should correspond to the principle components. 
Therefore, when we plot these eigenvalues on a data sets with some clustering pattern, we should observe that there are some eigenvalues significant larger than the rest, as the following figure shows: 

However, for a real data set, I observe the plot of eigenvalues looks like following:

Can anyone give some mathematical explanation on what's happening here?
What do those eigenvalues that are significantly smaller than others mean?
How should I generate a data set to replicate this plot?
Edit:
I guess I can offer more information for this interesting question. 


*

*My real data is binary data (every value of the whole matrix is either 1 or 0). It is actually genome data. I am not sure if this is relevant. 

*Recently, I am exploring relevant topics of spectral clustering, I found the eigenvalues of Laplace matrix (of a regular dataset, not my real wield one) behave like this. I am not sure if there are interesting connections. (See the first equation in Section 3.1 of this spectral clustering tutorial for definition of Laplace matrix)

 A: This is a classic plot (I see this all the time in large datasets): the values at the right often arise from floating point roundoff.
For binary data, such a dropping pattern at the right can arise when the data are binarized versions of collinear data.  Here, for instance, is a plot of the singular values of a design matrix $X$ of dimensions $10000\times 500.$  The underlying data are a normally distributed matrix that was binarized (that is, each value was replaced by its sign) and to which were appended $k=9$ linearly dependent columns, which themselves were then binarized.

The binarization eliminates the redundancy among the columns, making all $500$ linearly independent, but a few small eigenvalues remain as reminders of the singular nature of the "latent" but unobserved values.
You can experiment with this R code that produced the example.
d <- 5e2   # Number of columns (eigenvalues)
n <- 20*d  # Number of rows
k <- 9     # Rank deficiency of latent values

set.seed(17)
X <- sign(matrix(rnorm(n*(d-k)), n))
A <- matrix(rnorm((d-k)*k), d-k)
X <- cbind(X, sign(X%*%A))

obj <- svd(X)
plot(obj$d, pch=19, ylim=c(0, max(obj$d)), col=hsv(0,1,.9), ylab="Eigenvalue")

A: It might be better to perform eigenanalysis on the correlation matrix, since the covariance matrix retains scale effects (range of variables influence results).  On one end of your plot, the large eigenvalues represent variables which correlate together, and on the other end -- noise.  Don't make plots without value labels on the x- and y-axis.  You should plot a histogram of eigenvalues.  Many of your eigenvalues in the middle could represent variables with very low standard deviations having little correlation between (i.e. not very informative).   
Update: now that you said your features are binary, there's a problem, since the mean of binary doesn't hold for normal (covariance).  You'll need to determine the distance matrix based on all possible pairwise distances between each pair of variables using Jaccard's distance or Tanimoto's distance (for binary data).   The Tanimoto distance between two binary variables (vectors) $\bf{x}$ and $\bf{y}$ is
\begin{equation}
d(\mathbf{x},\mathbf{y})=\frac{n(\mathbf{x},\mathbf{y})}{n(\mathbf{y}) + n(\mathbf{y}) - n(\mathbf{x},\mathbf{y})}
\end{equation}
where $n(\mathbf{x},\mathbf{y})$ is the number of records with matching ones, $n(\mathbf{x})$ is the number of ones in the vector $\mathbf{x}$, and $n(\mathbf{y})$ is the number of ones in the vector $\mathbf{y}$.  The distance has range [0,1] and is really a similarity metric.  The results for all possible pairs of vectors provides a real square symmetric matrix $\mathbf{D}$, with ones on the diagonal.  
Then, perform eigenanalysis on the $\mathbf{D}$ matrix -- we do this all the time for strictly binary data.  
