Jason Hwa wrote:
Dear R-help community,

I am working with multidimensional contingency tables and I am having trouble getting loglm to run on all dimensions without typing out each dimension.

I have generated random data and provided output for the results I want below:

d1.c1 <- rnorm(20, .10, .02)
d1.c2 <- rnorm(20, .10, .02)
d2.c1 <- rnorm(20, .09, .02)
d2.c2 <- rnorm(20, .09, .02)
d3.c1 <- rnorm(20, .11, .02)
d3.c2 <- rnorm(20, .11, .02)

group1 <- cbind(1, d1.c1, d2.c1, d3.c1)
group2 <- cbind(2, d1.c2, d2.c2, d3.c2)

colnames(group1) <- colnames(group2) <- c("group", "dim1", "dim2", "dim3")
combined <- rbind(group1, group2)
combined[,2:4] <- combined[,2:4] > .1

ctables <- xtabs(~., data = combined)
loglm(~group+dim1+dim2+dim3, data=ctables)

Call:
loglm(formula = ~group + dim1 + dim2 + dim3, data = ctables)

Statistics:
                       X^2 df  P(> X^2)
Likelihood Ratio 12.29856 11 0.3416253
Pearson          10.28058 11 0.5053391

However, the number and the names of the dimensions change for each dataset. What I want is to be able to run the following line at the end of the code: "loglm(~., data=ctables)", but it always prints the following error:

Error in terms.formula(formula <- denumerate(formula)) :
   '.' in formula and no 'data' argument

Can anyone help me out?

Thank you,
Jason

Presumably you're using loglm from package MASS (which you
should indicate).

To use the dot notation, you need to put your data in
dataframe form. This works:

 d <- data.frame(ftable(ctables))
 loglm(Freq ~ ., data = d)

Or you could use the integer notation for the formula:

 loglm( ~ 1 + 2 + 3 + 4, data = ctables)

You could generate the formula in your code:

 form <- as.formula(paste("~", paste(1:4, collapse="+")))

and then use

 loglm(form, data = ctables)


   -Peter Ehlers

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to