[R] help - hoslem.test

Luciane Maria Pilotto lutipilotto at yahoo.com.br
Tue May 5 14:13:49 CEST 2015


Hi

Thanks for the help!
I used the following commands to run the test hoslem:

rl<-id3[,c("q06", "q08", "q10", "q11", "q12", "q13", "q14", "sexo", "edcat", "rendacat", "cpod", 
          "getario", "bwgr_et")]#select only variables of interest
dim(rl)#[1] 22843    12
attach(rl)

q131 <- as.numeric(cut(rl$q13,c(0,1.5,5)))-1
rl<-cbind(rl,q131)

rlna<-rl[complete.cases(rl),]#exclude NA

tpna <- glm(q131 ~ q11 + q10+rendacat+q12 + q08+q06 + q14, 
            family = binomial(link = "logit"), data=rlna)
hoslem.test(rlna$q131, fitted(tpna), g=10)

Thanks
Luciane

--------------------------------------------
Em seg, 4/5/15, PIKAL Petr <petr.pikal em precheza.cz> escreveu:

 Assunto: RE: [R] help - hoslem.test

t.org" <r-help em r-project.org>
 Data: Segunda-feira, 4 de Maio de 2015, 10:24

 Hi

 thanks for data.

 na.exclude does not excludes NA values. Actually it computes
 result without considering NAs but keeps those NA values in
 propper positions so that the result has the same length as
 input

 Instead of several ifelse you can use

 q131 <- as.numeric(cut(id3$q13,c(0,1.5,5)))-1

 fitted values start with NA values

 > fitted(tp1)
         1241     
    1242     
    1243     
    1244     
    1245     
    1246
           NA     
      NA 2.143345e-11 2.143345e-11
 2.143345e-11 2.143345e-11
         1247     
    1248     
    1256     
    1268
 2.143345e-11 2.143345e-11 2.143345e-11 2.143345e-11

 which obviously hoslem.test is not adapted to.

 >
 > #Error in quantile.default(yhat, probs = seq(0, 1,
 1/g)) :
 >  # missing values and NaN's not allowed if 'na.rm'
 is FALSE

 you can use glm without na.action and your fitted values
 will be without NA.

 > tp1 <- glm(q131 ~ q11 + q10+q12+edcat + q08+q06+
 q14, family = binomial(link = "logit"), data=id3)
 > fitted(tp1)
         1243     
    1244     
    1245     
    1246     
    1247     
    1248
 2.143345e-11 2.143345e-11 2.143345e-11 2.143345e-11
 2.143345e-11 2.143345e-11
         1256     
    1268
 2.143345e-11 2.143345e-11

 however
 tp1$q131 does not exist

 > tp1$q131
 NULL
 So again, test throws error.

 Maybe you wanted

 > hoslem.test(na.omit(id3$q131), fitted(tp1), g=10)

         Hosmer and Lemeshow goodness of
 fit (GOF) test

 data:  na.omit(id3$q131), fitted(tp1)
 X-squared = NaN, df = 8, p-value = NA

 Warning message:
 In Ops.factor(1, y) : ‘-’ not meaningful for factors

 However q131 is factor (actually you changed it to factor)

 If I change it to numeric

 > id3$q131<-q131
 > tp1 <- glm(q131 ~ q11 + q10+q12+edcat + q08+q06+
 q14, family = binomial(link = "logit"), data=id3)
 > hoslem.test(na.omit(id3$q131), fitted(tp1), g=10)

         Hosmer and Lemeshow goodness of
 fit (GOF) test

 data:  na.omit(id3$q131), fitted(tp1)
 X-squared = NaN, df = 8, p-value = NA

 hoslem test works - at least it does not throw errors.

 So best way for you would be to understand basic differences
 in object types (numeric, factor, ....) by reading R intro
 and think about what hoslem test needs as an input.

 Cheers
 Petr

 > -----Original Message-----

 > Sent: Monday, May 04, 2015 2:46 PM
 > To: r-help em r-project.org;
 PIKAL Petr
 > Subject: RE: [R] help - hoslem.test
 >
 > Hi
 >
 > I'm trying to make a reproducible example using the
 command "dput" as
 > fallows.
 >
 > The problem occurs when running the test of Hosmer and
 Lemeshow
 > (hoslem.test) for residuals gives error. I'm using the
 command
 > "na.action" to exclude the NA values.
 >
 > Thanks,
 > Luciane
 >
 > ###############################################
 >
 > load(file.choose())#dataframe:"id3.rda"
 > attach(id3)
 >

 <snip>

 >
 > #create binary outcome variable (q13) (transformando
 q13 em binária)
 >
 q131<-ifelse(q13==1,0,ifelse(q13==2,1,ifelse(q13==3,1,
 > ifelse(q13==4,1,ifelse(q13==5,1,NA)))))

 Instead of several ifelse you can use

 q131 <- as.numeric(cut(id3$q13,c(0,1.5,5)))-1

 > id3<-cbind(id3,q131)
 > id3$q131 <- as.factor(id3$q131)
 >
 > str(id3)
 >
 > tp1 <- glm(q131 ~ q11 + q10+q12+edcat + q08+q06+
 q14, family =
 > binomial(link = "logit"), data=id3,
 na.action="na.exclude")
 > tp1
 >
 > library(ResourceSelection)
 > hoslem.test(tp1$q131, fitted(tp1), g=10)
 >
 >
 >
 >
 > --------------------------------------------
 > Em sex, 1/5/15, PIKAL Petr <petr.pikal em precheza.cz>
 escreveu:
 >
 >  Assunto: RE: [R] help - hoslem.test

 "r-help em r-
 > project.org" <r-help em r-project.org>
 >  Data: Sexta-feira, 1 de Maio de 2015, 3:59
 >
 >  Hi
 >
 >  > -----Original Message-----

 >  > Sent: Friday, May 01, 2015 12:49 AM
 >  > To: PIKAL Petr; r-help em r-project.org;
 >  John Kane
 >  > Subject: Re: [R] help -
 >  hoslem.test
 >  >
 >  > Ok, in
 >  dropbox link below you can download the bank.
 >  > (https://www.dropbox.com/s/9qrdf4mhd6tzypi/id3.rda?dl=0)
 >
 >  No. Not everybody is alowed to
 >  use dropbox. Try to post result of
 >
 >  dput(id3)
 >
 >  directly to your post.
 >
 >  Cheers
 >  Petr
 >
 >  >
 >  > I change the script
 >  following the suggestions, but the error
 persists.
 >  > I used the the na.action command to delete
 >  the lost values.
 >  >
 >  >
 >
 >
 #######################################################################
 >  >
 >  >
 >  load("id3.rda")
 >  >
 >  attach(id3)
 >  >
 >  >
 >  #transformando q13 em binária (o/1)
 >  >
 > 
 q131<-ifelse(q13==1,0,ifelse(q13==2,1,ifelse(q13==3,1,
 >  > ifelse(q13==4,1,ifelse(q13==5,1,NA)))))
 >  > id3<-cbind(id3,q131)
 >  > id3$q131 <- as.factor(id3$q131)
 >  > str(id3)
 >  >
 >  > tp1 <- glm(q131 ~ q11 + q10+q12+edcat +
 >  q08+q06+ q14, family =
 >  > binomial(link =
 >  "logit"), data=id3,
 >  na.action="na.exclude")
 >  >
 >  tp1
 >  > hoslem.test(tp1$q131, fitted(tp1),
 >  g=10)
 >  >
 >  >
 >  >
 >  >
 >  --------------------------------------------
 >  > Em qui, 30/4/15, John Kane <jrkrideau em inbox.com>
 >  escreveu:
 >  >
 >  >
 >  Assunto: Re: [R] help - hoslem.test
 >  >
 >  Para: "PIKAL Petr" <petr.pikal em precheza.cz>,
 >  "Luciane Maria Pilotto"
 >  >

 >  "r-help em r-project.org"
 >  <r-help em r-
 >  > project.org>
 >  >
 >  Data: Quinta-feira, 30 de Abril de 2015, 11:51
 >  >
 >  >  Kevin Thorpe
 >  pointed out
 >  >  to me that there is a
 >  dropbox link at the very bottom of the
 >  >  post that I missed. :(
 >  >
 >  >  I
 >  >  just downloaded it, read it in and it
 >  looks fine.
 >  >
 >  >  John
 >  Kane
 >  >  Kingston ON Canada
 >  >
 >  >
 >  >  > -----Original
 >  >  Message-----
 >  >  >
 >  From: petr.pikal em precheza.cz
 >  >  > Sent: Thu, 30 Apr 2015 14:25:23
 >  +0000

 >  >  r-help em r-project.org
 >  >  > Subject: Re: [R] help -
 >  hoslem.test
 >  >  >
 >  >  > Hi
 >  >  >
 >  >  > I agree with John
 >  >  >
 >  >  > Just
 >  small
 >  >  refinements in lines
 >  >  >
 >  >  >>
 >  -----Original Message-----
 >  >
 >  >>> -----Original Message-----

 >  >  >>> Sent: Thu, 30 Apr 2015
 >  04:24:32
 >  >  -0700
 >  >
 >  >>> To: r-help em r-project.org,
 >  >  jrkrideau em inbox.com
 >  >  >>> Subject: RE: [R] help -
 >  >  hoslem.test
 >  >
 >  >>>
 >  >  >>>
 >  load("id3.rda")
 >  >  >>
 >  And what is this?
 >  >  >>
 >  >  >> We do not
 >  >  have access to your office or
 computer
 >  hard disc.
 >  >  >>
 >  >  >> Please read
 >  >  http://stackoverflow.com/questions/5963269/how-to-make-a-
 >  >  >>
 great-r-reproducible-example,
 >  see
 >  >  ?dput for sending data?
 >  >  >>
 >  >  >>
 >  It is very unlikely anyone here can
 >  >
 >  help if we have no data.
 >  >  >>
 >  >  >>
 >  >
 >  >>>
 >  >  attach(id3)
 >  >  >
 >  >  > Do
 >  >  not use attach. It prevents from
 >  modifiyng id3.
 >  >  >
 >  >  >>>
 >  >
 >  >>> #transformando q13 em binária
 >  >  >>>
 >  >
 > 
 q131<-ifelse(q13==1,1,ifelse(q13==2,2,ifelse(q13==3,2,
 >  >  >>>
 >  >
 >  ifelse(q13==4,2,ifelse(q13==5,2,NA)))))
 >  >  >
 >  >
 >  >  > q131 <- as.numeric(cut(q13,
 >  >  c(0,1.5,5)))
 >  >
 >  >
 >  >  >>
 >  >
 >  x<-1:7
 >  >  >> x
 >  >  >
 >  >  [1] 1 2 3 4
 >  5 6 7
 >  >  >> as.numeric(cut(x,
 >  >  c(0,1.5,5)))
 >  >  >
 >  [1]  1  2  2  2  2 NA
 >  >  NA
 >  >  >
 >  >
 >  >>>
 >  >
 >  id3<-cbind(id3,q131)
 >  >  >
 >  >  > rather dangerous in case id3 is
 >  not
 >  >  data.frame but matrix
 >  >  >
 >  >  >>>
 >  id3$q131 <-
 >  >  as.factor(id3$q131)
 >  >  >>>
 >  >
 >  >>> tp1 <- glm(q131 ~ q11 +
 >  >  q10+q12+edcat + q08+q06+ q14, family
 >  =
 >  >  >>> binomial(link =
 >  >  "logit"), data=id3)
 >  >  >>>
 >  >
 >  tp1
 >  >  >>>
 >  >  >>>
 >  library(ResourceSelection)
 >  >
 >  >>> hoslem.test(tp1$q131, fitted(tp1),
 >  >  g=10)
 >  >  >
 >  >  > hoslem.test
 >  >
 >  expects x to be a numeric vector of observations,
 binary
 >  >  > (0/1).
 >  >  >
 >  If I
 >  >  understand correctly tp1$q131
 >  have values 1, 2 or NA.
 >  >  >
 >  >  > Cheers
 >  >  >
 >  Petr
 >  >  >
 >  >
 >  >>>
 >  >  >>>
 >  >  dataframe: https://www.dropbox.com/s/9qrdf4mhd6tzypi/id3.rda?dl=0
 >  >  >>>
 >  >
 >  >>>
 >  >  >>>
 >  >
 > 
 __________________________________________________
 >  >  >>> Luciane Maria Pilotto
 >  >  >>> Mestre e Doutoranda em
 >  Saúde
 >  >  Bucal Coletiva - FO/UFRGS
 >  >  >>> NDE
 >  >
 >  Odontologia - UNIVATES
 >  >
 >  >>>
 >  >  Telefone: (51)
 >  84512344
 >  >  >>>
 >  >  >>>
 >  >
 >  --------------------------------------------
 >  >  >>> Em qui, 30/4/15, John
 Kane
 >  <jrkrideau em inbox.com>
 >  >  escreveu:
 >  >
 >  >>>
 >  >  >>>  Assunto:
 >  RE: [R] help -
 >  >  hoslem.test
 >  >  >>>  Para:

 >  >  >>> r-help em r-project.org
 >  >  >>>  Data: Quinta-feira,
 30 de
 >  Abril
 >  >  de 2015, 7:52
 >  >  >>>
 >  >
 >  >>>  http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-
 >  >  >> reproducible-example
 >  >  >>>
 >  >
 >  >>>
 >  >  John Kane
 >  >  >>>  Kingston ON
 >  >  Canada
 >  >
 >  >>>
 >  >  >>>
 >  >  >>>
 >  >  >
 >  -----Original Message-----
 >  >

 >  >  >>>  > Sent: Wed, 29
 Apr
 >  2015
 >  >  18:45:26 -0700
 >  >  >>>  > To: r-help em r-project.org
 >  >  >>>  > Subject: [R]
 help
 >  -
 >  >  hoslem.test
 >  >
 >  >>>  >
 >  >  >>>
 >  > Hello,
 >  >  >>>  >
 >  >  >>>  > I'm working
 >  with
 >  >  >>>  ordinal logistic
 >  regression
 >  >  model (polr) and would
 >  like
 >  >  >>>
 >  >  > to test the proportional odds
 >  assumption.
 >  >  >>>  For this,
 >  I ran the binary
 >  >  >>>  >
 >  logistic
 >  >  >>>  regressions
 >  with varying
 >  >  cutpoints on the
 >  dependent
 >  >  >>>
 >  >  variable, as
 >  >
 >  >>>  > described
 >  >  in the
 >  following
 >  >  >>>  commands.
 >  >  When running the test of Hosmer and
 >  >  >>>  > Lemeshow
 >  (hoslem.test) for
 >  >  residuals gives
 >  >  >>>  error.
 >  >  >>>  >
 >  >  >>>  > Thanks,
 >  >  >>>  > Luciane
 >  >  >>>  >
 >  >  >>>  >
 >  >  >>>
 >  >
 >  ______________________________________________
 >  >  >>>  > R-help em r-project.org
 >  >  >>>  mailing list -- To
 >  UNSUBSCRIBE
 >  >  and more, see
 >  >  >>>  > 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.
 >  >  >>>
 >  >
 >

 ________________________________
 Tento e-mail a jakékoliv k němu připojené dokumenty jsou
 důvěrné a jsou určeny pouze jeho adresátům.
 Jestliže jste obdržel(a) tento e-mail omylem, informujte
 laskavě neprodleně jeho odesílatele. Obsah tohoto emailu
 i s přílohami a jeho kopie vymažte ze svého systému.
 Nejste-li zamýšleným adresátem tohoto emailu, nejste
 oprávněni tento email jakkoliv užívat, rozšiřovat,
 kopírovat či zveřejňovat.
 Odesílatel e-mailu neodpovídá za eventuální škodu
 způsobenou modifikacemi či zpožděním přenosu e-mailu.

 V případě, že je tento e-mail součástí obchodního
 jednání:
 - vyhrazuje si odesílatel právo ukončit kdykoliv
 jednání o uzavření smlouvy, a to z jakéhokoliv důvodu
 i bez uvedení důvodu.
 - a obsahuje-li nabídku, je adresát oprávněn nabídku
 bezodkladně přijmout; Odesílatel tohoto e-mailu
 (nabídky) vylučuje přijetí nabídky ze strany příjemce
 s dodatkem či odchylkou.
 - trvá odesílatel na tom, že příslušná smlouva je
 uzavřena teprve výslovným dosažením shody na všech
 jejích náležitostech.
 - odesílatel tohoto emailu informuje, že není oprávněn
 uzavírat za společnost žádné smlouvy s výjimkou
 případů, kdy k tomu byl písemně zmocněn nebo písemně
 pověřen a takové pověření nebo plná moc byly
 adresátovi tohoto emailu případně osobě, kterou
 adresát zastupuje, předloženy nebo jejich existence je
 adresátovi či osobě jím zastoupené známá.

 This e-mail and any documents attached to it may be
 confidential and are intended only for its intended
 recipients.
 If you received this e-mail by mistake, please immediately
 inform its sender. Delete the contents of this e-mail with
 all attachments and its copies from your system.
 If you are not the intended recipient of this e-mail, you
 are not authorized to use, disseminate, copy or disclose
 this e-mail in any manner.
 The sender of this e-mail shall not be liable for any
 possible damage caused by modifications of the e-mail or by
 delay with transfer of the email.

 In case that this e-mail forms part of business dealings:
 - the sender reserves the right to end negotiations about
 entering into a contract in any time, for any reason, and
 without stating any reasoning.
 - if the e-mail contains an offer, the recipient is entitled
 to immediately accept such offer; The sender of this e-mail
 (offer) excludes any acceptance of the offer on the part of
 the recipient containing any amendment or variation.
 - the sender insists on that the respective contract is
 concluded only upon an express mutual agreement on all its
 aspects.
 - the sender of this e-mail informs that he/she is not
 authorized to enter into any contracts on behalf of the
 company except for cases in which he/she is expressly
 authorized to do so in writing, and such authorization or
 power of attorney is submitted to the recipient or the
 person represented by the recipient, or the existence of
 such authorization is known to the recipient of the person
 represented by the recipient.



More information about the R-help mailing list