En un pregunta relacionada, cómo simular una muestra aleatoria iid $(X_1,\ldots,X_n)\sim f$ bajo la restricción de que su suma $X_1+\cdots+X_n$ se fija en un valor arbitrario $s_0$ , I mostró que la densidad de esa muestra viene dada por $$(X_1,\ldots,X_n)\sim f(x_1)\cdots f(x_{n-1})f(s_0-x_1-\cdots-x_n)\mathbb{I}_{s_0-x_1-\cdots-x_{n-1}}(x_n)$$
Nota: Bajo la restricción la muestra ya no es independiente pero las observaciones se distribuyen idénticamente, a pesar de la aparente asimetría en lo anterior.
Por ejemplo, una muestra uniforme con media fija $0.5$ tendría la densidad conjunta $$(U_1,\ldots,U_N)\sim \prod_{i=1}^{N-1}\mathbb{I}_{(0,1)}(u_i)\mathbb{I}_{1/2}(u_1+\cdots+u_N)$$ que puede simularse mediante el muestreo de Gibbs u otro algoritmo MCMC como el RWMH. Cuando se utiliza el muestreo de Gibbs, el $N-1$ Las primeras coordenadas de la muestra se pueden simular de una en una con $$U_i|U_{-i}\sim \mathbb{I}_{(0,1)}(u_i) \mathbb{I}_{(0,1)}(s_0-u_1-\cdots-u_i-\cdots-u_{n-1})=\mathbb{I}_{(\max\{0,s_0-1-\sum_{j\ne i,n}u_j\},\min\{1,s_0-\sum_{j\ne i,n}u_j\})}(u_i)$$ Una implementación en R se parece a este código:
n=3;T=1e4
s0=.5 #fixed average
sampl=matrix(s0,T,n)
for (t in 2:T){
sampl[t,]=sampl[t-1,]
for (i in 1:(n-1)){
sampl[t,i]=runif(1,
min=max(0,n*s0-sum(sampl[t,c(-i,-n)])-1),
max=min(1,n*s0-sum(sampl[t,c(-i,-n)])))
sampl[t,n]=n*s0-sum(sampl[t,-n])}}
con los siguientes marginales en el $U_i$ 's:
Nota: Se puede modificar fácilmente el código R anterior para imponer una media de $s_0=0.05$ o $s_0=0.975$ en la muestra.