Draw a nomogram after glm

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

Draw a nomogram after glm

Komine
Hi all R users
I did a logistic regression with my binary variable Y (0/1) and 2 explanatory variables.
Now I try to draw my nomogram with predictive value. I visited the help of R but I have problem to understand well the example. When I use glm fonction, I have a problem, thus I use lrm. My code is:
modele<-lrm(Y~L+P,data=donnee)
fun<- function(x) plogis(x-modele$coef[1]+modele$coef[2])
f <- Newlabels(modele,c(L="poids",P="taille"))  
nomogram(f, fun=list('Prob Y<=1'=plogis),
 fun.at=c(seq(0,1,by=.1),.95,.99),
         lmgp=.1, cex.axis=.6)
         fun.at=c(.01,.05,seq(.1,.9,by=.1),.95,.99),
         lmgp=.2, cex.axis=.6)
options(Fire=NULL)
Result is bad and I have this following error message:
Erreur dans value.chk(at, i, NA, -nint, Limval, type.range = "full") :
  variable L does not have limits defined by datadist

Could you help me on the code to draw nomogram.
Nb: my English is low, I apologize.
Thank for your help
Komine
 
Reply | Threaded
Open this post in threaded view
|

Re: Draw a nomogram after glm

Frank Harrell
Please read the documentation for the rms package, particularly the datadist function.

Note that in your subject line glm should be lrm.

Frank

Komine wrote
Hi all R users
I did a logistic regression with my binary variable Y (0/1) and 2 explanatory variables.
Now I try to draw my nomogram with predictive value. I visited the help of R but I have problem to understand well the example. When I use glm fonction, I have a problem, thus I use lrm. My code is:
modele<-lrm(Y~L+P,data=donnee)
fun<- function(x) plogis(x-modele$coef[1]+modele$coef[2])
f <- Newlabels(modele,c(L="poids",P="taille"))  
nomogram(f, fun=list('Prob Y<=1'=plogis),
 fun.at=c(seq(0,1,by=.1),.95,.99),
         lmgp=.1, cex.axis=.6)
         fun.at=c(.01,.05,seq(.1,.9,by=.1),.95,.99),
         lmgp=.2, cex.axis=.6)
options(Fire=NULL)
Result is bad and I have this following error message:
Erreur dans value.chk(at, i, NA, -nint, Limval, type.range = "full") :
  variable L does not have limits defined by datadist

Could you help me on the code to draw nomogram.
Nb: my English is low, I apologize.
Thank for your help
Komine
Frank Harrell
Department of Biostatistics, Vanderbilt University
Reply | Threaded
Open this post in threaded view
|

Re: Draw a nomogram after glm

Komine
Thanks  Frank

I will try rms package and give after the result.

Komine
Reply | Threaded
Open this post in threaded view
|

Re: Draw a nomogram after glm

Komine
In reply to this post by Komine
Hi,
I use datadist fonction in rms library  in order to draw my nomogram. After reading, I try this code:
f<-lrm(Y~L+P,data=donnee)
f <- lrm(Y~L+P,data=donnee)
d <- datadist(f,data=donnee)
options(datadist="d")

f <- lrm(Y~L+P)          
summary(f,L=c(0,506,10),P=c(45,646,10))        
plot(Predict(f,L=200:800,P=3))
 
Unfortunately, I have error after the 2nd code:
Erreur dans datadist(f, data = donnee) : program logic error

Please could you provide me a document more simple which is more understandable for new R user.
Thanks for your help.

Komine
Reply | Threaded
Open this post in threaded view
|

Re: Draw a nomogram after glm

Frank Harrell
Please post the entire script next time, e.g., include require(rms).  You have one line duplicated.  Put this before the first use of lrm: d <- datadist(donnee); options(datadist='d')

Frank

Komine wrote
Hi,
I use datadist fonction in rms library  in order to draw my nomogram. After reading, I try this code:
f<-lrm(Y~L+P,data=donnee)
f <- lrm(Y~L+P,data=donnee)
d <- datadist(f,data=donnee)
options(datadist="d")

f <- lrm(Y~L+P)          
summary(f,L=c(0,506,10),P=c(45,646,10))        
plot(Predict(f,L=200:800,P=3))
 
Unfortunately, I have error after the 2nd code:
Erreur dans datadist(f, data = donnee) : program logic error

Please could you provide me a document more simple which is more understandable for new R user.
Thanks for your help.

