[R] Beginner question on apply()

Thomas Mählmann maehlmann at wiso.uni-koeln.de
Tue Oct 25 17:50:32 CEST 2005


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




More information about the R-help mailing list