最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python如何實(shí)現(xiàn)單因素方差分析

 更新時間:2024年07月19日 16:01:32   作者:百分之50  
這篇文章主要介紹了Python如何實(shí)現(xiàn)單因素方差分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1.背景

正念越來越受到人們關(guān)注,正念是一種有意的、不加評判的對當(dāng)下的注意覺察。可以通過可以通過觀呼吸、身體掃描、正念飲食等多種方式培養(yǎng)。

為了驗(yàn)證正念對記憶力的影響,選取三組被試分別進(jìn)行正念訓(xùn)練,運(yùn)動訓(xùn)練和無訓(xùn)練,以測量他們的短時記憶是否改善。

在各種條件嚴(yán)格控制下,三個月后測量各組的短時記憶回憶容量,結(jié)果如下:

為了驗(yàn)證各組是否存在差異,采用單因素方差分析進(jìn)行分析,并同時使用SPSS對每一步代碼進(jìn)行說明。

PS:此處為隨機(jī)數(shù)生成,且為了方便展示使用了寬數(shù)據(jù),導(dǎo)入SPSS時可使用“數(shù)據(jù)”-“重構(gòu)”轉(zhuǎn)換為SPSS常用的長數(shù)據(jù)。

2.Python代碼

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.stats.multicomp import pairwise_tukeyhsd  # 事后比較
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm

independent = "處理"  # 自變量
dependent = '短時記憶回憶成績'  # 因變量


# 設(shè)置畫圖參數(shù)
def define_plt():
    plt.rcParams['font.sans-serif'] = ['SimHei', ]  # 設(shè)置漢字字體
    plt.rcParams['font.size'] = 12  # 字體大小
    plt.rcParams['axes.unicode_minus'] = False  # 正常顯示負(fù)號


# 處理數(shù)據(jù)
def general_data():
    # 使用melt()函數(shù)將讀取數(shù)據(jù)進(jìn)行結(jié)構(gòu)轉(zhuǎn)換,以滿足ols()函數(shù)對數(shù)據(jù)格式的要求,
    # melt()函數(shù)能將列標(biāo)簽轉(zhuǎn)換為列數(shù)據(jù)
    excel_data = pd.read_excel('不同正念處理下的短時記憶成績.xlsx', index_col=0)
    melt_data = excel_data.melt(var_name=independent, value_name=dependent)
    print("\n=================melt_data========================")
    print(melt_data)
    return melt_data


# 顯示箱型線,檢查是否有極端數(shù)值
def show_boxplot(melt_data):
    sns.boxplot(x=independent, y=dependent, data=melt_data)
    plt.show()  # 需要放最后運(yùn)行,否則會阻擋后面程序的運(yùn)行


# 方差分析
def anova(melt_data):
    # ols()創(chuàng)建一線性回歸分析模型
    model_ols = ols('%s~C(%s)' % (dependent, independent), melt_data).fit()
    # anova_lm()函數(shù)創(chuàng)建模型生成方差分析表
    anova_table = anova_lm(model_ols, typ=2)
    print("\n=================以下為方差分析表====================")
    print(anova_table)


# 事后比較
def multiple_comparisons(melt_data):
    # 進(jìn)行事后比較分析
    print("\n=================事后比較分析結(jié)果====================")
    print(pairwise_tukeyhsd(melt_data[dependent], melt_data[independent]))


define_plt()  # 定義plt參數(shù)
memory_result = general_data()  # 生成數(shù)據(jù)
anova(memory_result)  # 方差分析
multiple_comparisons(memory_result)  # 事后比較
show_boxplot(memory_result)  # 顯示箱型線

3.結(jié)果

3.1 運(yùn)行以上代碼,會出現(xiàn)如下結(jié)果

  • 3.3.1 方差分析輸出結(jié)果

對比一下SPSS的輸出結(jié)果:

  • 英文版

  • 中文版

可以看出,Python的輸出結(jié)果比較簡潔,不過其實(shí)組別和誤差兩項(xiàng)也夠用了。

  • 3.3.2 事后比較分析結(jié)果

和SPSS中的結(jié)果進(jìn)行比較:

  • 英文版:

  • 中文版:

可以看出,Python也是只輸出了三個組的對比,不過和SPSS相比,也只是反過來用負(fù)數(shù)表示而已,重點(diǎn)關(guān)注畫框的地方,大于0.05說明不能拒絕零假設(shè),Python輸出結(jié)果則是用False表示。

  • 3.3.3 箱型圖

SPSS的輸出結(jié)果:

PS:部分字的內(nèi)容不一樣是我在不同地方輸入變量的問題,這個無關(guān)緊要。

可以看到正念組是明顯高于其他兩個組的。

箱型圖怎么看?

箱型圖的基本組成部分包括:

  • 1.上邊緣:數(shù)據(jù)點(diǎn)的最右側(cè)界限,通常是最大值。
  • 2.下邊緣:數(shù)據(jù)點(diǎn)的最左側(cè)界限,通常是最小值。
  • 3.中位數(shù):所有數(shù)據(jù)點(diǎn)按照大小順序排列后位于中間位置的數(shù)值。
  • 4.四分位距:IQR(Interquartile Range,四分位間距)定義為中位數(shù)與第一四分位數(shù)之間的距離的一半。
  • 5.異常值:那些明顯偏離數(shù)據(jù)集整體趨勢的數(shù)據(jù)點(diǎn),通常用圓點(diǎn)表示。

箱型圖一般不包括均值。

4.逐個部分講解

4.1 寬數(shù)據(jù)轉(zhuǎn)換為長數(shù)據(jù)

當(dāng)我們把這張Excel表導(dǎo)入SPSS時,

會顯示如下

而我們要將其轉(zhuǎn)換為長數(shù)據(jù),即每個列為一個變量的類型

  • 4.1.1 Python代碼

在Python代碼中,使用melt()函數(shù)實(shí)現(xiàn)

# 處理數(shù)據(jù)
def general_data():
    # 使用melt()函數(shù)將讀取數(shù)據(jù)進(jìn)行結(jié)構(gòu)轉(zhuǎn)換,以滿足ols()函數(shù)對數(shù)據(jù)格式的要求,
    # melt()函數(shù)能將列標(biāo)簽轉(zhuǎn)換為列數(shù)據(jù)
    excel_data = pd.read_excel('不同正念處理下的短時記憶成績.xlsx', index_col=0)
    melt_data = excel_data.melt(var_name=independent, value_name=dependent)
    print("\n=================melt_data========================")
    print(melt_data)
    return melt_data

我們將輸出結(jié)果打印出來,如下

=================melt_data========================
     處理  短時記憶回憶成績
0   正念組      11.3
1   正念組      10.8
2   正念組       8.4
3   正念組       8.5
4   正念組       8.9
5   正念組      10.7
6   正念組       8.4
7   正念組      11.1
8   正念組       8.3
9   正念組      11.9
10  運(yùn)動組       7.0
11  運(yùn)動組       6.4
12  運(yùn)動組       7.6
13  運(yùn)動組       6.2
14  運(yùn)動組       6.6
15  運(yùn)動組       8.2
16  運(yùn)動組       5.7
17  運(yùn)動組       8.9
18  運(yùn)動組       8.7
19  運(yùn)動組       6.7
20  控制組       6.3
21  控制組       5.2
22  控制組       9.0
23  控制組       5.0
24  控制組       7.5
25  控制組       6.3
26  控制組       6.0
27  控制組       5.2
28  控制組       7.1
29  控制組       7.4

  • 4.1.2 對應(yīng)的SPSS操作

為了適應(yīng)使用不同語言的場景,我將同時呈現(xiàn)中文版和英文版

1.數(shù)據(jù)-重構(gòu)

2.將選定變量重構(gòu)為個案(C)

3.重構(gòu)一個變量組

4.把數(shù)據(jù)列都放入目標(biāo)變量中,個案組標(biāo)識和固定變量可以先不管

5.這一步將各組名作為索引變量

6.選擇使用變量名作為索引

7.之前那個序號沒什么用,可以直接刪除

8.完成即可

9.確定

10.可以看到新生成名為索引1的一列

11.點(diǎn)一下下面的變量視圖,將索引1改成組別

