readLines("http://macosa.dima.unige.it/om/prg/stf/ellisse.txt",n=3)
[1] "# x ed y: cercare rette di regressione e assi principali"
[2] "-0.38492424 -0.48492424"                                 
[3] "-0.58492424 -0.28492424"
ellisse <- read.table("http://macosa.dima.unige.it/om/prg/stf/ellisse.txt",skip=1)
plot(ellisse,asp=1)
abline(h=0,v=0,lty=3)

# I coefficienti di correlazione (i loro valori evidenziano la simmetria):
cor(ellisse)
          V1        V2
V1 1.0000000 0.4561515
V2 0.4561515 1.0000000
# il baricentro e la retta di regressione (y in funzione di x)
x <- ellisse$V1; y <- ellisse$V2
xC <- mean(x); yC <- mean(y); xC; yC; points(xC,yC,pch=20)
[1] 1
[1] 1.096667
mod = lm(y ~ x); mod$coefficients; abline(mod$coefficients)
(Intercept)           x 
  0.6383989   0.4582678

# cerco la retta di regressione di "x in funzione di y"
lm(x ~ y)$coefficients
(Intercept)           y 
  0.5020640   0.4540449
# x = a y + b  ->  ay = x-b  ->  y = (x-b)/a
g <- function(x) (x-0.502064)/0.4540449
plot(g,-1,3,add=TRUE,col="red")
# la traccio in rosso e traccio in blu e verde gli assi principali, i
# cui versori sono stampati col comando prcomp ("componenti principali"
# PC1 e PC2); devo aggiungere le coordinate del baricentro.
prcomp(ellisse)
Standard deviations:
[1] 1.3211513 0.8073801
Rotation:
         PC1        PC2
V1 0.7035101 -0.7106852
V2 0.7106852  0.7035101
prin1 <- function(x) (x-xC)*0.7035101/0.7106852+yC
prin2 <- function(x) (x-xC)*-0.7106852/0.7035101+yC
plot(prin1,-1,3,add=TRUE,col="blue")
plot(prin2,-1,3,add=TRUE,col="green")