{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Criando uma Transformada de Karhunen-Loeve (TKL)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy.linalg as la"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Inserindo dados"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "Data=np.array([[2.5, 2.4],\n",
    "      [0.5, 0.7],\n",
    "      [2.2, 2.9],\n",
    "      [1.9, 2.2],\n",
    "      [3.1, 3.0],\n",
    "      [2.3, 2.7],\n",
    "      [2.0, 1.6],\n",
    "      [1.1, 1.0],\n",
    "      [1.5, 1.6],\n",
    "      [1.1, 0.9]],dtype=float)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Guardar as linhas e colunas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10, 2)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r,c = np.shape(Data)\n",
    "r,c"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Média de cada atributo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.82, 1.9 ])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u=np.mean(Data,axis=0)\n",
    "u"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Ajustando os dados "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0.68  0.5 ]\n",
      " [-1.32 -1.2 ]\n",
      " [ 0.38  1.  ]\n",
      " [ 0.08  0.3 ]\n",
      " [ 1.28  1.1 ]\n",
      " [ 0.48  0.8 ]\n",
      " [ 0.18 -0.3 ]\n",
      " [-0.72 -0.9 ]\n",
      " [-0.32 -0.3 ]\n",
      " [-0.72 -1.  ]]\n"
     ]
    }
   ],
   "source": [
    "DataAdjust=Data-u #Data - medias\n",
    "print(DataAdjust)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Repare que $DataAdjust$ está em formato de TABELA DE DADOS, o python só calcula a matriz de covariância no modo algébrico, ou seja, como VETOR DE VARIÁVEIS ALEATÓRIAS. Logo, temos que usar a transposta.\n",
    "### Matriz $K$ de covariância da transposta da tabela $DataAdjust$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.59955556 0.61444444]\n",
      " [0.61444444 0.73555556]]\n"
     ]
    }
   ],
   "source": [
    "K=np.cov(DataAdjust.T)\n",
    "print(K)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Encontrando os Autovalores e autovetores de $K$\n",
    "#### Como $K$ é simétrica, recomenda-se a função eigh()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "autoVal,autoVet=la.eigh(K)   #autovalores e autovetores da matriz de covariância K"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Autovalores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.04935981 1.2857513 ]\n"
     ]
    }
   ],
   "source": [
    "print(autoVal)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Autovetores $V$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[-0.74498239  0.66708413]\n",
      " [ 0.66708413  0.74498239]]\n"
     ]
    }
   ],
   "source": [
    "V=autoVet\n",
    "print(V)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Autovalores $D$ em Diagonal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.04935981 0.        ]\n",
      " [0.         1.2857513 ]]\n"
     ]
    }
   ],
   "source": [
    "D=np.diag(autoVal)\n",
    "print(D)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Lembrando que $AV = VD$, para $A$ matriz quadrada, $V$ autovetores, $D$ autovalores em diagonal\n",
    "### Assim, podemos verificar que $KV=VD$, para a matriz de covariância dos dados"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Verificando $KV$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.03677219,  0.85770429],\n",
       "       [ 0.03292715,  0.95786207]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "K@V"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Verificando $VD$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.03677219,  0.85770429],\n",
       "       [ 0.03292715,  0.95786207]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "V@D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "i=np.argsort(autoVal)[::-1]  #índices dos autovalores ordenados em ordem decrescente ([::-1])\n",
    "autoVal=autoVal[i]           #autovalores ordenados por ordem decrescente\n",
    "O=autoVet[:,i]               #autovetores ortogonais associados a cada autovalor em ordem decrecente"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Autovalores ordenados em ordem de maior para menor importância (decrescente)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.2857513 , 0.04935981])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "autoVal"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Autovetores $O$ (ortogonais) ordenados conforme autovalores correspondentes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.66708413, -0.74498239],\n",
       "       [ 0.74498239,  0.66708413]])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "O"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### $O$ é o conjunto de autovalores ortogonais de $K$, que será a covariância da transformação de DataAdjust\n",
    "##### Direção dos autovalores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1.82      , 1.9       ],\n",
       "       [1.07501761, 2.56708413]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eixoMax=np.array([u,u+O[:,0]])\n",
    "eixoMin=np.array([u,u+O[:,1]])\n",
    "eixoMin"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Fazendo a Transformada.\n",
    "### Dado um vetor de Variáveis Aleatórias $X$, achamos $Y$ pela transformação $Y = O'X$\n",
    "#### Se colocarmos em formato de TABELA DE DADOS seria $Y_{tab}'=(O'X_{tab}')=X_{tab} O''=X_{tab} O$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Transformando $Data$ em $FinalData$, ou dados $X_{tab}$ em dados $Y_{tab}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "FinalData=Data@O               #Y'=X'O ou Ytab=Xtab O e Y=O'X\n",
    "FinalDataAdjust=DataAdjust@O"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plotando"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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cGAOUYEKmrw3rzFjxohKlSoV+JyhUdVTpkzJt6+hCZAvXLgghgwZIpycnISdnZ1o0KCBGDt2rEhPTxdCFDyqulKlSuLs2bPC19dXVKxYUTg6Ooo333xTb1SyEELs3btXuLu7iwoVKoj69euL999/X+zfv9/gMYsz4fTu3buFv7+/qFmzpihfvrz417/+Jfz8/MSKFStERkaGbr+kpCQxadIkUbduXVG+fHnRsGFDMXPmTF35CnvPrl27JgCIL774Qm97znvy/fff67Z169ZNtGrVSsTExAgvLy9hb28v6tatKz788EOh0Wj0Xv88MQlh+HO8du2aGD9+vKhfv76wtbUVNWvWFJ06dRLz5s0rNO7c5VyzZo1u28OHD0VQUJCoXr26UKlUuhHD69atE35+fqJ27drCzs5O1KtXTwwdOlRvhHleOaPTw8LCCtznwIEDAoD48ssv9d7PvAx9TxYsWCBcXFyEvb29aNGihfjmm2/yjXIu6H3LMXbsWFG+fHlx48aNfM/NmDFDeHl5iX/961/C3t5eNG7cWLzzzjviwYMHun3ynu/YsWNi0KBBomHDhsLe3l44OTmJbt26iT179hT4HpSE3GtIjqtXr4rJkyeLpk2bCnt7e1GxYkXRsmVLERISIq5duyYyMzNFrVq1hIeHR4HHyMrKEmq1WrRu3bq0ikFkclRC/G/IHBE9t7Fjx2L79u1ITU1VOhST4evriwcPHuCPP/5QOhQqpszMTLi4uKBLly747rvvlA6HiEwAm6qJiEjP/fv3cenSJaxZswZ3797FjBkzlA6JiEwEE0ciItKzb98+jBs3DnXr1sWyZcv0puAhIuvGpmoiIiIikoXT8RARERGRLEwciYiIiEgWJo5EREREJAsTRyIiIiKShYkjEREREcnCxJGIiIiIZGHiSERERESyMHEkIiIiIlmYOBIRERGRLEwciYiIiEgWJo5EREREJAsTRyIiIiKShYkjEREREcnCxJGIiIiIZGHiSERERESyMHEkIiIiIlmYOBIRERGRLEwciYiIiEgWJo5EREREJAsTRyIiIiKShYkjEREREcnCxJGIiIiIZGHiSERERESyMHEkIiIiIlmYOBIRERGRLEwciYiIiEgWJo5EREREJAsTRyIiIiKShYkjEREREcnCxJGIiIiIZGHiSERERESyMHEkIiIiIlmYOBIRERGR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EhEREZEsTByJiIiISBYmjkREREQkCxNHIiIiIpKFiSMRERERycLEkYiIiIhkYeJIRERERLIwcSQiIiIiWSwucXRxcUHz5s3h7u6OF154AQEBATh69Gixj+Pr64sffvihRDFcv34d5cuXh4eHB9zd3eHu7o59+/bJet3KlStLdM7cPDw88OzZs+c+jhwxMTHw8vIy6jnWrl2L6tWrw9PTEy1atIC7uzvmzJlTojIaI95Dhw5BpVJh48aNxYrjp59+KtU48goLC8O9e/eMeg4qPS4uLqhVqxY0Go1uW85367333iv28WbPnq173YoVK/Cf//yn1GJV2q5du/Drr78+1zH27NmD999/v5QiKtrYsWOxdOnSMjufIc9zX3te/fr1w9WrV416jtK+9926dQvt27dHdnZ2qR2ztOT++167di2CgoKKfYy9e/fijTfeKPbrLC5xBIDt27fj999/x19//YXx48ejX79+OHHiRJnGUL16dcTHx+P3339HaGgoRowYAa1WW+hrSitxjI+PR8WKFZ/7OKakZ8+eOHPmDC5evIiDBw8iPj4ew4YNUzosAMCqVavg6+uLVatWyX6NKSeOWVlZRoiG5GjQoAH27Nmje7x69epS+aEzadIkvPPOO899nOIq6ppXkKK+g6WROA4cOBBffPHFcx2D5IuMjESTJk2K9ZriXotK+943b948TJ06FeXKlU6qlJ2dbVJJ6IABA3Dy5MliJ/QWmTjmFhAQgMmTJ2PRokX4+eef4e3tDU9PT7i6umLNmjW6/S5cuIAOHTqgTZs2GDVqFNLT03XPXblyBT179oSbmxs8PDywa9cuAMCzZ88wbNgwtGzZEu7u7ujdu7fBGPz8/PDkyRM8fPgQAHDgwAG0adMGbm5u6NatGy5cuABAurhfuHABHh4eGDhwIADg/fffR7t27eDh4YFu3brhr7/+0h133759aNeuHdzd3eHh4aFLjlUqFVJTUwEAp06dgre3N9zc3NC+fXv88ssvAKQktUaNGvj000/Rtm1bNG3aFJGRkbpjv/LKK/Dy8oKbmxv69++vl4B8/PHHaNq0Kbp165bv1+vnn3+OVq1aoXXr1hg1ahSSk5MBSL9sct4/V1dX7N69W+5HmE/NmjWxevVq/Pzzzzh//ryi8T5+/BiRkZHYsmULzp8/r/cHmLeG4b333sPs2bMRHx+PFStW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dlU6HCKyYuWNfYIpU6bA398fPXv2xLx58wrdNyMjAxkZGbrH2dnZePjwIZycnKBSqYwdKhGVASEEnjx5gnr16qFcOXazliM5ORkA4OjoWOA+vH4SWT5TuH4aNXHcunUrfvvtN5w8eVLW/qGhoZgzZ44xQyIiE5GYmAi1Wq10GCZPCIGQkBB06dIFrq6uBe7H6yeR9VDy+mm0purExER4eXnhp59+gru7OwDA19e30KbqvL+Yk5OT0aBBA1y+fLnQX9qmIi0NaNjQFgDw998aVKoEaDQaREdHw8/PD7a2tgpHWHKWUA6WwTQ8fPgQzZo1w+PHj1GtWjWlwzF5U6ZMwb59+3DkyJFCbxTmfv0sLZbwN1Icue87V68+RbVqll/mHNb2WQOmcf00Wo3j6dOnce/ePbRt21a3TavVIjY2FkuXLkVGRgZsbGz0XmNvbw97e/t8x3J0dISTk5OxQi01FSr88/9OTtAljg4ODnBycjLrL7YllINlMC1sPi3aW2+9hT179iA2NrbI2gVzv36WFkv6G5Ej933H0bEiqle3/DLnsLbPOjclr59GSxx79OiBc+fO6W0bN24cmjdvjunTp+dLGomISCKEwFtvvYWdO3ciJiYGjRo1UjokIiIARkwcq1Spkq8/TqVKleDk5FRoPx0iIms3ZcoUbN68Gbt370aVKlVw584dAEC1atVQsWJFhaMjImvGIY1ERCZm+fLlSE5Ohq+vL+rWrav7t23bNqVDIyIrZ/TpeHKLiYkpy9MREZklI0+vS0RUYqxxJCIiIiJZmDgSERERkSxMHImIiIhIFiaORERERCQLE0ciIiIikoWJIxERERHJwsSRiIiIiGRh4khEREREsjBxJCIiIiJZmDgSERERkSxMHImIiIhIFiaORERERCQLE0ciIiIikoWJIxERERHJwsSRiIiIiGRh4khEREREsjBxJCIiIiJZmDgSERERkSxMHImIiIhIFiaORERERCQLE0ciIiIikoWJIxERERHJwsSRiIiIiGRh4khEREREsjBxJCIiIiJZmDgSERERkSxMHImIiIhIFiaORERERCQLE0ciIiIikoWJIxERERHJYtTEcfny5XBzc0PVqlVRtWpVeHt7Y//+/cY8JREREREZiVETR7VajQULFuDUqVM4deoUunfvjoCAAJw/f96YpyUiIiIiIyhvzIMPGDBA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\n",
      "text/plain": [
       "<Figure size 700x700 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(7,7))\n",
    "plt.subplot(2,2,1)\n",
    "plt.title('Dados Brutos\\n',size=8)\n",
    "plt.scatter(Data[:,0],Data[:,1],color = 'black')\n",
    "plt.axis([-1,4,-1,4])\n",
    "\n",
    "#scale : quanto menor, maior o tamanho da seta\n",
    "#quiver: pontoOrigem(x,y)+vetor\n",
    "plt.quiver(eixoMax[0,0],eixoMax[0,1],O[0,0],O[1,0], angles='xy',scale_units='xy', scale=0.4,color='red')\n",
    "plt.quiver(eixoMin[0,0],eixoMin[0,1],O[0,1],O[1,1], angles='xy',scale_units='xy', scale=1,color='blue')\n",
    "\n",
    "plt.grid(True)\n",
    "\n",
    "eixoMax=np.array([[0,0],O[:,0]])\n",
    "eixoMin=np.array([[0,0],O[:,1]])\n",
    "\n",
    "plt.subplot(2,2,2)\n",
    "plt.title('Dados ajustados (media zero)\\n',size=8)\n",
    "plt.scatter(DataAdjust[:,0],DataAdjust[:,1],color = 'black')\n",
    "plt.axis([-2,2,-2,2])\n",
    "\n",
    "\n",
    "plt.quiver(eixoMax[0,0],eixoMax[0,1],O[0,0],O[1,0], angles='xy', scale_units='xy', scale=0.4,color='red')\n",
    "plt.quiver(eixoMin[0,0],eixoMin[0,1],O[0,1],O[1,1], angles='xy', scale_units='xy', scale=1,color='blue')\n",
    "plt.grid(True)\n",
    "\n",
    "\n",
    "udat=np.mean(FinalData,axis=0);\n",
    "xdat=np.array([ [-1, udat[1] ],[5, udat[1] ] ]); #reta horizontal\n",
    "ydat=np.array([ [ udat[1], -1 ],[ udat[1], 4 ] ]); #reta vertical\n",
    "plt.suptitle(\"Principal Components Analysis - PCA\")\n",
    "plt.subplot(2,2,3)\n",
    "plt.title(\"DadosRotacionados=Dados.Autovetores\\n\",size=8)\n",
    "plt.scatter(FinalData[:,0],FinalData[:,1],color = 'black')\n",
    "plt.plot(ydat[:,0],ydat[:,1],color='blue')\n",
    "plt.plot(xdat[:,0],xdat[:,1],color='red')\n",
    "plt.axis([-1,4,-1,4])\n",
    "plt.grid(True)\n",
    "\n",
    "\n",
    "eixoMax=np.array([[-2,0],\n",
    "                  [ 2,0]]) #os pontos p1=(-2,0) e p2=(2,0)\n",
    "eixoMin=np.array([[0,-2],\n",
    "                  [0, 2]])\n",
    "plt.subplot(2,2,4)\n",
    "plt.title('Media zero rotacionados pelo maior eixo (vermelho)\\n',size=8)\n",
    "plt.scatter(FinalDataAdjust[:,0],FinalDataAdjust[:,1],color = 'black')\n",
    "plt.plot(eixoMin[:,0],eixoMin[:,1],color='blue');\n",
    "plt.plot(eixoMax[:,0],eixoMax[:,1],color='red');\n",
    "\n",
    "plt.axis([-2,2,-2,2])\n",
    "plt.grid(True)\n",
    "\n",
    "plt.tight_layout(pad=3) # espaço entre as janelas"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Matriz de Covariância dos dados transformados"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "Ky=np.cov(FinalDataAdjust.T)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1.28575130e+00 5.85951041e-17]\n",
      " [5.85951041e-17 4.93598137e-02]]\n"
     ]
    }
   ],
   "source": [
    "print(Ky)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Observe que alguns números acima são da ordem de e-17, ou seja, praticamente zero"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "D=np.diag(autoVal)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1.2857513 , 0.        ],\n",
       "       [0.        , 0.04935981]])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Assim vemos que $K_Y$ é igual aos autovalores de $K$ (ou $K_X$). Ou seja, as diagonais correspondem às variâncias e as não diagonais as covariâncias  $\\sigma^{2}_{X_i,X_j}$, que são praticamente zero. Ou seja, os novos dados estão descorrelacionados."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1.2857513 , 0.        ],\n",
       "       [0.        , 0.04935981]])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.round(Ky,8)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Vimos que de um VETOR DE VARIÁVEIS ALEATÓRIAS $X$ correlacionados, \n",
    "# podemos encontrar um VETOR DE VARIÁVEIS ALEATÓRIAS $Y = O'X$, \n",
    "# com eixos descorrelacionados"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Cada autovalor $D$ corresponde a quantidade explicativa do seu eixo correspondente\n",
    "## Assim, a proporção de variância explicada pelo $i$-ésimo componente é $pv_i = \\frac{\\lambda_i}{\\sum\\limits_{i=1}^{p}\\lambda_i}$, onde $\\lambda_i$ é um autovalor de $D$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Porcentagem explicativa do primeiro componente (eixo)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "96.30%\n"
     ]
    }
   ],
   "source": [
    "print(f'{(D[0,0]/np.sum(D))*100:.2f}%')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Porcentagem explicativa do segundo componente"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.70%\n"
     ]
    }
   ],
   "source": [
    "print(f'{(D[1,1]/np.sum(D))*100:.2f}%')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Vemos que o segundo eixo, explica muito pouco sobre os dados \n",
    "### Podemos realizar a PCA escolhendo somente o primeiro autovetor de $O$ e já explicaríamos $96.3\\%$\n",
    "### Logo, podemos desprezar o segundo eixo, pois explica muito pouco."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Podemos reduzir o conjunto de variáveis aleatórias $Y=O'_{px1}X$ com somente uma variável"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### No caso analizado acima, os novos dados reduzidos poderiam ser"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.17304596,  0.1828758 ,  0.38399082,  0.14052665, -0.21978491,\n",
       "        0.17607576, -0.33422207, -0.0639884 ,  0.03826913, -0.13069681])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "DataReduz = DataAdjust@O[:,1]\n",
    "DataReduz"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Veja acima que agora temos somente uma VARIÁVEL ALEATÓRIA"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Reduzindo o número de eixos principais\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Dados $k\\leq p$ eixos podemos saber o quanto esses eixos explicam os dados através da porcentagem acumulada  $pvt{_k} = \\frac{{\\sum\\limits_{i=1}^{k}\\lambda_i}}{\\sum\\limits_{i=1}^{p}\\lambda_i}$ \n",
    "### Assim se $pvt{_k}$  já é suficiente, podemos utilizar somente esses $k$ componentes principais para análise"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Enquanto somente rotacionamos os dados nos eixos de maior variação (explicação), estamos fazendo a TKL\n",
    "## Quando reduzimos os eixos, estamos fazendo a PCA"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## A PCA depende da TKL. Grosseiramente, chamamos tudo de PCA, mas não é a mesma coisa."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Eu costumo escolher $k$ quando $pvt_{k} \\geq 0.75$. Mas existem várias regras na literatura."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
