专栏首页优雅R「R」t 检验

「R」t 检验

今天把之前组团翻译的 Cookbook for R 也放到了 Gitee 上,国内访问和阅读的体验感会上升很多。https://shixiangwang.gitee.io/cookbook-for-r-chinese/

问题

你想要检验来自两个总体的样本是否有不同的均值(显著性差异),或者检验从一个总体抽取的样本均值和理论均值有显著性差异。

方案

样本数据

我们将使用内置的sleep数据集。

sleep
#>    extra group ID
#> 1    0.7     1  1
#> 2   -1.6     1  2
#> 3   -0.2     1  3
#> 4   -1.2     1  4
#> 5   -0.1     1  5
#> 6    3.4     1  6
#> 7    3.7     1  7
#> 8    0.8     1  8
#> 9    0.0     1  9
#> 10   2.0     1 10
#> 11   1.9     2  1
#> 12   0.8     2  2
#> 13   1.1     2  3
#> 14   0.1     2  4
#> 15  -0.1     2  5
#> 16   4.4     2  6
#> 17   5.5     2  7
#> 18   1.6     2  8
#> 19   4.6     2  9
#> 20   3.4     2 10

我们将制造sleep数据的宽格式版本;下面我们将看看如何处理长格式和宽格式的数据。

sleep_wide <- data.frame(
    ID=1:10,
    group1=sleep$extra[1:10],
    group2=sleep$extra[11:20]
)
sleep_wide
#>    ID group1 group2
#> 1   1    0.7    1.9
#> 2   2   -1.6    0.8
#> 3   3   -0.2    1.1
#> 4   4   -1.2    0.1
#> 5   5   -0.1   -0.1
#> 6   6    3.4    4.4
#> 7   7    3.7    5.5
#> 8   8    0.8    1.6
#> 9   9    0.0    4.6
#> 10 10    2.0    3.4

比较两组:独立双样本t检验

假设有两组独立样本(我们这里忽略ID变量)。

t.test函数能够操作像sleep这样的长格式数据——一列记录测量值,一列指定组别;或者操作两个单独的向量。

# Welch t-test
t.test(extra ~ group, sleep)
#>
#> 	Welch Two Sample t-test
#>
#> data:  extra by group
#> t = -1.8608, df = 17.776, p-value = 0.07939
#> alternative hypothesis: true difference in means is not equal to 0
#> 95 percent confidence interval:
#>  -3.3654832  0.2054832
#> sample estimates:
#> mean in group 1 mean in group 2
#>            0.75            2.33

# Same for wide data (two separate vectors)
# t.test(sleep_wide$group1, sleep_wide$group2)

默认,t.test不假设有方差齐性(或称作方差同质)。默认的不是Student t检验而是使用了Welch t检验。注意Welch t-test结果中df=17.776,这是因为对不同质方差进行了校正。要使用Student t检验的话,设置var.equal=TRUE

# Student t-test
t.test(extra ~ group, sleep, var.equal=TRUE)
#>
#> 	Two Sample t-test
#>
#> data:  extra by group
#> t = -1.8608, df = 18, p-value = 0.07919
#> alternative hypothesis: true difference in means is not equal to 0
#> 95 percent confidence interval:
#>  -3.363874  0.203874
#> sample estimates:
#> mean in group 1 mean in group 2
#>            0.75            2.33

# Same for wide data (two separate vectors)
# t.test(sleep_wide$group1, sleep_wide$group2, var.equal=TRUE)

配对样本t检验

你也可以使用配对样本t检验比较配对的数据。数据配对是指你可能有对某种药物治疗前后有观测值或者不同治疗有配对的研究对象。

再次说明,t-test函数可以用于有分组变量的数据框或者两个向量。它依赖相对位置来决定配对。如果你使用有分组变量的长格式数据,group=1的第一行与group2的第一行配对。确保数据排序好并且不存在缺失值是非常重要的;否则配对可以丢弃。这种情况中,我们能通过groupID变量进行排序来确保顺序是一样的。关于排序更多信息参见Sorting。

