Skip to content

random effect latent variable model,

2 messages · Ren-Huai Huang, Alex Fine

#
Thank you Jim.

I will look at PROC GLIMMIX in SAS. I choose PROC NLMIXED is because using
general(ll)  in the model statement can specifiesa general log likelihood
function.

Attached below is the objective function I have tried in R . What I am not
sure is to join the log likelihood with the random effect as I did in the
last four lines. Let me know if I am wrong
see https://github.com/huangrh/relvm for more details.

Thanks again!

Regards,

Renhuai

# -------------------------------------------------------------------
# negative log likelihood: How to join Likelihood with random effect
nll <- function(par, data = data_tbl, w = weight_tbl) { # Reconstruction of
the parameters from the vector mu <- par[grep("mu",names(par))] # fl <-
par[grep("fl", names(par))] # factor loading lv <-
par[grep("lv",names(par))] # factor variable err <- par[grep("err",
names(par))] # # # Convert to matrix d <- dim(data); nr <- d[1]; nc <- d[2]
data<- as.matrix(data); w <- as.matrix(w) mu <- matrix(mu, nrow = nr, ncol
= nc, byrow = TRUE) fl <- matrix(fl, nrow = nr, ncol = nc, byrow = TRUE) lv
<- matrix(lv, nrow = nr, ncol = nc, byrow = FALSE) err <- matrix(err,nrow =
nr, ncol = nc, byrow = TRUE) # negtive log likelyhood means <- mu + fl * lv
out <- sum(( w * (dnorm(data, mean=means, sd = err, log=TRUE))),na.rm=TRUE)
out <- out + sum(dnorm(lv[,1], mean = 0, sd = 1, log=TRUE), na.rm=TRUE)
(-out) }
#------------------------------------------------------------------------------------
# optimize the nll function set.seed(100)
#
# the data set is available in the Github # <
https://github.com/huangrh/relvm/blob/master/inst/extdata/dat244.csv>  file
<- system.file("/extdata/dat4557.csv", package="relvm") dat <-
read.csv(file, na.strings=".") # subset score_tbl <- subset(dat,
select=c(paste0("x",1:7))) weight_tbl<- subset(dat,
select=c(paste0("w",1:7)))
# Init parameters d <- dim(score_tbl); init <- unlist(list(mu = rep(0,
d[2]), fl = rep(1, d[2]), # factor loading lv = rep(1, d[1]), # latent
variable err = rep(1, d[2]))) # fit the function fit <- optim(par = init,
fn = relvm:::nll, gr = NULL, method = "BFGS", control= list(maxit=5200),
data = score_tbl, w = weight_tbl)



On Wed, Jan 4, 2017 at 11:06 AM, Baldwin, Jim -FS <jbaldwin at fs.fed.us>
wrote:

  
  
#
Following up on what Jim wrote, I actually think it'd be easier to help if
you just describe the model in terms independent of a programming
language.  For example, "a linear mixed effects regression with a random
intercept for X and a by-X random slope for Z" or something.  That way
people who use R but do not use SAS (like me) can still help you.

On Wed, Jan 4, 2017 at 2:02 PM, Ren-Huai Huang <huangrenhuai at gmail.com>
wrote: