[R] problem in while loop?

Amen Alyaari amen.alyaari at bordeaux.inra.fr
Fri Aug 30 14:24:40 CEST 2013


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.alyaari at 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



More information about the R-help mailing list