Programmer en R/Estimer un modèle de 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 :
- ;
soit en développant :
- .
Pour le tracé, nous utilisons l'équation paramétrique :
Nous utilisons les données proposées par D. Gruntz[1]
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érences
modifier- ↑ anglais D. Gruntz, « Finding the Best Fit Circle », dans The MathWorks Newsletter, vol. 1, 1990, p. 5