Verteilungsstatistiken für das 2. Tutorium

This commit is contained in:
Jacob.Fritsche committed 2025-01-25 13:47:22 +00:00
1 parent aa9f9e9b25
commit 56777fe0a4
1 file changed
+482
+482
View File
@@ -0,0 +1,482 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "9b437a81-b193-48ae-91bf-48edcfb12e18",
"metadata": {},
"outputs": [],
"source": [
"#pip install numpy matplotlib scipy"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "a4ea5fe4-eaa9-4cc4-8677-385a68577332",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import scipy.stats as stats"
]
},
{
"cell_type": "markdown",
"id": "df08071e-cd3c-49dd-8623-baf38082eab0",
"metadata": {},
"source": [
"Generate a normal distribution"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "280f78b3-4338-49ec-8929-732d429762db",
"metadata": {},
"outputs": [],
"source": [
"# Generate 1000 random numbers from a normal distribution\n",
"mu, sigma = 3, 6 # mean and standard deviation\n",
"data = np.random.normal(mu, sigma, 1000)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7f0ec0a0-ff5f-4fb1-93ae-509cf3d3b066",
"metadata": {},
"outputs": [],
"source": [
"# Create a histogram of the data\n",
"plt.hist(data, bins=30, density=True, alpha=0.6, color='g')\n",
"title = \"Histogram with random numbers from: mu = %.2f, std = %.2f\" % (mu, sigma)\n",
"plt.title(title)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "0df9c2e5-ae6d-48c0-93a4-12a6e70240c2",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Show the approximation with the normal distribution\n",
"plt.hist(data, bins=30, density=True, alpha=0.6, color='g')\n",
"xmin, xmax = plt.xlim()\n",
"x = np.linspace(xmin, xmax, 100)\n",
"p = stats.norm.pdf(x, mu, sigma)\n",
"plt.plot(x, p, 'k', linewidth=2)\n",
"title = \"Fit results: mu = %.2f, std = %.2f\" % (mu, sigma)\n",
"plt.title(title)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "817835f6-baf8-4b03-8136-426c81b7b4fa",
"metadata": {},
"outputs": [],
"source": [
"#Show the second normal distribution\n",
"mu2, sigma2 = 1, 1\n",
"p2 = stats.norm.pdf(x, mu2, sigma2)\n",
"plt2.plot(x, p2, 'r', linewidth=2)\n",
"title = \"Fit results: mu1 = %.2f, std1 = %.2f; mu2 = %.2f, std2 = %.2f\" % (mu, sigma, mu2, sigma2)\n",
"plt2.title(title)\n",
"plt2.show()"
]
},
{
"cell_type": "markdown",
"id": "f3c0c504-e041-4d85-8da0-3ef766f8e87a",
"metadata": {},
"source": [
"Generate a second normal distribution"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "f7118230-fc88-4a71-b813-2daa0c63c97c",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAi0AAAGzCAYAAADjbSfcAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAk8ZJREFUeJzt3Xd8FHX6wPHP7qZ3QkIKpNB7kSpNEBBURFEplp8gNlSwHJ6eeCpYsSBypyiKJ3g2iieIgAIiTXrvnYQECIQa0svu/P4YdrPpbTez5Xm/XvPiy+zszLMlu89+q05RFAUhhBBCCAen1zoAIYQQQojKkKRFCCGEEE5BkhYhhBBCOAVJWoQQQgjhFCRpEUIIIYRTkKRFCCGEEE5BkhYhhBBCOAVJWoQQQgjhFCRpEUIIIYRTcIqkJTExEZ1Ox5w5c7QOxWb69u1L3759tQ5DuLHJkyej0+m0DkMIlyaf9bblEEnLnDlz0Ol0pW4vv/xyqfdZtmwZkydPrt1A7ejs2bNMnjyZ3bt3ax2KTX3++ecMHz6c2NhYdDodDz/8sCZxZGdn8+ijj9KmTRuCg4MJCAigffv2/Otf/yI/P79S5zCZTHzwwQc0bNgQHx8f2rVrx48//ljqsYcOHeLWW28lICCA0NBQHnroIS5cuGDLh1TCu+++y6JFi2p0jhUrVlieJ4PBQHx8vE1iq66NGzfSq1cv/Pz8iIyM5NlnnyUjI6NS9y3rM+W9994rceyZM2cYMWIEISEhBAUFcdddd3Hy5ElbPxy72LZtG+PHj6d169b4+/sTGxvLiBEjOHr0aK3HkpGRwaRJk7j11lsJDQ2t1o/Nq1ev8sQTTxAeHo6/vz8333wzO3fuLPXYxYsX07FjR3x8fIiNjWXSpEkUFBTY4JGUzhaf08nJybzxxht07dqVOnXqEBYWRt++ffnjjz9sF2gV/ec//6Fly5b4+PjQtGlTPvnkk2qd55133kGn09GmTZtSb6/J37OF4gBmz56tAMqbb76pfPvtt0W2Xbt2KSaTScnOzlYKCgos9xk3bpziIOFXS58+fZQ+ffpY/r9t2zYFUGbPnq1ZTPYQFxenhIaGKrfeeqvi4eGhjB49WpM4Ll26pHTr1k158cUXlRkzZiiff/658tBDDyk6nU65//77K3WOl19+WQGUxx9/XPnyyy+VwYMHK4Dy448/FjkuOTlZCQsLUxo3bqz861//Ut555x2lTp06Svv27ZXc3Fx7PDxFURTF39+/Ss/vpEmTSvwNjR49WvHx8VF69OihNGjQQImLi7NtkFWwa9cuxcfHR7nhhhuUzz//XPnnP/+peHt7K7feemul7g8ot9xyS4nPlP379xc5Lj09XWnatKlSr1495f3331emTZumxMTEKA0aNFAuXrxoj4dmU/fee68SGRmpPPPMM8qsWbOUt956S4mIiFD8/f2Vffv21WosCQkJCqDExsYqffv2rfJnmtFoVHr06KH4+/srkydPVj799FOlVatWSmBgoHL06NEixy5btkzR6XTKzTffrHz55ZfKM888o+j1euXJJ5+08aMqVJ3P6eKf9Z988oni6+ur3H///cqnn36qTJ8+XenYsaMCKF9//bXtg67AzJkzFUC59957lS+//FJ56KGHFEB57733qnSe5ORkxc/PT/H391dat25d4vaa/j2bOcS3vjlp2bZtW6XvU9OkxWQyKVlZWdW+f025S9KSmJiomEwmRVGq/qVaG8aPH68ASkpKSrnHnT59WvH09FTGjRtn2WcymZTevXsrDRo0KJJQP/XUU4qvr69y6tQpy76VK1cqgPLFF1/Y/kFcZ4uk5cyZM0peXp6iKIoyePBgTZOW2267TYmKilLS0tIs+2bNmqUAyvLlyyu8P1Dk9SrL+++/rwDK1q1bLfsOHTqkGAwGZeLEidULvhZt2LChRDJ89OhRxdvbW3nwwQdrNZacnBzL31J1PtPmzZunAMqCBQss+1JTU5WQkJASPy5atWqltG/fXsnPz7fs++c//6nodDrl0KFDNXsgZbBF0rJ//37lwoULRY7JyclRWrRooTRo0MBGkVZOVlaWUrduXWXw4MFF9j/44IOKv7+/cvny5Uqfa+TIkUq/fv2UPn36lJq01PTv2cwpkhZz9m5+o4wePVoBSmzliYuLUwYPHqz8/vvvSqdOnRRvb2/l448/VhRFUa5cuaI899xzSoMGDRQvLy+lcePGynvvvacYjcYi5/jxxx+Vjh07KgEBAUpgYKDSpk0bZfr06ZbbS/sSsH58CQkJln3Wb+TVq1eX+njMj/fo0aPKPffco0RERCje3t5K/fr1lZEjRypXr161nO/ChQvKoUOHlMzMzHKfB0Up/DCfP3++0rJlS8XHx0e58cYblb179yqKombe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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Generate 1000 random numbers from the first normal distribution\n",
"mu1, sigma1 = 3, 0.5 # mean and standard deviation for the first normal distribution\n",
"data = np.random.normal(mu1, sigma1, 1000)\n",
"\n",
"# Create a histogram of the data\n",
"plt.hist(data, bins=30, density=True, alpha=0.6, color='g')\n",
"\n",
"# Add a graph of the first normal distribution used to generate the data\n",
"xmin, xmax = -1, 5\n",
"x = np.linspace(xmin, xmax, 100)\n",
"p1 = stats.norm.pdf(x, mu1, sigma1)\n",
"plt.plot(x, p1, 'k', linewidth=2)\n",
"\n",
"# Add a graph of the second normal distribution with mu = 1 and sigma = 0.4\n",
"mu2, sigma2 = 1, 0.4\n",
"p2 = stats.norm.pdf(x, mu2, sigma2)\n",
"plt.plot(x, p2, 'r', linewidth=2)\n",
"\n",
"# Add vertical lines at x = 1 and x = 3 with labels\n",
"plt.axvline(x=1, color='b', linestyle='--', label='mu theoretical distribution')\n",
"plt.axvline(x=3, color='m', linestyle='--', label='mu in sample')\n",
"\n",
"title = \"Fit results: mu1 = %.2f, std1 = %.2f; mu2 = %.2f, std2 = %.2f\" % (mu1, sigma1, mu2, sigma2)\n",
"plt.title(title)\n",
"plt.xlim(xmin, xmax)\n",
"plt.legend()\n",
"\n",
"# Show the plot\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "8b4766b1-6fb5-487b-b552-790f43f83707",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Generate 1000 random numbers from the first normal distribution\n",
"mu1, sigma1 = 3, 0.5 # mean and standard deviation for the first normal distribution\n",
"data = np.random.normal(mu1, sigma1, 1000)\n",
"\n",
"# Create a histogram of the data\n",
"plt.hist(data, bins=30, density=True, alpha=0.6, color='g')\n",
"\n",
"# Add a graph of the first normal distribution used to generate the data\n",
"xmin, xmax = -1, 5\n",
"x = np.linspace(xmin, xmax, 100)\n",
"p1 = stats.norm.pdf(x, mu1, sigma1)\n",
"plt.plot(x, p1, 'k', linewidth=2)\n",
"\n",
"# Add a graph of the second normal distribution with mu = 1 and sigma = 0.4\n",
"mu2, sigma2 = 1, 0.4\n",
"p2 = stats.norm.pdf(x, mu2, sigma2)\n",
"plt.plot(x, p2, 'r', linewidth=2)\n",
"\n",
"# Add vertical lines at x = 1 and x = 3 with labels\n",
"plt.axvline(x=1, color='b', linestyle='--', label='mu theoretical distribution')\n",
"plt.axvline(x=3, color='m', linestyle='--', label='mu in sample')\n",
"\n",
"# Calculate the 95% quantile for the second normal distribution\n",
"quantile_95 = stats.norm.ppf(0.95, mu2, sigma2)\n",
"\n",
"# Plot the hatched area under the red curve for the 95% quantile and above\n",
"x_fill = np.linspace(quantile_95, xmax, 100)\n",
"p_fill = stats.norm.pdf(x_fill, mu2, sigma2)\n",
"plt.fill_between(x_fill, p_fill, color='blue', alpha=0.5, hatch='/')\n",
"\n",
"title = \"Fit results: mu1 = %.2f, std1 = %.2f; mu2 = %.2f, std2 = %.2f\" % (mu1, sigma1, mu2, sigma2)\n",
"plt.title(title)\n",
"plt.xlim(xmin, xmax)\n",
"plt.legend()\n",
"\n",
"# Show the plot\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "665a50fe-8404-4db3-b412-aec36d81016e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"T-statistic: 98.77295966495895, P-value: 0.0\n",
"The means of the two theoretical distributions are statistically different (reject H0).\n"
]
}
],
"source": [
"# Define the parameters for the two normal distributions\n",
"mu1, sigma1 = 3, 0.5 # mean and standard deviation for the first normal distribution\n",
"mu2, sigma2 = 1, 0.4 # mean and standard deviation for the second normal distribution\n",
"\n",
"# Perform a t-test to compare the means of the two theoretical distributions\n",
"# Since we don't have samples, we use the means and standard deviations directly\n",
"# Calculate the t-statistic and p-value manually\n",
"n1 = n2 = 1000 # sample sizes (assuming large sample sizes for theoretical distributions)\n",
"se = ((sigma1**2 / n1) + (sigma2**2 / n2))**0.5 # standard error\n",
"t_statistic = (mu1 - mu2) / se # t-statistic\n",
"df = n1 + n2 - 2 # degrees of freedom\n",
"p_value = stats.t.sf(abs(t_statistic), df) * 2 # two-tailed p-value\n",
"\n",
"# Print the t-test result\n",
"print(f\"T-statistic: {t_statistic}, P-value: {p_value}\")\n",
"\n",
"# Interpret the result\n",
"alpha = 0.05\n",
"if p_value < alpha:\n",
" print(\"The means of the two theoretical distributions are statistically different (reject H0).\")\n",
"else:\n",
" print(\"The means of the two theoretical distributions are not statistically different (fail to reject H0).\")"
]
},
{
"cell_type": "markdown",
"id": "63072dac-c7e6-4237-b5cc-b9832a2c7707",
"metadata": {},
"source": [
"Now with narrowed mu"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "aa9ea3d5-3559-4fd7-a2c7-f041486c090e",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Generate 1000 random numbers from the first normal distribution\n",
"mu1, sigma1 = 1.8, 0.5 # mean and standard deviation for the first normal distribution\n",
"data = np.random.normal(mu1, sigma1, 1000)\n",
"\n",
"# Create a histogram of the data\n",
"plt.hist(data, bins=30, density=True, alpha=0.6, color='g')\n",
"\n",
"# Add a graph of the first normal distribution used to generate the data\n",
"xmin, xmax = -1, 5\n",
"x = np.linspace(xmin, xmax, 100)\n",
"p1 = stats.norm.pdf(x, mu1, sigma1)\n",
"plt.plot(x, p1, 'k', linewidth=2)\n",
"\n",
"# Add a graph of the second normal distribution with mu = 1 and sigma = 0.4\n",
"mu2, sigma2 = 1, 0.4\n",
"p2 = stats.norm.pdf(x, mu2, sigma2)\n",
"plt.plot(x, p2, 'r', linewidth=2)\n",
"\n",
"# Add vertical lines at x = 1 and x = 3 with labels\n",
"plt.axvline(x=mu2, color='b', linestyle='--', label='mu theoretical distribution')\n",
"plt.axvline(x=mu1, color='m', linestyle='--', label='mu in sample')\n",
"\n",
"# Calculate the 95% quantile for the second normal distribution\n",
"quantile_95 = stats.norm.ppf(0.95, mu2, sigma2)\n",
"\n",
"# Plot the hatched area under the red curve for the 95% quantile and above\n",
"x_fill = np.linspace(quantile_95, xmax, 100)\n",
"p_fill = stats.norm.pdf(x_fill, mu2, sigma2)\n",
"plt.fill_between(x_fill, p_fill, color='blue', alpha=0.5, hatch='/')\n",
"\n",
"title = \"Fit results: mu1 = %.2f, std1 = %.2f; mu2 = %.2f, std2 = %.2f\" % (mu1, sigma1, mu2, sigma2)\n",
"plt.title(title)\n",
"plt.xlim(xmin, xmax)\n",
"plt.legend()\n",
"\n",
"# Show the plot\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "0db5895c-28ab-4617-ad67-7ad8311d0341",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"T-statistic: 39.50918386598358, P-value: 8.942863909656787e-253\n",
"The means of the two theoretical distributions are statistically different (reject H0).\n"
]
}
],
"source": [
"# Define the parameters for the two normal distributions\n",
"mu1, sigma1 = 1.8, 0.5 # mean and standard deviation for the first normal distribution\n",
"mu2, sigma2 = 1, 0.4 # mean and standard deviation for the second normal distribution\n",
"\n",
"# Perform a t-test to compare the means of the two theoretical distributions\n",
"# Since we don't have samples, we use the means and standard deviations directly\n",
"# Calculate the t-statistic and p-value manually\n",
"n1 = n2 = 1000 # sample sizes (assuming large sample sizes for theoretical distributions)\n",
"se = ((sigma1**2 / n1) + (sigma2**2 / n2))**0.5 # standard error\n",
"t_statistic = (mu1 - mu2) / se # t-statistic\n",
"df = n1 + n2 - 2 # degrees of freedom\n",
"p_value = stats.t.sf(abs(t_statistic), df) * 2 # two-tailed p-value\n",
"\n",
"# Print the t-test result\n",
"print(f\"T-statistic: {t_statistic}, P-value: {p_value}\")\n",
"\n",
"# Interpret the result\n",
"alpha = 0.05\n",
"if p_value < alpha:\n",
" print(\"The means of the two theoretical distributions are statistically different (reject H0).\")\n",
"else:\n",
" print(\"The means of the two theoretical distributions are not statistically different (fail to reject H0).\")"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "ab987426-9a37-4c22-b561-d2870b856071",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Generate 1000 random numbers from the first normal distribution\n",
"mu1, sigma1 = 1.03, 0.5 # mean and standard deviation for the first normal distribution\n",
"data = np.random.normal(mu1, sigma1, 1000)\n",
"\n",
"# Create a histogram of the data\n",
"plt.hist(data, bins=30, density=True, alpha=0.6, color='g')\n",
"\n",
"# Add a graph of the first normal distribution used to generate the data\n",
"xmin, xmax = -1, 5\n",
"x = np.linspace(xmin, xmax, 100)\n",
"p1 = stats.norm.pdf(x, mu1, sigma1)\n",
"plt.plot(x, p1, 'k', linewidth=2)\n",
"\n",
"# Add a graph of the second normal distribution with mu = 1 and sigma = 0.4\n",
"mu2, sigma2 = 1, 0.4\n",
"p2 = stats.norm.pdf(x, mu2, sigma2)\n",
"plt.plot(x, p2, 'r', linewidth=2)\n",
"\n",
"# Add vertical lines at x = 1 and x = 3 with labels\n",
"plt.axvline(x=mu2, color='b', linestyle='--', label='mu theoretical distribution')\n",
"plt.axvline(x=mu1, color='m', linestyle='--', label='mu in sample')\n",
"\n",
"# Calculate the 95% quantile for the second normal distribution\n",
"quantile_95 = stats.norm.ppf(0.95, mu2, sigma2)\n",
"\n",
"# Plot the hatched area under the red curve for the 95% quantile and above\n",
"x_fill = np.linspace(quantile_95, xmax, 100)\n",
"p_fill = stats.norm.pdf(x_fill, mu2, sigma2)\n",
"plt.fill_between(x_fill, p_fill, color='blue', alpha=0.5, hatch='/')\n",
"\n",
"title = \"Fit results: mu1 = %.2f, std1 = %.2f; mu2 = %.2f, std2 = %.2f\" % (mu1, sigma1, mu2, sigma2)\n",
"plt.title(title)\n",
"plt.xlim(xmin, xmax)\n",
"plt.legend()\n",
"\n",
"# Show the plot\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "9c019dea-d687-4dc1-b48f-fe629e54172e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"T-statistic: 1.4815943949743855, P-value: 0.13860593668122914\n",
"The means of the two theoretical distributions are not statistically different (fail to reject H0).\n"
]
}
],
"source": [
"# Define the parameters for the two normal distributions\n",
"mu1, sigma1 = 1.03, 0.5 # mean and standard deviation for the first normal distribution\n",
"mu2, sigma2 = 1, 0.4 # mean and standard deviation for the second normal distribution\n",
"\n",
"# Perform a t-test to compare the means of the two theoretical distributions\n",
"# Since we don't have samples, we use the means and standard deviations directly\n",
"# Calculate the t-statistic and p-value manually\n",
"n1 = n2 = 1000 # sample sizes (assuming large sample sizes for theoretical distributions)\n",
"se = ((sigma1**2 / n1) + (sigma2**2 / n2))**0.5 # standard error\n",
"t_statistic = (mu1 - mu2) / se # t-statistic\n",
"df = n1 + n2 - 2 # degrees of freedom\n",
"p_value = stats.t.sf(abs(t_statistic), df) * 2 # two-tailed p-value\n",
"\n",
"# Print the t-test result\n",
"print(f\"T-statistic: {t_statistic}, P-value: {p_value}\")\n",
"\n",
"# Interpret the result\n",
"alpha = 0.05\n",
"if p_value < alpha:\n",
" print(\"The means of the two theoretical distributions are statistically different (reject H0).\")\n",
"else:\n",
" print(\"The means of the two theoretical distributions are not statistically different (fail to reject H0).\")"
]
}
],
"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.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}