[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