Komine
Frank Harrell
Department of Biostatistics, Vanderbilt University
Reply | Threaded
Open this post in threaded view
|

Re: Draw a nomogram after glm

Komine
In reply to this post by Komine
Hi all R users,
Thanks Frank for your advices
In fact I posted all my script. In the R Help, the script for nomogram is long and I took only the part what I think interesting in my case.
I use informations from( datadist {Design} and rms {rms}) in the help of R software to do my code.  
I see that I progress with my nomogram. Because with the following code where I put  my real variables names:

library(Design)
library(rms)
d <- datadist(Fire)
options(datadist='d')
f<-lrm(Ignition~FMC+Charge,data=Fire)
summary(f,FMC=c(0,506.40),Charge=c(45,646)) # min and max of FMC: 0 ,506.40 and the min and max of Charge: 45, 646
plot(Predict(f,FMC=0:506.40,Charge=646))
plot(nomogram(f, interact=list(Charge= c(.2,.7)))) # sorry, not understand vector c(.2,.7) from R help  

As result, I have the figure 1 then figure 2 but there is a problem. Because the 3rd line of Figure 2  "Charge" must to go 0 until 650.
Also the linear predictor must to go 0 until 1.
Figure 1
Figure 2
After, is it possible to draw my nomogram like the 3rd graph that I found in Internet, it is easier to understand.
Figure 3
Nb: I  Apologize for my bad english
Thanks for your help
Komine
PhD student
Dakar _Sénégal
West Africa  
Komine wrote
Hi all R users
I did a logistic regression with my binary variable Y (0/1) and 2 explanatory variables.
Now I try to draw my nomogram with predictive value. I visited the help of R but I have problem to understand well the example. When I use glm fonction, I have a problem, thus I use lrm. My code is:
modele<-lrm(Y~L+P,data=donnee)
fun<- function(x) plogis(x-modele$coef[1]+modele$coef[2])
f <- Newlabels(modele,c(L="poids",P="taille"))  
nomogram(f, fun=list('Prob Y<=1'=plogis),
 fun.at=c(seq(0,1,by=.1),.95,.99),
         lmgp=.1, cex.axis=.6)
         fun.at=c(.01,.05,seq(.1,.9,by=.1),.95,.99),
         lmgp=.2, cex.axis=.6)
options(Fire=NULL)
Result is bad and I have this following error message:
Erreur dans value.chk(at, i, NA, -nint, Limval, type.range = "full") :
  variable L does not have limits defined by datadist

Could you help me on the code to draw nomogram.
Nb: my English is low, I apologize.
Thank for your help
Komine
Komine wrote
Hi all R users
I did a logistic regression with my binary variable Y (0/1) and 2 explanatory variables.
Now I try to draw my nomogram with predictive value. I visited the help of R but I have problem to understand well the example. When I use glm fonction, I have a problem, thus I use lrm. My code is:
modele<-lrm(Y~L+P,data=donnee)
fun<- function(x) plogis(x-modele$coef[1]+modele$coef[2])
f <- Newlabels(modele,c(L="poids",P="taille"))  
nomogram(f, fun=list('Prob Y<=1'=plogis),
 fun.at=c(seq(0,1,by=.1),.95,.99),
         lmgp=.1, cex.axis=.6)
         fun.at=c(.01,.05,seq(.1,.9,by=.1),.95,.99),
         lmgp=.2, cex.axis=.6)
options(Fire=NULL)
Result is bad and I have this following error message:
Erreur dans value.chk(at, i, NA, -nint, Limval, type.range = "full") :
  variable L does not have limits defined by datadist

Could you help me on the code to draw nomogram.
Nb: my English is low, I apologize.
Thank for your help
Komine
Komine wrote
Hi all R users
I did a logistic regression with my binary variable Y (0/1) and 2 explanatory variables.
Now I try to draw my nomogram with predictive value. I visited the help of R but I have problem to understand well the example. When I use glm fonction, I have a problem, thus I use lrm. My code is:
modele<-lrm(Y~L+P,data=donnee)
fun<- function(x) plogis(x-modele$coef[1]+modele$coef[2])
f <- Newlabels(modele,c(L="poids",P="taille"))  
nomogram(f, fun=list('Prob Y<=1'=plogis),
 fun.at=c(seq(0,1,by=.1),.95,.99),
         lmgp=.1, cex.axis=.6)
         fun.at=c(.01,.05,seq(.1,.9,by=.1),.95,.99),
         lmgp=.2, cex.axis=.6)
