In addition to using the survey package (and the svyby function), I've found
that many of the 'weighted' functions, such as wtd.mean, work well with the
plyr package.  For example, 

wtdmean=function(df)wtd.mean(df$obese,df$sampwt);
ddply(mydata, ~cut2(age,c(2,6,12,16)),'wtdmean')

hth, david freedman


Andrew Miles-2 wrote:
> 
> I've noticed that R has a number of very useful functions for  
> obtaining descriptive statistics on groups of variables, including  
> summary {stats}, describe {Hmisc}, and describe {psych}, but none that  
> I have found is able to provided weighted descriptives of subsets of a  
> data set (ex. descriptives for both males and females for age, where  
> accurate results require use of sampling weights).
> 
> Does anybody know of a function that does this?
> 
> What I've looked at already:
> 
> I have looked at describe.by {psych} which will give descriptives by  
> levels of another variable (eg. mean ages of males and females), but  
> does not accept sample weights.
> 
> I have also looked at describe {Hmisc} which allows for weights, but  
> has no functionality for subdivision.
> 
> I tried using a by() function with describe{Hmisc}:
> 
> by(cbind(my, variables, here), division.variable, describe,  
> weights=weight.variable)
> 
> but found that this returns an error message stating that the  
> variables to be described and the weights variable are not the same  
> length:
> 
> Error in describe.vector(xx, nam[i], exclude.missing =  
> exclude.missing,  :
>    length of weights must equal length of x
> In addition: Warning message:
> In present & !is.na(weights) :
>    longer object length is not a multiple of shorter object length
> 
> This comes because the by() function passes down a subset of the  
> variables to be described to describe(), but not a subset of the  
> weights variable.  describe() then searches the whatever data set is  
> attached in order to find the weights variables, but this is in its  
> original (i.e. not subsetted) form.  Here is an example using the  
> ChickWeight dataset that comes in the "datasets" package.
> 
> data(ChickWeight)
> attach(ChickWeight)
> library(Hmisc)
> #this gives descriptive data on the variables "Time" and "Chick" by  
> levels of "Diet")
> by(cbind(Time, Chick), Diet, describe)
> #trying to add weights, however, does not work for reasons described  
> above
> wgt=rnorm(length(Chick), 12, 1)
> by(cbind(Time, Chick), Diet, describe, weights=wgt)
> 
> Again, my question is, does anybody know of a function that combines  
> both the ability to provided weighted descriptives with the ability to  
> subdivide by the levels of some other variable?
> 
> 
> Andrew Miles
> Department of Sociology
> Duke University
> 
> 
> 
> 
>       [[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help@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.
> 
> 

-- 
View this message in context: 
http://old.nabble.com/Weighted-descriptives-by-levels-of-another-variables-tp26354665p26355886.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help@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.

Reply via email to