[R] I have aproblem about nomogram--thank you for your help

David Winsemius dwinsemius at comcast.net
Mon Oct 4 05:31:24 CEST 2010


On Oct 3, 2010, at 10:42 PM, 笑啸 wrote:

> dear professor:
>   I have a problem about the nomogram.I have got the result through  
> analysing the dataset "exp2.sav" through multinominal logistic  
> regression by SPSS 17.0.

That is an inadequate specification of a statistical analysis  
(although it might pass for such in the typical medical journal).

>   and I want to deveop the nomogram through R-Projject,just like  
> this :

I know of no way of taking a function developed in SPSS/SAS/Stata and  
simply dropping it into the nomogram function to generate sensible  
output. There may be such a method that you could piece together by  
examining the code, but it appears to me that you are not yet ready  
for that task. nomogram() was clearly developed to by used as a part  
of the rms package rather than as a stand-alone graphical utility.
>
>> n<-100
>> set.seed(10)
>> T.Grade<-factor(0:3,labels=c("G0", "G1", "G2","G3"))
>> Sex<-factor(0:1,labels=c("F","M"))
>> Smoking<-factor(0:1,labels=c("No","yes"))
>> L<-0.559*as.numeric(T.Grade)-0.896*as.numeric(Smoking) 
>> +0.92*as.numeric(Sex)-1.338
 > L
[1] -0.755 -0.172  0.363  0.946

>> y <- ifelse(runif(n) < plogis(L), 1, 0)
>>



dfr <- data.frame(T.Grade,Sex,Smoking, L, y)

ddist <- datadist(dfr)  # wrap the vectors into a dataframe.
options(datadist='ddist')
f<-lrm(y~T.Grade +Sex+Smoking, data=dfr) # skip the as.numeric()'s

### Gives an error message due to singular X matrix.

 > f<-lrm(y~T.Grade +Sex+Smoking, data=dfr)
singular information matrix in lrm.fit (rank= 5 ).  Offending  
variable(s):
Sex=M
Error in lrm(y ~ T.Grade + Sex + Smoking, data = dfr) :
   Unable to fit model using “lrm.fit”

#####    Try instead:

n<-100
set.seed(10)
T.Grade<-factor(0:3,labels=c("G0", "G1", "G2","G3"))
Sex<-factor(sample(0:1, 100, replace=TRUE),labels=c("F","M"))
Smoking<-factor(sample(0:1, 100, replace=TRUE),labels=c("No","yes"))

dfr$L <- with(dfr, 0.559*as.numeric(T.Grade)-0.896*as.numeric(Smoking) 
+0.92*as.numeric(Sex)-1.338)
dfr$y <- with(dfr, ifelse(runif(n) < plogis(L), 1, 0) )
dfr <- data.frame(T.Grade,Sex,Smoking, L, y)

ddist <- datadist(dfr)
options(datadist='ddist')
f<-lrm(y~T.Grade +Sex+Smoking, data=dfr)

# Then follow the example on the help(nomogram page)


nom <- nomogram(f, fun=function(x)1/(1+exp(-x)),  # or fun=plogis
     fun.at=c(.001,.01,.05,seq(.1,.9,by=.1),.95,.99,.999),
     funlabel="Risk of Death")
plot(nom, xfrac=.45)

Please note: this is _not_ your nomogram function due to the random  
aspects of the creation of "y", and this is NOT multinomial logistic  
regression (since you only have a dichotomous outcome). For one  
possible variant of multinomial logistic regression supported in the  
rms/Hmisc function suite, you would need to use polr.

-- 
David.

>>
> 错误于 error to:model.frame.default(formula = y ~ as.numeric(T.Grade)  
> + as.numeric(Sex) +  :
>  变数的长度不一样 the length of the variable is different  
> ('as.numeric(T.Grade)')
>
> I encounter aproblem in the last program,and I try to settle this  
> problem though several ways ,just like:
> asis(x, parms, label, name)
> matrx(x, label, name)
> pol(x, parms, label, name)
> lsp(x, parms, label, name)
> rcs(x, parms, label, name)
> catg(x, parms, label, name)
> scored(x, parms, label, name)
> strat(x, label, name)
> x1 %ia% x2
>
> and i can not settle this problem
> can you tell me how to settle this problem,thank you
>                                                                              turly 
>  yours________________________________
---

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list