options(Fire=NULL)
Result is bad and I have this following error message:
Erreur dans value.chk(at, i, NA, -nint, Limval, type.range = "full") :
  variable L does not have limits defined by datadist

Could you help me on the code to draw nomogram.
Nb: my English is low, I apologize.
Thank for your help
Komine
<quote author="Komine">
Hi all R users
I did a logistic regression with my binary variable Y (0/1) and 2 explanatory variables.
Now I try to draw my nomogram with predictive value. I visited the help of R but I have problem to understand well the example. When I use glm fonction, I have a problem, thus I use lrm. My code is:
modele<-lrm(Y~L+P,data=donnee)
fun<- function(x) plogis(x-modele$coef[1]+modele$coef[2])
f <- Newlabels(modele,c(L="poids",P="taille"))  
nomogram(f, fun=list('Prob Y<=1'=plogis),
 fun.at=c(seq(0,1,by=.1),.95,.99),
         lmgp=.1, cex.axis=.6)
         fun.at=c(.01,.05,seq(.1,.9,by=.1),.95,.99),
         lmgp=.2, cex.axis=.6)
options(Fire=NULL)
Result is bad and I have this following error message:
Erreur dans value.chk(at, i, NA, -nint, Limval, type.range = "full") :
  variable L does not have limits defined by datadist

Could you help me on the code to draw nomogram.
Nb: my English is low, I apologize.
Thank for your help
Komine
Reply | Threaded
Open this post in threaded view
|

Re: Draw a nomogram after glm

Frank Harrell
Don't attach the Design package.  Use only rms.  Please provide the output of lrm (print the f object).  With such a strong model make sure you do not have a circularity somewhere.  With nomogram you can specify ranges for the predictors; default is 10th smallest to 10th largest.

rms will not make customized nomograms such as the one you included.

Frank

<quote author="Komine">
Hi all R users,
Thanks Frank for your advices
In fact I posted all my script. In the R Help, the script for nomogram is long and I took only the part what I think interesting in my case.
I use informations from( datadist {Design} and rms {rms}) in the help of R software to do my code.  
I see that I progress with my nomogram. Because with the following code where I put  my real variables names:

library(Design)
library(rms)
d <- datadist(Fire)
options(datadist='d')
f<-lrm(Ignition~FMC+Charge,data=Fire)
summary(f,FMC=c(0,506.40),Charge=c(45,646)) # min and max of FMC: 0 ,506.40 and the min and max of Charge: 45, 646
plot(Predict(f,FMC=0:506.40,Charge=646))
plot(nomogram(f, interact=list(Charge= c(.2,.7)))) # sorry, not understand vector c(.2,.7) from R help  

As result, I have the figure 1 then figure 2 but there is a problem. Because the 3rd line of Figure 2  "Charge" must to go 0 until 650.
Also the linear predictor must to go 0 until 1.
Figure 1
Figure 2
After, is it possible to draw my nomogram like the 3rd graph that I found in Internet, it is easier to understand.
Figure 3
Nb: I  Apologize for my bad english
Thanks for your help
Komine
PhD student
Dakar _Sénégal
West Africa  
Komine wrote
Hi all R users
I did a logistic regression with my binary variable Y (0/1) and 2 explanatory variables.
Now I try to draw my nomogram with predictive value. I visited the help of R but I have problem to understand well the example. When I use glm fonction, I have a problem, thus I use lrm. My code is:
modele<-lrm(Y~L+P,data=donnee)
fun<- function(x) plogis(x-modele$coef[1]+modele$coef[2])
f <- Newlabels(modele,c(L="poids",P="taille"))  
nomogram(f, fun=list('Prob Y<=1'=plogis),
 fun.at=c(seq(0,1,by=.1),.95,.99),
         lmgp=.1, cex.axis=.6)
         fun.at=c(.01,.05,seq(.1,.9,by=.1),.95,.99),
         lmgp=.2, cex.axis=.6)
options(Fire=NULL)
Result is bad and I have this following error message:
Erreur dans value.chk(at, i, NA, -nint, Limval, type.range = "full") :
  variable L does not have limits defined by datadist

