分类变量组间差异分析

1,频数表列联表

一维频数表
table <- table(data$low)
table
0   1 
130  59 
prop.table(table)#百分比


        0         1 
0.6878307 0.3121693 
二维频数表
table1 <- table(data$low,data$smoke)
table1

0  1
0 86 44
1 29 30
addmargins(table1)

0   1 Sum
0    86  44 130
1    29  30  59
Sum 115  74 189
prop.table(table1,margin = 1)##行比例
   
            0         1
  0 0.6615385 0.3384615
  1 0.4915254 0.5084746

prop.table(table1,margin = 2)##列比例

            0         1
  0 0.7478261 0.5945946
  1 0.2521739 0.4054054

2,独立性检验

t检验(连续变量)和卡方检验(分类变量)-CSDN博客

一文汇总卡方检验全部内容 - 知乎 (zhihu.com)

1,卡方检验

对于一般的列联表,可以使用函数chisq.test()进行 卡方检验。例如,要想知道母亲吸烟情况和新生儿低体重之间的关系是否独立,可以使用下面的命令:

mytable <-table(data$smoke,data$low)
mytable
chisq.test(mytable)

	Pearson's Chi-squared test with Yates' continuity correction

data:  mytable
X-squared = 4.2359, df = 1, p-value = 0.03958

函数chisq:test()的参数correct用于设置是否进行连续性校正,默认为TRUE,故在输出中有说明“Pearson's Chi-squared test with Yates'continuity correction”。对于频数表中每个单元格的期望频数都比较大(大于5)的大样本,可以将这个参数设为FALSE,即不进行连续性校正。

期望频数表查看:

chisq.test(mytable)$expected
           0        1
  0 79.10053 35.89947
  1 50.89947 23.10053

每个单元格的期望频数都比较大,所以可以尝试将参数correct设为FALSE:

chisq.test(mytable,correct = F)

	Pearson's Chi-squared test

data:  mytable
X-squared = 4.9237, df = 1, p-value = 0.02649

不论是否进行连续性校正,母亲吸烟情况与新生儿低体重都存在显著的关联(p<0.05)。

2,Fisher精确概率检验

如果观察总记录数n小于40,或者频数表里的某个期望频数很小(小于1),则需要使用Fisher精确概率检验。函数fisher.test()可用于执行该检验。即使期望频数都较大,仍然可以尝试使用Fisher精确概率检验。

fisher.test(mytable)

	Fisher's Exact Test for Count Data

data:  mytable
p-value = 0.03618
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
 1.028780 3.964904
sample estimates:
odds ratio 
  2.014137 

函数fisher.test()不仅可以运用于四格表,还可以运用于行列数大于2的列联表。

3,相对危险度与优势比
library(epiDisplay)
cs(data$smoke,data$low)
          Exposure
Outcome    Non-exposed Exposed Total
  Negative 86          29      115  
  Positive 44          30      74   
  Total    130         59      189  
                                    
           Rne         Re      Rt   
  Risk     0.34        0.51    0.39 

                                         Estimate Lower95ci Upper95ci
 Risk difference (attributable risk)     0.17     0.02      0.31     
 Risk ratio                              1.5      1.02      2.21     
 Attr. frac. exp. -- (Re-Rne)/Re         0.33                        
 Attr. frac. pop. -- (Rt-Rne)/Rt*100 %   13.56                       
 Number needed to harm (NNH)             5.88     3.26      58.85    
   or 1/(risk difference)     
4,Cochran-Mantel-Haenszelx²检验

两个变量的关联有可能受到第三个变量的影响,因此我们有必要检验两个分类变量在调整(控制)第三个变量的情况下是否独立。Cochran-Mantel-Haenszel x²检验常用于探索变量间的混杂因素。其零假设是:两个分类变量在第三个变量的每一层都是条件独立的。函数mantelhaen.test()可以用来进行该检验。

mytable1 <-table(data$smoke,data$low,data$race)
mantelhaen.test(mytable1)
	Mantel-Haenszel chi-squared test with continuity correction

data:  mytable1
Mantel-Haenszel X-squared = 8.3779, df = 1, p-value = 0.003798
alternative hypothesis: true common odds ratio is not equal to 1
95 percent confidence interval:
 1.490740 6.389949
sample estimates:
common odds ratio 
         3.086381 

参考:

