1. 程式人生 > >第六章(酸奶飲料新產品口味測試案例研究)

第六章(酸奶飲料新產品口味測試案例研究)

分析目的

  • 在10中種樣品中,最受歡迎的是哪幾種
  • 消費者的口味在不同城市有什麼不同
  • 分析城市和品牌是否存在互動作用

交叉表

不同因素下均值描述

步驟:分析——比較均值——均值

條圖顯示不同品牌的口味評分均值(帶誤差線)

不同品牌評分分析

避免城市因素的干擾(可能存在互動項),對每個城市的樣本分別進行分析

按城市分割檔案

步驟:資料——拆分檔案——選擇城市作為分組依據

單因素方差分析

由於品牌的值為字串變數,無法在比較均值——單因素ANONA分析中顯示,因此採用一般線性模型——單因素即可

由上圖可知,p<0.05,拒絕原假設:沒有差異。推出在成都不同品牌間的評分是有顯著性差異的(其他城市與上表類似,不再贅述)。

兩兩比較到底是哪幾種品牌有明顯的差異

S-N-K檢驗

不同子集的個體是有顯著差異的,例如子集1中的"三*"和子集2中的"試製品2"

不同兩兩比較的檢驗選擇:

單因素方差分析需要滿足方差齊性檢驗

P>0.05,接受原假設,認為方差是相等的,滿足方差齊性

建立包含互動效應的飽和模型的方差分析

步驟:分析——一般線性模型——單因素

互動項的的p值>0.05,表明互動相關不顯著。

剔除互動項,建立主效應的方差分析模型

因為互動項的影響不顯著,因此可以直接選擇city和brand兩兩比較

由上圖可知,廣州的評分比成都評分小好多,其他城市兩兩差異不明顯;10種樣品種,試製品1的評分最好,且香*、海*、子*、試製品1、試製品2的評分五明顯差異。

python實現

交叉表

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use("ggplot")

data = pd.read_csv(r"C:\Users\Administrator\Desktop\city&brand.csv",encoding = "utf-8")

data.groupby(["city","brand"]).count().unstack()
	result
brand	E	F	G	H	I	J	K	L	M	N
city										
1	40	40	37	45	37	51	48	48	43	46
2	44	41	42	44	36	47	42	46	53	52
3	33	43	46	51	57	36	48	38	36	37
4	45	38	44	38	43	48	44	44	55	45

不同城市、品牌的評分均值

data.groupby(["city"]).result.mean()

city
1    6.222989
2    6.165548
3    5.920000
4    6.306306
Name: result, dtype: float64

data.groupby(["brand"]).result.mean()

brand
E    5.845679
F    5.598765
G    6.692308
H    5.679775
I    5.895954
J    5.736264
K    6.747253
L    6.409091
M    6.385027
N    6.494444
Name: result, dtype: float64

不同品牌的評分均值柱狀圖

brand_std = data.groupby(["brand"]).result.mean().std()
data_brand = data.groupby(["brand"]).result.mean()
data_brand.plot(kind = "bar",yerr = brand_std,error_kw ={'ecolor':"k","elinewidth":1,"capsize":4})

選取成都做單因素方差分析

from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm

data_chengdu = data[data["city"]==4]
model = ols("result ~ brand",data_chengdu).fit()
anovat = anova_lm(model)
print(anovat)
             df       sum_sq    mean_sq         F    PR(>F)
brand       9.0   129.160998  14.351222  4.205042  0.000031
Residual  434.0  1481.181344   3.412860       NaN       NaN

和spss的方差分析結果一樣。

s-n-k檢驗沒有在python相應的庫中找到。。。。。。。。

建立包含互動效應的飽和模型(在python裡,分類變數的值必須為字串格式,後面改了過來,檢驗才正確)

tra_dict = {1:"上海",2:"北京",3:"廣州",4:"成都"}
data.city = data.city.map(tra_dict)

formula = 'result ~ brand + city + brand:city'
anova_results = anova_lm(ols(formula,data).fit())
print(anova_results)



                df       sum_sq    mean_sq         F        PR(>F)
brand          9.0   303.967975  33.774219  8.746265  6.030751e-13
city           3.0    32.674024  10.891341  2.820452  3.769134e-02
brand:city    27.0   120.666503   4.469130  1.157338  2.633372e-01
Residual    1711.0  6607.127820   3.861559       NaN           NaN

除了sum_sq有些差別外,其他值都是和spss檢驗一樣的。

剔除互動項

formula = 'result ~ brand + city '
anova_results = anova_lm(ols(formula,data).fit())
print(anova_results)

              df       sum_sq    mean_sq         F        PR(>F)
brand        9.0   303.967975  33.774219  8.724939  6.486587e-13
city         3.0    32.674024  10.891341  2.813575  3.803745e-02
Residual  1738.0  6727.794323   3.870998       NaN           NaN

完。