[R] The question is on Symmetry model for square table.

Adejumo Adebowale Olusola sola at stat.uni-muenchen.de
Thu Jul 10 15:45:19 CEST 2003


Please help,
I tried a program on S-plus, and it worked. Also I tried the same 
program on R but not worked. Here is the programme. I put it in a 
function form. The model and assumption are at the bottom.

where
counts<-c(22,2,2,0,5,7,14,0,0,2,36,0,0,1,17,10)
which is name.data, i is row size and j is the column size.

symmetry
function(i, j, name.data)
{
	row <- (c(1:i))
	col <- (c(1:j))
	name.data <- expand.grid(A = row, B = col)
	name.data$counts <- c(counts)
	name.data$symm <- paste(pmin(as.numeric(name.data$A),   		 
as.numeric(name.data$B)), pmax(as.numeric(name.data$A), 		 
as.numeric(name.data$B)), sep = ",")
	symmetry <- glm(counts ~ symm, family = poisson(link = log), 			data = 
name.data)
}
 > summary(symmetry(4,4,counts))

Call: glm(formula = counts ~ symm, family = poisson(link = log), data = 
name.data)
Deviance Residuals:
        Min         1Q         Median        3Q      Max
  -4.123106 -0.9044956 -3.846197e-008 0.6543513 2.562617

Coefficients:
                  Value Std. Error    t value
(Intercept)  0.7912419  2.1128915  0.3744830
       symm1 -0.9191397  0.2169745 -4.2361653
       symm2 -0.7239676  0.2465491 -2.9364038
       symm3 -2.3094242  5.2703608 -0.4381909
       symm4  0.5614798  1.0575027  0.5309488
       symm5  0.3965751  0.7045443  0.5628817
       symm6 -0.1128162  0.5223163 -0.2159920
       symm7  0.4499711  0.3777980  1.1910362
       symm8  0.1895939  0.2946399  0.6434767
       symm9  0.1679270  0.2368599  0.7089720

(Dispersion Parameter for Poisson family taken to be 1 )

     Null Deviance: 190.398 on 15 degrees of freedom

Residual Deviance: 39.17989 on 6 degrees of freedom

Number of Fisher Scoring Iterations: 6

_________________________________________________________________________
Also in R. program, here is the same program together with the complain.

name.data=counts (above).

 > symmetry
function(i,j,name.data){
A<-(c(1:i))
B<-(c(1:j))
name.data<-expand.grid(A=A,B=B)
name.data$counts<-(c(counts))
name.data$symm<-paste(pmin(as.numeric(name.data$A),as.numeric(name.data$B)),
pmax(as.numeric(name.data$A),as.numeric(name.data$B)),sep=",")
symmetry<-glm(counts~symm,data=name.data,family=poisson(link=log))
}

 > symmetry(4,4,counts)
Error in model.frame(formula, rownames, variables, varnames, extras, 
extranames,  : invalid variable type

I tried to print out the table with symm pathern. and the function for 
symm below.

 > i<-4
 > j<-4
 > A<-(c(1:i))
 > B<-(c(1:j))
 > name.data<-expand.grid(A=A,B=B)
 > name.data$counts<-(c(counts))
 >name.data$symm<-paste(pmin(as.numeric(name.data$A),as.numeric(name.data$B)),
+ pmax(as.numeric(name.data$A),as.numeric(name.data$B)),sep=",")
 > name.data
    A B counts symm
1  1 1     22  1,1
2  2 1      2  1,2
3  3 1      2  1,3
4  4 1      0  1,4
5  1 2      5  1,2
6  2 2      7  2,2
7  3 2     14  2,3
8  4 2      0  2,4
9  1 3      0  1,3
10 2 3      2  2,3
11 3 3     36  3,3
12 4 3      0  3,4
13 1 4      0  1,4
14 2 4      1  2,4
15 3 4     17  3,4
16 4 4     10  4,4
 >

 > symm
function (x, levels = sort(unique.default(x), na.last = TRUE),
     labels = levels, exclude = NA, ordered = is.ordered(x))
{
     if (is.null(x))
         x <- list()
     exclude <- as.vector(exclude, typeof(x))
     levels <- levels[is.na(match(levels, exclude))]
     f <- match(x, levels)
     names(f) <- names(x)
     nl <- length(labels)
     attr(f, "levels") <- if (nl == length(levels))
         as.character(labels)
     else if (nl == 1)
         paste(labels, seq(along = levels), sep = "")
     else stop(paste("invalid labels; length", nl, "should be 1 or",
         length(levels)))
     class(f) <- c(if (ordered) "ordered", "factor")
     f
}

-----------------------------------------------------------------------------
The model and Assumptions

log(m_ij)= lambda + lambda_i + lambda_j + lambda_ij

where,
lambda_ij = lambda_ji for i not equal to j
and lambda_i(A) = lambda_i(B)
Likelihood equation is

m_ij =(n_ij + n_ji)/2

For symmetry m_(ij)=m_(ji)

"R program" does not recognised "symm" pathern, that is (1,1), (1,2) and 
so on but "S-plus" do. So please I need your assistance.

Thanks for your usual contibutions.

Yours

Sola.


-- 
---------------------------------
Adebowale Olusola Adejumo
Department of Statistics
LMU,University of Muenchen
Ludwigstraße 33/III
D - 80539 München
Germany.

Tel:  ++49 89 2180 3165
Fax:  ++49 89 2180 5042
http://www.stat.uni-muenchen.de/




More information about the R-help mailing list