# Sort by group then ID
sleep <- sleep[order(sleep$group, sleep$ID), ]

# Paired t-test
t.test(extra ~ group, sleep, paired=TRUE)
#>
#> 	Paired t-test
#>
#> data:  extra by group
#> t = -4.0621, df = 9, p-value = 0.002833
#> alternative hypothesis: true difference in means is not equal to 0
#> 95 percent confidence interval:
#>  -2.4598858 -0.7001142
#> sample estimates:
#> mean of the differences
#>                   -1.58

# Same for wide data (two separate vectors)
# t.test(sleep.wide$group1, sleep.wide$group2, paired=TRUE)

配对t检验等价于检测是否配对的观察值的总体均值是否为0。

t.test(sleep.wide$group1 - sleep.wide$group2, mu=0, var.equal=TRUE)
#> Error in t.test(sleep.wide$group1 - sleep.wide$group2, mu = 0, var.equal = TRUE): object 'sleep.wide' not found

与期望的总体均值进行比较:单样本t检验

假设你想要检测是否extra列的数据抽取自总体均值为0的总体。(这里忽略groupID列)

t.test(sleep$extra, mu=0)
#>
#> 	One Sample t-test
#>
#> data:  sleep$extra
#> t = 3.413, df = 19, p-value = 0.002918
#> alternative hypothesis: true mean is not equal to 0
#> 95 percent confidence interval:
#>  0.5955845 2.4844155
#> sample estimates:
#> mean of x
#>      1.54

可视化结果?见 12个ggplot2扩展包帮你实现更强大的可视化

本文分享自微信公众号 - 优雅R(elegant-r),作者:王诗翔

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「R」R 语言中的功效分析

    功效分析是统计检验中很重要的一部分,但实际上在科学文献中,特别是生命科学研究中极少有人使用。一方面是实验条件有限,另一方面是分析水平有限。希望有条件的实验人员在...

    王诗翔呀
  • 「R」使用RMySQL简单操作mysql数据库

    使用 MySQL 数据库创建一个用于存储用户信息的数据表:包含 username, email, password 三个字段,使用 R 客户端插入、删除和更新一...

    王诗翔呀
  • 「R」数据可视化12 : 生存曲线

    我们经常用随机森林等机器学习又或者是其他数据挖掘的方法寻找某些疾病的biomarker或者候选基因。但是来自临床的数据包括了生存事件等信息,数据的内容有所不同,...

    王诗翔呀
  • 64位内核开发第四讲,查看SSDT表与showSSDT表

    KeServiceDescriptorTableShadow是ShadowSSDT表 KeServiceDescriptorTable是SSDT表.

    IBinary
  • VC控件使用小结

          这段时间通过使用MFC做车牌识别系统和媒体播放器,重新温习了一下MFC,特别是控件的使用,同时也学习了ADO技术、Socket网络编程、文件传输、O...

    ccf19881030
  • 用 :key 管理可复用元素

    我们会发现,在点击按钮切换登录方式后,输入框中已有的内容没有被清除,这是为什么呢?

    Chor
  • 3分钟找书指南

    iOSDevLog
  • 易日升金融总裁史建伟:对我们而言,大数据时代下的消费金融没有舒适区

    数据猿导读 易日升模式下的消费金融没有舒适区。我们做的是银行不愿做的累活苦活;我们做的是支付宝、京东金融没法做的个性细分场景的分期服务;我们做的是一般消费金融不...

    数据猿
  • NTP网络时钟同步的重要性

    NTP网络时间同步技术必定将是整个大数据处理系统的重要支撑和保障。时间同步技术使数据产生与处理系统的所有节点具有全局的、统一的标准时间,从而使系统中的所有各种消...

    NTP网络同步时钟
  • 疫情期间面试 - 饿了么前端面试题 (p6)

    面试过程中会遇到很多重复的基础问题,所以这些重复的问题不要挂,要表达的越来越好,越来越明确。

    zz_jesse

扫码关注云+社区

领取腾讯云代金券