第六章(酸奶飲料新產品口味測試案例研究)
阿新 • • 發佈:2019-01-29
分析目的
- 在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
完。