Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R中具有Welch校正的单因素方差的后验检验

R中具有Welch校正的单因素方差的后验检验
EN

Stack Overflow用户
提问于 2015-02-18 15:38:53
回答 2查看 10.5K关注 0票数 3

我使用R中的oneway.test()对韦尔奇的修正进行了单向方差分析检验,因为我有违反等方差假设的数据(转换没有解决问题)。

一个简单的数据示例:

代码语言:javascript
运行
AI代码解释
复制
> dput(df)
structure(list(Count = c(13, 14, 14, 12, 11, 13, 14, 15, 13, 
12, 20, 15, 9, 5, 13, 14, 7, 17, 18, 14, 12, 12, 13, 14, 11, 
10, 15, 14, 14, 13), Group = structure(c(1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("a", "b", "c"
), class = "factor")), .Names = c("Count", "Group"), row.names = c(NA, 
-30L), class = "data.frame")

library(car) 
grp = as.factor(c(rep(1, 10), rep(2, 10),rep(3, 10)))
leveneTest(df$Count,grp) #unequal variances

#one-way ANOVA with welch's correction
oneway.test(Count ~ Group, data=df, na.action=na.omit, var.equal=FALSE)

我有多个组,所以我现在想运行成对的post-hoc测试。有没有什么方法可以用oneway.test()函数中的对象来做到这一点?如果不是,如何在方差不相等的组上运行成对测试?我还没能在网上找到这个问题的答案。任何建议都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-18 20:05:45

这里有两种方法:

数据

代码语言:javascript
运行
AI代码解释
复制
library(car) 
df <- structure(list(Count = c(13, 14, 14, 12, 11, 13, 14, 15, 13, 12, 20, 15, 9, 5, 13, 14, 7, 17, 18, 14, 12, 12, 13, 14, 11, 10, 15, 14, 14, 13),
                     Group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("a", "b", "c" ), class = "factor")),
                .Names = c("Count", "Group"),
                row.names = c(NA, -30L), class = "data.frame")

基数R

首先,Group因子的唯一对的集合:

代码语言:javascript
运行
AI代码解释
复制
allPairs <- expand.grid(levels(df$Group), levels(df$Group))
## http://stackoverflow.com/questions/28574006/unique-combination-of-two-columns-in-r/28574136#28574136
allPairs <- unique(t(apply(allPairs, 1, sort)))
allPairs <- allPairs[ allPairs[,1] != allPairs[,2], ]
allPairs
##      [,1] [,2]
## [1,] "a"  "b" 
## [2,] "a"  "c" 
## [3,] "b"  "c" 

现在来分析一下:

代码语言:javascript
运行
AI代码解释
复制
allResults <- apply(allPairs, 1, function(p) {
    dat <- df[ df$Group %in% p, ]
    ret <- oneway.test(Count ~ Group, data = dat, na.action = na.omit, var.equal = FALSE)
    ret$groups <- p
    ret
})
length(allResults)
## [1] 3
allResults[[1]]
##  One-way analysis of means (not assuming equal variances)
## data:  Count and Group
## F = 0.004, num df = 1.000, denom df = 10.093, p-value = 0.9508

如果你想要这是一个矩阵,也许是这样:

代码语言:javascript
运行
AI代码解释
复制
mm <- diag(length(levels(df$Group)))
dimnames(mm) <- list(levels(df$Group), levels(df$Group))
pMatrix <- lapply(allResults, function(res) {
    ## not fond of out-of-scope assignment ...
    mm[res$groups[1], res$groups[2]] <<- mm[res$groups[2], res$groups[1]] <<- res$p.value
})
mm
##           a         b         c
## a 1.0000000 0.9507513 0.6342116
## b 0.9507513 1.0000000 0.8084057
## c 0.6342116 0.8084057 1.0000000

(对于F统计量,这也可以很容易地完成。)

使用dplyr

首先,Group因子的唯一对的集合:

代码语言:javascript
运行
AI代码解释
复制
library(dplyr)
## http://stackoverflow.com/questions/28574006/unique-combination-of-two-columns-in-r/28574136#28574136
allPairs <- expand.grid(levels(df$Group), levels(df$Group), stringsAsFactors = FALSE)  %>%
    filter(Var1 != Var2) %>%
    mutate(key = paste0(pmin(Var1, Var2), pmax(Var1, Var2), sep='')) %>%
    distinct(key) %>%
    select(-key)
allPairs
##   Var1 Var2
## 1    b    a
## 2    c    a
## 3    c    b

