From b42fc5c2bd9a822dd3fa4a333ebaef69b8df74f2 Mon Sep 17 00:00:00 2001 From: Produpro <136916627+Produpro@users.noreply.github.com> Date: Mon, 2 Oct 2023 18:47:05 +0000 Subject: [PATCH] Intentandolo --- notebook/problems.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notebook/problems.ipynb b/notebook/problems.ipynb index c1fa790d..8d8f529c 100644 --- a/notebook/problems.ipynb +++ b/notebook/problems.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","id":"b967ebc8","metadata":{},"source":["# Probability distribution problems"]},{"cell_type":"markdown","id":"c9b71587","metadata":{},"source":["## Binomial distribution\n","\n","In probability theory and statistics, the binomial distribution is the discrete probability distribution that gives only two possible results in an experiment, for example, when you flip a coin it can by either head or tails."]},{"cell_type":"code","execution_count":1,"id":"4eb16d6e","metadata":{},"outputs":[],"source":["from scipy.stats import binom\n","\n","# Define all the probability functions related to this distribution\n","\n","def dbinom(x, size, prob = 0.5):\n"," \"\"\"\n"," Calculates the point estimate of the binomial distribution\n"," \"\"\"\n"," result = binom.pmf(k = x, n = size, p = prob, loc = 0)\n","\n"," return result\n","\n","def pbinom(q, size, prob = 0.5):\n"," \"\"\"\n"," Calculates the cumulative of the binomial distribution\n"," \"\"\"\n"," result = binom.cdf(k = q, n = size, p = prob, loc = 0)\n","\n"," return result\n","\n","def qbinom(p, size, prob = 0.5):\n"," \"\"\"\n"," Calculates the quantile function from the binomial distribution\n"," \"\"\"\n"," result = binom.ppf(q = p, n = size, p = prob, loc = 0)\n","\n"," return result\n","\n","def rbinom(n, size, prob = 0.5):\n"," \"\"\"\n"," Generates random variables from the binomial distribution\n"," \"\"\"\n"," result = binom.rvs(n = size, p = prob, size = n)\n","\n"," return result"]},{"cell_type":"code","execution_count":2,"id":"6cf6313a","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Probability that a Binomial(10, 0.2) takes the value 2: 0.30198988800000004\n","Probability that a Binomial(10, 0.2) will take a value less than 2: 0.6777995263999999\n","Which value of a Binomial(10, 0.2) has a cumulative probability of 0.9? 4.0\n","Generate 2000 random values from a Binomial(10, 0.2) distribution: [1 4 3 ... 0 0 1]\n"]}],"source":["# Binomial(10, 0.2) distribution where n = 10 is the number of trials and p = 0.2 is the probability of success in a single trial.\n","import numpy as np\n","np.random.seed(42)\n","\n","print(f\"Probability that a Binomial(10, 0.2) takes the value 2: {dbinom(2, size = 10, prob = 0.2)}\")\n","print(f\"Probability that a Binomial(10, 0.2) will take a value less than 2: {pbinom(2, size = 10, prob = 0.2)}\")\n","print(f\"Which value of a Binomial(10, 0.2) has a cumulative probability of 0.9? {qbinom(0.9, size = 10, prob = 0.2)}\")\n","print(f\"Generate 2000 random values from a Binomial(10, 0.2) distribution: {rbinom(2000, size = 10, prob = 0.2)}\")"]},{"cell_type":"code","execution_count":3,"id":"69fd07da","metadata":{},"outputs":[{"data":{"image/png":"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gxHUvXC73aqoqJDb7Xa6lLBgfJErmscmMb5IF83jc3JsUTGZDACAaMUZNQAABiOoAQAwGEENAIDBCGoAAAxGUH9LZWWlMjIylJCQoNzcXO3Zs8fpkmzz5ptvav78+UpLS5PL5dLWrVudLsk2Pp9PM2fOVGJiolJSUlRYWKiDBw86XZZtVq9erenTpwdftpCXl6fXXnvN6bLCYsWKFXK5XFq6dKnTpdjmwQcflMvlClmmTJnidFm2+fTTT/XTn/5UF154oYYNG6YrrrhCe/fudbosW2RkZJz2s3O5XCotLR2yGgjqU2zevFler1cVFRWqr69XZmamCgoK1Nra6nRptujo6FBmZqYqKyudLsV2O3fuVGlpqXbv3q3q6mp99dVXuu6669TR0eF0abYYN26cVqxYobq6Ou3du1c//OEPdf311+udd95xujRbvf3223rqqac0ffp0p0ux3fe+9z199tlnweWtt95yuiRbfP7555ozZ47OO+88vfbaa3r33Xf16KOPauTIkU6XZou333475OdWXV0tSbrhhhuGrggLQbNmzbJKS0uD693d3VZaWprl8/kcrCo8JFlbtmxxuoywaW1ttSRZO3fudLqUsBk5cqT1+9//3ukybNPe3m5NmjTJqq6utq655hqrrKzM6ZJsU1FRYWVmZjpdRljce++91lVXXeV0GUOmrKzMuuSSS6xAIDBkx+SM+mtdXV2qq6tTfn5+sC0mJkb5+fmqra11sDJ8F21tbZKkUaNGOVyJ/bq7u7Vp0yZ1dHQoLy/P6XJsU1paqnnz5oX8PxhNPvjgA6WlpWnixIlauHChGhsbnS7JFi+//LJycnJ0ww03KCUlRTNmzNC6deucLissurq69Nxzz+mmm26y5QOgBoqg/tqxY8fU3d0tj8cT0u7xeNTc3OxQVfguAoGAli5dqjlz5mjatGlOl2Obffv2acSIEXK73br11lu1ZcsWTZ061emybLFp0ybV19fL5/M5XUpY5ObmasOGDaqqqtLq1at1+PBhXX311cGP6I1kH330kVavXq1JkyZp27Ztuu2223TnnXfq2Wefdbo0223dulXHjx/XjTfeOKTHjYpPzwJOVVpaqv3790fNPcCTJk+erIaGBrW1tenFF19UcXGxdu7cGfFh3dTUpLKyMlVXVyshIcHpcsJi7ty5wa+nT5+u3NxcTZgwQc8//7wWL17sYGWDFwgElJOTo+XLl0uSZsyYof3792vNmjUqLi52uDp7Pf3005o7d67S0tKG9LicUX9t9OjRio2NVUtLS0h7S0uLUlNTHaoKZ2vJkiV65ZVXtH379rB89KmT4uPjdemllyo7O1s+n0+ZmZl6/PHHnS5r0Orq6tTa2qorr7xScXFxiouL086dO/XEE08oLi5O3d3dTpdouwsuuECXXXaZDh065HQpgzZmzJjTflm8/PLLo+bS/kkff/yx3njjDd18881DfmyC+mvx8fHKzs5WTU1NsC0QCKimpiaq7gNGK8uytGTJEm3ZskV//vOfdfHFFztdUtgFAgF1dnY6XcagXXvttdq3b58aGhqCS05OjhYuXKiGhgbFxsY6XaLtTpw4oQ8//FBjxoxxupRBmzNnzmmPQr7//vuaMGGCQxWFx/r165WSkqJ58+YN+bG59H0Kr9er4uJi5eTkaNasWVq5cqU6OjpUUlLidGm2OHHiRMhv8IcPH1ZDQ4NGjRql8ePHO1jZ4JWWlmrjxo166aWXlJiYGJxXkJycrGHDhjlc3eCVl5dr7ty5Gj9+vNrb27Vx40bt2LFD27Ztc7q0QUtMTDxtLsH555+vCy+8MGrmGNx9992aP3++JkyYoCNHjqiiokKxsbFasGCB06UN2l133aXZs2dr+fLl+vGPf6w9e/Zo7dq1Wrt2rdOl2SYQCGj9+vUqLi5WXJwDsTlk88sjxO9+9ztr/PjxVnx8vDVr1ixr9+7dTpdkm+3bt1uSTluKi4udLm3QehuXJGv9+vVOl2aLm266yZowYYIVHx9vXXTRRda1115rvf76606XFTbR9nhWUVGRNWbMGCs+Pt4aO3asVVRUZB06dMjpsmzzxz/+0Zo2bZrldrutKVOmWGvXrnW6JFtt27bNkmQdPHjQkePzMZcAABiMe9QAABiMoAYAwGAENQAABiOoAQAwGEENAIDBCGoAAAxGUAMAYDCCGgAAgxHUAAAYjKAGAMBgBDUAAAYjqAEAMNj/B/oXX+GEjuitAAAAAElFTkSuQmCC","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["import matplotlib.pyplot as plt\n","\n","np.random.seed(42)\n","\n","size = 10\n","prob = 0.2\n","data = rbinom(2000, size = 10, prob = 0.2)\n","\n","pmf = dbinom(data, size = size, prob = prob)\n","cdf = pbinom(data, size = size, prob = prob)\n","ppf = qbinom(data, size = size, prob = prob)\n","\n","fig, axis = plt.subplots(3, 1, figsize = (5, 7))\n","\n","axis[0].stem(data, pmf, \"r-\")\n","axis[1].stem(data, cdf, \"b-\")\n","axis[2].stem(data, ppf, \"g-\")\n","\n","# Adjust the layout\n","plt.tight_layout()\n","\n","# Show the plot\n","plt.show()"]},{"cell_type":"markdown","id":"8aa7eaa0","metadata":{},"source":["## Exercise 1\n","\n","Write the above functions but for both normal and uniform distributions."]},{"cell_type":"code","execution_count":4,"id":"98d5f012","metadata":{},"outputs":[],"source":["# TODO"]}],"metadata":{"interpreter":{"hash":"0f2f6c680cf484319d387fabac80ca4ff4fc33965036e02100b3fe02600f1423"},"kernelspec":{"display_name":"Python 3.10.1 64-bit","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.11.4"}},"nbformat":4,"nbformat_minor":5} +{"cells":[{"cell_type":"markdown","id":"b967ebc8","metadata":{},"source":["# Probability distribution problems"]},{"cell_type":"markdown","id":"c9b71587","metadata":{},"source":["## Binomial distribution\n","\n","In probability theory and statistics, the binomial distribution is the discrete probability distribution that gives only two possible results in an experiment, for example, when you flip a coin it can by either head or tails."]},{"cell_type":"code","execution_count":2,"id":"4eb16d6e","metadata":{},"outputs":[],"source":["from scipy.stats import binom\n","\n","# Define all the probability functions related to this distribution\n","\n","def dbinom(x, size, prob = 0.5):\n"," \"\"\"\n"," Calculates the point estimate of the binomial distribution\n"," \"\"\"\n"," result = binom.pmf(k = x, n = size, p = prob, loc = 0)\n","\n"," return result\n","\n","def pbinom(q, size, prob = 0.5):\n"," \"\"\"\n"," Calculates the cumulative of the binomial distribution\n"," \"\"\"\n"," result = binom.cdf(k = q, n = size, p = prob, loc = 0)\n","\n"," return result\n","\n","def qbinom(p, size, prob = 0.5):\n"," \"\"\"\n"," Calculates the quantile function from the binomial distribution\n"," \"\"\"\n"," result = binom.ppf(q = p, n = size, p = prob, loc = 0)\n","\n"," return result\n","\n","def rbinom(n, size, prob = 0.5):\n"," \"\"\"\n"," Generates random variables from the binomial distribution\n"," \"\"\"\n"," result = binom.rvs(n = size, p = prob, size = n)\n","\n"," return result"]},{"cell_type":"code","execution_count":2,"id":"6cf6313a","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Probability that a Binomial(10, 0.2) takes the value 2: 0.30198988800000004\n","Probability that a Binomial(10, 0.2) will take a value less than 2: 0.6777995263999999\n","Which value of a Binomial(10, 0.2) has a cumulative probability of 0.9? 4.0\n","Generate 2000 random values from a Binomial(10, 0.2) distribution: [1 4 3 ... 0 0 1]\n"]}],"source":["# Binomial(10, 0.2) distribution where n = 10 is the number of trials and p = 0.2 is the probability of success in a single trial.\n","import numpy as np\n","np.random.seed(42)\n","\n","print(f\"Probability that a Binomial(10, 0.2) takes the value 2: {dbinom(2, size = 10, prob = 0.2)}\")\n","print(f\"Probability that a Binomial(10, 0.2) will take a value less than 2: {pbinom(2, size = 10, prob = 0.2)}\")\n","print(f\"Which value of a Binomial(10, 0.2) has a cumulative probability of 0.9? {qbinom(0.9, size = 10, prob = 0.2)}\")\n","print(f\"Generate 2000 random values from a Binomial(10, 0.2) distribution: {rbinom(2000, size = 10, prob = 0.2)}\")"]},{"cell_type":"code","execution_count":3,"id":"69fd07da","metadata":{},"outputs":[{"data":{"image/png":"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gxHUvXC73aqoqJDb7Xa6lLBgfJErmscmMb5IF83jc3JsUTGZDACAaMUZNQAABiOoAQAwGEENAIDBCGoAAAxGUH9LZWWlMjIylJCQoNzcXO3Zs8fpkmzz5ptvav78+UpLS5PL5dLWrVudLsk2Pp9PM2fOVGJiolJSUlRYWKiDBw86XZZtVq9erenTpwdftpCXl6fXXnvN6bLCYsWKFXK5XFq6dKnTpdjmwQcflMvlClmmTJnidFm2+fTTT/XTn/5UF154oYYNG6YrrrhCe/fudbosW2RkZJz2s3O5XCotLR2yGgjqU2zevFler1cVFRWqr69XZmamCgoK1Nra6nRptujo6FBmZqYqKyudLsV2O3fuVGlpqXbv3q3q6mp99dVXuu6669TR0eF0abYYN26cVqxYobq6Ou3du1c//OEPdf311+udd95xujRbvf3223rqqac0ffp0p0ux3fe+9z199tlnweWtt95yuiRbfP7555ozZ47OO+88vfbaa3r33Xf16KOPauTIkU6XZou333475OdWXV0tSbrhhhuGrggLQbNmzbJKS0uD693d3VZaWprl8/kcrCo8JFlbtmxxuoywaW1ttSRZO3fudLqUsBk5cqT1+9//3ukybNPe3m5NmjTJqq6utq655hqrrKzM6ZJsU1FRYWVmZjpdRljce++91lVXXeV0GUOmrKzMuuSSS6xAIDBkx+SM+mtdXV2qq6tTfn5+sC0mJkb5+fmqra11sDJ8F21tbZKkUaNGOVyJ/bq7u7Vp0yZ1dHQoLy/P6XJsU1paqnnz5oX8PxhNPvjgA6WlpWnixIlauHChGhsbnS7JFi+//LJycnJ0ww03KCUlRTNmzNC6deucLissurq69Nxzz+mmm26y5QOgBoqg/tqxY8fU3d0tj8cT0u7xeNTc3OxQVfguAoGAli5dqjlz5mjatGlOl2Obffv2acSIEXK73br11lu1ZcsWTZ061emybLFp0ybV19fL5/M5XUpY5ObmasOGDaqqqtLq1at1+PBhXX311cGP6I1kH330kVavXq1JkyZp27Ztuu2223TnnXfq2Wefdbo0223dulXHjx/XjTfeOKTHjYpPzwJOVVpaqv3790fNPcCTJk+erIaGBrW1tenFF19UcXGxdu7cGfFh3dTUpLKyMlVXVyshIcHpcsJi7ty5wa+nT5+u3NxcTZgwQc8//7wWL17sYGWDFwgElJOTo+XLl0uSZsyYof3792vNmjUqLi52uDp7Pf3005o7d67S0tKG9LicUX9t9OjRio2NVUtLS0h7S0uLUlNTHaoKZ2vJkiV65ZVXtH379rB89KmT4uPjdemllyo7O1s+n0+ZmZl6/PHHnS5r0Orq6tTa2qorr7xScXFxiouL086dO/XEE08oLi5O3d3dTpdouwsuuECXXXaZDh065HQpgzZmzJjTflm8/PLLo+bS/kkff/yx3njjDd18881DfmyC+mvx8fHKzs5WTU1NsC0QCKimpiaq7gNGK8uytGTJEm3ZskV//vOfdfHFFztdUtgFAgF1dnY6XcagXXvttdq3b58aGhqCS05OjhYuXKiGhgbFxsY6XaLtTpw4oQ8//FBjxoxxupRBmzNnzmmPQr7//vuaMGGCQxWFx/r165WSkqJ58+YN+bG59H0Kr9er4uJi5eTkaNasWVq5cqU6OjpUUlLidGm2OHHiRMhv8IcPH1ZDQ4NGjRql8ePHO1jZ4JWWlmrjxo166aWXlJiYGJxXkJycrGHDhjlc3eCVl5dr7ty5Gj9+vNrb27Vx40bt2LFD27Ztc7q0QUtMTDxtLsH555+vCy+8MGrmGNx9992aP3++JkyYoCNHjqiiokKxsbFasGCB06UN2l133aXZs2dr+fLl+vGPf6w9e/Zo7dq1Wrt2rdOl2SYQCGj9+vUqLi5WXJwDsTlk88sjxO9+9ztr/PjxVnx8vDVr1ixr9+7dTpdkm+3bt1uSTluKi4udLm3QehuXJGv9+vVOl2aLm266yZowYYIVHx9vXXTRRda1115rvf76606XFTbR9nhWUVGRNWbMGCs+Pt4aO3asVVRUZB06dMjpsmzzxz/+0Zo2bZrldrutKVOmWGvXrnW6JFtt27bNkmQdPHjQkePzMZcAABiMe9QAABiMoAYAwGAENQAABiOoAQAwGEENAIDBCGoAAAxGUAMAYDCCGgAAgxHUAAAYjKAGAMBgBDUAAAYjqAEAMNj/B/oXX+GEjuitAAAAAElFTkSuQmCC","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["import matplotlib.pyplot as plt\n","\n","np.random.seed(42)\n","\n","size = 10\n","prob = 0.2\n","data = rbinom(2000, size = 10, prob = 0.2)\n","\n","pmf = dbinom(data, size = size, prob = prob)\n","cdf = pbinom(data, size = size, prob = prob)\n","ppf = qbinom(data, size = size, prob = prob)\n","\n","fig, axis = plt.subplots(3, 1, figsize = (5, 7))\n","\n","axis[0].stem(data, pmf, \"r-\")\n","axis[1].stem(data, cdf, \"b-\")\n","axis[2].stem(data, ppf, \"g-\")\n","\n","# Adjust the layout\n","plt.tight_layout()\n","\n","# Show the plot\n","plt.show()"]},{"cell_type":"markdown","id":"8aa7eaa0","metadata":{},"source":["## Exercise 1\n","\n","Write the above functions but for both normal and uniform distributions."]},{"cell_type":"code","execution_count":1,"id":"98d5f012","metadata":{},"outputs":[],"source":["from scipy.stats import norm\n","\n","# Define all the probability functions related to this distribution\n","\n","def dnorm(x, mean = 0, std = 1):\n"," \"\"\"\n"," Calcula la densidad de la distribución normal\n"," \"\"\"\n"," result = norm.pdf(x, loc = mean, scale = std)\n","\n"," return result\n","\n","def pnorm(x, mean = 0, std = 1):\n"," \"\"\"\n"," Calcula el acumulado de la distribución normal\n"," \"\"\"\n"," result = norm.cdf(x = x, loc = mean, scale = std)\n","\n"," return result\n","\n","def qnorm(p, mean = 0, std = 1):\n"," \"\"\"\n"," Calcula la función cuantil de la distribución normal\n"," \"\"\"\n"," result = norm.ppf(q = p, loc = mean, scale = std)\n","\n"," return result\n","\n","def rnorm(n, mean = 0, std = 1):\n"," \"\"\"\n"," Genera valores aleatorios\n"," \"\"\"\n"," result = norm.rvs(size = n, loc = mean, scale = std)\n","\n"," return result"]},{"cell_type":"code","execution_count":null,"id":"d27fb978","metadata":{},"outputs":[],"source":["from scipy.stats import uniform\n","\n","#Uniforme\n","def dunif(x, low = 0, high = 1):\n"," \"\"\"\n"," Calcula la estimación puntual de la distribución uniforme.\n"," \"\"\"\n"," result = uniform.pdf(x, loc = low, scale = (high - low))\n","\n"," return result\n","\n","def punif(q, low = 0, high = 1):\n"," \"\"\"\n"," Calcula el acumulado de la distribución uniforme.\n"," \"\"\"\n"," result = uniform.cdf(q, loc = low, scale = (high - low))\n","\n"," return result\n","\n","def qunif(p, low = 0, high = 1):\n"," \"\"\"\n"," Calculates the quantile function from the uniform distribution\n"," \"\"\"\n"," result = uniform.ppf(p, loc = low, scale = (high - low))\n","\n"," return result\n","\n","def runif(n, low = 0, high = 1):\n"," \"\"\"\n"," Calcula la función cuantil a partir de la distribución uniforme.\n"," \"\"\"\n"," result = uniform.rvs(loc = low, scale = (high - low), size = n)\n","\n"," return result"]}],"metadata":{"interpreter":{"hash":"0f2f6c680cf484319d387fabac80ca4ff4fc33965036e02100b3fe02600f1423"},"kernelspec":{"display_name":"Python 3.10.1 64-bit","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.11.4"}},"nbformat":4,"nbformat_minor":5}