Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save S2Ahmad/f8c902fbccaca13393a68a9f2fed78e2 to your computer and use it in GitHub Desktop.
Save S2Ahmad/f8c902fbccaca13393a68a9f2fed78e2 to your computer and use it in GitHub Desktop.
{
"cells": [
{
"cell_type": "markdown",
"id": "3cbdbf5d",
"metadata": {
"id": "3efad4c7-d34f-44b0-a48d-94651f931bae"
},
"source": [
"# Activity: Hypothesis testing with Python"
]
},
{
"cell_type": "markdown",
"id": "0d7a0797",
"metadata": {
"id": "2faf7b57-5c13-45e5-b666-d575eff0d17c"
},
"source": [
"## **Introduction**\n"
]
},
{
"cell_type": "markdown",
"id": "3da37a19",
"metadata": {
"id": "2ca9aca5-33e0-4aa7-acdb-05832b05e5a9"
},
"source": [
"As you've been learning, analysis of variance (commonly called ANOVA) is a group of statistical techniques that test the difference of means among three or more groups. It's a powerful tool for determining whether population means are different across groups and for answering a wide range of business questions.\n",
"\n",
"In this activity, you are a data professional working with historical marketing promotion data. You will use the data to run a one-way ANOVA and a post hoc ANOVA test. Then, you will communicate your results to stakeholders. These experiences will help you make more confident recommendations in a professional setting. \n",
"\n",
"In your dataset, each row corresponds to an independent marketing promotion, where your business uses TV, social media, radio, and influencer promotions to increase sales. You have previously provided insights about how different promotion types affect sales; now stakeholders want to know if sales are significantly different among various TV and influencer promotion types.\n",
"\n",
"To address this request, a one-way ANOVA test will enable you to determine if there is a statistically significant difference in sales among groups. This includes:\n",
"* Using plots and descriptive statistics to select a categorical independent variable\n",
"* Creating and fitting a linear regression model with the selected categorical independent variable\n",
"* Checking model assumptions\n",
"* Performing and interpreting a one-way ANOVA test\n",
"* Comparing pairs of groups using an ANOVA post hoc test\n",
"* Interpreting model outputs and communicating the results to nontechnical stakeholders"
]
},
{
"cell_type": "markdown",
"id": "2418371c",
"metadata": {
"id": "bfcf5ec2-e48b-4443-9bf6-72670bd60041"
},
"source": [
"## **Step 1: Imports** \n"
]
},
{
"cell_type": "markdown",
"id": "b59ce966",
"metadata": {
"id": "7dcaa8a0-4fe8-4816-9ef5-5fc665a4638f"
},
"source": [
"Import pandas, pyplot from matplotlib, seaborn, api from statsmodels, ols from statsmodels.formula.api, and pairwise_tukeyhsd from statsmodels.stats.multicomp."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "965f75cd",
"metadata": {
"id": "b2f4b9fa-b7bd-4b88-8c71-d3af5ddcb906"
},
"outputs": [],
"source": [
"# Import libraries and packages.\n",
"\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import statsmodels.api as sm\n",
"from statsmodels.formula.api import ols\n",
"from statsmodels.stats.multicomp import pairwise_tukeyhsd\n"
]
},
{
"cell_type": "markdown",
"id": "88732511",
"metadata": {},
"source": [
"`Pandas` was used to load the dataset `marketing_sales_data.csv` as `data`, now display the first five rows. The variables in the dataset have been adjusted to suit the objectives of this lab. As shown in this cell, the dataset has been automatically loaded in for you. You do not need to download the .csv file, or provide more code, in order to access the dataset and proceed with this lab. Please continue with this activity by completing the following instructions."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "de050e2b",
"metadata": {
"id": "32d46d82-2bd6-4433-b56e-cfa5542949ca"
},
"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>TV</th>\n",
" <th>Radio</th>\n",
" <th>Social Media</th>\n",
" <th>Influencer</th>\n",
" <th>Sales</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Low</td>\n",
" <td>1.218354</td>\n",
" <td>1.270444</td>\n",
" <td>Micro</td>\n",
" <td>90.054222</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Medium</td>\n",
" <td>14.949791</td>\n",
" <td>0.274451</td>\n",
" <td>Macro</td>\n",
" <td>222.741668</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Low</td>\n",
" <td>10.377258</td>\n",
" <td>0.061984</td>\n",
" <td>Mega</td>\n",
" <td>102.774790</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>High</td>\n",
" <td>26.469274</td>\n",
" <td>7.070945</td>\n",
" <td>Micro</td>\n",
" <td>328.239378</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>High</td>\n",
" <td>36.876302</td>\n",
" <td>7.618605</td>\n",
" <td>Mega</td>\n",
" <td>351.807328</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" TV Radio Social Media Influencer Sales\n",
"0 Low 1.218354 1.270444 Micro 90.054222\n",
"1 Medium 14.949791 0.274451 Macro 222.741668\n",
"2 Low 10.377258 0.061984 Mega 102.774790\n",
"3 High 26.469274 7.070945 Micro 328.239378\n",
"4 High 36.876302 7.618605 Mega 351.807328"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# RUN THIS CELL TO IMPORT YOUR DATA.\n",
"\n",
"### YOUR CODE HERE ### \n",
"data = pd.read_csv('marketing_sales_data.csv')\n",
"\n",
"# Display the first five rows.\n",
"\n",
"data.head()\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "28dcb9ec",
"metadata": {
"id": "c179e85f-20df-4840-ad29-de35b928dff6"
},
"source": [
"The features in the data are:\n",
"* TV promotion budget (in Low, Medium, and High categories)\n",
"* Social media promotion budget (in millions of dollars)\n",
"* Radio promotion budget (in millions of dollars)\n",
"* Sales (in millions of dollars)\n",
"* Influencer size (in Mega, Macro, Nano, and Micro categories)"
]
},
{
"cell_type": "markdown",
"id": "33878d5f",
"metadata": {
"id": "6db7b19a-dd9b-490a-b389-0c433ed16754"
},
"source": [
"**Question:** Why is it useful to perform exploratory data analysis before constructing a linear regression model?\n",
"\n",
"Potential reasons include:\n",
"\n",
"* To understand which variables are present in the data\n",
"* To consider the distribution of features, such as minimum, mean, and maximum values\n",
"* To plot the relationship between the independent and dependent variables and visualize which features have a linear relationship\n",
"* To identify issues with the data, such as incorrect or missing values."
]
},
{
"cell_type": "markdown",
"id": "d73ca0dc",
"metadata": {
"id": "fd47ede7-63ff-4fe5-aeb0-b8f909e9ecbe"
},
"source": [
"## **Step 2: Data exploration** \n"
]
},
{
"cell_type": "markdown",
"id": "ed6404d8",
"metadata": {
"id": "b9669d71-a6b3-491b-b115-0c766625fc3d"
},
"source": [
"First, use a boxplot to determine how `Sales` vary based on the `TV` promotion budget category."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "eb3d3b16",
"metadata": {
"id": "518254a6-44d5-45bf-9b57-13ce3a4deab3"
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f1dbab77d10>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Create a boxplot with TV and Sales.\n",
"\n",
"sns.boxplot(data=data, x='TV', y='Sales')\n"
]
},
{
"cell_type": "markdown",
"id": "3e8568ce",
"metadata": {
"id": "dd7d4c26-24ae-43b6-a521-18ce36446216"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 1</strong></h4></summary>\n",
"\n",
"There is a function in the `seaborn` library that creates a boxplot showing the distribution of a variable across multiple groups.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "72419e34",
"metadata": {
"id": "344a4a0a-1b9e-474a-979a-d55032c5bd75"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 2</strong></h4></summary>\n",
"\n",
"Use the `boxplot()` function from `seaborn`.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "58620b78",
"metadata": {
"id": "0b172c8a-8c94-4f83-bd33-b89d634a5025",
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 3</strong></h4></summary>\n",
"\n",
"Use `TV` as the `x` argument, `Sales` as the `y` argument, and `data` as the `data` argument.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "42a2aa56",
"metadata": {
"id": "a956add8-97b0-45b8-a008-ca1f7033c308"
},
"source": [
"**Question:** Is there variation in `Sales` based off the `TV` promotion budget?\n",
"\n",
"There is considerable variation in `Sales` across the `TV` groups. The significance of these differences can be tested with a one-way ANOVA."
]
},
{
"cell_type": "markdown",
"id": "7a5814bd",
"metadata": {
"id": "f3100abe-32db-4a56-b831-18eb0857b2d7"
},
"source": [
"Now, use a boxplot to determine how `Sales` vary based on the `Influencer` size category."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "17c75147",
"metadata": {
"id": "fafbc9e4-de0b-4892-a863-add240208344"
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f1db8ad6290>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Create a boxplot with Influencer and Sales.\n",
"\n",
"sns.boxplot(data=data, x='Influencer', y='Sales')\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "b13c5314",
"metadata": {
"id": "e415aa95-0650-47e0-9efd-2770b8dfcb3d"
},
"source": [
"**Question:** Is there variation in `Sales` based off the `Influencer` size?\n",
"\n",
"There is some variation in `Sales` across the `Influencer` groups, but it may not be significant."
]
},
{
"cell_type": "markdown",
"id": "6506de8d",
"metadata": {
"id": "0f4adbee-9d13-400a-99e6-6d4c482b8e17"
},
"source": [
"### Remove missing data\n",
"\n",
"You may recall from prior labs that this dataset contains rows with missing values. To correct this, drop these rows. Then, confirm the data contains no missing values."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "cd3028e8",
"metadata": {
"id": "498e546b-e90e-4b84-a7d7-12b3bb514c1d"
},
"outputs": [
{
"data": {
"text/plain": [
"TV 0\n",
"Radio 0\n",
"Social Media 0\n",
"Influencer 0\n",
"Sales 0\n",
"dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Drop rows that contain missing data and update the DataFrame.\n",
"\n",
"data = data.dropna(axis=0)\n",
"\n",
"\n",
"# Confirm the data contains no missing values.\n",
"\n",
"data.isnull().sum()\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "1da1fc73",
"metadata": {
"id": "e37d7507-1f3d-4432-912e-ced7feff4ac6"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 1</strong></h4></summary>\n",
"\n",
"There is a `pandas` function that removes missing values.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "295ea3ac",
"metadata": {
"id": "19cd01e1-9976-47f6-b25c-7b8ce2a05627"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 2</strong></h4></summary>\n",
"\n",
"The `dropna()` function removes missing values from an object (e.g., DataFrame).\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "54bd3fb5",
"metadata": {
"id": "87a46eec-9d3e-4657-bf91-6b3bd02089f0"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 3</strong></h4></summary>\n",
"\n",
"Verify the data is updated properly after the rows containing missing data are dropped.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "d62cb320",
"metadata": {
"id": "888c90fa-d800-43e4-a692-9fdd576c9b9c"
},
"source": [
"## **Step 3: Model building** \n"
]
},
{
"cell_type": "markdown",
"id": "0ec6e0c6",
"metadata": {
"id": "9c906193-db62-4af0-83fa-dffafc347554"
},
"source": [
"Fit a linear regression model that predicts `Sales` using one of the independent categorical variables in `data`. Refer to your previous code for defining and fitting a linear regression model."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "1385a4c4",
"metadata": {
"id": "76f99341-1ea0-4f1d-a2c7-54e56bd57e38"
},
"outputs": [
{
"data": {
"text/html": [
"<table class=\"simpletable\">\n",
"<caption>OLS Regression Results</caption>\n",
"<tr>\n",
" <th>Dep. Variable:</th> <td>Sales</td> <th> R-squared: </th> <td> 0.874</td> \n",
"</tr>\n",
"<tr>\n",
" <th>Model:</th> <td>OLS</td> <th> Adj. R-squared: </th> <td> 0.874</td> \n",
"</tr>\n",
"<tr>\n",
" <th>Method:</th> <td>Least Squares</td> <th> F-statistic: </th> <td> 1971.</td> \n",
"</tr>\n",
"<tr>\n",
" <th>Date:</th> <td>Tue, 05 Sep 2023</td> <th> Prob (F-statistic):</th> <td>8.81e-256</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Time:</th> <td>23:38:58</td> <th> Log-Likelihood: </th> <td> -2778.9</td> \n",
"</tr>\n",
"<tr>\n",
" <th>No. Observations:</th> <td> 569</td> <th> AIC: </th> <td> 5564.</td> \n",
"</tr>\n",
"<tr>\n",
" <th>Df Residuals:</th> <td> 566</td> <th> BIC: </th> <td> 5577.</td> \n",
"</tr>\n",
"<tr>\n",
" <th>Df Model:</th> <td> 2</td> <th> </th> <td> </td> \n",
"</tr>\n",
"<tr>\n",
" <th>Covariance Type:</th> <td>nonrobust</td> <th> </th> <td> </td> \n",
"</tr>\n",
"</table>\n",
"<table class=\"simpletable\">\n",
"<tr>\n",
" <td></td> <th>coef</th> <th>std err</th> <th>t</th> <th>P>|t|</th> <th>[0.025</th> <th>0.975]</th> \n",
"</tr>\n",
"<tr>\n",
" <th>Intercept</th> <td> 300.5296</td> <td> 2.417</td> <td> 124.360</td> <td> 0.000</td> <td> 295.783</td> <td> 305.276</td>\n",
"</tr>\n",
"<tr>\n",
" <th>C(TV)[T.Low]</th> <td> -208.8133</td> <td> 3.329</td> <td> -62.720</td> <td> 0.000</td> <td> -215.353</td> <td> -202.274</td>\n",
"</tr>\n",
"<tr>\n",
" <th>C(TV)[T.Medium]</th> <td> -101.5061</td> <td> 3.325</td> <td> -30.526</td> <td> 0.000</td> <td> -108.038</td> <td> -94.975</td>\n",
"</tr>\n",
"</table>\n",
"<table class=\"simpletable\">\n",
"<tr>\n",
" <th>Omnibus:</th> <td>450.714</td> <th> Durbin-Watson: </th> <td> 2.002</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Prob(Omnibus):</th> <td> 0.000</td> <th> Jarque-Bera (JB): </th> <td> 35.763</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Skew:</th> <td>-0.044</td> <th> Prob(JB): </th> <td>1.71e-08</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Kurtosis:</th> <td> 1.775</td> <th> Cond. No. </th> <td> 3.86</td>\n",
"</tr>\n",
"</table><br/><br/>Warnings:<br/>[1] Standard Errors assume that the covariance matrix of the errors is correctly specified."
],
"text/plain": [
"<class 'statsmodels.iolib.summary.Summary'>\n",
"\"\"\"\n",
" OLS Regression Results \n",
"==============================================================================\n",
"Dep. Variable: Sales R-squared: 0.874\n",
"Model: OLS Adj. R-squared: 0.874\n",
"Method: Least Squares F-statistic: 1971.\n",
"Date: Tue, 05 Sep 2023 Prob (F-statistic): 8.81e-256\n",
"Time: 23:38:58 Log-Likelihood: -2778.9\n",
"No. Observations: 569 AIC: 5564.\n",
"Df Residuals: 566 BIC: 5577.\n",
"Df Model: 2 \n",
"Covariance Type: nonrobust \n",
"===================================================================================\n",
" coef std err t P>|t| [0.025 0.975]\n",
"-----------------------------------------------------------------------------------\n",
"Intercept 300.5296 2.417 124.360 0.000 295.783 305.276\n",
"C(TV)[T.Low] -208.8133 3.329 -62.720 0.000 -215.353 -202.274\n",
"C(TV)[T.Medium] -101.5061 3.325 -30.526 0.000 -108.038 -94.975\n",
"==============================================================================\n",
"Omnibus: 450.714 Durbin-Watson: 2.002\n",
"Prob(Omnibus): 0.000 Jarque-Bera (JB): 35.763\n",
"Skew: -0.044 Prob(JB): 1.71e-08\n",
"Kurtosis: 1.775 Cond. No. 3.86\n",
"==============================================================================\n",
"\n",
"Warnings:\n",
"[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n",
"\"\"\""
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Define the OLS formula.\n",
"\n",
"formula = 'Sales ~ C(TV)'\n",
"\n",
"\n",
"# Create an OLS model.\n",
"\n",
"OLS = ols(data=data, formula = formula)\n",
"\n",
"\n",
"# Fit the model.\n",
"\n",
"model = OLS.fit()\n",
"\n",
"\n",
"# Save the results summary.\n",
"\n",
"summary = model.summary()\n",
"\n",
"\n",
"# Display the model results.\n",
"\n",
"summary\n"
]
},
{
"cell_type": "markdown",
"id": "efd4b28b",
"metadata": {
"id": "109e32f5-8193-4961-8245-6b6c09acfe3a",
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 1</strong></h4></summary>\n",
"\n",
"Refer to code you've written to fit linear regression models.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "8fe68670",
"metadata": {
"id": "49424e08-3472-44f1-a892-63ed80517510"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 2</strong></h4></summary>\n",
"\n",
"Use the `ols()` function from `statsmodels.formula.api`, which creates a model from a formula and DataFrame, to create an OLS model.\n",
"\n",
"</details>\n"
]
},
{
"cell_type": "markdown",
"id": "080d61f6",
"metadata": {
"id": "0ee5dead-ed62-45d5-ab24-d671d8c3dde4",
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 3</strong></h4></summary>\n",
"\n",
"Use `C()` around the variable name in the ols formula to indicate a variable is categorical.\n",
" \n",
"Be sure the variable string names exactly match the column names in `data`.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "f6cdc0f2",
"metadata": {
"id": "1d889a8b-76f5-4f27-833f-a19af27ed8ca"
},
"source": [
"**Question:** Which categorical variable did you choose for the model? Why?\n",
"\n",
"* `TV` was selected as the preceding analysis showed a strong relationship between the `TV` promotion budget and the average `Sales`.\n",
"* `Influencer` was not selected because it did not show a strong relationship to `Sales` in the analysis."
]
},
{
"cell_type": "markdown",
"id": "3cda2c84",
"metadata": {
"id": "b4987bee-40ae-4513-95c3-1bec1acdbba9",
"tags": []
},
"source": [
"### Check model assumptions"
]
},
{
"cell_type": "markdown",
"id": "96291c1b",
"metadata": {
"id": "6854af88-7d67-4214-a7df-c6405b46bb47"
},
"source": [
"Now, check the four linear regression assumptions are upheld for your model."
]
},
{
"cell_type": "markdown",
"id": "8103640e",
"metadata": {
"id": "72eeb1c7-2f17-44fe-ac3f-71d555c2d81e",
"tags": []
},
"source": [
"**Question:** Is the linearity assumption met?\n",
"\n",
"Because your model does not have any continuous independent variables, the linearity assumption is not required. "
]
},
{
"cell_type": "markdown",
"id": "d9aefb95",
"metadata": {
"id": "feeb314a-bbbe-4e9a-8561-2f8af0cd172e"
},
"source": [
"The independent observation assumption states that each observation in the dataset is independent. As each marketing promotion (row) is independent from one another, the independence assumption is not violated."
]
},
{
"cell_type": "markdown",
"id": "493cf487",
"metadata": {
"id": "bcccf5c8-3325-4b1e-b491-f151bea5ab1c"
},
"source": [
"Next, verify that the normality assumption is upheld for the model."
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "bb5d7f1d",
"metadata": {
"id": "cce8f99b-33e2-4723-9266-4f009e7a15dd"
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Calculate the residuals.\n",
"\n",
"res = model.resid\n",
"\n",
"\n",
"# Create a histogram with the residuals. \n",
"\n",
"sns.histplot(res)\n",
"\n",
"\n",
"# Create a QQ plot of the residuals.\n",
"\n",
"sm.qqplot(res, line='s')\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "786ce87d",
"metadata": {
"id": "39538404-e292-4564-b361-46353fc8e3f0"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 1</strong></h4></summary>\n",
"\n",
"Access the residuals from the fit model object.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "647ecac6",
"metadata": {
"id": "689dabc4-ad48-4c9e-976e-b70520801385"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 2</strong></h4></summary>\n",
"\n",
"Use `model.resid` to get the residuals from a fit model called `model`.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "e1a4342d",
"metadata": {
"id": "562f868e-45e4-464a-a47e-9f1ed735d6a4"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 3</strong></h4></summary>\n",
"\n",
"For the histogram, pass the residuals as the first argument in the `seaborn` `histplot()` function.\n",
" \n",
"For the QQ-plot, pass the residuals as the first argument in the `statsmodels` `qqplot()` function.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "f834d442",
"metadata": {
"id": "e41f4dd7-5501-43b7-b684-58bad8ff61fb"
},
"source": [
"**Question:** Is the normality assumption met?\n",
"\n",
"There is reasonable concern that the normality assumption is not met when `TV` is used as the independent variable predicting `Sales`. The normal q-q forms an 'S' that deviates off the red diagonal line, which is not desired behavior. \n",
"\n",
"However, for the purpose of the lab, continue assuming the normality assumption is met."
]
},
{
"cell_type": "markdown",
"id": "9317db1d",
"metadata": {
"id": "be83ac10-d1d0-4b94-88de-5de424528547"
},
"source": [
"Now, verify the constant variance (homoscedasticity) assumption is met for this model."
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "2ad318a0",
"metadata": {
"id": "efcd0325-b3a0-42d1-ad57-38f10800c35e"
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Create a scatter plot with the fitted values from the model and the residuals.\n",
"\n",
"sns.scatterplot(model.fittedvalues, res).axhline(0, color='red')\n",
"\n",
"\n",
"# Add a line at y = 0 to visualize the variance of residuals above and below 0.\n",
"\n",
"\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"id": "f806fa3d",
"metadata": {
"id": "662f104d-0977-498f-8159-501063f3c3fc"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 1</strong></h4></summary>\n",
"\n",
"Access the fitted values from the model object fit earlier.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "8b52c828",
"metadata": {
"id": "b0a3d26c-1e80-46e3-849a-d7f054cffb52",
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 2</strong></h4></summary>\n",
"\n",
"Use `model.fittedvalues` to get the fitted values from the fit model called `model`.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "57c433df",
"metadata": {
"id": "5830cbfc-9204-42a6-b24f-3cf1334ff41e",
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 3</strong></h4></summary>\n",
"\n",
"\n",
"Call the `scatterplot()` function from the `seaborn` library and pass in the fitted values and residuals.\n",
" \n",
"Add a line to a figure using the `axline()` function.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "32cadf66",
"metadata": {
"id": "8318f726-369c-446a-acad-85117e43459b"
},
"source": [
"**Question:** Is the constant variance (homoscedasticity) assumption met?\n",
"\n",
"The variance where there are fitted values is similarly distributed, validating that the constant variance assumption is met."
]
},
{
"cell_type": "markdown",
"id": "4b1ea7a0",
"metadata": {
"id": "84373d80-2129-4124-85fa-85871671004b"
},
"source": [
"## **Step 4: Results and evaluation** "
]
},
{
"cell_type": "markdown",
"id": "a3b6fb8c",
"metadata": {
"id": "30f5a3e8-a446-4a64-a0cb-4a512a367111"
},
"source": [
"First, display the OLS regression results."
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "4f3d79ee",
"metadata": {
"id": "7d0bfc27-05f7-4cfa-9aa1-8e2110eabd69"
},
"outputs": [
{
"data": {
"text/html": [
"<table class=\"simpletable\">\n",
"<caption>OLS Regression Results</caption>\n",
"<tr>\n",
" <th>Dep. Variable:</th> <td>Sales</td> <th> R-squared: </th> <td> 0.874</td> \n",
"</tr>\n",
"<tr>\n",
" <th>Model:</th> <td>OLS</td> <th> Adj. R-squared: </th> <td> 0.874</td> \n",
"</tr>\n",
"<tr>\n",
" <th>Method:</th> <td>Least Squares</td> <th> F-statistic: </th> <td> 1971.</td> \n",
"</tr>\n",
"<tr>\n",
" <th>Date:</th> <td>Tue, 05 Sep 2023</td> <th> Prob (F-statistic):</th> <td>8.81e-256</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Time:</th> <td>23:38:58</td> <th> Log-Likelihood: </th> <td> -2778.9</td> \n",
"</tr>\n",
"<tr>\n",
" <th>No. Observations:</th> <td> 569</td> <th> AIC: </th> <td> 5564.</td> \n",
"</tr>\n",
"<tr>\n",
" <th>Df Residuals:</th> <td> 566</td> <th> BIC: </th> <td> 5577.</td> \n",
"</tr>\n",
"<tr>\n",
" <th>Df Model:</th> <td> 2</td> <th> </th> <td> </td> \n",
"</tr>\n",
"<tr>\n",
" <th>Covariance Type:</th> <td>nonrobust</td> <th> </th> <td> </td> \n",
"</tr>\n",
"</table>\n",
"<table class=\"simpletable\">\n",
"<tr>\n",
" <td></td> <th>coef</th> <th>std err</th> <th>t</th> <th>P>|t|</th> <th>[0.025</th> <th>0.975]</th> \n",
"</tr>\n",
"<tr>\n",
" <th>Intercept</th> <td> 300.5296</td> <td> 2.417</td> <td> 124.360</td> <td> 0.000</td> <td> 295.783</td> <td> 305.276</td>\n",
"</tr>\n",
"<tr>\n",
" <th>C(TV)[T.Low]</th> <td> -208.8133</td> <td> 3.329</td> <td> -62.720</td> <td> 0.000</td> <td> -215.353</td> <td> -202.274</td>\n",
"</tr>\n",
"<tr>\n",
" <th>C(TV)[T.Medium]</th> <td> -101.5061</td> <td> 3.325</td> <td> -30.526</td> <td> 0.000</td> <td> -108.038</td> <td> -94.975</td>\n",
"</tr>\n",
"</table>\n",
"<table class=\"simpletable\">\n",
"<tr>\n",
" <th>Omnibus:</th> <td>450.714</td> <th> Durbin-Watson: </th> <td> 2.002</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Prob(Omnibus):</th> <td> 0.000</td> <th> Jarque-Bera (JB): </th> <td> 35.763</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Skew:</th> <td>-0.044</td> <th> Prob(JB): </th> <td>1.71e-08</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Kurtosis:</th> <td> 1.775</td> <th> Cond. No. </th> <td> 3.86</td>\n",
"</tr>\n",
"</table><br/><br/>Warnings:<br/>[1] Standard Errors assume that the covariance matrix of the errors is correctly specified."
],
"text/plain": [
"<class 'statsmodels.iolib.summary.Summary'>\n",
"\"\"\"\n",
" OLS Regression Results \n",
"==============================================================================\n",
"Dep. Variable: Sales R-squared: 0.874\n",
"Model: OLS Adj. R-squared: 0.874\n",
"Method: Least Squares F-statistic: 1971.\n",
"Date: Tue, 05 Sep 2023 Prob (F-statistic): 8.81e-256\n",
"Time: 23:38:58 Log-Likelihood: -2778.9\n",
"No. Observations: 569 AIC: 5564.\n",
"Df Residuals: 566 BIC: 5577.\n",
"Df Model: 2 \n",
"Covariance Type: nonrobust \n",
"===================================================================================\n",
" coef std err t P>|t| [0.025 0.975]\n",
"-----------------------------------------------------------------------------------\n",
"Intercept 300.5296 2.417 124.360 0.000 295.783 305.276\n",
"C(TV)[T.Low] -208.8133 3.329 -62.720 0.000 -215.353 -202.274\n",
"C(TV)[T.Medium] -101.5061 3.325 -30.526 0.000 -108.038 -94.975\n",
"==============================================================================\n",
"Omnibus: 450.714 Durbin-Watson: 2.002\n",
"Prob(Omnibus): 0.000 Jarque-Bera (JB): 35.763\n",
"Skew: -0.044 Prob(JB): 1.71e-08\n",
"Kurtosis: 1.775 Cond. No. 3.86\n",
"==============================================================================\n",
"\n",
"Warnings:\n",
"[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n",
"\"\"\""
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Display the model results summary.\n",
"\n",
"summary\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "bcd73e0e",
"metadata": {
"id": "b29062e1-5c7f-4a78-b782-a07236bbcc28"
},
"source": [
"**Question:** What is your interpretation of the model's R-squared?\n",
"\n",
"Using `TV` as the independent variable results in a linear regression model with $R^{2} = 0.874$. In other words, the model explains $87.4\\%$ of the variation in `Sales`. This makes the model an effective predictor of `Sales`. "
]
},
{
"cell_type": "markdown",
"id": "de075158",
"metadata": {
"id": "8ca575f3-cbba-4a0a-99d0-b8bf82ea49e4",
"tags": []
},
"source": [
"**Question:** What is your intepretation of the coefficient estimates? Are the coefficients statistically significant?\n",
"\n",
"The default `TV` category for the model is `High`, because there are coefficients for the other two `TV` categories, `Medium` and `Low`. According to the model, `Sales` with a `Medium` or `Low` `TV` category are lower on average than `Sales` with a `High` `TV` category. For example, the model predicts that a `Low` `TV` promotion would be 208.813 (in millions of dollars) lower in `Sales` on average than a `High` `TV` promotion.\n",
"\n",
"The p-value for all coefficients is $0.000$, meaning all coefficients are statistically significant at $p=0.05$. The 95% confidence intervals for each coefficient should be reported when presenting results to stakeholders. For instance, there is a $95\\%$ chance the interval $[-215.353,-202.274]$ contains the true parameter of the slope of $\\beta_{TVLow}$, which is the estimated difference in promotion sales when a `Low` `TV` promotion is chosen instead of a `High` `TV` promotion."
]
},
{
"cell_type": "markdown",
"id": "58371783",
"metadata": {
"id": "b7e61507-0dd5-4d32-8045-ba06cc37fcd4"
},
"source": [
"**Question:** Do you think your model could be improved? Why or why not? How?\n",
"\n",
"Given how accurate `TV` was as a predictor, the model could be improved with a more granular view of the `TV` promotions, such as additional categories or the actual `TV` promotion budgets. Further, additional variables, such as the location of the marketing campaign or the time of year, may increase model accuracy. "
]
},
{
"cell_type": "markdown",
"id": "68d1a980",
"metadata": {
"id": "97b169ad-b113-46e3-996a-53f268adbc6d"
},
"source": [
"### Perform a one-way ANOVA test\n",
"\n",
"With the model fit, run a one-way ANOVA test to determine whether there is a statistically significant difference in `Sales` among groups. "
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "85426c3b",
"metadata": {
"id": "aadfa800-a74c-4819-abb8-cda13ce16d96"
},
"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>df</th>\n",
" <th>sum_sq</th>\n",
" <th>mean_sq</th>\n",
" <th>F</th>\n",
" <th>PR(&gt;F)</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>C(TV)</th>\n",
" <td>2.0</td>\n",
" <td>4.052692e+06</td>\n",
" <td>2.026346e+06</td>\n",
" <td>1971.455737</td>\n",
" <td>8.805550e-256</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Residual</th>\n",
" <td>566.0</td>\n",
" <td>5.817589e+05</td>\n",
" <td>1.027843e+03</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" df sum_sq mean_sq F PR(>F)\n",
"C(TV) 2.0 4.052692e+06 2.026346e+06 1971.455737 8.805550e-256\n",
"Residual 566.0 5.817589e+05 1.027843e+03 NaN NaN"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Create an one-way ANOVA table for the fit model.\n",
"\n",
"sm.stats.anova_lm(model, type=2)"
]
},
{
"cell_type": "markdown",
"id": "8747c9d1",
"metadata": {
"id": "3574a603-96c3-4876-80bd-9864a1e466d6"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 1</strong></h4></summary>\n",
"\n",
"Review what you've learned about how to perform a one-way ANOVA test.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "c7672317",
"metadata": {
"id": "f1010b34-96b2-403a-8630-e83613ff40be"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 2</strong></h4></summary>\n",
"\n",
"There is a function in `statsmodels.api` (i.e. `sm`) that peforms an ANOVA test for a fit linear model.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "7e77d7f7",
"metadata": {
"id": "b0ccc536-34c6-4bb7-a022-a2e4bec62397"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 3</strong></h4></summary>\n",
"\n",
"Use the `anova_lm()` function from `sm.stats`. Specify the type of ANOVA test (for example, one-way or two-way), using the `typ` parameter.\n",
" \n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "ed14d827",
"metadata": {
"id": "735c20e2-bd53-4e36-81bd-38ae78a4d4a8"
},
"source": [
"**Question:** What are the null and alternative hypotheses for the ANOVA test?\n",
"\n",
"The null hypothesis is that there is no difference in `Sales` based on the `TV` promotion budget.\n",
"\n",
"The alternative hypothesis is that there is a difference in `Sales` based on the `TV` promotion budget."
]
},
{
"cell_type": "markdown",
"id": "50c45697",
"metadata": {
"id": "1f5807cb-aff6-4877-a70c-7dbffdb822e3"
},
"source": [
"**Question:** What is your conclusion from the one-way ANOVA test?\n",
"\n",
"The F-test statistic is 1971.46 and the p-value is $8.81 * 10^{-256}$ (i.e., very small). Because the p-value is less than 0.05, you would reject the null hypothesis that there is no difference in `Sales` based on the `TV` promotion budget."
]
},
{
"cell_type": "markdown",
"id": "097dc928",
"metadata": {
"id": "6e1d8561-3957-400b-89d1-4330ee923193"
},
"source": [
"**Question:** What did the ANOVA test tell you?\n",
"\n",
"The results of the one-way ANOVA test indicate that you can reject the null hypothesis in favor of the alternative hypothesis. There is a statistically significant difference in `Sales` among `TV` groups."
]
},
{
"cell_type": "markdown",
"id": "02de18bc",
"metadata": {
"id": "532a2ba1-8e9a-4c8f-b432-dfeea0e62fc4"
},
"source": [
"### Perform an ANOVA post hoc test\n",
"\n",
"If you have significant results from the one-way ANOVA test, you can apply ANOVA post hoc tests such as the Tukey’s HSD post hoc test. \n",
"\n",
"Run the Tukey’s HSD post hoc test to compare if there is a significant difference between each pair of categories for TV."
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "209b97a3",
"metadata": {
"id": "cce84e77-6269-4295-b961-8350a4b4920c"
},
"outputs": [
{
"data": {
"text/html": [
"<table class=\"simpletable\">\n",
"<caption>Multiple Comparison of Means - Tukey HSD, FWER=0.05</caption>\n",
"<tr>\n",
" <th>group1</th> <th>group2</th> <th>meandiff</th> <th>p-adj</th> <th>lower</th> <th>upper</th> <th>reject</th>\n",
"</tr>\n",
"<tr>\n",
" <td>High</td> <td>Low</td> <td>-208.8133</td> <td>0.001</td> <td>-216.637</td> <td>-200.9896</td> <td>True</td> \n",
"</tr>\n",
"<tr>\n",
" <td>High</td> <td>Medium</td> <td>-101.5061</td> <td>0.001</td> <td>-109.3204</td> <td>-93.6918</td> <td>True</td> \n",
"</tr>\n",
"<tr>\n",
" <td>Low</td> <td>Medium</td> <td>107.3072</td> <td>0.001</td> <td>99.7063</td> <td>114.908</td> <td>True</td> \n",
"</tr>\n",
"</table>"
],
"text/plain": [
"<class 'statsmodels.iolib.table.SimpleTable'>"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Perform the Tukey's HSD post hoc test.\n",
"\n",
"tukey = pairwise_tukeyhsd(endog=data['Sales'], groups = data['TV'])\n",
"tukey.summary()"
]
},
{
"cell_type": "markdown",
"id": "6695a34a",
"metadata": {
"id": "119b0c6f-b7c7-47a7-80cb-ed94a07fc61c"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 1</strong></h4></summary>\n",
"\n",
"Review what you've learned about how to perform a Tukey's HSD post hoc test.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "6fa196e5",
"metadata": {
"id": "3adb039f-15d0-4f36-848b-3b469cd4d65d"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 2</strong></h4></summary>\n",
"\n",
"Use the `pairwise_tukeyhsd()` function from `statsmodels.stats.multicomp`.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "a215acf3",
"metadata": {
"id": "5169a823-fd23-41bc-9766-1b3fd4bff1dc"
},
"source": [
"<details>\n",
"<summary><h4><strong>Hint 3</strong></h4></summary>\n",
"\n",
"The `endog` argument in `pairwise_tukeyhsd` indicates which variable is being compared across groups (i.e., `Sales`). The `groups` argument in `pairwise_tukeyhsd` tells the function which variable holds the group you’re interested in reviewing.\n",
"\n",
"</details>"
]
},
{
"cell_type": "markdown",
"id": "536bbd51",
"metadata": {
"id": "529c0b8a-8ffb-445f-b045-521646408c16"
},
"source": [
"**Question:** What is your interpretation of the Tukey HSD test?\n",
"\n",
"The first row, which compares the `High` and `Low` `TV` groups, indicates that you can reject the null hypothesis that there is no significant difference between the `Sales` of these two groups.\n",
"\n",
"You can also reject the null hypotheses for the two other pairwise comparisons that compare `High` to `Medium` and `Low` to `Medium`."
]
},
{
"cell_type": "markdown",
"id": "15773022",
"metadata": {
"id": "f1bd994c-52ca-49ac-ba00-51bc36d07842"
},
"source": [
"**Question:** What did the post hoc tell you?\n",
"\n",
"A post hoc test was conducted to determine which `TV` groups are different and how many are different from each other. This provides more detail than the one-way ANOVA results, which can at most determine that at least one group is different. Further, using the Tukey HSD controls for the increasing probability of incorrectly rejecting a null hypothesis from peforming multiple tests. \n",
"\n",
"The results were that `Sales` is not the same between any pair of `TV` groups. "
]
},
{
"cell_type": "markdown",
"id": "6e635d7e",
"metadata": {
"id": "agx1bDPU9cd4"
},
"source": [
"## **Considerations**\n",
"\n",
"**What are some key takeaways that you learned during this lab?**\n",
"\n",
"* Box-plots are a helpful tool for visualizing the distribution of a variable across groups.\n",
"* One-way ANOVA can be used to determine if there are significant differences among the means of three or more groups.\n",
"* ANOVA post hoc tests provide a more detailed view of the pairwise differences between groups.\n",
"\n",
"**What summary would you provide to stakeholders? Consider the statistical significance of key relationships and differences in distribution.**\n",
"\n",
"High TV promotion budgets result in significantly more sales than both medium and low TV promotion budgets. Medium TV promotion budgets result in significantly more sales than low TV promotion budgets.\n",
"\n",
"\n",
"Specifically, following are estimates for the difference between the mean sales resulting from different pairs of TV promotions, as determined by the Tukey's HSD test:\n",
"\n",
"* Estimated difference between the mean sales resulting from High and Low TV promotions: \\\\$208.81 million (with 95% confidence that the exact value for this difference is between 200.99 and 216.64 million dollars). \n",
"* Estimated difference between the mean sales resulting from High and Medium TV promotions: \\\\$101.51 million (with 95% confidence that the exact value for this difference is between 93.69 and 109.32 million dollars).\n",
"* difference between the mean sales resulting from Medium and Low TV promotions: \\\\$107.31 million (with 95\\% confidence that the exact value for this difference is between 99.71 and 114.91 million dollars).\n",
"\n",
"The linear regression model estimating `Sales` from `TV` had an R-squared of $0.871, making it a fairly accurate estimator. The model showed a statistically significant relationship between the `TV` promotion budget and `Sales`. \n",
"\n",
"The results of the one-way ANOVA test indicate that the null hypothesis that there is no difference in Sales based on the TV promotion budget can be rejected. Through the ANOVA post hoc test, a significant difference between all pairs of TV promotions was found.\n",
"\n",
"The difference in the distribution of sales across TV promotions was determined significant by both a one-way ANOVA test and a Tukey’s HSD test. \n"
]
},
{
"cell_type": "markdown",
"id": "20d4c9d1",
"metadata": {
"id": "88b01fcc-e016-4cd5-aedc-a71e51276fe2"
},
"source": [
"#### **Reference**\n",
"[Saragih, H.S. *Dummy Marketing and Sales Data*](https://www.kaggle.com/datasets/harrimansaragih/dummy-advertising-and-sales-data)"
]
},
{
"cell_type": "markdown",
"id": "7f6aef8a",
"metadata": {},
"source": [
"**Congratulations!** You've completed this lab. However, you may not notice a green check mark next to this item on Coursera's platform. Please continue your progress regardless of the check mark. Just click on the \"save\" icon at the top of this notebook to ensure your work has been logged."
]
}
],
"metadata": {
"colab": {
"collapsed_sections": [],
"provenance": []
},
"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.11.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment