<jupyter_start><jupyter_text>**Categorical Data Anlysis*****<NAME>*** *** **Tabla de contenido**<jupyter_code>%%javascript
// Script to generate table of contents
$.getScript('../resources/table_of_contents.js')<jupyter_output><empty_output><jupyter_text>******  Imports<jupyter_code>#-------Importing from other folder------#

import sys
sys.path.insert(0, "../resources/")

import mstats as ms

#-----------Miguel's statistics----------#
import scipy.stats as ss
import numpy as np
import pandas as pd<jupyter_output><empty_output><jupyter_text>******  1. Prueba para un ajuste uniforme<NAME>, director de mercadeo de Seven Seas, tiene laresponsabilidad de controlar el nivel de existencias para cuatro tipos debotes vendidos por su firma. En el pasado ha ordenado nuevos botes bajo lapremisa de que los cuatro tipos son igualmente populares y la demanda decada tipo es la misma. Sin embargo, recientemente las existencias se hanvuelto más difíciles de controlar, y Chris considera que debería probar suhipótesis respecto a una demanda uniforme. Sus hipótesis son:***Ho: la demanda es uniforme para los cuatro tipos de datos.******HA: la demanda no es uniforme para los cuatro tipos de datos.***Para probar la hipótesis, Chris selecciona una muestra de n = 48 botesvendidos durante los últimos meses. Si la demanda es uniforme, puedeesperar que 48/4=12 botes de cada tipo se vendan. A continuación se muestraesta expectativa junto con el número de cada tipo que en realidad de vendió.![image.png](attachment:image.png)Chris debe determinar ahora si los números vendidos realmente en cada unade las categorías K = 4 está lo suficientemente cerca de lo que se esperaría si lademanda fuese uniforme.<jupyter_code>n_botes = 48 # Tamaño de la muestra
k_botes = 4 # Número de categorías o clases
m_botes = 0 # Número de parámetros a estimar

oi_botes = [15, 11, 10, 12] # Frecuencia de los eventos observados
ei_botes = [12, 12, 12, 12] # Frecuencia de los eventos esperados

sign_botes = 0.05 # Nivel de significancia<jupyter_output><empty_output><jupyter_text>* **Plantear hipótesis****Ho:** La distribución poblacional es uniforme.**Ha:** La distribución poblacional no es uniforme. - **Ahora encontraremos el valor crítico para rechazar la hipótesis nula**<jupyter_code>df_botes = k_botes - m_botes - 1 # Grados de libertad
crit_botes = ms.hypothesis.crit_val_chi2(df_botes, sign_botes)
crit_botes<jupyter_output><empty_output><jupyter_text>- **Ahora encontraremos el estadístico de prueba (CHI CUADRADO) para comparar con el valor crítico y determinar si se rechaza la hipótesis nula**<jupyter_code>chi2_botes = ms.categorical.get_x2(oi_botes, ei_botes)
chi2_botes
distr_botes = ss.chi2(df_botes)
ms.graph.hypothesis(distr_botes, chi2_botes, sign_botes, 'right')
ms.hypothesis.reject_h0(crit_botes, chi2_botes, 'right')<jupyter_output><empty_output><jupyter_text>Entonces, teniendo en cuenta que el valor del estadístico de prueba **1.1666666666666667** es **menor** al valor crítico que calculamos **7.814727903251179**. Podemos concluir con un nivel de significancia del *5%* que **no se puede rechazar la hipótesis nula.** En conlusión, podemos decir que la distribución poblacional de las demandas es uniforme, por lo que los 4 tipos de botes son igualmente populares entre ellos. ***  2. Prueba de ajuste de un parámetro específicoEl John Dillinger National Bank, en New York, trata de seguir una políticade extender un 60% sus créditos a empresas comerciales, un 10% apersonas naturales y un 30% a prestatarios extranjeros.Para determinar si la política se está siguiendo, Jay Hoover, vicepresidentede mercadeo, selecciona aleatoriamente 85 créditos que se aprobaronrecientemente. Encuentra que 62 de tales créditos se otorgaron anegocios, 10 a personas naturales, y 13 a prestatarios extranjeros. Al niveldel 10%, ¿parece que el patrón de cartera deseado de preserva?***Ho : se mantuvo el patrón deseado: 60% son créditos comerciales, 10% son préstamos personales y 30% son créditos extranjeros.******HA : el patrón deseado no se mantuvo.***![image.png](attachment:image.png)<jupyter_code>n_creditos = 85 # Tamaño de la muestra
k_creditos = 3 # Número de categorías o clases
m_creditos = 0 # Número de parámetros a estimar

