###################                                    #####################
################### 1er TAREA GRAFICA DE VECTORES EN 3D#####################
###################                                    #####################
library(scatterplot3d) 
library(plot3D)
#Instalación bibliotecas necesarias
#######Correlación mediante método geométrico#######
x=c(10,0)
y=c(10,0)   #Introducción tamaño del plano 3D
z=c(10,0)
g=scatterplot3d(x,y,z,grid = 1,tick.marks=T, box = T,col.axis = "darkgreen",col.grid = "lightgreen", main="Correlación geometrica \n Temperatura (°C) & Altura (cm)")
#Función Scatterplot3d me genera grafico 3D donde puedo alterar color, color de grilla, introsucir un titulo, el cual se guarda como g
temp=c(5, 5.6,7);temp 
## [1] 5.0 5.6 7.0
altura=c(9,7,8);altura
## [1] 9 7 8
# introducción vectores a graficar

#Función xyz.convert() me transforma coordenadas 3d (x,y,z) a 2D (x,y), util para graficar
ori= g$xyz.convert(0,0,0) #creamos coordenadas de origen para trasado del vector
pt <- g$xyz.convert(temp[1],temp[2],temp[3])
pa <- g$xyz.convert(altura[1],altura[2],altura[3])
#Se realiza la transformación de las coordenadas de los dos vectores

#Función segments() trasa una linea con origen ori en coordenas xy y destino pt
segments(ori$x,ori$y,pt$x,pt$y, col="red", lwd=2)
arrows2D(ori$x,ori$y,pt$x,pt$y,col = "red", add = T,lwd = 0.5) #Función arrows2d()introduce flecha para dar dirección al vector

segments(ori$x,ori$y,pa$x,pa$y,col="darkgreen",lwd=2)
arrows2D(ori$x,ori$y,pa$x,pa$y,col = "darkgreen", add = T,lwd = 0.5)


#####Correlación mediante método numerico##########
uv=temp%*%altura;uv
##       [,1]
## [1,] 140.2
modu=norm(temp,type = "2");modu
## [1] 10.2645
modv=norm(altura,type = "2");modv
## [1] 13.92839
cosphi=uv/(modu*modv)
angulo=acos(cosphi);angulo  #Angulo en radianes
##           [,1]
## [1,] 0.1970967
gradoss=(angulo*180)/pi;gradoss  #Angulo en grados
##          [,1]
## [1,] 11.29281
legend(x=-0.28,y=7.5,legend=c("Temperatura (°C)","Altura (cm)"), fill=c("red","darkgreen"),cex=0.55,text.font=1)
legend(x=6.7,y=0.99,legend=c("Angulo: 11.3°","Person: -0.29"),cex=0.7, text.font=1)

########Correlación de pearson###########
cor(temp,altura)
## [1] -0.2923064
#####Analisis#####
#al compara metodo grafico, numerico y la correlación de person encontramos que
# angulo es de 11,29281, person de -0.29 y confirmando con el grafico llegamos a la
# conclusion que temperatura y altura presentan correlación positiva

######Otros escenarios#######
x=c(10,-10)
y=c(10,-10)   #Introducción tamaño del plano 3D
z=c(10,-10)
g=scatterplot3d(x,y,z,grid = 1,tick.marks=T, box = T,col.axis = "darkgreen",col.grid = "lightgreen", main="Correlación geometrica \n Temperatura (°C) & Altura (cm)")
#Función Scatterplot3d me genera grafico 3D donde puedo alterar color, color de grilla, introsucir un titulo, el cual se guarda como g
temp=c(-5, -5.6,-7);temp 
## [1] -5.0 -5.6 -7.0
altura=c(9,7,8);altura
## [1] 9 7 8
# introducción vectores a graficar

#Función xyz.convert() me transforma coordenadas 3d (x,y,z) a 2D (x,y), util para graficar
ori= g$xyz.convert(0,0,0) #creamos coordenadas de origen para trasado del vector
pt <- g$xyz.convert(temp[1],temp[2],temp[3])
pa <- g$xyz.convert(altura[1],altura[2],altura[3])
#Se realiza la transformación de las coordenadas de los dos vectores

#Función segments() trasa una linea con origen ori en coordenas xy y destino pt
segments(ori$x,ori$y,pt$x,pt$y, col="red", lwd=2)
arrows2D(ori$x,ori$y,pt$x,pt$y,col = "red", add = T,lwd = 0.5) #Función arrows2d()introduce flecha para dar dirección al vector

segments(ori$x,ori$y,pa$x,pa$y,col="darkgreen",lwd=2)
arrows2D(ori$x,ori$y,pa$x,pa$y,col = "darkgreen", add = T,lwd = 0.5)


#####Correlación mediante método numerico##########
uv=temp%*%altura;uv
##        [,1]
## [1,] -140.2
modu=norm(temp,type = "2");modu
## [1] 10.2645
modv=norm(altura,type = "2");modv
## [1] 13.92839
cosphi=uv/(modu*modv)
angulo=acos(cosphi);angulo  #Angulo en radianes
##          [,1]
## [1,] 2.944496
gradoss=(angulo*180)/pi;gradoss  #Angulo en grados
##          [,1]
## [1,] 168.7072
legend(x=-2.2,y=4,legend=c("Temperatura (°C)","Altura (cm)"), fill=c("red","darkgreen"),cex=0.55,text.font=1)
legend(x=3.3,y=-1.26,legend=c("Angulo: 168.7°","Person: 0.29"),cex=0.7,text.font=1)

########Correlación de pearson###########
cor(temp,altura)
## [1] 0.2923064