1:R语言医学数据分析实战/赵军编著.--北京:人民邮电出版社,2020.8

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Python中进行多组组间差异分析,可以使用多种统计方法和库,以下是其中一些常用的方法: 1. 单因素方差分析(One-Way ANOVA):适用于有一种因素(自变量)和一个响应变量的情况。可以用Python的SciPy库中的`f_oneway`函数实现。 2. 多因素方差分析(Two-Way ANOVA):适用于有两个因素和一个响应变量的情况。可以用Python的statsmodels库中的`mixedlm`函数实现。 3. 非参数检验:适用于数据不符合正态分布的情况。可以用Python的SciPy库中的`kruskal`函数实现。 4. 多重比较检验:在进行多组组间差异分析时,需要进行多重比较来确定哪些组之间存在显著差异。可以用Python的statsmodels库中的`pairwise_tukeyhsd`函数实现。 示例代码: ```python from scipy.stats import f_oneway, kruskal import statsmodels.api as sm from statsmodels.formula.api import ols # 数据 data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 单因素方差分析 f_value, p_value = f_oneway(*data) print("单因素方差分析:F值为{:.2f},P值为{:.2f}".format(f_value, p_value)) # 多因素方差分析 df = sm.datasets.get_rdataset("PlantGrowth").data model = ols('weight ~ group * fertilizer', data=df).fit() table = sm.stats.anova_lm(model, typ=2) print("多因素方差分析:\n", table) # 非参数检验 h_value, p_value = kruskal(*data) print("非参数检验:H值为{:.2f},P值为{:.2f}".format(h_value, p_value)) # 多重比较检验 result = sm.stats.multicomp.pairwise_tukeyhsd(df['weight'], df['group']) print("多重比较检验:\n", result) ``` ### 回答2: Python可以使用多种方法进行多组组间差异分析。以下是几种常用方法的概述: 1. 方差分析(ANOVA):ANOVA是一种统计方法,用于比较两个或更多平均数之间的差异。在Python中,可以使用scipy库中的stats模块的anova函数来执行方差分析。它接受一个或多个数组作为输入,并返回统计结果,包括F值和p值。 2. t检验:t检验是一种用于比较两个样本均值之间差异的方法。在Python中,可以使用scipy库中的stats模块的ttest_ind函数来执行独立样本的t检验,或者使用pairedttest_rel函数来执行配对样本的t检验。这些函数返回t值和p值等统计结果。 3. 非参数检验:在某些情况下,数据不满足方差分析或t检验的假设条件,这时可以使用非参数检验方法。Python中的scipy库的stats模块提供了多个非参数检验方法的实现,如Kruskal-Wallis检验、Mann-Whitney U检验和Wilcoxon符号秩检验等。 4. 可视化:在进行组间差异分析后,可以使用Python中的各种可视化库(如matplotlib和seaborn)来可视化结果。例如,可以绘制箱线图来显示不同组的分布情况,或者通过条形图比较不同组之间的均值差异。 总之,Python提供了丰富的库和函数来进行多组组间差异分析,可以根据数据的特点和假设条件选择最合适的方法进行分析,并通过可视化将分析结果清晰地展示出来。 ### 回答3: Python可以使用多种方法进行多组组间差异分析,下面我将介绍几种常用的方法。 1. 方差分析(ANOVA):方差分析是一种常用的统计方法,用于比较三个或三个以上样本均值之间的差异。Python中的statsmodels包和scipy包中都提供了实现ANOVA的函数。使用这些函数,可以计算组间方差、组内方差、总体方差等,并进行假设检验,判断各组间是否存在显著差异。 2. 独立样本t检验(Independent t-test):当有两组不相关的样本需要比较时,可以使用独立样本t检验。Python中的scipy包中提供了ttest_ind函数,可以用于计算两组样本的t值、p值等指标,判断两组样本均值是否显著不同。 3. 非参数检验(Non-parametric test):非参数检验方法不假设数据满足特定的概率分布,适用于小样本或偏离正态分布的情况。Python中的scipy包的stats模块中提供了多种非参数检验方法,如Kruskal-Wallis检验、Mann-Whitney U检验等,可以用于多组组间差异分析。 此外,还可以使用机器学习方法,比如支持向量机(SVM)、随机森林(Random Forest)等,来进行多组组间差异分析。这些方法可以利用特征工程和分类器训练的方式,对多组样本进行分类或回归分析,进而评估各组之间的差异。 总之,Python提供了丰富的工具和算法,可以通过方差分析、独立样本t检验、非参数检验、机器学习等方法进行多组组间差异分析,根据具体情况选择合适的方法进行研究。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值