pi_creditos = [0.60, 0.10, 0.30] # Frecuencia de probabilidades esperadas

oi_creditos = [62, 10, 13] # Frecuencia de los eventos observados
ei_creditos = ms.categorical.get_ei(oi_creditos, pi_creditos) # Frecuencia de los eventos esperados

sign_creditos = 0.1 # Nivel de significancia<jupyter_output><empty_output><jupyter_text>* **Plantear hipótesis****Ho:** Se mantuvo el patrón deseado.**Ha:** No se mantuvo el patrón deseado. - **Ahora encontraremos el valor crítico para rechazar la hipótesis nula**<jupyter_code>df_creditos = k_creditos - m_creditos - 1 # Grados de libertad
crit_creditos = ms.hypothesis.crit_val_chi2(df_creditos, sign_creditos)
crit_creditos<jupyter_output><empty_output><jupyter_text>- **Ahora encontraremos el estadístico de prueba (CHI CUADRADO) para comparar con el valor crítico y determinar si se rechaza la hipótesis nula**<jupyter_code>chi2_creditos = ms.categorical.get_x2(oi_creditos, ei_creditos)
chi2_creditos
distr_creditos = ss.chi2(df_creditos)
ms.graph.hypothesis(distr_creditos, chi2_creditos, sign_creditos, 'right')
ms.hypothesis.reject_h0(crit_creditos, chi2_creditos, 'right')<jupyter_output><empty_output><jupyter_text>**SI debemos rechazar la hipótesis nula**. Teniendo en cuenta que el estadístico de prueba **8.764705882352942** es **mayor** al valor crítico que obtuvimos **4.605170185988092**, entonces cae en la zona de rechazo con un nivel de significancia del *10%*. Podemos concluir entonces, que el patrón que deseaba el banco no se mantiene, por lo que no se está siguiendo la política que proponen. ***  3. Prueba de normalidadLas especificaciones para la producción de tanques de aire utilizados eninmersión requieren que los tanques se llenen a una presión promedio de600 psi. Se permite una desviación estándar de 10 psi. Las especificaciones deseguridad permiten una distribución normal en los niveles de llenado.Usted acaba de ser contratado por <NAME>, su primera tarea es determinarsi los niveles de llenado se ajustan a una distribución normal. Aqua Lung estáseguro de que la media de 600 psi y la desviación estándar de 10 psiprevalecen. Solo queda probar la naturaleza de la distribución. Para esto semide n = 1000 tanques y se halla la siguiente distribución:![image.png](attachment:image.png)Las hipótesis son:**Ho: los niveles de llenado están distribuidos normalmente.****HA: los niveles de llenado no están distribuidos normalmente.**Se desea probar la hipótesis al nivel del 5%.<jupyter_code>mu_aqua = 600 # Media poblacional
sigma_aqua = 10 # Desviación estándar poblacional

n_aqua = 1000 # Tamaño de la muestra
k_aqua = 6 # Número de categorías o clases
m_aqua = 0 # Número de parámetros a estimar

intervals_aqua = [
    (0, 580),
    (580, 590),
    (590, 600),
    (600, 610),
    (610, 620),
    (620, float('inf'))
]

oi_aqua = [20, 142, 310, 370, 128, 30] # Frecuencia de los eventos observados
pi_aqua = ms.categorical.get_pi(ss.norm(mu_aqua, sigma_aqua), intervals_aqua, oi_aqua) # Frecuencia de probabilidades esperadas
ei_aqua = ms.categorical.get_ei(oi_aqua, pi_aqua) # Frecuencia de los eventos esperados

