t检验怎么分析结果python_使用python 批量 配对t检验 医学 基础研究 数据分析
需要excel數(shù)據(jù)源文件的請(qǐng)去http://download.csdn.net/download/camelbrand/10216783下載,只保留少數(shù)列的數(shù)據(jù),剩余的2000多個(gè)數(shù)據(jù)已經(jīng)被我刪除了。
幫學(xué)醫(yī)的同學(xué)弄完一個(gè)python數(shù)據(jù)處理的程序,怕以后忘記了,記錄下來(lái)
t檢驗(yàn)是計(jì)量資料的假設(shè)檢驗(yàn)中最為簡(jiǎn)單常用的,當(dāng)樣本含量n較小時(shí),比如n小于60。配對(duì)t檢驗(yàn)又稱成對(duì)t檢驗(yàn),適用于配對(duì)設(shè)計(jì)的計(jì)量資料。配對(duì)設(shè)計(jì)是將受試對(duì)象按照某些重要特征,如可疑混雜因素性別等配成對(duì)子,每對(duì)中的兩個(gè)受試對(duì)象隨機(jī)分配到兩處理組。
要計(jì)算的部分?jǐn)?shù)據(jù)如下,從列LINC01587開始,一共有2027列數(shù)據(jù):
其中Solid Tissue Normal和Primary Tumor是一對(duì),如第2行和第3行是一對(duì),第4行和第5行是一對(duì),以此類推。需要完成的工作是從LINC01587開始,計(jì)算該列的數(shù)據(jù)的差異有無(wú)統(tǒng)計(jì)學(xué)意義。通常使用的spss工具來(lái)計(jì)算,安裝IBM SPSS Statics之后,先來(lái)個(gè)demo學(xué)習(xí)計(jì)算LINC01587演示下。
1.啟動(dòng)IBM SPSS Statics,選擇輸入數(shù)據(jù),點(diǎn)擊確定
2.彈出界面中,新建變量視圖,如下圖所示填入?yún)?shù)Solid代表Solid Tissue Normal
Primary代表Primary Tumor,然后點(diǎn)擊數(shù)據(jù)視圖
按照上面的表格數(shù)據(jù),將列LINC01587以此填入,如下圖所示,其中0E-13表示為0
3.點(diǎn)擊分析,選擇比較均值,然后選擇配對(duì)樣本T檢驗(yàn)
彈出界面中,按下鍵盤上的Ctrl鍵,然后依次選中左邊紅色框內(nèi)的Solid和Primary,然后點(diǎn)擊右邊紅框內(nèi)的的箭頭
如上圖所示,點(diǎn)擊確定,SPSS輸出計(jì)算結(jié)果如下,其中右下角紅色框內(nèi)的是我們需要的結(jié)果。
上圖計(jì)算得到的p值是0.188。
第一個(gè)表格是數(shù)據(jù)的基本描述。
第二個(gè)是數(shù)據(jù)前后變化的相關(guān)系數(shù),那個(gè)概率P值是相關(guān)系數(shù)的概率值,概率大于顯著性水平0.05,則說(shuō)明數(shù)據(jù)變化前后沒有顯著的線性變化,線性相關(guān)程度較弱。
第三個(gè)表格是數(shù)據(jù)相減后與0的比較,通過(guò)概率值為0,小于顯著性水平0.05,則拒絕原假設(shè),相減的差值與0有較大差別,則表明數(shù)據(jù)變化前后有顯著的變化。
但是數(shù)據(jù)源有2027列數(shù)據(jù)都需要計(jì)算,工作量巨大,可以考慮使用python來(lái)完成這部分工作。
那么我們?cè)O(shè)計(jì)python程序需要完成的工作包括:
1.打開excel數(shù)據(jù)文件,并讀取文件數(shù)據(jù)
2.依次對(duì)所有列數(shù)據(jù)進(jìn)行計(jì)算,并輸出p值計(jì)算結(jié)果。
地址為http://blog.csdn.net/hjh00/article/details/48530183的博客,最后一部分內(nèi)容給出了如何使用python完成配對(duì)t檢驗(yàn)的程序
使用python開發(fā)程序,首先需要安裝python,本人的電腦上已經(jīng)安裝了python的開發(fā)環(huán)境,具體配置參考python教程(按照這個(gè)教程一步一步來(lái)學(xué)習(xí)入門)https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
配置好python之后,在windows CMD命令行輸入python,顯示我的python版本號(hào)是 Python 3.6.1
上面博客給出的配對(duì)t檢驗(yàn)計(jì)算程序如下圖,但是安裝好python之后,可能電腦上并沒有scipy.stats,為了安裝scipy(后面部門的excel處理功能可能也沒有安裝),可以參考網(wǎng)址:
https://www.cnblogs.com/babyfei/p/7080047.html?utm_source=itdadao&utm_medium=referral
安裝好python開發(fā)環(huán)境之后,要完成上面SPSS計(jì)算的工作,我們只需要列出下,加了#號(hào)的都是注釋,不會(huì)執(zhí)行,我的程序只是把列表變量a和b替換成列LINC01587的數(shù)據(jù),其中a是Solid Tissue Normal,b代表Primary Tumor
# http://blog.csdn.net/hjh00/article/details/48530183
from scipy.stats import ttest_rel
#a = [3,4,1,1,1,3,3,6,5,1,4,5,4,4,3,6,7,7,7,8]
#b = [7,6,7,8,7,6,5,6,4,2,5,4,3,6,7,5,4,3,8,7]
a = [0.1934107598010,0.0894060200161,0.0718704187628,0.3608183477340,0.0367125061353,0,0.1279727464080,0]
b= [0,0.0736396246482,0.0427039152731,0,0.0701365405069,0.0104761411961,0.1097963382500,0.0093947227584]
t,p=ttest_rel(a,b)
print (t )
print (p )
執(zhí)行上面的程序,分別打印t和p,紅色框內(nèi)的p值與上面SPSS計(jì)算的p值結(jié)果一致:
那么接下來(lái)的工作只需要設(shè)計(jì)使用python對(duì)excel文件進(jìn)行處理的部分了,我的代碼如下(實(shí)際調(diào)試我使用了軟件Geany作為編輯器,可以很方便的編輯和運(yùn)行python程序):
1 #-*- coding: utf-8 -*-
2 importxdrlib ,sys3 importxlrd4 from scipy.stats importttest_rel5
6 #打開excel文件
7 def open_excel(file= 'test.xlsx'):8 try:9 data =xlrd.open_workbook(file)10 returndata11 exceptException as e:12 print(str(e))13
14 #根據(jù)名稱獲取Excel表格中的數(shù)據(jù) 參數(shù):file:Excel文件路徑 colnameindex:表頭列名所在行的索引 ,by_name:Sheet1名稱
15 def excel_table_byname(file= 'test.xlsx', colnameindex=0, by_name=u'Sheet1'):16 data = open_excel(file) #打開excel文件
17 table = data.sheet_by_name(by_name) #根據(jù)sheet名字來(lái)獲取excel中的sheet
18 nrows = table.nrows #行數(shù)
19 nCol = table.ncols #列數(shù)
20 print("row count is",nrows)21 print("colume count is",nCol)22 colnames = table.row_values(colnameindex) #某一行數(shù)據(jù)
23 list =[] #裝讀取結(jié)果的序列
24 for rownum in range(0, nrows): #遍歷每一行的內(nèi)容
25 row = table.row_values(rownum) #根據(jù)行號(hào)獲取行
26 if row: #如果行存在
27 app = [] #一行的內(nèi)容
28 for i in range(len(colnames)): #一列列地讀取行的內(nèi)容
29 app.append(row[i])30 list.append(app) #裝載數(shù)據(jù)
31
32 returnlist33
34 defget_col(table,col,fstStr):35 listdata =[]36 #sprint(col,type(col))
37 for row intable:38 if(row[0]==fstStr):39 listdata.append(row[col])40 returnlistdata41
42 #主函數(shù)
43 defmain():44 tables =excel_table_byname()45 f = open("./excel.txt", 'w+')46 print("main function", file=f)47 print(type(tables), file=f)48 TotalCol =len(tables[0])49 #for row in tables:
50 #print (row)
51 p_result =[];52 for n in range(8,TotalCol):53 print("calculate",n, file=f)54 list1 = get_col(tables,n,"Solid Tissue Normal")55 list2 = get_col(tables,n,"Primary Tumor")56 t,p=ttest_rel(list1,list2)57 p_result.append(p)58 print("calc over", file=f)59 print(p_result, file=f)60 if __name__=="__main__":61 main()
針對(duì)其他格式不一致的表格,改程序未必生效,比較關(guān)鍵的參數(shù)是38行row[0]中的0,以及52行的數(shù)字8,都是根據(jù)excel表內(nèi)容自定義寫入的。
print(xxx,file=f)的結(jié)果會(huì)輸出到python程序文件所在目錄的excel.txt文本文檔中,輸出結(jié)果如下,最后一行就是從LINC01587列開始計(jì)算的p值,nan表示該列數(shù)據(jù)計(jì)算的p無(wú)效
main function
calculate 8
calculate 9
calculate 10
calculate 11
calculate 12
calculate 13
calc over
[0.18763370952460945, 0.6178834746354206, 0.45183198301444494, nan, nan, 0.3665736965096091]
后續(xù)還可以直接使用python將計(jì)算結(jié)果寫入excel表中,我這里只做到了通過(guò)txt文本打印輸出。如果有時(shí)間,可以繼續(xù)開發(fā)研究一下。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
my mail:shaw2321@163.com
總結(jié)
以上是生活随笔為你收集整理的t检验怎么分析结果python_使用python 批量 配对t检验 医学 基础研究 数据分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《FMEA潜在失效模式及效应分析实务》课
- 下一篇: python配对t检验_T检验第二篇(S