如果顺序真的很重要,您可以在此管道中提前添加dplyr::arrange(Var1, Var2),也许可以在调用expand.grid之后添加。

现在来分析一下:

代码语言:javascript
运行
AI代码解释
复制
ret <- allPairs %>%
    rowwise() %>%
    do({
        data.frame(.,
                   oneway.test(Count ~ Group, filter(df, Group %in% c(.$Var1, .$Var2)),
                               na.action = na.omit, var.equal = FALSE)[c('statistic', 'p.value')],
                   stringsAsFactors = FALSE)
    })

ret
## Source: local data frame [3 x 4]
## Groups: <by row>
##   Var1 Var2   statistic   p.value
## 1    b    a 0.004008909 0.9507513
## 2    c    a 0.234782609 0.6342116
## 3    c    b 0.061749571 0.8084057

(我并没有对这两种方法的性能提出任何要求;通常,其中一种方法只需要很少的数据,而另一种方法则需要更大的数据集。它们似乎都使用相同的结果执行相同的统计成对比较。看你的了!)

票数 3
EN

Stack Overflow用户

发布于 2015-06-26 13:26:32

只是补充一下,尽管时机不佳,给出了比我自己一直在寻找的类似东西,也有执行游戏-豪厄尔测试的选项。这甚至被包含在这个stackexchange_post中介绍的“userfriendlyscience”R包中的“posthoc.tgh”函数下。它代表了对不等方差的Tukey-Kramer检验的扩展。posthocTGH {用户友好科学}

原始出版物(甚至在我出生之前):保罗·A·游戏和约翰·豪厄尔。具有不等N's和/或方差的成对多重比较程序:蒙特卡洛研究。《教育与行为统计杂志》,第一卷,第二期,1976,第113-125页。doi: 10.3102/10769986001002113

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28587498

