On 7/21/2015 11:14 AM, Michael Friendly wrote:
More generally, for an I x J x K table, where the last factor is the
response, my desired result
is a data frame of IJ(K-1) rows, with adjacent log odds in a 'logodds'
column, and ideally, I'd like
to have a general function to do this.
Note that if T is the 10 x 3 matrix of frequencies shown by ftable(),
the calculation is essentially
log(T) %*% matrix(c(1, -1, 0,
0, 1, -1))
followed by reshaping and labeling.
No one answered, but as I often find, writing it out as a MWE was
helpful. Here is a simpler approach for my sample case, that should be
easier to generalize
# reshape to matrix
T <- matrix(mice.tab, nrow=prod(dim(mice.tab)[1:2]), ncol=dim(mice.tab)[3])
colnames(T) <- dimnames(mice.tab)[[3]]
rn <- expand.grid(litter=factor(7:11), treatment=c("A","B"))
rownames(T) <- apply(rn, 1, paste, collapse=":")
T
# calculate log odds as contrasts
C <- matrix(c(1, -1, 0,
0, 1, -1), nrow=3)
lodds <- log(T) %*% C
colnames(lodds) <- c("0:1", "1:2+")
lodds
> lodds
0:1 1:2+
7:A 1.6625477 0.7884574
8:A 1.2527630 0.3364722
9:A 0.6061358 0.1823216
10:A 0.1431008 -0.1431008
11:A -1.0986123 -0.3483067
7:B 1.3730491 0.9985288
8:B 1.2272297 0.7537718
9:B 0.7156200 0.7884574
10:B 0.5725192 0.2006707
11:B -1.0986123 0.6286087
>
# make a data frame
DF2 <- data.frame(expand.grid(litter=factor(7:11), treatment=c("A","B"),
deaths=c("0:1", "1:2+")),
logodds=c(lodds))
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.