sign_aqua = 0.05 # Nivel de significancia<jupyter_output><empty_output><jupyter_text>* **Plantear hipótesis****Ho:** Se mantiene una distribución normal.**Ha:** No se mantiene una distribución normal. - **Ahora encontraremos el valor crítico para rechazar la hipótesis nula**<jupyter_code>df_aqua = k_aqua - m_aqua - 1
crit_aqua = ms.hypothesis.crit_val_chi2(df_aqua, sign_aqua)
crit_aqua<jupyter_output><empty_output><jupyter_text>- **Ahora encontraremos el estadístico de prueba (CHI CUADRADO) para comparar con el valor crítico y determinar si se rechaza la hipótesis nula**<jupyter_code>chi2_aqua = ms.categorical.get_x2(oi_aqua, ei_aqua)
chi2_aqua
distr_aqua = ss.chi2(df_aqua)
ms.graph.hypothesis(distr_aqua, chi2_aqua, sign_aqua, 'right')
ms.hypothesis.reject_h0(crit_aqua, chi2_aqua, 'right')<jupyter_output><empty_output><jupyter_text>**NO se rechaza la hipótesis nula**. Dado que el estadístico de prueba **8.659793636460499** es **menor** al valor crítico calculado **11.070497693516351**, por lo que cae en la zona de no rechazo con un nivel de significancia del *5%*. Concluimos entonces que los niveles de llenado que tienen en Aqua Lung siguen en efecto una distribución normal. ***  4. Tablas de contingencia. Una prueba de independencia<NAME> es la directora de investigación de productos en DowChemical. En su proyecto actual, la señorita Keeto debe determinar si existealguna relación entre la clasificación de efectividad que los consumidoresasignan a un nuevo insecticida y el sitio (urbano o rural) en el cual se utiliza.De los 100 consumidores a quienes se les practicó la encuesta, 75 vivían enzonas urbanas y 25 en zonas rurales.![image.png](attachment:image.png)La señorita Keeto desea comparar el atributo B (ubicación) con el atributo A(clasificación del producto). Sus hipótesis son:***Ho : la clasificación y la ubicación son independientes.******HA : la clasificación y la ubicación no son independientes.***Si la ubicación no tiene ningún impacto en la clasificación efectiva, entonces elporcentaje de residentes urbanos que clasificaron el producto “por encima delpromedio” debería ser igual al porcentaje de residentes rurales que clasificaronel producto “por encima del promedio”.Wilma fija un nivel de significancia del 10%.<jupyter_code>n_keeto = 100 # Tamaño de la muestra
r_keeto = 3 # Número de filas
c_keeto = 2 # Número de columnas

oi_keeto = [[20, 40, 15], [11, 8, 6]] # Frecuencia de los eventos observados
ei_keeto = ms.categorical.contingency_ei(oi_keeto) # Frecuencia de los eventos esperados

sign_keeto = 0.10 # Nivel de significancia<jupyter_output><empty_output><jupyter_text>* **Plantear hipótesis****Ho:** Los atributos son independientes.**Ha:** Los atributos no son independientes. - **Ahora encontraremos el valor crítico para rechazar la hipótesis nula**<jupyter_code>df_keeto = (r_keeto - 1) * (c_keeto - 1)
crit_keeto = ms.hypothesis.crit_val_chi2(df_keeto, sign_keeto)
crit_keeto<jupyter_output><empty_output><jupyter_text>- **Ahora encontraremos el estadístico de prueba (CHI CUADRADO) para comparar con el valor crítico y determinar si se rechaza la hipótesis nula**<jupyter_code>chi2_keeto = ms.categorical.get_x2(oi_keeto, ei_keeto)
chi2_keeto
distr_keeto = ss.chi2(df_keeto)
ms.graph.hypothesis(distr_keeto, chi2_keeto, sign_keeto, "right")
ms.hypothesis.reject_h0(crit_keeto, chi2_keeto, "right")<jupyter_output><empty_output><jupyter_text>**NO se rechaza la hipótesis nula**. Teniendo en cuenta que el estadístico de prueba **3.7378392217101895**, es menor al valor crítico calculado **4.605170185988092**, por lo que cae en la zona de no rechazo con un nivel de significancia del *10%*. Por lo que se puede concluir que la ubicación de los consumidores no tiene por qué afectar en la calificación que le dieron al producto. ***  5. Tablas de contingencia. Una prueba de independenciaHedonistic Auto Sales desea determinar si existe algunarelación entre el ingreso de los clientes y la importancia que dan al preciode los automóviles de lujo. Los gerentes de la compañía desean probar lahipótesis de que:**Ho :** ingreso e importancia del precio son independientes.**HA :** ingreso e importancia del precio no son independientes.![image.png](attachment:image.png)Utilice un alfa de 1%<jupyter_code>n_auto = 538 #  Tamaño de la muestra
r_auto = 3 # Número de filas
c_auto = 3 # Número de columnas

oi_auto = [[83, 52, 63], [62, 71, 58], [37, 49, 63]] # Frecuencia de los eventos observados
ei_auto = ms.categorical.contingency_ei(oi_auto) # Frecuencia de los eventos esperados

