Thanks Berend.
Yes that is right. I should get 5 values(results) of x_e because I have
five values of X. I wonder how can I fix it?
On 30/08/2013 13:13, Berend Hasselman wrote:
On 30-08-2013, at 09:44, Jonsson<amen.alya...@bordeaux.inra.fr> wrote:
I have three datasets that I want to compute the errors between them using
linear regression.for this, I want to iterate to reach certain criteria for
the calibration. if changes become smaller than eps the iteration is
successful, hence stop and write parameters into cal:eps=0.00001 if number
of iterations is> itermax the iteration failed, hence stop and fill cal
with missing value itermax=400
So I tried this code:
x= c(5,2,4,2,1)
y= c(5,3,4,6,9)
z= c(5,8,4,7,3)
itermax=400
get initial calibration parameters, here we assume that:x is the reference
dataset offset x_a=0, slope x_b=1 the other two datasets y, z are
"calibrated" to x using a simple linear regression
res=lm(x~y)
y_a=coef(res)[1] ; y_b=coef(res)[2]
res1=lm(x~z)
z_a=coef(res1)[1] ; z_b=coef(res1)[2]
y_t = y/y_b - y_a/y_b # "calibrate" y
z_t = z/z_b - z_a/z_b #"calibrate" z
x_e = sqrt(mean((x-y_t)*(x-z_t)))#calculate error of x
iter<- 0
while(((x_e-x)> 0.00001)&& (iter< itermax)) {
iter<- 0 ##start iteration
x = x_e
res=lm(x~y)
y_a=coef(res)[1] ; y_b=coef(res)[2]
res1=lm(x~z)
z_a=coef(res1)[1] ; z_b=coef(res1)[2]
y_t = y/y_b - y_a/y_b # "calibrate" y
z_t = z/z_b - z_a/z_b #"calibrate" z
x_e = sqrt(mean((x-y_t)*(x-z_t)))
iter<- iter + 1 # increase iteration counter
}
But I got the same result for X_e before and after the loop:
x_e
[1] 6.454089
I tried your code and got this error message:
Error in model.frame.default(formula = x ~ y, drop.unused.levels = TRUE) :
variable lengths differ (found for 'y')
Calls: lm -> eval -> eval -> <Anonymous> -> model.frame.default
And looking at your code: x is a vector, x_e is a scalar and in the while loop
you are assigning x_e to x so x is then a scalar.
Berend
--
Amen Alyaari, UPMC
PhD student
Unit of Functional Ecology& Environmental Physics [EPHYSE]
National Institute of Agricultural Research [INRA].
71, Avenue Edouard Bourlaux
33140 Villenave d'Ornon
Téléphone : +33(0) 5 57 12 24 27
Fax : +33 (0)5 57 12 24 20
FRANCE
______________________________________________
R-help@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.