Can I reconstruct a normal distribution from sample size, and min and max values? I can use mid-point to proxy the mean I know this might be a little ropey, statistically, but this is my problem.
I have a lot of range data, that is to say the minimum, maximum and sample size of a variable. For some of these data I also have a mean, but not many. I want to compare these ranges to each other to quantify the variability of each range, and also to compare the means. I have a good reason to assume that the distribution is symmetrical around the mean, and that the data will have a Gaussian distribution. For this reason I am thinking I can justify using the mid-point of the distribution as a proxy for the mean, when it is absent.
What I want to do is reconstruct a distribution for each range, and then use that to provide a standard deviation or standard error for that distribution. The only information I have is the max and min observed from a sample, and the mid-point as a proxy for the mean.
In this way I hope to be able to calculate weighted means for each group, and also to work out the coefficient of variation for each group as well, based on the range data I have and my assumptions (of a symmetrical and normal distribution).
I plan to use R to do this, so any code help would be appreciated as well.
 A: The joint cumulative distribution function for the minimum $x_{(1)}$ & maximum $x_{(n)}$ for a sample of $n$ from a Gaussian distribution with mean $\mu$ & standard deviation $\sigma$ is
$$
F(x_{(1)},x_{(n)};\mu,\sigma) = \Pr(X_{(1)}<x_{(1)}, X_{(n)}<x_{(n)})\\
=\Pr( X_{(n)}<x_{(n)}) - \Pr(X_{(1)}>x_{(1)}, X_{(n)}<x_{(n)}\\
=\Phi\left(\tfrac{x_{(n)}-\mu}{\sigma}\right)^n - \left[\Phi\left(\tfrac{x_{(n)}-\mu}{\sigma}\right) -\Phi\left(\tfrac{x_{(1)}-\mu}{\sigma}\right)\right]^n
$$
where $\Phi(\cdot)$ is the standard Gaussian CDF. Differentiation with respect to $x_{(1)}$ & $x_{(n)}$ gives the joint probability density function
$$
f(x_{(1)},x_{(n)};\mu,\sigma) =\\ n(n-1)\left[\Phi\left(\tfrac{x_{(n)}-\mu}{\sigma}\right) - \Phi\left(\tfrac{x_{(1)}-\mu}{\sigma}\right)\right]^{n-2}\cdot\phi\left(\tfrac{x_{(n)}-\mu}{\sigma}\right)\cdot\phi\left(\tfrac{x_{(1)}-\mu}{\sigma}\right)\cdot\tfrac{1}{\sigma^2}
$$
where $\phi(\cdot)$ is the standard Gaussian PDF. Taking the log & dropping terms that don't contain parameters gives the log-likelihood function
$$
\ell(\mu,\sigma;x_{(1)},x_{(n)}) =\\ (n-2)\log\left[\Phi\left(\tfrac{x_{(n)}-\mu}{\sigma}\right) - \Phi\left(\tfrac{x_{(1)}-\mu}{\sigma}\right)\right]
+ \log\phi\left(\tfrac{x_{(n)}-\mu}{\sigma}\right) + \log\phi\left(\tfrac{x_{(1)}-\mu}{\sigma}\right) - 2\log\sigma
$$
This doesn't look very tractable but it's easy to see that it's maximized whatever the value of $\sigma$ by setting $\mu=\hat\mu=\frac{x_{(n)}+x_{(1)}}{2}$, i.e. the midpoint—the first term is maximized when the argument of one CDF is the negative of the argument of the other; the second & third terms represent the joint likelihood of two independent normal variates.
Substituting $\hat\mu$ into the log-likelihood & writing $r=x_{(n)}-x_{(1)}$ gives
$$\ell(\sigma;x_{(1)},x_{(n)},\hat\mu)=(n-2)\log\left[1 - 2\Phi\left(\tfrac{-r}{2\sigma}\right)\right] - \frac{r^2}{4\sigma^2} -2\log{\sigma}$$
This expression has to be maximized numerically (e.g. with optimize from R's stat package) to find $\hat\sigma$. (It turns out that $\hat\sigma=k(n)\cdot r$, where $k$ is a constant depending only on $n$—perhaps someone more mathematically adroit than I could show why.)
Estimates are no use without an accompanying measure of precision. The observed Fisher information can be evaluated numerically (e.g. with hessian from R's numDeriv package) & used to calculate approximate standard errors:
$$I(\mu)=-\left.\frac{\partial^2{\ell(\mu;\hat\sigma)}}{(\partial\mu)^2}\right|_{\mu=\hat\mu}$$
$$I(\sigma)=-\left.\frac{\partial^2{\ell(\sigma;\hat\mu)}}{(\partial\sigma)^2}\right|_{\sigma=\hat\sigma}$$
It would be interesting to compare the likelihood & the method-of-moments estimates for  $\sigma$  in terms of bias (is the MLE consistent?), variance, & mean-square error. There's also the issue of estimation for those groups where the sample mean is known in addition to the minimum & maximum.
A: You need to relate the range to the standard deviation/variance.Let $\mu$ be the mean, $\sigma$ the standard deviation and $R=x_{(n)} - x_{(1)}$ be the range. Then for the normal distribution we have that $99.7$% of probability mass lies within 3 standard deviations from the mean. This, as a practical rule means that with very high probability,
$$\mu + 3\sigma \approx x_{(n)}$$
and 
$$\mu - 3\sigma \approx x_{(1)}$$
Subtracting the second from the first we obtain
$$6\sigma \approx x_{(n)} - x_{(1)}= R$$
(this, by the way is whence the "six-sigma" quality assurance methodology in industry comes).
Then you can obtain an estimate for the standard deviation by
$$\hat \sigma = \frac 16 \Big(\bar x_{(n)} - \bar x_{(1)}\Big)$$
where the bar denotes averages. This is when you assume that all sub-samples come from the same distribution (you wrote about having expected ranges). If each sample is a different normal, with different mean and variance, then you can use the formula for each sample, but the uncertainty / possible inaccuracy in the estimated value of the standard deviation will be much larger.
Having a value for the mean and for the standard deviation completely characterizes the normal distribution.
A: It is straightforward to get the distribution function of the maximum of the normal distribution (see "P.max.norm" in code).
From it (with some calculus) you can get the quantile function (see "Q.max.norm").
Using "Q.max.norm" and "Q.min.norm" you can get the median of the range that is related with N.
Using the idea presented by Alecos Papadopoulos (in previous answer) you can calculate sd.
Try this:
N = 100000    # the size of the sample

# Probability function given q and N
P.max.norm <- function(q, N=1, mean=0, sd=1){
    pnorm(q,mean,sd)^N
} 
# Quantile functions given p and N
Q.max.norm <- function(p, N=1, mean=0, sd=1){
    qnorm(p^(1/N),mean,sd)
} 
Q.min.norm <- function(p, N=1, mean=0, sd=1){
    mean-(Q.max.norm(p, N=N, mean=mean, sd=sd)-mean)
} 

### lets test it (takes some time)
Q.max.norm(0.5, N=N)  # The median on the maximum
Q.min.norm(0.5, N=N)  # The median on the minimum

iter = 100
median(replicate(iter, max(rnorm(N))))
median(replicate(iter, min(rnorm(N))))
# it is quite OK

### Lets try to get estimations
true_mean = -3
true_sd = 2
N = 100000

x = rnorm(N, true_mean, true_sd)  # simulation
x.vec = range(x)                  # observations

# estimation
est_mean = mean(x.vec)
est_sd = diff(x.vec)/(Q.max.norm(0.5, N=N)-Q.min.norm(0.5, N=N))

c(true_mean, true_sd)
c(est_mean, est_sd)

# Quite good, but only for large N
# -3  2
# -3.252606  1.981593