Could you help me on the code to draw nomogram.
Nb: my English is low, I apologize.
Thank for your help
Komine
Komine wrote
Hi all R users
I did a logistic regression with my binary variable Y (0/1) and 2 explanatory variables.
Now I try to draw my nomogram with predictive value. I visited the help of R but I have problem to understand well the example. When I use glm fonction, I have a problem, thus I use lrm. My code is:
modele<-lrm(Y~L+P,data=donnee)
fun<- function(x) plogis(x-modele$coef[1]+modele$coef[2])
f <- Newlabels(modele,c(L="poids",P="taille"))  
nomogram(f, fun=list('Prob Y<=1'=plogis),
 fun.at=c(seq(0,1,by=.1),.95,.99),
         lmgp=.1, cex.axis=.6)
         fun.at=c(.01,.05,seq(.1,.9,by=.1),.95,.99),
         lmgp=.2, cex.axis=.6)
options(Fire=NULL)
Result is bad and I have this following error message:
Erreur dans value.chk(at, i, NA, -nint, Limval, type.range = "full") :
  variable L does not have limits defined by datadist

Could you help me on the code to draw nomogram.
Nb: my English is low, I apologize.
Thank for your help
Komine
Komine wrote
Hi all R users
I did a logistic regression with my binary variable Y (0/1) and 2 explanatory variables.
Now I try to draw my nomogram with predictive value. I visited the help of R but I have problem to understand well the example. When I use glm fonction, I have a problem, thus I use lrm. My code is:
modele<-lrm(Y~L+P,data=donnee)
fun<- function(x) plogis(x-modele$coef[1]+modele$coef[2])
f <- Newlabels(modele,c(L="poids",P="taille"))  
nomogram(f, fun=list('Prob Y<=1'=plogis),
 fun.at=c(seq(0,1,by=.1),.95,.99),
         lmgp=.1, cex.axis=.6)
         fun.at=c(.01,.05,seq(.1,.9,by=.1),.95,.99),
         lmgp=.2, cex.axis=.6)
options(Fire=NULL)
Result is bad and I have this following error message:
Erreur dans value.chk(at, i, NA, -nint, Limval, type.range = "full") :
  variable L does not have limits defined by datadist

Could you help me on the code to draw nomogram.
Nb: my English is low, I apologize.
Thank for your help
Komine
Komine wrote
Hi all R users
I did a logistic regression with my binary variable Y (0/1) and 2 explanatory variables.
Now I try to draw my nomogram with predictive value. I visited the help of R but I have problem to understand well the example. When I use glm fonction, I have a problem, thus I use lrm. My code is:
modele<-lrm(Y~L+P,data=donnee)
fun<- function(x) plogis(x-modele$coef[1]+modele$coef[2])
f <- Newlabels(modele,c(L="poids",P="taille"))  
nomogram(f, fun=list('Prob Y<=1'=plogis),
 fun.at=c(seq(0,1,by=.1),.95,.99),
         lmgp=.1, cex.axis=.6)
         fun.at=c(.01,.05,seq(.1,.9,by=.1),.95,.99),
         lmgp=.2, cex.axis=.6)
options(Fire=NULL)
Result is bad and I have this following error message:
Erreur dans value.chk(at, i, NA, -nint, Limval, type.range = "full") :
  variable L does not have limits defined by datadist

Could you help me on the code to draw nomogram.
Nb: my English is low, I apologize.
Thank for your help
Komine
Frank Harrell
Department of Biostatistics, Vanderbilt University
Reply | Threaded
Open this post in threaded view
|

Re: Draw a nomogram after glm

Komine
In reply to this post by Komine
Hi Frank,
For to answer your request:

> print(f)

Logistic Regression Model

lrm(formula = Ignition ~ FMC + Charge, data = Fire)

                      Model Likelihood     Discrimination    Rank Discrim.    
                         Ratio Test            Indexes          Indexes      

Obs           231    LR chi2     231.58    R2       0.852    C       0.976    
 0             96    d.f.             2    g        8.972    Dxy     0.953    
 1            135    Pr(> chi2) <0.0001    gr    7878.577    gamma   0.953    
max |deriv| 1e-06                          gp       0.466    tau-a   0.465    
                                           Brier    0.054                    


          Coef    S.E.   Wald Z Pr(>|Z|)
Intercept  9.6937 1.5863  6.11  <0.0001
FMC       -0.0828 0.0138 -6.02  <0.0001
Charge    -0.0047 0.0021 -2.28  0.0223  

I continue to try my nomogram.

Thanks again
Komine
Reply | Threaded
Open this post in threaded view
|

Re: Draw a nomogram after glm

