# un po' di coppie di dati
dati <- c(
0.43933983,-0.56066017,
-0.56066017,0.53933983,
1.00391632,-0.17670853,
-0.27670853,1.10391632,
1.48786797,0.18786797,
0.08786797,1.58786797,
1.91213203,0.61213203,
0.51213203,2.01213203,
2.27670853,1.09608368,
0.99608368,2.37670853,
2.56066017,1.66066017,
1.56066017,2.66066017 )
# controllo quante sono
length(dati)/2
[1] 10
# le metto in una matrice a 10 righe e 2 colonne; ricordo che i dati di una
# matrice in R vanno messi colonna per colonna; quindi li metto in una matrice
# 2*10 e poi ne prendo la trasposta; in alternativa potrei introdurre i dati
# diversamente: 0.43933983,-0.56066017,1.00391632,... e metterli direttamente
# in una matrice 10*2
h <- array(dati,dim=c(2,12)); k <- t(h); k
[,1] [,2]
[1,] 0.43933983 -0.5606602
[2,] -0.56066017 0.5393398
[3,] 1.00391632 -0.1767085
[4,] -0.27670853 1.1039163
[5,] 1.48786797 0.1878680
[6,] 0.08786797 1.5878680
[7,] 1.91213203 0.6121320
[8,] 0.51213203 2.0121320
[9,] 2.27670853 1.0960837
[10,] 0.99608368 2.3767085
[11,] 2.56066017 1.6606602
[12,] 1.56066017 2.6606602
c( min(k[,1]), max(k[,1]), min(k[,2]), max(k[,2]) )
[1] -0.5606602 2.5606602 -0.5606602 2.6606602
# rappresento i punti nello spazio [-1,3]*[-1,3]
plot(c(-1,3),c(-1,3),type="n",xlab="", ylab="", asp=1)
abline(v=axTicks(1), h=axTicks(2), col="blue",lty=3)
abline(h=0,v=0,lty=2,col="blue")
points(k)
# il punto avente per coordinate le medie di quelle dei punti dati:
xm <- mean(k[,1]); ym <- mean(k[,2])
points(xm,ym,pch=20)
# la retta di regressione y in funz. di x (la rappresento tratteggiata)
mod = lm(k[,2] ~ k[,1]); mod$coefficients; abline(mod$coefficients,lty=3)
(Intercept) k[, 1]
0.74161831 0.06845607
# determino gli assi principali, i cui versori sono stampati col comando
# prcomp ("componenti principali"): PC1 e PC2; devo aggiungere le coordinate
# del baricentro.
prcomp(k)
Standard deviations:
[1] 1.0890278 0.8282839
Rotation:
PC1 PC2
[1,] 0.9866664 0.1627557
[2,] 0.1627557 -0.9866664
prcomp(k)$rotation
PC1 PC2
[1,] 0.9866664 0.1627557
[2,] 0.1627557 -0.9866664
pc <- prcomp(k)$rotation
princ1 <- function(x) (x-xm)*pc[1,1]/pc[1,2]+ym
princ2 <- function(x) (x-xm)*pc[2,1]/pc[2,2]+ym
# quindi li traccio:
curve(princ1,add=TRUE,col="blue")
curve(princ2,add=TRUE,col="red")