[R] fitting a glm with matrix of responses

David Winsemius dwinsemius at comcast.net
Wed Nov 11 20:42:35 CET 2009


On Nov 11, 2009, at 2:24 PM, Murat Tasan wrote:

> hi all - quick question:
>
> i have a matrix 'y' of response values, with two explanatory variables
> 'x1' and 'x2'.
> tested values of 'x1' and 'x2' are sitting in two vectors 'x1' and
> 'x2'.
> i want to learn model parameters without "unrolling" the matrix of
> response values.
> example below:
>
> # some fake data for the example
> x1 <- 1:5
> x2 <- 1:10
> y <- matrix(runif(50), nrow = 5)
>
> # current method:
> z <- vector()
> for(i in x1) for(j in x2) z <- c(z, i, j, y[i, j])
> z <- data.frame(matrix(z, ncol = 3, byrow = TRUE))
> colnames(z) <- c("x1", "x2", "y")
> m <- glm(y ~ x1 + x2 + x1:x2, family = binomial, data = z)
>
> # what i'd like to do, kind of:

> m <- glm(as.vector(y) ~ expand.grid(x1 , x2)^2)

Perhaps:
 > zdf <- expand.grid(x1,x2)
 > zdf$y <- as.vector(y)
 > m <- glm(as.vector(y) ~ (Var1 + Var2)^2, data=zdf)
 > m

Call:  glm(formula = as.vector(y) ~ (Var1 + Var2)^2, data = zdf)

Coefficients:
(Intercept)         Var1         Var2    Var1:Var2
    0.425943     0.066960    -0.001198    -0.006480

Degrees of Freedom: 49 Total (i.e. Null);  46 Residual
Null Deviance:	    4.067
Residual Deviance: 3.759 	AIC: 22.5

>
>
> basically, i have to "unfold" the matrix 'y' to a data frame 'z' then
> solve.

as.vector would do that, but I don't know how well it works within a  
formula.


> this is somewhat tedious.
> anyone know of a way i can do this more generally, especially if
> working in even higher dimensions than 2 (i.e. with an arbitrary-
> dimension array of response values)?

?formula

You can get all two way interactions with ( )^2

David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list