Hello,
Although my R code for the svymean () and svyquantile () functions works fine, I
am stuck with the svyby () and make.formula () functions. I got the following
error messages.
- Error: object of type 'closure' is not subsettable # svyby ()
- Error in xx[[1]] : subscript out of bounds # make.formula ()
A reproducible example is appended below.
I would appreciate if someone could help me.
Thank you in advance.
Pradip Muhuri
####Below is a reproducible example ##########################################
setwd ("E:/RDATA")
library (survey)
xd1 <-
"dthage ypll_ler ypll_75 xspd2 psu stratum wt8 mortstat
NA NA NA 2 1 1 1683.7387 0
NA NA NA 2 1 1 640.8950 0
NA NA NA 2 1 1 714.0662 0
NA NA NA 2 1 1 714.0662 0
NA NA NA 2 1 1 530.5263 0
NA NA NA 2 1 1 2205.2863 0
NA NA NA 2 1 339 1683.7387 0
NA NA NA 2 1 339 640.8950 0
NA NA NA 2 1 339 714.0662 0
NA NA NA 2 1 339 714.0662 0
NA NA NA 2 1 339 530.5263 0
NA NA NA 2 1 339 2205.2863 0
78 8.817926 0 2 2 1 592.3100 1
80 9.291881 0 2 2 1 1014.7387 1
87 5.001076 0 2 2 1 853.4763 1
87 5.001076 0 2 2 1 505.1475 1
88 5.510514 0 2 2 1 1429.5963 1
78 8.817926 0 2 2 339 592.3100 1
80 9.291881 0 2 2 339 1014.7387 1
87 5.001076 0 2 2 339 853.4763 1
87 5.001076 0 2 2 339 505.1475 1
88 5.510514 0 2 2 339 1429.5963 1
78 8.817926 0 2 2 339 592.3100 1
80 9.291881 0 2 2 339 1014.7387 1
87 5.001076 0 2 2 339 853.4763 1
87 5.001076 0 2 2 339 505.1475 1
88 5.510514 0 2 2 339 1429.5963 1"
newdata <- read.table (textConnection(xd1), header=TRUE, as.is=TRUE)
dim (newdata)
# make the grouping variable (xspd)2
newdata$xspd2 <- factor(newdata$xspd2,levels=c (1,2),labels=c('SPD',
'No SPD'), ordered=TRUE)
nhis <- svydesign (id=~psu,strat=~stratum, weights=~wt8, data=newdata,
nest=TRUE)
# mean age at death - nationwide
svymean( ~dthage, data=nhis , subset (nhis, mortstat==1))
# mean by SPD status
svyby(~dthage, ~xspd2 , design=nhis, svymean )
#percentile
svyquantile(~dthage, data = nhis , subset (nhis, mortstat==1), c( 0 , .25 , .5
, .75 , 1 ) )
# percentile by SPD status
svyby(~dthage, ~xspd2, desin=nhis, svyquantile, c( 0 , .25 , .5 , .75 , 1 ),
keep.var = F)
# mean for each of the 3 variables
vars <- names(nhis) %in% c("dthage", "ypll_ler",
"ypl_75")
vars
svymean(make.formula(vars),nhis,subset (nhis, mortstat==1), na.rm=TRUE)
#############################################
Pradip K. Muhuri
Statistician
Substance Abuse & Mental Health Services Administration
The Center for Behavioral Health Statistics and Quality
Division of Population Surveys
1 Choke Cherry Road, Room 2-1071
Rockville, MD 20857
Tel: 240-276-1070
Fax: 240-276-1260
e-mail: Pradip.Muhuri at samhsa.hhs.gov<mailto:Pradip.Muhuri at
samhsa.hhs.gov>
The Center for Behavioral Health Statistics and Quality your feedback. Please
click on the following link to complete a brief customer survey:
http://cbhsqsurvey.samhsa.gov
please double-check that you've got all of your parameters correct by
typing ?svymean ?svyby and ?make.formula before you send questions to
r-help :)
# you spelled design wrong and probably need to throw out your NA values.
try this
# percentile by SPD status
svyby(~dthage, ~xspd2, design=nhis, svyquantile, c( 0 , .25 , .5 , .75 , 1
), keep.var = F, na.rm = TRUE)
# mean for each of the 3 variables
# this returns a logical vector, but make.formula requires a character
vector
vars <- names(nhis) %in% c("dthage", "ypll_ler",
"ypl_75")
vars
svymean(make.formula(vars),nhis,subset (nhis, mortstat==1), na.rm=TRUE)
# create a character vector instead
# note you also spelled the third variable wrong-- it will break unless you
correct that
vars <- c("dthage", "ypll_ler", "ypll_75")
# this statement has two survey design parameters, which won't work. which
one do you want to use?
svymean(make.formula(vars),nhis,subset (nhis, mortstat==1), na.rm=TRUE)
# pick one
svymean(make.formula(vars),nhis, na.rm=TRUE)
svymean(make.formula(vars),subset(nhis, mortstat==1), na.rm=TRUE)
# all of the variables in vars are NA whenever mortstat isn't 1, so they
give the same results
On Tue, Oct 2, 2012 at 7:51 PM, Muhuri, Pradip (SAMHSA/CBHSQ) <
Pradip.Muhuri@samhsa.hhs.gov> wrote:
>
> Hello,
>
> Although my R code for the svymean () and svyquantile () functions works
> fine, I am stuck with the svyby () and make.formula () functions. I got
> the following error messages.
>
> - Error: object of type 'closure' is not subsettable # svyby ()
> - Error in xx[[1]] : subscript out of bounds # make.formula ()
>
> A reproducible example is appended below.
>
> I would appreciate if someone could help me.
>
> Thank you in advance.
>
> Pradip Muhuri
>
>
> ####Below is a reproducible example
> ##########################################
>
> setwd ("E:/RDATA")
>
> library (survey)
>
> xd1 <-
> "dthage ypll_ler ypll_75 xspd2 psu stratum wt8 mortstat
> NA NA NA 2 1 1 1683.7387 0
> NA NA NA 2 1 1 640.8950 0
> NA NA NA 2 1 1 714.0662 0
> NA NA NA 2 1 1 714.0662 0
> NA NA NA 2 1 1 530.5263 0
> NA NA NA 2 1 1 2205.2863 0
> NA NA NA 2 1 339 1683.7387 0
> NA NA NA 2 1 339 640.8950 0
> NA NA NA 2 1 339 714.0662 0
> NA NA NA 2 1 339 714.0662 0
> NA NA NA 2 1 339 530.5263 0
> NA NA NA 2 1 339 2205.2863 0
> 78 8.817926 0 2 2 1 592.3100 1
> 80 9.291881 0 2 2 1 1014.7387 1
> 87 5.001076 0 2 2 1 853.4763 1
> 87 5.001076 0 2 2 1 505.1475 1
> 88 5.510514 0 2 2 1 1429.5963 1
> 78 8.817926 0 2 2 339 592.3100 1
> 80 9.291881 0 2 2 339 1014.7387 1
> 87 5.001076 0 2 2 339 853.4763 1
> 87 5.001076 0 2 2 339 505.1475 1
> 88 5.510514 0 2 2 339 1429.5963 1
> 78 8.817926 0 2 2 339 592.3100 1
> 80 9.291881 0 2 2 339 1014.7387 1
> 87 5.001076 0 2 2 339 853.4763 1
> 87 5.001076 0 2 2 339 505.1475 1
> 88 5.510514 0 2 2 339 1429.5963 1"
> newdata <- read.table (textConnection(xd1), header=TRUE, as.is=TRUE)
> dim (newdata)
>
>
> # make the grouping variable (xspd)2
> newdata$xspd2 <- factor(newdata$xspd2,levels=c
(1,2),labels=c('SPD', 'No
> SPD'), ordered=TRUE)
>
> nhis <- svydesign (id=~psu,strat=~stratum, weights=~wt8, data=newdata,
> nest=TRUE)
>
>
> # mean age at death - nationwide
>
> svymean( ~dthage, data=nhis , subset (nhis, mortstat==1))
>
> # mean by SPD status
> svyby(~dthage, ~xspd2 , design=nhis, svymean )
>
> #percentile
> svyquantile(~dthage, data = nhis , subset (nhis, mortstat==1), c( 0 ,
> .25 , .5 , .75 , 1 ) )
>
> # percentile by SPD status
> svyby(~dthage, ~xspd2, desin=nhis, svyquantile, c( 0 , .25 , .5 , .75 , 1
> ), keep.var = F)
>
> # mean for each of the 3 variables
>
> vars <- names(nhis) %in% c("dthage", "ypll_ler",
"ypl_75")
> vars
> svymean(make.formula(vars),nhis,subset (nhis, mortstat==1), na.rm=TRUE)
>
>
>
>
>
>
>
>
> #############################################
>
> Pradip K. Muhuri
> Statistician
> Substance Abuse & Mental Health Services Administration
> The Center for Behavioral Health Statistics and Quality
> Division of Population Surveys
> 1 Choke Cherry Road, Room 2-1071
> Rockville, MD 20857
>
> Tel: 240-276-1070
> Fax: 240-276-1260
> e-mail:
Pradip.Muhuri@samhsa.hhs.gov<mailto:Pradip.Muhuri@samhsa.hhs.gov>
>
> The Center for Behavioral Health Statistics and Quality your feedback.
> Please click on the following link to complete a brief customer survey:
> http://cbhsqsurvey.samhsa.gov
>
>
>
[[alternative HTML version deleted]]
Dear Anthony,
Thank you very much for helping me resolve the issues. I now got all the
results, which I intended to generate.
Pradip Muhuri
________________________________________
From: Anthony Damico [ajdamico at gmail.com]
Sent: Tuesday, October 02, 2012 9:50 PM
To: Muhuri, Pradip (SAMHSA/CBHSQ)
Cc: R help
Subject: Re: svyby and make.formula
please double-check that you've got all of your parameters correct by typing
?svymean ?svyby and ?make.formula before you send questions to r-help :)
# you spelled design wrong and probably need to throw out your NA values. try
this
# percentile by SPD status
svyby(~dthage, ~xspd2, design=nhis, svyquantile, c( 0 , .25 , .5 , .75 , 1 ),
keep.var = F, na.rm = TRUE)
# mean for each of the 3 variables
# this returns a logical vector, but make.formula requires a character vector
vars <- names(nhis) %in% c("dthage", "ypll_ler",
"ypl_75")
vars
svymean(make.formula(vars),nhis,subset (nhis, mortstat==1), na.rm=TRUE)
# create a character vector instead
# note you also spelled the third variable wrong-- it will break unless you
correct that
vars <- c("dthage", "ypll_ler", "ypll_75")
# this statement has two survey design parameters, which won't work. which
one do you want to use?
svymean(make.formula(vars),nhis,subset (nhis, mortstat==1), na.rm=TRUE)
# pick one
svymean(make.formula(vars),nhis, na.rm=TRUE)
svymean(make.formula(vars),subset(nhis, mortstat==1), na.rm=TRUE)
# all of the variables in vars are NA whenever mortstat isn't 1, so they
give the same results
On Tue, Oct 2, 2012 at 7:51 PM, Muhuri, Pradip (SAMHSA/CBHSQ) <Pradip.Muhuri
at samhsa.hhs.gov<mailto:Pradip.Muhuri at samhsa.hhs.gov>> wrote:
Hello,
Although my R code for the svymean () and svyquantile () functions works fine, I
am stuck with the svyby () and make.formula () functions. I got the following
error messages.
- Error: object of type 'closure' is not subsettable # svyby ()
- Error in xx[[1]] : subscript out of bounds # make.formula ()
A reproducible example is appended below.
I would appreciate if someone could help me.
Thank you in advance.
Pradip Muhuri
####Below is a reproducible example ##########################################
setwd ("E:/RDATA")
library (survey)
xd1 <-
"dthage ypll_ler ypll_75 xspd2 psu stratum wt8 mortstat
NA NA NA 2 1 1 1683.7387 0
NA NA NA 2 1 1 640.8950 0
NA NA NA 2 1 1 714.0662 0
NA NA NA 2 1 1 714.0662 0
NA NA NA 2 1 1 530.5263 0
NA NA NA 2 1 1 2205.2863 0
NA NA NA 2 1 339 1683.7387 0
NA NA NA 2 1 339
640.8950<tel:339%20%C2%A0640.8950> 0
NA NA NA 2 1 339
714.0662<tel:339%20%C2%A0714.0662> 0
NA NA NA 2 1 339
714.0662<tel:339%20%C2%A0714.0662> 0
NA NA NA 2 1 339
530.5263<tel:339%20%C2%A0530.5263> 0
NA NA NA 2 1 339 2205.2863 0
78 8.817926 0 2 2 1 592.3100 1
80 9.291881 0 2 2 1 1014.7387 1
87 5.001076 0 2 2 1 853.4763 1
87 5.001076 0 2 2 1 505.1475 1
88 5.510514 0 2 2 1 1429.5963 1
78 8.817926 0 2 2 339
592.3100<tel:339%20%C2%A0592.3100> 1
80 9.291881 0 2 2 339 1014.7387 1
87 5.001076 0 2 2 339
853.4763<tel:339%20%C2%A0853.4763> 1
87 5.001076 0 2 2 339
505.1475<tel:339%20%C2%A0505.1475> 1
88 5.510514 0 2 2 339 1429.5963 1
78 8.817926 0 2 2 339
592.3100<tel:339%20%C2%A0592.3100> 1
80 9.291881 0 2 2 339 1014.7387 1
87 5.001076 0 2 2 339
853.4763<tel:339%20%C2%A0853.4763> 1
87 5.001076 0 2 2 339
505.1475<tel:339%20%C2%A0505.1475> 1
88 5.510514 0 2 2 339 1429.5963 1"
newdata <- read.table (textConnection(xd1), header=TRUE,
as.is<http://as.is>=TRUE)
dim (newdata)
# make the grouping variable (xspd)2
newdata$xspd2 <- factor(newdata$xspd2,levels=c (1,2),labels=c('SPD',
'No SPD'), ordered=TRUE)
nhis <- svydesign (id=~psu,strat=~stratum, weights=~wt8, data=newdata,
nest=TRUE)
# mean age at death - nationwide
svymean( ~dthage, data=nhis , subset (nhis, mortstat==1))
# mean by SPD status
svyby(~dthage, ~xspd2 , design=nhis, svymean )
#percentile
svyquantile(~dthage, data = nhis , subset (nhis, mortstat==1), c( 0 , .25 , .5
, .75 , 1 ) )
# percentile by SPD status
svyby(~dthage, ~xspd2, desin=nhis, svyquantile, c( 0 , .25 , .5 , .75 , 1 ),
keep.var = F)
# mean for each of the 3 variables
vars <- names(nhis) %in% c("dthage", "ypll_ler",
"ypl_75")
vars
svymean(make.formula(vars),nhis,subset (nhis, mortstat==1), na.rm=TRUE)
#############################################
Pradip K. Muhuri
Statistician
Substance Abuse & Mental Health Services Administration
The Center for Behavioral Health Statistics and Quality
Division of Population Surveys
1 Choke Cherry Road, Room 2-1071
Rockville, MD 20857
Tel: 240-276-1070<tel:240-276-1070>
Fax: 240-276-1260<tel:240-276-1260>
e-mail: Pradip.Muhuri at samhsa.hhs.gov<mailto:Pradip.Muhuri at
samhsa.hhs.gov><mailto:Pradip.Muhuri at
samhsa.hhs.gov<mailto:Pradip.Muhuri at samhsa.hhs.gov>>
The Center for Behavioral Health Statistics and Quality your feedback. Please
click on the following link to complete a brief customer survey:
http://cbhsqsurvey.samhsa.gov