File: brkdnNest.R

package info (click to toggle)
r-cran-plotrix 3.2-6-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 1,136 kB
  • sloc: makefile: 3
file content (104 lines) | stat: -rwxr-xr-x 2,686 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
valid.n<-function(x,na.rm=TRUE) return(ifelse(na.rm,sum(!is.na(x)),length(x)))

propbrk<-function(x,trueval=TRUE,na.rm=TRUE) {
 return(sum(x==trueval,na.rm=TRUE)/length(x))
}

sumbrk<-function(x,trueval=TRUE,na.rm=TRUE) {
 return(sum(x==trueval,na.rm=TRUE))
}

binciWu<-function(x,n,alpha=0.05,trueval=NA,na.rm=TRUE) {
 if(!is.na(trueval)) {
  n<-length(x)
  x<-sum(x==trueval,na.rm=TRUE)
 }
 z<-pnorm(1-alpha/2)
 zsq<-z*z
 phat<-ifelse(x<1,x,x/n)
 pest<-phat+zsq/(2*n)
 ci<-(pest+z*sqrt((phat*(1-phat))/n+zsq/(4*n*n)))/(1+zsq/n)
 return(ci)
}

binciWl<-function(x,n,alpha=0.05,trueval=NA,na.rm=TRUE) {
 if(!is.na(trueval)) {
  n<-length(x)
  x<-sum(x==trueval,na.rm=TRUE)
 }
 z<-pnorm(1-alpha/2)
 zsq<-z*z
 phat<-ifelse(x<1,x,x/n)
 pest<-phat+zsq/(2*n)
 ci<-(pest-z*sqrt((phat*(1-phat))/n+zsq/(4*n*n)))/(1+zsq/n)
 return(ci)
}

brkdnNest<-function(formula,data,FUN=c("mean","sd"),label1="Overall", 
 trueval = NA) {

 if(missing(data) || missing(formula)) 
  stop("brkdnNest must be called with a formula for breakdown and a data frame.")
 bn<-as.character(attr(terms(formula),"variables")[-1])
 nbn<-length(bn)
 nFUN<-length(FUN)
 brklist<-vector("list",nFUN)
 for(brkfun in 1:nFUN) {
  brklist[[brkfun]]<-vector("list",nbn)
  # get the overall values
  if(is.na(trueval))
   brklist[[brkfun]][[1]]<-
    do.call(FUN[brkfun],list(data[[bn[1]]],na.rm=TRUE))
  else
   brklist[[brkfun]][[1]]<-
    do.call(FUN[brkfun],list(data[[bn[1]]],trueval=trueval,na.rm=TRUE))
  names(brklist[[brkfun]][[1]])<-label1
  for(brk in 2:nbn) {
   if(is.na(trueval)) 
    brklist[[brkfun]][[brk]]<-
     tapply(data[[bn[1]]],data[bn[2:brk]],FUN=match.fun(FUN[brkfun]),
      na.rm=TRUE)
   else
    brklist[[brkfun]][[brk]]<-
     tapply(data[[bn[1]]],data[bn[2:brk]],FUN=match.fun(FUN[brkfun]),
     trueval=trueval)
   names(brklist[[brkfun]][[brk]])<-levels(data[[brkfun[brk]]])
  }
 }
 attr(brklist,"class")<-"brklist"
 names(brklist)<-FUN
 return(brklist)
}

sliceArray<-function(x,slice) {
 dimx<-dim(x)
 if(is.null(dimx)) return(x[slice])
 else {
  ndim<-length(dimx)
  slicestring<-
   paste("x[",slice,paste(rep(",",ndim-1),collapse=""),"]",sep="",collapse="")
  newx<-eval(parse(text=slicestring))
  return(newx)
 }
}

print.brklist<-function(x,...) {

 crawlBreakList<-function(x,depth=1) {
  if(length(x)>1) {
   if(depth==1) cat(names(x[[1]]),unlist(x[[1]]),"\n")
   x[[1]]<-NULL
   for(nextbit in 1:length(x[[1]])) {
    newx<-lapply(x,sliceArray,nextbit)
    cat(rep("\t",depth),names(x[[1]][nextbit]),unlist(x[[1]][nextbit]),"\n")
    crawlBreakList(newx,depth=depth+1)
   }
  }
 }

 xnames<-names(x)
 for(func in 1:length(x)) {
  cat(xnames[func],"\n")
  crawlBreakList(x[[func]])
 }
}