This does not answer your question but here is a shorter
version of your code:
xx <- xtabs(Count ~ Outcome + Product, x)
yy <- sum(xx) * xx / outer(rowSums(xx), colSums(xx))
subset(as.data.frame(yy), Freq != 0)
On Nov 5, 2007 3:18 AM, francogrex <francogrex at mail.com>
wrote:>
> Hi, my question is technical but maybe a little complicated to express it
> well. I have written this small code to calculate a relative risk (RR) of a
> Product-Outcome pairs that I am given:
> example dataset called test.txt in tab-delimited format:
> -------------------------------------------------
> Product Outcome Count
> P.A O.A 1
> P.A O.D 16
> P.B O.A 7
> P.B O.C 23
> P.C O.B 6
> P.C O.B 25
> P.D O.A 3
> P.D O.O 1
> P.E O.O 31
> P.F O.D 2
> P.G O.C 1
> P.G O.D 1
>
> ## The code:
> x=read.table(file="test.txt",header=TRUE)
>
yy=reshape(x,direction="wide",idvar="Product",timevar="Outcome")
> dat <- sapply(yy, function(x) {x[is.na(x)] <- 0; x})
> dat=subset(dat,select=-Product)
> ni=apply(dat,1,sum)
> nj=as.vector(apply(dat,2,sum))
> nij=as.vector(x$Count)
> ntot=sum(nij)
> pi=ni/ntot
> pj=nj/ntot
> pij=nij/ntot
> mat=cbind(Product=as.vector(x$Product),Outcome=as.vector(x$Outcome))
> mat=as.data.frame(mat);mat$pij=pij
>
zaz=reshape(mat,direction="wide",idvar="Outcome",timevar="Product")
> smat<- as.data.frame(sapply(zaz, function(x)
> {x[is.na(x)] <- 0; x}) );
> smat=subset(smat,select=-Outcome)
> smat$pj=pj; smat[length(nj)+1,1:length(ni)]=pi;
> result <- matrix(NA,nrow=length(nj),ncol=length(ni))
> for(i in 1:length(ni)){
> for(j in 1:length(nj)){
> result[j,i]=smat[j,i]/(smat[length(nj)+1,i]*smat[j,length(ni)+1])}
> }
> colnames(result)<-as.vector(unique(x$Product))
> rownames(result)<-as.vector(unique(x$Outcome))
> result1=ftable(result)
> result1=as.data.frame(result1);result1=subset(result1,Freq>0)
> names(result1)=c("Outcome","Product", "RR")
> result1
>
> ##OUTPUT:
> Outcome Product RR
> 1 O.A P.A 0.6256684
> 2 O.D P.A 5.7956656
> 6 O.A P.B 2.4818182
> 8 O.C P.B 3.7375000
> 14 O.B P.C 19.5000000
> 16 O.A P.D 7.9772727
> 20 O.O P.D 0.9140625
> 25 O.O P.E 3.6562500
> 27 O.D P.F 6.1578947
> 32 O.D P.G 3.0789474
> 33 O.C P.G 2.4375000
> -------------------------------------------
>
> My question now is: Suppose I have only some values of Count and RR:
> [example like 2 vectors generated randomly:Count=c(1, 16, 7, 23, 6, 25, 3,
> 1, 31, 2, 1, 1) and RR=c(0.625668449197861, 5.79566563467492,
> 2.48181818181818, 3.7375, 19.5, 7.97727272727273, 0.9140625, 3.65625,
> 6.1578947368421, 3.07894736842105, 2.4375)]
> Is there a way to reconstitute the count table as the one called test.txt
in
> the beginning. I mean to reconstitute Product-Outcome-Count table from just
> the two vectors of Count and RR?
> Thanks.
> --
> View this message in context:
http://www.nabble.com/How-to-reconstitute-a-Product-Outcome-table--tf4750151.html#a13582738
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at 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.
>