# Dealing with missing data: # x1...xn ~ Normal(mu, 1), but values over 2 are censored! # We use a flat prior on mu, but could also use a normal prior. data <- c(1, 1.4, 1.9, 0.3, 1.5, 1.7) # and then there are two observations censored by 2. N <- 1000 # method 1, using the censored likelihood and Random Walk MH: loglik <- function(mu) {sum(dnorm(data, mu, 1, log=T)) + 2*pnorm(2, mu, 1, lower.tail=F, log.p=T)} result1 <- rep(0, N) for (i in 2:N) { prop <- result1[i-1] + rnorm(1,0,0.1) accept <- exp(loglik(prop)-loglik(result1[i-1])) if (runif(1)0))>0) minb <- max(minb, max((( z-a[t])/x)[(y==1) & (x>0)])) if (sum((y==0)&(x<0))>0) minb <- max(minb, max(((-z-a[t])/x)[(y==0) & (x<0)])) if (sum((y==1)&(x<0))>0) maxb <- min(maxb, min((( z-a[t])/x)[(y==1) & (x<0)])) if (sum((y==0)&(x>0))>0) maxb <- min(maxb, min(((-z-a[t])/x)[(y==0) & (x>0)])) b[t] <- runif(1, minb, maxb) } plot(a, type="l") plot(b, type="l") plot(a,b) # data.frame(a=a-b*m, b=b) # data.frame(a=a,b=b)