sign_auto = 0.01 # Nivel de significancia<jupyter_output><empty_output><jupyter_text>* **Plantear hipótesis****Ho:** Los atributos son independientes.**Ha:** Los atributos no son independientes. - **Ahora encontraremos el valor crítico para rechazar la hipótesis nula**<jupyter_code>df_auto = (r_auto - 1) * (c_auto - 1)
crit_auto = ms.hypothesis.crit_val_chi2(df_auto, sign_auto)
crit_auto<jupyter_output><empty_output><jupyter_text>- **Ahora encontraremos el estadístico de prueba (CHI CUADRADO) para comparar con el valor crítico y determinar si se rechaza la hipótesis nula**<jupyter_code>chi2_auto = ms.categorical.get_x2(oi_auto, ei_auto)
chi2_auto
distr_auto = ss.chi2(df_auto)
ms.graph.hypothesis(distr_auto, chi2_auto, sign_auto, 'right')
ms.hypothesis.reject_h0(crit_auto, chi2_auto, "right")<jupyter_output><empty_output><jupyter_text>**SI se rechaza la hipótesis nula**. Teniendo en cuenta que el estadístico de prueba *15.170067213427457*, es mayor al valor crítico calculado *13.276704135987622*. Por lo que cae en la zona de rechazo con un nivel de significancia del *1%*. Entonces, podemos concluir que el nivel de ingreso que tienen los clientes **si afecta** en la importancia que le dan al precio de los automóviles. ***  6. Pruebas de ajuste de un parámetro específicoEl vicepresidente de operaciones del First National Bankargumenta que los tres tipos de crédito – créditos para autos, créditos aestudiantes y créditos para propósitos generales – se conceden a losclientes según un patrón tal que la mitad son para propósitos generales yel resto se dividen de manera equitativa entre los tipos restantes. Paraprobar su hipótesis, se recolectaron 200 créditos recientes y se encuentraque 55 fueron créditos para autos, 47 para estudiantes y el resto parapropósitos generales. ¿Qué se puede concluir a un nivel del 5%?|      Tipo de crédito      	|    Oi   	|    Pi   	||:-------------------------:	|:-------:	|:-------:	||         Para autos        	|    55   	|   0.25  	||      Para estudiantes     	|    47   	|   0.25  	|| Para propósitos generales 	|    98   	|   0.50  	|| **Total**                 	| **200** 	| **1.00** 	|<jupyter_code>n_bank = 200 # Tamaño de la muestra
k_bank = 3 # Número de categorías o clases
m_bank = 0 # Número de parámetros a estimar

pi_bank = [0.25, 0.25, 0.5] # Frecuencia de probabilidades esperadas

oi_bank = [55, 47, 98] # Frecuencia de los eventos observados
ei_bank = ms.categorical.get_ei(oi_bank, pi_bank) # Frecuencia de los eventos esperados

sign_bank = 0.05 # Nivel de significancia<jupyter_output><empty_output><jupyter_text>* **Plantear hipótesis****Ho:** Se mantuvo el patrón deseado.**Ha:** No se mantuvo el patrón deseado. - **Ahora encontraremos el valor crítico para rechazar la hipótesis nula**<jupyter_code>df_bank = k_bank - m_bank - 1
crit_bank = ms.hypothesis.crit_val_chi2(df_bank, sign_bank)
crit_bank<jupyter_output><empty_output><jupyter_text>- **Ahora encontraremos el estadístico de prueba (CHI CUADRADO) para comparar con el valor crítico y determinar si se rechaza la hipótesis nula**<jupyter_code>chi2_bank = ms.categorical.get_x2(oi_bank, ei_bank)
chi2_bank
distr_bank = ss.chi2(df_bank)
ms.graph.hypothesis(distr_bank, chi2_bank, sign_bank, 'right')
ms.hypothesis.reject_h0(crit_bank, chi2_bank,'right')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08651884992433713, 'fraction_numerical': 0.032304756891900786, 'mean_word_length': 5.435224386113463, 'pattern_counts': {'":': 0, '<': 85, '<?xml version=': 0, '>': 85, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 1, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '20', 'dir': 'jupyter-structured-clean-dedup', 'id': '285925', 'license': 'MIT', 'n_tokens_mistral': 5744, 'n_tokens_neox': 5474, 'n_words': 1760, 'path': 'exercises/Categorical Data Analysis.ipynb', 'repo_name': 'mvelezg99/distribuciones-de-probabilidad-python', 'size': '15234'}