{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "eff64d06-237a-4374-8b10-3a27ba1a4c67",
   "metadata": {},
   "source": [
    "# Calculando a variância e covariância de uma matriz de dados"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "48a3c0ad-f3c7-43a2-a2b8-5ce49383f076",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b3821755-27e8-4439-8a17-90f41cae6252",
   "metadata": {},
   "source": [
    "## 1.Dados"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "a632dcca-903b-421d-951d-3d3da2b5bcd0",
   "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)\n",
    "(n,d) = np.shape(Data)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bb0d4980-7719-461b-bc7a-5ba71c574fb4",
   "metadata": {},
   "source": [
    "## 2.Média"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "c0a67646-15f9-4d66-a3c8-4d99af3b3783",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Média:\n",
      "[1.82 1.9 ]\n"
     ]
    }
   ],
   "source": [
    "u=np.mean(Data, axis=0) #media de cada coluna\n",
    "print(u)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ff146721-ca05-43ef-b9ad-eb1e5cd568ae",
   "metadata": {},
   "source": [
    "## 3.Desvio médio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "4efaf012-c929-4f55-8b14-ed8fc34c93b8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.82 1.9 ]\n"
     ]
    }
   ],
   "source": [
    "Dm = Data - u\n",
    "print(u)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "28f3eb14-5eff-45a6-ac10-a0b647704442",
   "metadata": {},
   "source": [
    "## 4.Matriz de Covariância"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ae08922-dc25-4825-a62f-92aa1b4e79af",
   "metadata": {},
   "source": [
    "<img src=\"covariancia.png\">"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f9ff50a-d1ec-4240-a965-bb4c1f9cbd5c",
   "metadata": {},
   "source": [
    "Sendo,\n",
    "\n",
    "$\\sigma_{ij}$ : covariância entre a variável $X_i$ e a variável $X_j$. \n",
    "\n",
    "$\\sigma_{ii}$ é a variância\n",
    "\n",
    "$\\sigma_{i}$ é o desvio padrão $\\sigma_{i} = \\sqrt{\\sigma_{ii}}$\n",
    "    \n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ef361e7a-bd7c-4885-a579-247b79486275",
   "metadata": {},
   "source": [
    "### Os Dados que usamos tem duas dimensões (duas variáveis ou campos)\n",
    "### Calculando"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "b1c89687-9d15-4f14-bdd8-f97c6645b1c7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.59955556 0.61444444]\n",
      " [0.61444444 0.73555556]]\n"
     ]
    }
   ],
   "source": [
    "Cv = (Dm.T@Dm)/(n-1)\n",
    "print(Cv)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6afac2f1-361f-4dec-ba9a-797e55bbea1c",
   "metadata": {},
   "source": [
    "## 5.Variância, os elementos da diagonal principal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "3e52c7f9-2cff-4f56-a99f-9a0e4427675f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.59955556 0.73555556]\n"
     ]
    }
   ],
   "source": [
    "Var=np.diag(Cv)\n",
    "print(Var)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "17827a93-791c-4879-9c6e-c7da0a699697",
   "metadata": {},
   "source": [
    "## 6.Desvio padrão, a raiz quadrada da variância"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "e895b5fc-fa50-4416-b46c-4b90bfca9437",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.77430973 0.85764536]\n"
     ]
    }
   ],
   "source": [
    "dp=np.sqrt(Var)\n",
    "print(dp)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "27f53009-01b1-4142-a1ab-66c8417918cc",
   "metadata": {},
   "source": [
    "## 7.Utilizando o desvio padrão como uma matriz diagonal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "45836ab2-366f-4027-ba2e-5ab13988b3f7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.77430973 0.        ]\n",
      " [0.         0.85764536]]\n"
     ]
    }
   ],
   "source": [
    "diagDp=np.diag(dp)\n",
    "print(diagDp)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ad41f41d-78fb-499c-9d8f-782a5617de44",
   "metadata": {},
   "source": [
    "## 8.O método reshape para transformar um vetor em uma matriz.\n",
    "Para um array provindo de uma lista simples, o este array é um vetor com uma dimensão. Mas um vetor unidimensional não é uma matriz. O método shape retorna uma tupla do tipo (d,_), indicando que não sabe quantos elementos tem na segunda dimensão. Se usarmos o método ndim, teremos a dimensão 1 e o método size nos dará o número de elementos. Com isso podemos transformar este array em um vetor (vetor coluna) ou vetor linha, com o método reshape. A transformação é necessária para operações matriciais. Lembrando que algebricamente um vetor é uma matriz com n linha e uma coluna.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "016cb48a-404f-4f7b-8a20-a1e0918d11c3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Vetor de desvios padrões em formato matricial (vetor linha)\n",
      "[[0.77430973 0.85764536]]\n",
      "Formato do vetor\n",
      "(1, 2)\n"
     ]
    }
   ],
   "source": [
    "l=dp.ndim\n",
    "c=dp.size\n",
    "dp=dp.reshape(l,c)\n",
    "print(\"Vetor de desvios padrões em formato matricial (vetor linha)\")\n",
    "print(dp)\n",
    "print(\"Formato do vetor\")\n",
    "print(dp.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "273b7636-24c8-4d48-8cd6-063a8467b5cb",
   "metadata": {},
   "source": [
    "## 9.Repetindo o vetor de desvios padrões para operações matriciais"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "e60e36dc-e605-44d7-84ab-65880801d9a6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Matriz com duas linhas de desvio padrão\n",
      "[[0.77430973 0.85764536]\n",
      " [0.77430973 0.85764536]]\n"
     ]
    }
   ],
   "source": [
    "multDp = np.ones((c,1))@dp\n",
    "print(\"Matriz com duas linhas de desvio padrão\")\n",
    "print(multDp)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e4487508-d086-45f5-953a-a5c21c9f14b5",
   "metadata": {},
   "source": [
    "## 10.Criado a matriz de copadrões \n",
    "Multiplica a diagonald e padrões com as linhas de padrões"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "04f16db9-c391-4b38-a14f-8e523619931d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Matriz de copadrão\n",
      "[[0.59955556 0.66408314]\n",
      " [0.66408314 0.73555556]]\n"
     ]
    }
   ],
   "source": [
    "Cp=diagDp@multDp\n",
    "print(\"Matriz de copadrão\")\n",
    "print(Cp)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c41ddf73-f283-4aec-a85d-4af8f2794f10",
   "metadata": {},
   "source": [
    "## 11.Encontrando a matriz de correlação"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "369a439a-46bc-42a3-a987-475ed3cc9225",
   "metadata": {},
   "source": [
    "<img src=\"correlacao.png\">"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5dbb9779-d562-4f53-ae7e-c0b9792c5b73",
   "metadata": {},
   "source": [
    "Onde,\n",
    "\n",
    "$\\rho_{ij}$   : é a correlação entre a variável $i$ e $j$\n",
    "\n",
    "$\\sigma_{ij}$ : é a covariância entre a variável $i$ e $j$\n",
    "\n",
    "$\\sigma_i$    : é o desvio padrão da variável $i$, a raiz quadrada da variância $\\sigma_{ii}$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "16fd94e9-18e7-409e-96a2-92f3673b273d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Matriz de correlação\n",
      "[[1.         0.92525228]\n",
      " [0.92525228 1.        ]]\n"
     ]
    }
   ],
   "source": [
    "Corr=Cv/Cp\n",
    "print(\"Matriz de correlação\")\n",
    "print(Corr)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1208c9f0-6d1e-4732-840e-5a3684f482fc",
   "metadata": {},
   "source": [
    "Repare que a correlação de $\\rho_{ii}$ é sempre 1. Na matriz de covariância são as diagonais da matriz."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
