Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
CMPT318 Data Analytics Project
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Taha Silat (tas574)
CMPT318 Data Analytics Project
Commits
d9dbc0b4
Commit
d9dbc0b4
authored
1 year ago
by
Taha Silat (tas574)
Browse files
Options
Downloads
Patches
Plain Diff
Code for generating figures for final results report
parent
d5e564b5
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
results2.ipynb
+384
-0
384 additions, 0 deletions
results2.ipynb
with
384 additions
and
0 deletions
results2.ipynb
0 → 100644
+
384
−
0
View file @
d9dbc0b4
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.metrics import accuracy_score, classification_report, confusion_matrix\n",
"from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error, brier_score_loss"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv(\"NGS_data.csv\") "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# Filter out the colums we are interested in studying\n",
"columns_of_interest = ['STL_160E', 'FATHEDP', 'MOTHEDP']\n",
"df = df[columns_of_interest]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# Filter out all the entries where the respondents did not answer any of the questions\n",
"df = df[(df['FATHEDP'] != 99) & (df['MOTHEDP'] != 99) & (df['STL_160E'] != 9)]\n",
"df = df.reset_index(drop=True)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"# Data preprocessing to make it easier for logistic regression\n",
"df['STL_160E'] = df['STL_160E'].replace(2, 0)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
"x = df[['MOTHEDP', 'FATHEDP']]\n",
"y = df['STL_160E']"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.15, random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [],
"source": [
"scaler = StandardScaler()\n",
"x_train = scaler.fit_transform(x_train)\n",
"x_test = scaler.transform(x_test)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-2 {color: black;}#sk-container-id-2 pre{padding: 0;}#sk-container-id-2 div.sk-toggleable {background-color: white;}#sk-container-id-2 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-2 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-2 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-2 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-2 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-2 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-2 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-2 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-2 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-2 div.sk-item {position: relative;z-index: 1;}#sk-container-id-2 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-2 div.sk-item::before, #sk-container-id-2 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-2 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-2 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-2 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-2 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-2 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-2 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-2 div.sk-label-container {text-align: center;}#sk-container-id-2 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-2 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression(random_state=42)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LogisticRegression</label><div class=\"sk-toggleable__content\"><pre>LogisticRegression(random_state=42)</pre></div></div></div></div></div>"
],
"text/plain": [
"LogisticRegression(random_state=42)"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model = LogisticRegression(random_state=42, solver='lbfgs')\n",
"model.fit(x_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"num_features = x_train.shape[1]\n",
"degFreedom = num_features - 1\n",
"chi2_stats = model.coef_[0] ** 2\n",
"p_values = 1 - chi2.cdf(chi2_stats, degFreedom)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Feature</th>\n",
" <th>Coefficient</th>\n",
" <th>P-Value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>MOTHEDP</td>\n",
" <td>0.236758</td>\n",
" <td>0.812844</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>FATHEDP</td>\n",
" <td>0.082363</td>\n",
" <td>0.934358</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Feature Coefficient P-Value\n",
"0 MOTHEDP 0.236758 0.812844\n",
"1 FATHEDP 0.082363 0.934358"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"coefficients = model.coef_[0]\n",
"\n",
"# Create a DataFrame to display coefficients and p-values\n",
"coefficients_df = pd.DataFrame({'Feature': x.columns, 'Coefficient': coefficients, 'P-Value': p_values})\n",
"\n",
"# Sort the coefficients \n",
"coefficients_df = coefficients_df.sort_values(by='P-Value')\n",
"\n",
"coefficients_df\n"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([False, False, False, ..., False, False, False])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# TODO STEP 6: make your prediction on the test dataset\n",
"y_pred = model.predict(x_test)\n",
"y_pred"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" False 0.63 1.00 0.77 2208\n",
" True 1.00 0.00 0.00 1302\n",
"\n",
" accuracy 0.63 3510\n",
" macro avg 0.81 0.50 0.39 3510\n",
"weighted avg 0.77 0.63 0.49 3510\n",
"\n"
]
}
],
"source": [
"classification_rep = classification_report(y_test, y_pred, zero_division=1)\n",
"\n",
"print(classification_rep)"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.37094017094017095"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"brier_score = brier_score_loss(y_test, y_pred)\n",
"brier_score"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"x_min, x_max = 0, 7\n",
"y_min, y_max = 0, 1"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))\n",
"Z = model.predict(np.c_[xx.ravel(), yy.ravel()])\n",
"Z = Z.reshape(xx.shape)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([6, 2, 6, ..., 3, 1, 2], dtype=int64)"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"father = x['FATHEDP']\n",
"father_array = father.to_numpy()\n",
"father_array"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([6, 2, 6, ..., 4, 5, 5], dtype=int64)"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mother = x['MOTHEDP']\n",
"mother_array = mother.to_numpy()\n",
"mother_array"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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ysqiS5cuZGZm8vjjj1OuXDmOHj3KrFmzSEhIIDw8PN84T548yY033khaWhrDhw+nTJkyfPnll9x+++1MmzaNO++806X9G2+8gclk4umnnyYxMZG33nqLfv36sXr1arfykpiYyOnTp9FaEx8fz4cffkhKSopLz6DWmttvv53FixczePBgGjVqxNy5c3nmmWc4evQo7733nlvvlZ977rmHqlWrMn78eNavX8/kyZOJjo7mzTffdLYZMmQI33zzDffddx833ngjixYt4tZbb82zrjVr1rBixQr69u1LxYoVOXjwIBMnTuTmm29m+/btBAUFubS/eH+5+eabqVSpEt9++22ePH/77bdUr16dVq1aXfZnFUVIC1GIKVOmaECvWbOmwDZ33HGH9vf31/v27XMuO3bsmA4NDdU33XSTc9njjz+ulVJ6w4YNzmVnzpzRpUuX1oA+cOCAc3m7du10u3btnI979uyp69Wrd8lY33777TzryRUbG6v79+/vfDx69GgN6OnTp+dp63A4Lvk+sbGx+pZbbtGnTp3Sp06d0lu2bNH/+c9/NKCHDh3qbLds2TIN6G+//dbl9XPmzHFZfuLECW2xWPQdd9zh0m7s2LEacIk799+jTZs22mazOZcnJyfriIgI/eCDD7qs48SJEzo8PNy5/Ny5cxrQb7/9doGfb8aMGYX+m2utNaDHjBnjfOzudpD7GTp16uSS6yeffFKbzWadkJBwyfcdM2aMBvSpU6fyfT73M955551a65x/z5o1a+ouXbq4vF9aWpquWrWq7ty5s3PZAw88oE0mU76fPfe1ixcv1oBevHix1lrrDRs2aED//PPPl4z74m1wxIgRGtDLli1zLktOTtZVq1bVVapU0Xa73eX96tSpozMzM51t33//fQ3oLVu2XPJ9c/N98Z/VatVTp051afvrr79qQL/66qsuy++++26tlNJ79+7VWmt94MABDegpU6bkeb+Lt4vcf69Bgwa5tLvzzjt1mTJlnI83btyoAf3YY4+5tLvvvvvyrDMtLS3P+65cuVID+quvvsrz2S/eX7TWetSoUdpqtbpsb/Hx8dpisbi8l/AuOfUjrpjdbmfevHnccccdVKtWzbm8fPny3Hffffz9998kJSUBMGfOHFq1akWjRo2c7UqXLk2/fv0KfZ+IiAiOHDnCmjVriiTuX375hYYNG+b5NQU5XdeFmTdvHlFRUURFRdGgQQO+/vprBg4cyNtvv+1s8/PPPxMeHk7nzp05ffq0869p06aEhISwePFiABYuXIjNZuOxxx5zeY/HH3+8wPd/8MEHMZvNzsfz588nISGBe++91+W9zGYzLVu2dL5XYGAg/v7+LFmyJM/pp1y5A5FnzZpFdnZ2obkAz7aDXA899JBLrtu2bYvdbufQoUNuvWdBQkJCAEhOTgZg48aN7Nmzh/vuu48zZ844c5OamkrHjh3566+/cDgcOBwOfv31V3r06OEyliNXQdtFbo/J3Llz85zKuJQ///yTFi1a0KZNG5fYH3roIQ4ePMj27dtd2g8cONClR6dt27ZAzukjd3z88cfMnz+f+fPn880339C+fXuGDBni0lP2559/YjabGT58uMtrn3rqKbTWV3SV0COPPOLyuG3btpw5c8a5Xfz5558Aed57xIgRedYVGBjo/O/s7GzOnDlDjRo1iIiIYP369XnaX7y/ADzwwANkZmYybdo057Iff/wRm83m0sskvEsKFXHFTp06RVpaGrVq1crzXJ06dXA4HMTFxQE555Vr1KiRp11+yy723HPPERISQosWLahZsyZDhw7Nd3yBu/bt20f9+vUv+/UtW7Zk/vz5zJkzh3feeYeIiAjOnTvn8kWyZ88eEhMTiY6OdhY1uX8pKSnEx8cDOL+YL85D6dKl85xKylW1alWXx3v27AGgQ4cOed5r3rx5zveyWq28+eabzJ49m7Jly3LTTTfx1ltvceLECee62rVrx1133cW4ceOIjIykZ8+ehV7268l2kKty5couj3M/a0EFlLtSUlIACA0NBf7NTf/+/fPkZvLkyWRmZpKYmMipU6dISkryeLuoWrUqI0eOZPLkyURGRtKlSxc+/vhjl/Ep+Tl06FCB+cp9/kJXmq8WLVrQqVMnOnXqRL9+/fjjjz+oW7cuw4YNc46/OXToEDExMc7cFRaTJwqL/9ChQ5hMJqpXr+7SLr8cpaenM3r0aOc4msjISKKiokhISMg37xfvLwC1a9emefPmfPvtt85l3377LTfccINbxyRxdcgYFVFi1KlTh127djFr1izmzJnDL7/8wieffMLo0aMZN27cVY8nMjKSTp06AdClSxdq167Nbbfdxvvvv8/IkSOBnAGy0dHRLgfCCxU0fsYdF/6izH0vyBmnUq5cuTztLxwwOWLECHr06MGvv/7K3Llzeemllxg/fjyLFi2icePGKKWYNm0aq1atYubMmc7Lft99911WrVrl7LG4Uhf/ws2lLxi0eTm2bt0K/Fv45ebm7bffdunNu1BISAhnz5697Pd89913GTBgAL/99hvz5s1j+PDhjB8/nlWrVrkMdr4SRZ0vk8lE+/btef/999mzZw/16tVz+7UF9S7Z7fYCX1OU8T/++ONMmTKFESNG0KpVK8LDw1FK0bdvX+e/94Uu3l9yPfDAAzzxxBMcOXKEzMxMVq1axUcffeRxPKL4SKEirlhUVBRBQUHs2rUrz3M7d+7EZDI557OIjY3N9yoFd69cCA4Opk+fPvTp04esrCx69erFa6+9xqhRowgICHDrlE2u6tWrO7/QisKtt95Ku3bteP3113n44YcJDg6mevXqLFiwgNatWxd4oIScvEBOHi785XfmzBm3fy3n/gqNjo52FlCFtX/qqad46qmn2LNnD40aNeLdd9/lm2++cba54YYbuOGGG3jttdf47rvv6NevHz/88ANDhgzJsz5PtoPi9vXXXwM5BST8m5uwsLBL5iYqKoqwsLDL3i4aNGhAgwYNePHFF1mxYgWtW7fm008/5dVXX823fWxsbIH5yn2+uNlsNuDfXqjY2FgWLFhAcnKyS6/KxTHl9oZcPLnilfS4xMbG4nA42Ldvn0svSn45mjZtGv379+fdd991LsvIyPB4sse+ffsycuRIvv/+e9LT0/Hz86NPnz6X/RlE0ZNTP+KKmc1mbrnlFn777TeXSwNPnjzJd999R5s2bQgLCwNyvjhWrlzJxo0bne3Onj1bYI/Dhc6cOePy2N/fn7p166K1do6jyJ0bwZ2D1V133cWmTZvyvTzxcn+hPvfcc5w5c4bPP/8cyLnKwW6388orr+Rpa7PZnHF27NgRi8XCxIkTXdp48suuS5cuhIWF8frrr+c7riT3st+0tLQ8VxJVr16d0NBQ56mdc+fO5clBbk9EQad/PNkOitN3333H5MmTadWqFR07dgSgadOmVK9enXfeecf5hXyh3NyYTCbuuOMOZs6cme9MzAVtF0lJSc4v/FwNGjTAZDJd8nRZ9+7d+eeff1wug01NTWXSpElUqVKFunXrFv6Br0B2djbz5s3D39/feWqne/fu2O32PNvee++9h1KKbt26ATlFX2RkJH/99ZdLu08++eSy48ld9wcffOCyfMKECXnams3mPP8eH3744SV7dPITGRlJt27d+Oabb/j222/p2rWrx1f8ieIlPSrCbf/73/+YM2dOnuVPPPEEr776KvPnz6dNmzY89thjWCwWPvvsMzIzM3nrrbecbZ999lm++eYbOnfuzOOPP+68PLly5cqcPXv2kj0it9xyC+XKlaN169aULVuWHTt28NFHH3Hrrbc6f/k1bdoUgBdeeIG+ffvi5+dHjx498p3c6ZlnnmHatGn07t2bQYMG0bRpU86ePcvvv//Op59+SsOGDT3OUbdu3ahfvz7//e9/GTp0KO3atePhhx9m/PjxbNy4kVtuuQU/Pz/27NnDzz//zPvvv8/dd99N2bJleeKJJ3j33Xe5/fbb6dq1K5s2bWL27NlERka61VMUFhbGxIkT+c9//kOTJk3o27cvUVFRHD58mD/++IPWrVvz0UcfsXv3bjp27Mg999xD3bp1sVgszJgxg5MnT9K3b18AvvzySz755BPuvPNOqlevTnJyMp9//jlhYWF07969wBjc3Q6KyrRp0wgJCSErK8s5M+3y5ctp2LAhP//8s7OdyWRi8uTJdOvWjXr16jFw4EAqVKjA0aNHWbx4MWFhYcycOROA119/nXnz5tGuXTseeugh6tSpw/Hjx/n555/5+++/88x4DDmXPg8bNozevXtz3XXXYbPZ+PrrrzGbzdx1110Fxv/888/z/fff061bN4YPH07p0qX58ssvOXDgAL/88kuRz2I7e/ZsZ89IfHw83333HXv27OH55593FpE9evSgffv2vPDCCxw8eJCGDRsyb948fvvtN0aMGOEyfmTIkCG88cYbDBkyhGbNmvHXX3+xe/fuy46vUaNG3HvvvXzyySckJiZy4403snDhwnx7XG+77Ta+/vprwsPDqVu3LitXrmTBggWUKVPG4/d94IEHuPvuuwHy/VEhvMxr1xuJEqOgSxtz/+Li4rTWWq9fv1536dJFh4SE6KCgIN2+fXu9YsWKPOvbsGGDbtu2rbZarbpixYp6/Pjx+oMPPtCAPnHihLPdxZcnf/bZZ/qmm27SZcqU0VarVVevXl0/88wzOjEx0WX9r7zyiq5QoYI2mUwulypffGmo1jmXRg8bNkxXqFBB+/v764oVK+r+/fvr06dPXzInsbGx+tZbb833ualTp+a5bHPSpEm6adOmOjAwUIeGhuoGDRroZ599Vh87dszZxmaz6ZdeekmXK1dOBwYG6g4dOugdO3boMmXK6EceeSTPv0dBlw4vXrxYd+nSRYeHh+uAgABdvXp1PWDAAL127VqttdanT5/WQ4cO1bVr19bBwcE6PDxct2zZUv/000/Odaxfv17fe++9unLlytpqtero6Gh92223OdeRi4suGc19bWHbQUGf4eLLfguSe7lr7l9AQICuWLGivu222/T//vc/nZGRke/rNmzYoHv16uXchmJjY/U999yjFy5c6NLu0KFD+oEHHtBRUVHaarXqatWq6aFDhzovDb44zv379+tBgwbp6tWr64CAAF26dGndvn17vWDBApf15rcN7tu3T9999906IiJCBwQE6BYtWuhZs2blm5eLL3++1CXCF8pvHw4ICNCNGjXSEydOzHM5fnJysn7yySd1TEyM9vPz0zVr1tRvv/12nnZpaWl68ODBOjw8XIeGhup77rlHx8fHF3h58sWXk+fGdeF0Aunp6Xr48OG6TJkyOjg4WPfo0UPHxcXlWee5c+f0wIEDdWRkpA4JCdFdunTRO3fuzJNjd6ZXyMzM1KVKldLh4eE6PT39krkUV5/S+gpHrQlRBEaMGMFnn31GSkpKgQPujCghIYFSpUrx6quv8sILL3g7HCGuSTabjZiYGHr06MEXX3zh7XDERWSMirjq0tPTXR6fOXOGr7/+mjZt2hi6SLk4L/DvufmLbyUghCg6v/76K6dOneKBBx7wdigiH9KjIq66Ro0acfPNN1OnTh1OnjzJF198wbFjx1i4cCE33XSTt8PzmqlTpzrvZhsSEsLff//N999/zy233MLcuXO9HZ4Q15zVq1ezefNmXnnlFSIjI/OdKE54nwymFVdd9+7dmTZtGpMmTUIpRZMmTfjiiy8MXaQAXH/99VgsFt566y2SkpKcA2wLurRVCHFlJk6cyDfffEOjRo3yvbmi8A3SoyKEEEIInyVjVIQQQgjhs6RQEUIIIYTPKtFjVBwOB8eOHSM0NNSjqdOFEEII4T1aa5KTk4mJiSl0YsMSXagcO3bsqt07RAghhBBFKy4urtCbdpboQiV32vS4uLircg8RIYQQQly5pKQkKlWq5HLjy4KU6EIl93RPWFiYFCpCCCFECePOsA0ZTCuEEEIInyWFihBCCCF8lhQqQgghhPBZUqgIIYQQ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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.contourf(xx, yy, Z, alpha=0.8)\n",
"colors = ['blue' if label == 0 else 'orange' for label in y]\n",
"scatter = plt.scatter(father_array, mother_array, c=y, edgecolors='k', marker='o', s=80, linewidth=0.8)\n",
"legend_labels = ['Did not use scholarships', 'Used scholarships']\n",
"plt.legend(handles=scatter.legend_elements()[0] , labels=legend_labels, title='Legend', loc=3, fontsize='x-small')\n",
"\n",
"plt.title('Logistic Regression Decision Boundary')\n",
"plt.xlabel('Mother\\'s education level')\n",
"plt.ylabel('Father\\'s education level')\n",
"plt.show()"
]
}
],
"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.11.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
%% Cell type:code id: tags:
```
python
import
pandas
as
pd
import
numpy
as
np
import
matplotlib.pyplot
as
plt
import
seaborn
as
sns
from
sklearn.model_selection
import
train_test_split
from
sklearn.preprocessing
import
StandardScaler
from
sklearn.linear_model
import
LogisticRegression
from
sklearn.metrics
import
accuracy_score
,
classification_report
,
confusion_matrix
from
sklearn.metrics
import
mean_squared_error
,
r2_score
,
mean_absolute_error
,
brier_score_loss
```
%% Cell type:code id: tags:
```
python
df
=
pd
.
read_csv
(
"
NGS_data.csv
"
)
```
%% Cell type:code id: tags:
```
python
# Filter out the colums we are interested in studying
columns_of_interest
=
[
'
STL_160E
'
,
'
FATHEDP
'
,
'
MOTHEDP
'
]
df
=
df
[
columns_of_interest
]
```
%% Cell type:code id: tags:
```
python
# Filter out all the entries where the respondents did not answer any of the questions
df
=
df
[(
df
[
'
FATHEDP
'
]
!=
99
)
&
(
df
[
'
MOTHEDP
'
]
!=
99
)
&
(
df
[
'
STL_160E
'
]
!=
9
)]
df
=
df
.
reset_index
(
drop
=
True
)
```
%% Cell type:code id: tags:
```
python
# Data preprocessing to make it easier for logistic regression
df
[
'
STL_160E
'
]
=
df
[
'
STL_160E
'
].
replace
(
2
,
0
)
```
%% Cell type:code id: tags:
```
python
x
=
df
[[
'
MOTHEDP
'
,
'
FATHEDP
'
]]
y
=
df
[
'
STL_160E
'
]
```
%% Cell type:code id: tags:
```
python
x_train
,
x_test
,
y_train
,
y_test
=
train_test_split
(
x
,
y
,
test_size
=
0.15
,
random_state
=
42
)
```
%% Cell type:code id: tags:
```
python
scaler
=
StandardScaler
()
x_train
=
scaler
.
fit_transform
(
x_train
)
x_test
=
scaler
.
transform
(
x_test
)
```
%% Cell type:code id: tags:
```
python
model
=
LogisticRegression
(
random_state
=
42
,
solver
=
'
lbfgs
'
)
model
.
fit
(
x_train
,
y_train
)
```
%% Output
LogisticRegression(random_state=42)
%% Cell type:code id: tags:
```
python
num_features
=
x_train
.
shape
[
1
]
degFreedom
=
num_features
-
1
chi2_stats
=
model
.
coef_
[
0
]
**
2
p_values
=
1
-
chi2
.
cdf
(
chi2_stats
,
degFreedom
)
```
%% Cell type:code id: tags:
```
python
coefficients
=
model
.
coef_
[
0
]
# Create a DataFrame to display coefficients and p-values
coefficients_df
=
pd
.
DataFrame
({
'
Feature
'
:
x
.
columns
,
'
Coefficient
'
:
coefficients
,
'
P-Value
'
:
p_values
})
# Sort the coefficients
coefficients_df
=
coefficients_df
.
sort_values
(
by
=
'
P-Value
'
)
coefficients_df
```
%% Output
Feature Coefficient P-Value
0 MOTHEDP 0.236758 0.812844
1 FATHEDP 0.082363 0.934358
%% Cell type:code id: tags:
```
python
# TODO STEP 6: make your prediction on the test dataset
y_pred
=
model
.
predict
(
x_test
)
y_pred
```
%% Output
array([False, False, False, ..., False, False, False])
%% Cell type:code id: tags:
```
python
classification_rep
=
classification_report
(
y_test
,
y_pred
,
zero_division
=
1
)
print
(
classification_rep
)
```
%% Output
precision recall f1-score support
False 0.63 1.00 0.77 2208
True 1.00 0.00 0.00 1302
accuracy 0.63 3510
macro avg 0.81 0.50 0.39 3510
weighted avg 0.77 0.63 0.49 3510
%% Cell type:code id: tags:
```
python
brier_score
=
brier_score_loss
(
y_test
,
y_pred
)
brier_score
```
%% Output
0.37094017094017095
%% Cell type:code id: tags:
```
python
x_min
,
x_max
=
0
,
7
y_min
,
y_max
=
0
,
1
```
%% Cell type:code id: tags:
```
python
xx
,
yy
=
np
.
meshgrid
(
np
.
arange
(
x_min
,
x_max
,
0.01
),
np
.
arange
(
y_min
,
y_max
,
0.01
))
Z
=
model
.
predict
(
np
.
c_
[
xx
.
ravel
(),
yy
.
ravel
()])
Z
=
Z
.
reshape
(
xx
.
shape
)
```
%% Cell type:code id: tags:
```
python
father
=
x
[
'
FATHEDP
'
]
father_array
=
father
.
to_numpy
()
father_array
```
%% Output
array([6, 2, 6, ..., 3, 1, 2], dtype=int64)
%% Cell type:code id: tags:
```
python
mother
=
x
[
'
MOTHEDP
'
]
mother_array
=
mother
.
to_numpy
()
mother_array
```
%% Output
array([6, 2, 6, ..., 4, 5, 5], dtype=int64)
%% Cell type:code id: tags:
```
python
plt
.
contourf
(
xx
,
yy
,
Z
,
alpha
=
0.8
)
colors
=
[
'
blue
'
if
label
==
0
else
'
orange
'
for
label
in
y
]
scatter
=
plt
.
scatter
(
father_array
,
mother_array
,
c
=
y
,
edgecolors
=
'
k
'
,
marker
=
'
o
'
,
s
=
80
,
linewidth
=
0.8
)
legend_labels
=
[
'
Did not use scholarships
'
,
'
Used scholarships
'
]
plt
.
legend
(
handles
=
scatter
.
legend_elements
()[
0
]
,
labels
=
legend_labels
,
title
=
'
Legend
'
,
loc
=
3
,
fontsize
=
'
x-small
'
)
plt
.
title
(
'
Logistic Regression Decision Boundary
'
)
plt
.
xlabel
(
'
Mother
\'
s education level
'
)
plt
.
ylabel
(
'
Father
\'
s education level
'
)
plt
.
show
()
```
%% Output
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment