Dear Niccolo,
a) your example program
works for me
and on a Pentium 4, 3 Ghz, 1GB ram, The model fit uses
user system elapsed
146.92 0.76 143.32
library(geepack)
set.seed(299)
header <- rep.int(seq(1:615),sample(seq(1:19),size=615,replace=T))
inr <- rlnorm(length(header),0.8434359,0.3268392)
group_cod <- sample(c(0,1),size=length(header),replace=T)
inside <- sample(c(0,1),size=length(header),replace=T)
gee.frame <- data.frame(header,inr,group_cod,inside)
geeglm.model<- geeglm(inside~group_cod,family=binomial, data=gee.frame
,id=header,corstr="unstructured")
Version of _
platform i386-pc-mingw32
arch i386
os mingw32
system i386, mingw32
status
major 2
minor 5.1
year 2007
month 06
day 27
svn rev 42083
language R
version.string R version 2.5.1 (2007-06-27)
b)>>>>
for costr= ar1
In my dataset I also have a variable "weeks", that I use to specify
waves in
the geeglm. When I use this, the output for an autoregressive gee model
gives me only the estimates, when I don't use it everything's alright.
The
problem's that I have unbalanced observations, so the use of waves could
take this into account while estimating parameters. Is this a conflict
between these options, or what?
<<<<<
The argument waves should work in conjunction with the ar1 working
correlation.
Make sure that the observations are orderd wrt. cluster-id as it is
said in ?geeglm for the 'id' argument
c) if you build your own fixed-working correlation then there are two
issues:
1) you must leave out clusters of size 1 in the construction of the
zcor matrix:
if the other clusters have the same size you can use geeglm with that
zcor matrix
Example:
# using corstr="fixed" the cluster with only 1 observation must be
# left out from the construction of the zcor-vector.
# the following example is for the case where clusters of size larger
then 1
# have no missing observations and are of the same size
library(geepack)
data(seizure)
## Diggle, Liang, and Zeger (1994) pp166-168, compare Table 8.10
seiz.l <- reshape(seizure,
varying=list(c("base","y1",
"y2", "y3", "y4")),
v.names="y", times=0:4, direction="long")
seiz.l <- seiz.l[order(seiz.l$id, seiz.l$time),]
seiz.l$t <- ifelse(seiz.l$time == 0, 8, 2)
seiz.l$x <- ifelse(seiz.l$time == 0, 0, 1)
## defining fixed correlation matrix
cor.fixed <- matrix(c(1, 0.5, 0.25, 0.125, 0.125,
0.5, 1, 0.25, 0.125, 0.125,
0.25, 0.25, 1, 0.5, 0.125,
0.125, 0.125, 0.5, 1, 0.125,
0.125, 0.125, 0.125, 0.125, 1), 5, 5)
zcor <- rep(cor.fixed[lower.tri(cor.fixed)], 59)
g1 <- geeglm(y ~ offset(log(t)) + x + trt + x:trt, id = id,
data = seiz.l, family = poisson,
corstr = "fixed", zcor = zcor)
#reducing clusters 1 ,3 and 58 to only one observation
seiz.reduc<-subset(seiz.l,!( (id==1 | id==3 | id==58) & time>0))
# zcor is only constructed for clusters with size larger than 1
n.larger.one<-sum(table(seiz.reduc$id)>1)
zcor <-c( rep(cor.fixed[lower.tri(cor.fixed)], n.larger.one))
g2<- geeglm(y ~ offset(log(t)) + x + trt + x:trt, id = id,
data = seiz.reduc, family = poisson,
corstr = "fixed", zcor = zcor)
2) if the clusters have different size than you must construct the
zcor-matrix according to the missing structure,
the usage of the wave-argument to specify the missing structure does
not work.
Example:
# using corstr="fixed" the for clusters with unbalanced number of
observations
# the wave argument does not work, the zcor-matrix must be constructed
'by-hand'
library(geepack)
data(seizure)
## Diggle, Liang, and Zeger (1994) pp166-168, compare Table 8.10
seiz.l <- reshape(seizure,
varying=list(c("base","y1",
"y2", "y3", "y4")),
v.names="y", times=0:4, direction="long")
seiz.l <- seiz.l[order(seiz.l$id, seiz.l$time),]
seiz.l$t <- ifelse(seiz.l$time == 0, 8, 2)
seiz.l$x <- ifelse(seiz.l$time == 0, 0, 1)
# transform time such that the initial time is 1
seiz.l$time<-seiz.l$time+1
#taking only a subset of the data such the data are unbalanced wrt
cluster -size
set.seed(88)
seiz<-subset(seiz.l,!( (id==1 | id==3 | id==58) & time>2))
## Construction of a fixed correlation matrix
cor.fixed <- matrix(c(1, 0.7, 0.5, 0.25, 0.12,
0.7, 1, 0.71, 0.125, 0.125,
0.5, 0.71, 1, 0.29, 0.123,
0.25, 0.125, 0.29, 1, 0.119,
0.120, 0.125, 0.123, 0.119, 1), 5, 5)
# The zcor-vector is constructed only for times which exist in the data
# it is assumed that seiz$time is a vector of integer times,
# with inital time 1 and time unit of 1.
zcor<-NULL
id<-unique(seiz$id)
for (i in id) {
tim<-seiz$time[seiz$id==i]
if (length(tim)>1) {
for (k in 1: (length(tim)-1)) {
for (m in (k+1) : length(tim)) {
zcor<-c(zcor,cor.fixed[tim[m],tim[k]])
}
}}}
g<- geeglm(y ~ offset(log(t)) + x + trt + x:trt, id = id,
data = seiz, family = poisson,
corstr = "fixed", zcor = zcor)
Best regards
ulrich
Ulrich Halekoh, PhD
Unit of Statistics and Decision Analysis
Faculty of Agricultural Sciences, University of Aarhus
Denmark
e-mail: ulrich.halekoh@agrsci.dk
[[alternative HTML version deleted]]