Dear all,
I am an beginner with R and I have a question concerning apply(). My problem
is as follows:
I have data on four variables (x1,x2,x3,x4) with missing values for x1 and
x2.
> data[1:9,]
x1 x2 x3 x4
1 NA NA 10 1
2 NA NA 8 3
3 NA NA 13 7
4 9 9 9 9
5 11 14 20 10
6 14 14 14 15
7 6 6 6 8
8 4 4 4 19
9 12 12 12 8
.....
I would like to replace the missing values by values sampled from the
conditional distribution p(x1,x2|x3,x4) of x1 and x2, given the observed
data on x3 and x4.
This conditional distribution is specified as a product of two normals:
p1(x1|x2,x3,x4)*p2(x2|x3,x4), where the mean of p1 is given by
a1*x2+a2*x3+a4*x4 and for p2 the mean is b1*x3+b2*x4.(Note that the means
change for every observation)
I use Adaptive Rejection Metropolis Sampling (function arms() from package
HI) to draw values from p(x1,x2|x3,x4). My code is:
### Begin of function> myfunction <- function() {
### 1. Step: Definition of my log density
log(p1(x1|x2,x3,x4)*p2(x2|x3,x4)), assuming values for (a1,a2,a3) and
(b1,b2)
> mylogdensity <- function(x){
+ log(prod(dnorm(x[1], mean=0.1*x[2]+0.4*x3+0.9*x4), dnorm(x[2],
mean=2*x3-3.1*x4)))}
### 2. Step: Drawing 1000 samples from this density
> y <- arms(c(0,0), mylogdensity, function(x) crossprod(x)<=1e6, 1000)
### 3. Step: replacing the missing values by the sampled values
> newdata <- data.frame(x1=y[,1], x2=y[,2], x3=rep(x3, 1000), x4=rep(x4,
1000))
}
### End of function
To apply this procedure to every observation (row) with missing data on x1
and x2, I use:
> ifelse(is.na(x1), apply(data, 1, myfunction), newdata <-
dataframe(x1=x1,
x2=x2, x3=x3, x4=x4))
After this I get the error message
Error in FUN(newX[, i], ...) : unused argument(s) ( ...)
I have no idea about the meaning of this message and where the error is
(contained in the "ifelse"-statement or already in the definiton of
"myfunction"?)
Any help is highly appreciated!!
Best wishes,
Thomas
-------
Thomas M??hlmann
Department of Economics
University of Cologne
Albertus-Magnus Platz
50923 Koeln
Germany
Tel: (0049) +221-4702628
Fax: (0049) +221-4702305
Email: maehlmann at wiso.uni-koeln.de