Multiple imputation for missing values I would like to use imputation for replacing missing values in my data set under certain constraints. 
For example, I'd like the imputed variable x1 to be greater or equal to the sum of my two other variables, say x2 and x3. I also want x3 to be imputed by either 0 or >= 14 and I want x2 to be imputed by either 0 or >= 16. 
I tried defining these constraints in SPSS for multiple imputation, but in SPSS I can only define maximum and minimum values. Is there any way to define further constraints in SPSS or do you know any R package which would let me define such constraints for imputation of missing values?
My data is as follows:
   x1 =c(21, 50, 31, 15, 36, 82, 14, 14, 19, 18, 16, 36, 583, NA,NA,NA, 50, 52, 26, 24)
   x2 = c(0, NA, 18,0, 19, 0, NA, 0, 0, 0, 0, 0, 0,NA,NA, NA, 22, NA, 0, 0)
   x3 = c(0, 0, 0, 0, 0, 54, 0 ,0, 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, 0, 0)
   dat=data.frame(x1=x1, x2=x2, x3=x3)
   > dat
       x1 x2 x3
   1   21  0  0
   2   50 NA  0
   3   31 18  0
   4   15  0  0
   5   36 19  0
   6   82  0 54
   7   14 NA  0
   8   14  0  0
   9   19  0  0
   10  18  0  0
   11  16  0  0
   12  36  0  0
   13 583  0  0
   14  NA NA NA
   15  NA NA NA
   16  NA NA NA
   17  50 22 NA
   18  52 NA  0
   19  26  0  0
   20  24  0  0

 A: The closest thing I could find is Amelia's prior information inclusion. See chapter 4.7 in the vignette, specifically 4.7.2:

Observation-level priors 
Researchers often have additional prior
  information about missing data values based on previous research,
  academic consensus, or personal experience. Amelia can incorporate
  this information to produce vastly improved imputations. The Amelia
  algorithm allows users to include informative Bayesian priors about
  individual missing data cells instead of the more general model
  parameters, many of which have little direct meaning. 
The
  incorporation of priors follows basic Bayesian analysis where the
  imputation turns out to be a weighted average of the model-based
  imputation and the prior mean, where the weights are functions of the
  relative strength of the data and prior: when the model predicts very
  well, the imputation will down-weight the prior, and vice versa
  (Honaker and King, 2010). 
The priors about individual observations
  should describe the analyst's belief about the distribution of the
  missing data cell. This can either take the form of a mean and a
  standard deviation or a condence interval. For instance, we might
  know that 1986 tari rates in Thailand around 40%, but we have some
  uncertainty as to the exact value. Our prior belief about the
  distribution of the missing data cell, then, centers on 40 with a
  standard deviation that re ects the amount of uncertainty we have
  about our prior belief. 
To input priors you must build a priors matrix
  with either four or five columns. Each row of the matrix represents a
  prior on either one observation or one variable. In any row, the entry
  in the rst column is the row of the observation and the entry is the
  second column is the column of the observation. In the four column
  priors matrix the third and fourth columns are the mean and standard
  deviation of the prior distribution of the missing value.

So while you won't be able to generally say something like x1<x2+x3, you could loop over your data set and add an observation-level prior for each relevant case. Constant bounds can also be applied (such as setting x1, x2, and x3 to be non-negative). For example:
priors = matrix(NA, nrow=0, ncol=5);
for (i in seq(1, length(data))) 
{
    x1 = data$x1[i];
    x2 = data$x2[i];
    x3 = data$x3[i];

    if (is.na(x1) && !is.na(x2) && !is.na(x3))
    {
        priors = rbind(priors, c(i, 1, 0, x2+x3, 0.999999))
    }
}

amelia(data, m=1, bound = rbind(c(1, 0, Inf), c(2, 0, Inf), c(3, 0, Inf)), pr = priors);

A: Constraints are probably easier to implement in predictive mean matching multiple imputation.  This assumes that there is a significant number of observations with non-missing constraining variables that meet the constraints.  I'm thinking about implementing this in the R Hmisc package aregImpute function.  You may want to check back in a month or so.  It will be important to specify the maximum distance from the target that a donor observation can be, because the constraints will push donors further from the ideal unconstrained donor.
A: I believe that the Amelia (Amelia II) package currently has the most comprehensive support for specifying data values range constraints. However, the problem is that Amelia assumes that data is multivariate normal.
If in your case the assumption of multivariate normality doesn't apply, you might want to check mice package, which implements multiple imputation (MI) via chained equations. This package doesn't have the assumption of multivariate normality. It also has a function that might be enough for specifying constraints, but I'm not sure to what degree. The function is called squeeze(). You can read about it in the documentation: http://cran.r-project.org/web/packages/mice/mice.pdf. An additional benefit of mice is its flexibility in terms of allowing specification of user-defined imputation functions and wider selection of algorithms. Here's a tutorial on performing MI, using mice: http://www.ats.ucla.edu/stat/r/faq/R_pmm_mi.htm.
As far as I understand, Dr. Harrell's Hmisc package, using the same chained equations (predictive mean matching) approach, probably supports non-normal data (with the exception of normpmm method). Maybe he has already implemented the constraints specification functionality per his answer above. I haven't used aregImpute(), so can't say much more about it (I've used Amelia and mice, but I'm definitely not an expert in statistics, just trying to learn as much as I can).
Finally, you may find interesting the following, a little dated, but still nice, overview of approaches, methods and software for multiple imputation of data with missing values: http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1839993. I'm sure that there are newer overview papers on MI, but that's all I'm aware of at the present time. I hope that this is somewhat helpful.
A: If I understand your question correctly, it seems to me that you already know what values the missing variables should take subject to some constraints. I am not very conversant in  SPSS but in R I think you can write a function to do that (which shouldn't be too difficult depending on your experience I should say). I don't know of any package that works with such constraints.
