信效度檢驗
關(guān)于問卷是否需要進行問卷信效度檢驗,前提時你的問卷含有量表題,量表題有兩種量表:李克特量表和瑟斯頓量表 ,并且只有量表題才參與信效度檢驗。所以,信效度檢驗前需要對量表每一個選項的得分數(shù)據(jù)放到獨立的一列數(shù)據(jù)中。如下圖所示(Excel表)
1.信度檢驗
我們說量表的信度是指量表測量結(jié)果的一致性、穩(wěn)定性、也稱為量表的可靠性。如果在相同條件下,運用某量表對某一個概念在不同時間上重復(fù)多次進行測量,其測量的結(jié)果保持不變,就表明該量表是可信的或具有可靠性。在SPSS中對信度的檢驗也叫可靠性檢驗,一般對預(yù)調(diào)查數(shù)據(jù)進行,用信度檢驗Cronbach’s a 系數(shù)來衡量,一般認為Cronbach’s a 系數(shù)大于等于0.6表面信度檢驗沒有問題。這里我通過Python語言的方法去實現(xiàn)計算。
1.1 引入需要讀入文件的pandas庫和計算Cronbach’s a 系數(shù)的pingouin庫,并讀入文件
import pandas as pd
import pingouin as pg
zd_df = pd.read_excel('預(yù)調(diào)查量表題數(shù)據(jù).xlsx',header = 0)
1.2 計算Cronbach’s 系數(shù)
#Cronbach’s 系數(shù)
result = pg.cronbach_alpha(data = zd_df)
print(result)
2.效度檢驗
量表的效度是指量表準確地反映客觀事物屬性和特征的程度,也稱為有效性。市場調(diào)查中效度可以理解為調(diào)查結(jié)果準確地反映調(diào)查中所要說明問題的程度。如果一個量表即具有較高的信度,也具有較高的效度,則這個量表就具有較高的內(nèi)在質(zhì)量。
在檢驗中,我們通常通過兩個方法來衡量效度分別為為Bartlett’s球狀檢驗和KMO檢驗
2.1 Bartlett’s球狀檢驗
檢驗總體變量的相關(guān)矩陣是否是單位陣;檢驗各個變量是否各自獨立。如果不是單位矩陣,說明原變量之間存在相關(guān)性,可以進行因子分析;反之,原變量之間不存在相關(guān)性,數(shù)據(jù)不適合進行主成分分析。
chi_square_value, p_value = calculate_bartlett_sphericity(zd_df)
print("bartlett球狀檢驗參數(shù):\n卡方值為:{},p值為:{}".format(chi_square_value, p_value))
2.2 KMO檢驗
檢驗變量間相關(guān)性和偏相關(guān)性,取值在0~1之間;KOM統(tǒng)計量越接近1,變量相關(guān)性越強,偏相關(guān)性越弱,因子分析效果越好,通常取值從0.6開始進行因子分析
kmo_all, kmo_model = calculate_kmo(zd_df)
print("KMO檢驗參數(shù):\n", kmo_model)
因子分析
因子分析是指研究從變量群中提取共性因子的統(tǒng)計技術(shù)。最早由英國心理學家C.E.斯皮爾曼提出。他發(fā)現(xiàn)學生的各科成績之間存在著一定的相關(guān)性,一科成績好的學生,往往其他各科成績也比較好,從而推想是否存在某些潛在的共性因子,或稱某些一般智力條件影響著學生的學習成績。因子分析可在許多變量中找出隱藏的具有代表性的因子。將相同本質(zhì)的變量歸入一個因子,可減少變量的數(shù)目,還可檢驗變量間關(guān)系的假設(shè)。
因子分析的主要目的是用來描述隱藏在一組測量到的變量中的一些更基本的,但又無法直接測量到的隱性變量
因子分析有探索性因子分析和證實性因子分析之分。本次是探索性因子分析
探索性因子分析不事先假定因子與測度項之間的關(guān)系,而讓數(shù)據(jù)“自己說話”。主成分分析和共因子分析是其中的典型方法。驗證性因子分析假定因子與測度項的關(guān)系是部分知道的,即哪個測度項對應(yīng)于哪個因子,雖然我們尚且不知道具體的系數(shù)。
1.導(dǎo)入所需要的庫包
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
from factor_analyzer import FactorAnalyzer
from factor_analyzer.factor_analyzer import calculate_kmo
from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity
import scipy.cluster.hierarchy as shc
2.探索因子個數(shù)
2.1.矩陣旋轉(zhuǎn)前特征值、旋轉(zhuǎn)前方差貢獻率、旋轉(zhuǎn)前方差累計貢獻率
Load_Matrix = FactorAnalyzer(rotation=None, n_factors=len(zd_df.T), method='principal')
Load_Matrix.fit(zd_df)
f_contribution_var = Load_Matrix.get_factor_variance()
matrices_var = pd.DataFrame()
matrices_var["旋轉(zhuǎn)前特征值"] = f_contribution_var[0]
matrices_var["旋轉(zhuǎn)前方差貢獻率"] = f_contribution_var[1]
matrices_var["旋轉(zhuǎn)前方差累計貢獻率"] = f_contribution_var[2]
matrices_var
結(jié)果
總結(jié):一般情況我們選擇旋轉(zhuǎn)前特征值大于1的因子,即這個探索因子個數(shù)為3,此時方差累計貢獻率為0.61,通常講方差累計貢獻率需要在70%及以上,才是可以接受的結(jié)果,不然意味著問卷量表設(shè)置不夠好,會影響我們因子的探索
2.2.畫出碎石圖,可視化 將特征值和因子個數(shù)的變化繪制成圖形。
#同樣的數(shù)據(jù)繪制散點圖和折線圖
plt.scatter(range(1, zd_df.shape[1] + 1), featValue)
plt.plot(range(1, zd_df.shape[1] + 1), featValue)
plt.title("Scree Plot")
plt.xlabel("Factors")
plt.ylabel("Eigenvalue")
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體
mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題
plt.grid() # 顯示網(wǎng)格
plt.show() # 顯示圖形
總結(jié):碎石檢驗是根據(jù)碎石圖來決定因素數(shù)的方法。Kaiser提出,可通過直接觀察特征值的變化來決定因素數(shù)。但某一個特征值較前一特征值出現(xiàn)較大的下降,而這個特征值值較小,其后面的的特征值變化不大,說明添加相應(yīng)于該特征值的因素只能增加很少的信息,所以前幾個特征值就是因抽取的公共因子數(shù)。
2.3 建立因子分析模型 采用方差最大化因子旋轉(zhuǎn)方式,并查看每個變量的公因子方差、旋轉(zhuǎn)后的特征值、成分矩陣和因子方差
#因子旋轉(zhuǎn)
#選擇方式:varimax 方差最大化
#選擇固定因子為4
fa_four = FactorAnalyzer(3,rotation='varimax')
fa_four.fit(zd_df)
#查看每個變量的公因子方差數(shù)據(jù)
pd.DataFrame(fa_four.get_communalities(), index=zd_df.columns)
print("每個變量的公因子方差數(shù)據(jù):\n", pd.DataFrame(fa_four.get_communalities(), index=zd_df.columns))
#查看旋轉(zhuǎn)后的特征值
pd.DataFrame(fa_four.get_eigenvalues())
print("旋轉(zhuǎn)后的特征值:\n", pd.DataFrame(fa_four.get_eigenvalues()))
#查看成分矩陣
#變量個數(shù)*因子個數(shù)
pd.DataFrame(fa_four.loadings_, index=zd_df.columns)
print("成分矩陣:\n", pd.DataFrame(fa_four.loadings_, index=zd_df.columns))
#查看因子方差
fa_four.get_factor_variance()
print("因子方差:\n", fa_four.get_factor_variance())
結(jié)果;
2.4 可視化:熱力圖
為了更直觀的觀察每個隱藏變量和哪些特征的關(guān)系比較大,進行可視化展示,為了方便取上面相關(guān)系數(shù)絕對值。利用熱力圖將稀疏矩陣繪制出來。
#隱藏變量可視化
df1 = pd.DataFrame(np.abs(fa_four.loadings_), index=zd_df.columns)
print("隱藏變量可視化:\n", df1)
#繪圖
plt.figure(figsize=(9, 9))
ax = sns.heatmap(df1, annot=True, cmap="BuPu")
#設(shè)置y軸字體大小
ax.yaxis.set_tick_params(labelsize=15)
plt.title("Factor Analysis", fontsize="xx-large")
# 設(shè)置y軸標簽
plt.ylabel("Sepal Width", fontsize="xx-large")
# 顯示圖片
plt.show()
#由于采用較為合適的4個因子,可以將原始數(shù)據(jù)轉(zhuǎn)換成4個新的特征
df2 = pd.DataFrame(fa_four.transform(zd_df))
print("轉(zhuǎn)換后數(shù)據(jù):\n", df2)
結(jié)果:文章來源:http://www.zghlxwxcb.cn/news/detail-463354.html
本次參考:https://blog.csdn.net/m0_64336780/article/details/127382936文章來源地址http://www.zghlxwxcb.cn/news/detail-463354.html
到了這里,關(guān)于利用Python進行調(diào)查問卷的信度檢驗和效度檢驗,并對量表進行因子分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!