12.再將組別排序,即可獲得長數(shù)據(jù)

其實(shí)這樣操作還不如直接在Excel里面操作,可能還方便一些,這里只是做個展示。

而且在SPSS中,如果使用“分析”-“比較平均值”下面的“單因素 ANOVA 檢驗(yàn)…”,則不能使用字符串,如“正念組”這樣,而是要轉(zhuǎn)換成數(shù)字123之類的,變成組1組2組3,但是這樣看起來不方便,輸出結(jié)果也不好看。我們還可以使用“分析”-“一般線性模型”下的單變量,來達(dá)到方差分析的目的。

4.2 方差分析

  • 4.2.1 Python代碼
# 方差分析
def anova(melt_data):
    # ols()創(chuàng)建一線性回歸分析模型
    model_ols = ols('%s~C(%s)' % (dependent, independent), melt_data).fit()
    # anova_lm()函數(shù)創(chuàng)建模型生成方差分析表
    anova_table = anova_lm(model_ols, typ=2)
    print("\n=================以下為方差分析表====================")
    print(anova_table)

Python輸出結(jié)果:

  • 4.2.2 SPSS操作

一般這里我們會按需要點(diǎn)擊“圖”、“事后比較”、“選項(xiàng)”這些來輸出一些內(nèi)容,比如描述統(tǒng)計、齊性檢驗(yàn),交互圖什么的,不過這里暫時不需要,為了讓輸出純粹一點(diǎn),選好因變量和固定因子直接點(diǎn)確定即可。

SPSS輸出結(jié)果:

  • 中文版

  • 英文版

4.3 事后比較

  • 4.3.1 Python代碼
# 事后比較
def multiple_comparisons(melt_data):
    # 進(jìn)行事后比較分析
    print("\n=================事后比較分析結(jié)果====================")
    print(pairwise_tukeyhsd(melt_data[dependent], melt_data[independent]))

Python輸出結(jié)果:

  • 4.3.2 SPSS操作

選擇事后比較

選擇“圖基(Tukey)”即可

然后點(diǎn)確定

SPSS輸出結(jié)果:

這一步同時還會輸出主體間因子 Between-Subjects Factors,齊性子集 Homogeneous Subsets和前面的主體間效應(yīng)檢驗(yàn) Tests of Between-Subjects Effects,不過這不是重點(diǎn),我們主要關(guān)注和代碼對應(yīng)的部分即可。

4.4 箱型圖

  • 4.4.1 Python代碼
# 設(shè)置畫圖參數(shù)
def define_plt():
    plt.rcParams['font.sans-serif'] = ['SimHei', ]  # 設(shè)置漢字字體
    plt.rcParams['font.size'] = 12  # 字體大小
    plt.rcParams['axes.unicode_minus'] = False  # 正常顯示負(fù)號

# 顯示箱型線,檢查是否有極端數(shù)值
def show_boxplot(melt_data):
    sns.boxplot(x=independent, y=dependent, data=melt_data)
    plt.show()  # 需要放最后運(yùn)行,否則會阻擋后面程序的運(yùn)行

Python輸出結(jié)果:

  • 4.4.2 SPSS操作

由于這里我們只是想看一下箱型圖,不想輸出太多內(nèi)容,所以左下角點(diǎn)擊只顯示圖即可,如果還想輸出正態(tài)性檢驗(yàn),Q-Q圖之類的,可以按需要點(diǎn)擊右側(cè)的按鈕設(shè)置選取。

SPSS輸出結(jié)果:

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

连云港市| 正宁县| 湘潭市| 内乡县| 称多县| 灌云县| 常德市| 泽州县| 沈阳市| 永新县| 资源县| 沽源县| 建湖县| 嵊泗县| 崇义县| 武冈市| 湘潭市| 荣成市| 乌鲁木齐县| 祁阳县| 永顺县| 九龙坡区| 金平| 聂拉木县| 西宁市| 会宁县| 中超| 班戈县| 新干县| 江华| 毕节市| 宁远县| SHOW| 文安县| 达日县| 乐清市| 延庆县| 兴宁市| 兴城市| 合作市| 全南县|