Programmer en R/Estimer un modèle de régression circulaire


Wikipedia-logo.svg

Wikipédia propose un article sur : « Régression circulaire ».

Nous allons effectuer une régression circulaire en utilisant la méthode directe de Kåsa et Coope, qui est une méthode de régression linéaire (voir sur Wikipédia Régression circulaire > Méthode de Kåsa et Coope). Pour le calcul, nous utilisons l'équation cartésienne du cercle de centre (xc, yc) et de rayon r :

Régression circulaire par la méthode de Kåsa et Coope avec GNU R.
 ;

soit en développant :

.

Pour le tracé, nous utilisons l'équation paramétrique :

Nous utilisons les données proposées par D. Gruntz[1]

Données pour la régression circulaire
x y
0.7 4.0
3.3 4.7
5.6 4.0
7.5 1.3
6.4 -1.1
4.4 -3.0
0.3 -2.5
-1.1 1.3
data.entry('x', 'y') # copier les données ci-dessus
# cliquer sur l'en-tête des colonnes pour sélectionner "numeric"
# puis fermer la table
plot(x, y, col='blue')

Puis, nous effectuons la régression

donnees <- data.frame(x, y)
cercle <- lm(I(x^2 + y^2) ~ x + y, donnees)
print(cercle)

ce qui donne

Call:
lm(formula = I(x^2 + y^2) ~ x + y, data = donnees)

Coefficients:
(Intercept)            x            y  
      6.967        6.121        1.487

Le modèle obtenu par régression est donc :

(x2 + y2) = 6,121·x + 1,487·x + 6,967.

Enfin, nous déterminons les caractéristiques du cercle

xc <- coef(cercle)[2]/2
yc <- coef(cercle)[3]/2
r <- sqrt(coef(cercle)[1] + xc^2 + yc^2)
print(xc) ; print(yc) ; print(r);

ce qui donne

       x 
3.060304 
        y 
0.7436073 
(Intercept) 
   4.109137

soit un cercle de centre (3,060,304 ; 0,743,607,3) et de rayon 4,109,137. Puis nous traçons le modèle

theta <- seq(0, 2*pi, len = 40)
xmodcercle <- xc + r*cos(theta)
ymodcercle <- yc + r*sin(theta)
lines(xmodcercle, ymodcercle, col='red')

Notes et référencesModifier

  1. anglais D. Gruntz, « Finding the Best Fit Circle », dans The MathWorks Newsletter, vol. 1, 1990, p. 5