Nicholas Lewin-Koh <kohnicho at comp.nus.edu.sg> writes:
> Hi,
> The following function does work
>
> optimize.W<-function(W,k,G,Groups,cph.call,z){
> n<-length(Groups)
> grp.wt<-rep(0,n)
> for(i in 1:(length(G))){
> ind<-Groups == G[i]
> if(G[i]!=k){
> grp.wt[ind]<-W[i]
> }
> elsegrp.wt[ind]<-1
> }
> z<-data.frame(cbind(z,grp.wt=grp.wt)) #needed to make the case weights
> #part of the data frame
> mod<-coxph(cph.call,z,grp.wt,na.action=na.omit,singular.ok=T)
> sum(mod$residuals^2)
> }
>
> I wouldn't call this a bug, but shouldn't the case weights be a
separate
> vector if the user so desires?
It's a side effect of the new model environment concept, combined with
the fact that certain arguments like weight have non-standard
evaluation rules. These arguments are evaluated in the data frame
enclosed by the model environment - which is generally the environment
where you defined the model formula.
As things are implemented currently, your solution is probably the
best one (z$grp.wt <- grp.wt might be more efficient though). Another
one would be to defeat the nonstandard evaluation with stuff like
eval(substitute(
coxph(cph.call,z,w,na.action=na.omit,singular.ok=T),
list(w=grp.wt)))
which I'll be the first to admit is horrendously ugly but avoid's the
copying implied by adding variables to z.
--
O__ ---- Peter Dalgaard Blegdamsvej 3
c/ /'_ --- Dept. of Biostatistics 2200 Cph. N
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at
stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._