# [R] indexing a parameter in nls

From: John Hendrickx <john_hendrickx_at_yahoo.com>
Date: Thu 15 Jul 2004 - 22:02:31 EST

I'm trying to estimate a "diagonal reference model" in nls. In its basic form, the model consists of two factors with equal categories and a dependent variable. The model fits the main effects of the two factors such that they are proportional to each other. So the model I want to fit is:

Y=p*m[f1]+(1-p)*m[f2]

The m-parameters indicate the "average" main effect of factors f1 and f2 (with no intercept). The p-parameter indicates the relative impact of the two factors on Y. If p=.5, f1 and f2 have equal impact, for p>.5, f1 has greater impact, for p<.5 f2 has greater impact.

I can estimate the model as follows for f1="row", f2="col", Y="nkids":

rd<-model.matrix(~as.factor(row)-1)
cd<-model.matrix(~as.factor(col)-1)

strt<-list(m1=2,m2=2,m3=2,m4=2,m5=3,p=.5)

nls(nkids~p*(rd[,1]*m1+rd[,2]*m2+rd[,3]*m3+rd[,4]*m4+rd[,5]*m5) +

```      (1-p)*(cd[,1]*m1+cd[,2]*m2+cd[,3]*m3+cd[,4]*m4+cd[,5]*m5),
start=strt)
```
```---

What I want however, is a more compact specification, where "row" and

"col" are used to index which m-parameter should be used, something

like:

nls(nkids~p*strt[row]+(1-p)*strt[col],start=strt)

This specification produces an error: "Error in nlsModel(formula, mf,
start) : singular gradient matrix at initial parameter estimates". I
suspect the problem is that "strt[row]" evaluates to a list of
starting values rather than the object names m1, m2, etc. I've tried

nls(nkids~p*get(names(strt[row]))+(1-p)*get(names(strt[col])),start=strt)

But this produces an error as well: "Error in qr.qty(QR, resid) : qr
and y must have the same number of rows"

Can anyone point me in the right direction? How can I use "row" and

"col" to index the appropriate "m" parameter in this model?

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help