[R] I have aproblem --thank you

David Winsemius dwinsemius at comcast.net
Mon Oct 4 16:37:50 CEST 2010


On Oct 4, 2010, at 9:57 AM, 笑啸 wrote:

> dear teacher:
>   thank you for your help,witn your help i develop the nomogram  
> successfully.
> after that i want to do the internal validation to the nomogram.

So you need some standard for accuracy, which would only come from the  
original data. Hence my suggestion that you bring the original data  
into R and rms. You cannot validate that model with the approaches you  
are attempting.

And it would not be correct to say that you are "validating the  
nomogram". It is simply a graphical tool for implementing predictions  
from a statistical model. You should be thinking of this as exploring  
the


> i wish to use the bootstrap to achieve the prediction accuracy of  
> the nomogram,and then i encounter problem again,just like that. 
> (error to :complete.cases(x, y, wt) : (the length of the augment was  
> different))
> i hope you tell me where is the mistake,and maybe i have chosen the  
> wrong function.

More accurately, I think you have chosen the wrong strategy. I think  
you need to add some statistical consultation fees to your research  
budget. Or you may get away with buying "Regression Modeling  
Strategies" and using it to work through the many worked examples that  
accompany the rms package. The first option may be faster, but the  
second option is probably slower but should result in a higher level  
of statistical understanding for you. The proper choice for you  
depends on your deadline, available time and what monetary value you  
assign to that "spare" time.

-- 
David.

> thank you
>                                                       turly yours
> ......
> load package 'rms'
>
>>> 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)
> 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)
>
> load package bootstrap(achieve the prediction accuracy of the  
> nomogram)
>
> .................the problem....................
>> theta.fit <- function(dfr,y){lsfit(dfr,y)}
>> theta.predict <- function(fit,dfr){cbind(1,dfr)%*%fit$coef}
>> sq.err <- function(y,yhat) { (y-yhat)^2}
>> results <- bootpred(x,y,50,theta.fit,theta.predict,err.meas=sq.err)
> error to :complete.cases(x, y, wt) : (the length of the augment was  
> different.__________________________________________
-- 

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list