[R] multivariate multi regression

peter dalgaard pdalgd at gmail.com
Tue Dec 14 13:50:27 CET 2010

On Dec 14, 2010, at 03:21 , Bastiaan Bergman wrote:

> That doesn't work, one would get two different answers depending on the
> order of execution.
> The physics is: Overlay error on a Silicon wafer. One wafer has many flash
> fields, each flash field has multiple locations where the overlay error is
> measured (as: dX,dY offset). If one contemplates that the error is caused by
> a rotation of the flash field then we can say (dX,dY)=(-Y,X)*RotAngle. If in
> addition we have a scaling error: (dX,dY)=(X*XScale,Y*YScale) than the total
> model is:
> dX~X*XScale-Y*RotAngle
> dY~Y*YScale+X*RotAngle
> Now I want to find the values for XScale, YScale and RotAngle
> Length(dX)==length(dY)==length(X)==length(Y)==number of measured sites on a
> wafer
> Hope this clarifies...

Not completely, but I can see the general picture. 

I think the main thing is to rewrite the formula as

dX = XScale * X + YScale * 0 + RotAngle * (-Y) + eX
dY = XScale * 0 + YScale * Y + RotAngle * X    + eY

(where eX and eY are noise terms)

Then string together all your data pairs as


and the corresponding design matrix

X1  0 -Y1
0  Y1  X1
X2  0 -Y2
0  Y2  X2

This sets up the joint linear model that you want. (Technically, it could be easier to put all the dX's first, then all the dY's, though.)

The remaining question is what you assume about the eX and eY terms. If they can be assumed to be independent and have the same variance, you're done. If they are correlated and/or have different variance, then I think you need to look in the direction of lme() with a suitable variance function.

> -----Original Message-----
> From: David Winsemius [mailto:dwinsemius at comcast.net] 
> Sent: Monday, December 13, 2010 6:06 PM
> To: Bastiaan Bergman
> Cc: r-help at r-project.org
> Subject: Re: [R] multivariate multi regression
> On Dec 13, 2010, at 8:46 PM, Bastiaan Bergman wrote:
>> Hello,
>> I want to model my data with the following model:
>> Y1=X1*coef1+X2*coef2
>> Y2=X1*coef2+X2*coef3
>> Note: coef2 appears in both lines
>> Xi, Yi is input versus output data respectively
>> How can I do this in R?
>> I got this far:
>> lm(Y1~X1+X2,mydata)
>> now how do I add the second line of the model including the cross
>> dependency?
> The usual way would be to extract coef2 from the object returned from  
> the first invocation of lm(...)  and use it to calculate an offset  
> term in a second model. It would not have any variance calculated  
> since you are forcing it to be what was returned in the first model.  
> Now, what is it that you are really trying to do with this procedure?
> -- 
> David.
> David Winsemius, MD
> West Hartford, CT
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

Peter Dalgaard
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com

More information about the R-help mailing list