Komine
In reply to this post by Komine
Hi,
I try always to do my nomogram. I change little my code in order to definite the range of my linear predictor.
But I do not succeed to have 0 until 1. I tried this code.  
library(rms)
d <- datadist(Fire)
options(datadist='d')
Fire$Ignition=c(0,1,by=0.1)
f<-lrm(Ignition~FMC+Charge,data=Fire)
print(f)
summary(f,FMC=c(0,506.40),Charge=c(45,646))
plot(nomogram(f, interact=list(FMC,Charge)))

The result is:

> print(f)

Logistic Regression Model

lrm(formula = Ignition ~ FMC + Charge, data = Fire)

                     Model Likelihood     Discrimination    Rank Discrim.    
                        Ratio Test            Indexes          Indexes      

Obs           231    LR chi2      0.04    R2       0.000    C       0.501    
 0             77    d.f.            2    g        0.026    Dxy     0.002    
 0.1           77    Pr(> chi2) 0.9796    gr       1.026    gamma   0.003    
 1             77                         gp       0.006    tau-a   0.002    
max |deriv| 7e-13                         Brier    0.222                    


       Coef    S.E.   Wald Z Pr(>|Z|)
y>=0.1  0.6832 0.3018  2.26  0.0236  
y>=1   -0.7033 0.3020 -2.33  0.0199  
FMC     0.0002 0.0011  0.18  0.8601  
Charge -0.0001 0.0009 -0.07  0.9424  


> summary(f,FMC=c(0,506.40),Charge=c(45,646))
             Effects              Response : Ignition

 Factor      Low High  Diff. Effect S.E. Lower 0.95 Upper 0.95
 FMC          0  506.4 506.4  0.10  0.58 -1.04      1.24      
  Odds Ratio  0  506.4 506.4  1.11    NA  0.36      3.45      
 Charge      45  646.0 601.0 -0.04  0.55 -1.11      1.03      
  Odds Ratio 45  646.0 601.0  0.96    NA  0.33      2.81      
> plot(nomogram(f, interact=list(FMC,Charge)))  
   
Please can I do to have linear predictor between 0 to 1.
Thanks very much for your Help
Komine
Reply | Threaded
Open this post in threaded view
|

Re: Draw a nomogram after glm

Frank Harrell
by is not an argument to c( )
datadist needs to know the final coding of variables so run it after doing any re-codes.
You are using the wrong syntax for interact=
Please take a while to read the full documentation before responding further, and read my earlier posts.
Frank

Komine wrote
Hi,
I try always to do my nomogram. I change little my code in order to definite the range of my linear predictor.
But I do not succeed to have 0 until 1. I tried this code.  
library(rms)
d <- datadist(Fire)
options(datadist='d')
Fire$Ignition=c(0,1,by=0.1)
f<-lrm(Ignition~FMC+Charge,data=Fire)
print(f)
summary(f,FMC=c(0,506.40),Charge=c(45,646))
plot(nomogram(f, interact=list(FMC,Charge)))

The result is:

> print(f)

Logistic Regression Model

lrm(formula = Ignition ~ FMC + Charge, data = Fire)

                     Model Likelihood     Discrimination    Rank Discrim.    
                        Ratio Test            Indexes          Indexes      

Obs           231    LR chi2      0.04    R2       0.000    C       0.501    
 0             77    d.f.            2    g        0.026    Dxy     0.002    
 0.1           77    Pr(> chi2) 0.9796    gr       1.026    gamma   0.003    
 1             77                         gp       0.006    tau-a   0.002    
max |deriv| 7e-13                         Brier    0.222                    


       Coef    S.E.   Wald Z Pr(>|Z|)
y>=0.1  0.6832 0.3018  2.26  0.0236  
y>=1   -0.7033 0.3020 -2.33  0.0199  
FMC     0.0002 0.0011  0.18  0.8601  
Charge -0.0001 0.0009 -0.07  0.9424  


> summary(f,FMC=c(0,506.40),Charge=c(45,646))
             Effects              Response : Ignition

 Factor      Low High  Diff. Effect S.E. Lower 0.95 Upper 0.95
 FMC          0  506.4 506.4  0.10  0.58 -1.04      1.24      
  Odds Ratio  0  506.4 506.4  1.11    NA  0.36      3.45      
 Charge      45  646.0 601.0 -0.04  0.55 -1.11      1.03      
  Odds Ratio 45  646.0 601.0  0.96    NA  0.33      2.81      
> plot(nomogram(f, interact=list(FMC,Charge)))  
   
Please can I do to have linear predictor between 0 to 1.
Thanks very much for your Help
Komine
Frank Harrell
Department of Biostatistics, Vanderbilt University