复制
相关文章
在 Ubuntu 中安装 DHCP 服务器
1、 运行下面的命令来安装 DHCP 服务器包,也就是 dhcp3-server。
用户4988085
2021/09/15
7.6K0
在服务器(Windows)中开启声音
1.使用远程桌面连接服务器,进入服务器以后右键单击开始,选择运行 image.png 2. 点击运行之后,在输入框内输入:gpedit.msc image.png 3、打开之后,依次点击:计算机配置--管理模板--windows组件--远程桌面服务--远程桌面会话主机--设备和资源重定向--左键双击允许音频录制重定向--选择已启用后点应用。 image.png image.png image.png image.png image.png 4.点击服务器管理器,找到工具,打开服务 image.png ima
逸轩
2021/10/29
16.3K0
在 Node 中调用 Python
在 Node 中如何调用 Python 的方法?通常可以通过 REST 接口或者 RPC 的方式来完成,但是某些时候我们仅仅只需要调用对方几个很简单的方法,这种情况下去构建一个提供 REST 接口的服务或者两者对接实现 RPC 调用,这种做法的成本显然有点高。本文将会介绍一种更轻量的调用方式。
凌虚
2020/07/17
5.8K0
在服务器上运行Python项目
Anaconda是一个开源Python发行版本,包括Python 和很多常用库如Numpy、Matplotlib等,对小白很方便
Minerva
2020/05/25
4.2K0
在Java中调用Python
在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢。当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单。恰好我在项目中就遇到了这个问题,需要在Java程序中调用Python程序。关于在Java中调用Python程序的实现,根据不同的用途可以使用多种不同的方法,在这里就将在Java中调用Python程序的方式做一个总结。
编程随笔
2019/09/11
5.2K0
在Java中调用Python
在 Ubuntu 中 安装python
virtualenvwrapper: 基于 virtualenv 之上的一个工具,通过它可以方便的创建/激活/管理/销毁虚拟环境,没它的话进行上面的操作将会相当麻烦。
py3study
2020/01/09
2.4K0
在 Python 中解析 JSON 数据
json模块是Python 标准库的一部分,它允许你对 JSON 数据进行编码和解码。
雪梦科技
2020/06/28
17.3K0
在windows中:双击运行Python
一、安装Python解释器的windows环境,如果双击运行*.py的文件,会闪退。怎样避免闪退呢?
py3study
2020/01/06
4.6K0
在windows中:双击运行Python
在 Python 中播放声音
我们首先检查playsound库,它为在Python中播放声音文件提供了一个简单直接的解决方案。凭借其最低的设置要求,开发人员可以使用单个函数调用将音频播放快速集成到他们的应用程序中。但是,对于更高级的音频功能,我们深入研究了两个流行的库:pygame和pyglet。Pygame是一个强大的多媒体库,以其处理音频,图形和用户输入的能力而闻名。
很酷的站长
2023/08/11
8940
在 Python 中播放声音
在C++中调用Python
虽然现在Python编程语言十分的火爆,但是实际上非要用一门语言去完成所有的任务,并不是说不可以,而是不合适。在一些特定的、对于性能要求比较高的场景,还是需要用到传统的C++来进行编程的。但是C++的一个缺点是比较难找到很好的轮子,这也是很多人专用Python的一个重要原因。这篇文章我们要介绍的是一个比较特殊的场景——用C++的代码去调用Python函数中实现的一些功能。这样的话,如果代码的主体还是用C++完成的,而部分功能为了简便,引入一些Python中已经封装好的函数,这样就可以很好的结合两种语言各自的特点。而另一种工作方式:通过Python来调用一些C++或者Fortran中实现的高性能函数,可以参考这一篇博客。这两种不同的使用方法各有优劣,但是如果以Python为主导,就很难避开GIL的问题,这里我们就不过多的展开。
DechinPhy
2021/05/27
4.3K0
python在sqlite中插入数据
python通过引入sqlite的包,就能够直接操作sqlite数据库 import sqlite3 import math cx=sqlite3.connect("mydatabase.sqli
py3study
2020/01/06
4K0
在LaTeX中插入python代码
老师突然要求交上去的论文需要在附录加上代码,奈何我使用的LaTeX模板只能高亮显示Matlab的代码,但是我写论文的时候绝大部分代码都是用Python写的在这里实名吐槽一下Matlab的数据处理功能这么拉跨,不知道为什么还被拿来当数据挖掘课的第一语言,没办法,只能找一个方法让LaTeX里面能高亮显示Python代码。
Hsinyan
2022/06/19
6.8K0
在LaTeX中插入python代码
getopt在Python中的使用
在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为”-“加上单个字母选项;长选项为”–“加上一个单词。长格式是在Linux下引入的。许多Linux程序都支持这两种格式。在Python中提供了getopt模块很好的实现了对这两种用法的支持,而且使用简单。
全栈程序员站长
2022/08/13
7K0
在Linux/CentOS中编译安装Python
心血来潮,想学习一下Python,听说用来做爬虫还不错。先从运行环境开始入手,CentOS中已经内置了Python,但版本似乎比较老,通过python -V命令看到版本是2.4.3。目前Python 2.x的最新版本号是2.7.8,那么就开始动手升级一下。
魏杰
2022/12/23
7280
Python在HiveQL中的运用
在写HiveQL的时候,往往发现内置函数不够用,Hive支持用户自定义函数UDF,使用Java进行开发。很多时候这显得过于繁重。因而Hive中提供了Transform机制(基于hadoop streaming),这种机制相当于提供了一个脚本程序的入口,因此我们可以很方便的使用shell、perl、python等语言进行开发。
py3study
2020/01/13
1.6K0
在latex中写python代码
大家都知道,python现在用的是越来越多了,功能强大,易于上手,如果能借助于其强大的绘图功能,latex岂不碉堡了?
py3study
2020/01/07
2K0
在latex中写python代码
在 Xcode 9 中搭建 Python
macOS、Xcode 9、Python(macOS 默认安装了 Python2.7)。
py3study
2020/01/09
1.8K0
在Python中如何使用Elasticsearch?
在这篇文章中,我将讨论Elasticsearch以及如何将其整合到不同的Python应用程序中。
马哥linux运维
2019/06/10
8.2K0
在Python中如何使用Elasticsearch?
在Python中定义Main函数
多编程语言都有一个特殊的函数,当操作系统开始运行程序时会自动执行该函数。这个函数通常被命名为main(),并且依据语言标准具有特定的返回类型和参数。另一方面,Python解释器从文件顶部开始执行脚本,并且没有自动执行的特殊函数。
程序员皮克
2021/12/29
4K0
Python在日常中的使用
今天想要整理下电脑硬盘的文件,只要一些有用的方便共享,然后发现文件组织结构是这个样子的
数据处理与分析
2019/07/31
9.5K0
Python在日常中的使用

相似问题

Python3中的Pinging服务器

11

在python中Pinging网络设备

119

在C++中Pinging服务器

10

Python pinging本地IP

111

在Java中更快地Pinging服务器?

35
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档