R 中分层样本的单向方差分析

2024-03-13

我有一个包含三组(“a”、“b”、“c”)的分层样本,这些样本是从较大的总体 N 中抽取的。所有组都有 30 个观察值,但它们在 N 中的比例不相等,因此它们的采样权重不同。

我用surveyR 中的包来计算汇总统计数据和线性回归模型,并且想知道如何计算单向方差分析来校正调查设计(如果需要)。

我的假设是,如果我错了,请纠正我,对于权重较小的总体,方差的标准误差通常应该更高,因此不考虑调查设计的简单方差分析应该不可靠。

这是一个例子。任何帮助,将不胜感激。

## Oneway- ANOVA tests in R for surveys with stratified sampling-design
library("survey")
# create test data
test.df<-data.frame(
  id=1:90,
  variable=c(rnorm(n = 30,mean=150,sd=10),
             rnorm(n = 30,mean=150,sd=10),
             rnorm(n = 30,mean=140,sd=10)),
  groups=c(rep("a",30),
  rep("b",30),
  rep("c",30)),
  weights=c(rep(1,30), # undersampled
  rep(1,30),
  rep(100,30))) # oversampled


# correct for survey design
test.df.survey<-svydesign(id=~id,
                           strata=~groups,
                           weights=~weights,
                           data=test.df)

## descriptive statistics
# boxplot
svyboxplot(~variable~groups,test.df.survey)
# means
svyby(~variable,~groups,test.df.survey,svymean)
# variances
svyby(~variable,~groups,test.df.survey,svyvar)


### ANOVA ###
## One-way ANOVA without correcting for survey design
summary(aov(formula = variable~groups,data = test.df))

嗯,这是一个有趣的问题,据我所知,很难在单向方差分析中考虑权重。因此,我决定向您展示解决这个问题的方法。

我将使用双向方差分析,然后使用 soem port hoc 测试。

首先,让我们根据您的数据构建一个线性模型并检查它的外观。

library(car)
library(agricolae)
model.lm = lm(variable ~ groups * weights, data = test.df)
shapiro.test(resid(model.lm))

Shapiro-Wilk normality test

data:  resid(model.lm)
W = 0.98238, p-value = 0.263

leveneTest(variable ~ groups * factor(weights), data = test.df)
Levene's Test for Homogeneity of Variance (center = median)
Df F value  Pr(>F)  
group  2  2.6422 0.07692 .
      87                  
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

分布接近正态,组间方差不同,因此方差不是同质的 - 应该用于参数检验 - 方差分析。不管怎样,我们还是进行一下测试吧。

检查我们的数据是否适合此测试的几个图:

hist(resid(model.lm))
plot(model.lm)

Here https://stats.stackexchange.com/questions/58141/interpreting-plot-lm/65864是情节的解释,它们实际上看起来并不糟糕。

让我们运行双向方差分析:

anova(model.lm)
Analysis of Variance Table

Response: variable
          Df Sum Sq Mean Sq F value    Pr(>F)    
groups     2 2267.8 1133.88  9.9566 0.0001277 ***
Residuals 87 9907.8  113.88                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

如您所见,结果非常接近您的结果。一些事后测试:

(result.hsd = HSD.test(model.lm, list('groups', 'weights')))
$statistics
   MSerror Df     Mean     CV      MSD
  113.8831 87 147.8164 7.2195 6.570186

$parameters
   test         name.t ntr StudentizedRange alpha
  Tukey groups:weights   3         3.372163  0.05

$means
      variable       std  r      Min      Max      Q25      Q50      Q75
a:1   150.8601 11.571185 30 113.3240 173.0429 145.2710 151.9689 157.8051
b:1   151.8486  8.330029 30 137.1907 176.9833 147.8404 150.3161 154.7321
c:100 140.7404 11.762979 30 118.0823 163.9753 131.6112 141.1810 147.8231

$comparison
NULL

$groups
      variable groups
b:1   151.8486      a
a:1   150.8601      a
c:100 140.7404      b

attr(,"class")
[1] "group"

也许还有一些不同的方式:

aov_cont<- aov(test.df$variable ~ test.df$groups * test.df$weights)
summary(aov_cont)
               Df Sum Sq Mean Sq F value   Pr(>F)    
test.df$groups  2   2268  1133.9   9.957 0.000128 ***
Residuals      87   9908   113.9                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(TukeyHSD(aov_cont))
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = test.df$variable ~ test.df$groups * test.df$weights)

$`test.df$groups`
           diff        lwr       upr     p adj
b-a   0.9884608  -5.581725  7.558647 0.9315792
c-a -10.1197048 -16.689891 -3.549519 0.0011934
c-b -11.1081657 -17.678352 -4.537980 0.0003461

总结一下,结果非常接近您的结果。就我个人而言,我将运行双向方差分析(*)符号或(+)当您确定变量是独立的时 - 加性模型。

Group c体重较大的群体不同a and b基本上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 中分层样本的单向方差分析 的相关文章

随机推荐

  • 基于变量内容的 bash 大括号扩展不起作用

    我怎样才能让 bash 扩展它在传递给 mkdir 的变量中找到的任何内容 到目前为止我已经尝试使用eval and bash c 但似乎没有任何作用 LEVEL 1 1 2 3 LEVEL 2 a b c DATA L1 tmp LEVE
  • Java并行易失性i++

    我有一个全局变量 volatile i 0 和两个线程 每个执行以下操作 i System out print i 我收到以下组合 12 21 和 22 I understand why I don t get 11 volatile di
  • React - 在组件中使用 ref 并将其传递给 props 中的父级

    更新 我的问题实际上是由于拼写错误 如果您想在子组件和父组件中使用子元素引用 则一般方法可以正常工作 下面是该方法的一个工作示例 https codesandbox io s rwj7z7o7oo https codesandbox io
  • Intel NVMe 驱动器扇区大小不是 4096 的 xfs 文件系统导致性能下降

    我正在 Linux Ubuntu 14 04 上使用 NVMe 卡 我发现 当使用默认扇区大小 512 的 xfs 文件系统进行格式化时 Intel NVMe 卡的性能会出现一些下降 或任何其他小于 4096 的扇区大小 在实验中 我使用默
  • 将 git 存储库添加到 VSP 上的现有文件夹

    我的设置如下所示 裸仓库在我的根 srv Folder 本地仓库在我的电脑上 Gitlab 仓库 on well Gitlab 我添加了两个源 Gitlab 和我的 Bare Repo 将所有更改从本地计算机推送到源 现在我想在我的中设置一
  • pgbouncer - 关闭是因为:每个连接上的服务器不干净

    我正在运行 Django 1 3 和 PostgreSQL 9 1 PostGIS 1 5 psycopg2 2 4 2 和 pgbouncer 1 4 2 在与数据库的每个连接上 我都会在 pgbouncer log 中收到一条日志条目
  • 根据AWS标签分配ansible变量

    我正在尝试找出一种根据 AWS 中的标签在 Ansible 中分配变量的方法 我正在尝试ec2 remote tags但它返回的信息比我需要的多得多 似乎应该有一种更简单的方法来做到这一点 但我只是没有想到 例如 如果我有一个名为funct
  • 为什么 multiprocessing.Process.join() 挂起?

    我以这种方式使用多处理 import multiprocessing as mp def worker thread id tasks results tmp dir temp for format thread id os makedir
  • 如何找到解决方案中的所有扩展方法?

    如何找到解决方案中的所有扩展方法 如果我这样做 我会在所有文件中搜索字符串 this 您的搜索字符串可能会根据您的格式选项而有所不同 EDIT 经过一点实验 以下内容似乎对我来说使用 在文件中查找 Ctrl Shift F 可以高精度工作
  • 启动/停止服务器时 MySQL Workbench 冻结

    I recently started using MySQL Server and Workbench both version 8 0 and noticed a strange issue When I load Workbench g
  • 如何以编程方式更改 Mac OS X 键盘布局?

    我的 Qt 应用程序支持在 Linux 和 Windows 上更改输入语言 我还想添加对更改 Mac OSX 中的输入语言的支持 不幸的是我没有任何关于 Mac SDK 的信息 我在 OS X 上的第一个也是最后一个工作是编译 Qt 并编译
  • 找不到 spring hibernate.cfg.xml

    Configuration configuration new Configuration configure hibernate cfg xml 我的配置文件在 src 我仍然收到这个错误 有人能发现我的错误吗 您正在使用具有标准目录布局
  • 来自文档根目录的 Route-Me 离线地图

    在我的应用程序中 有一个从 sqlite 文件呈现的离线地图 RMDBMapSource mapSrc RMDBMapSource alloc initWithPath map sqlite RMMapContents contents n
  • 如何在输入密码字段中插入复选框

    我希望我的网页在密码字段内显示一个复选框 用户单击复选框并查看文本形式的密码 取消选中后 再次输入其密码 This is what I want This is from the Ebay website login page 这就是我得到
  • java垃圾收集日志中的“GC--”是什么意思?

    我们打开了详细 GC 日志记录来跟踪已知的内存泄漏 并在日志中获取以下条目 3607872 687 GC 471630K gt 390767K 462208K 0 0325540 secs 3607873 213 GC 458095K gt
  • Python 3 如何检查一个值是否已经在列表中的列表中

    我的 Python 3 中有一个列表列表 mylist a x x b x x c x x x只是一些数据 我有我的代码可以做到这一点 for sublist in mylist if sublist 0 a sublist 1 subli
  • 如何与 AlarmManager 结合启动通知?

    我正在尝试弄清楚应该如何启动通知 创建通知不是我所要求的 而是一种在后台启动它的方法 这样它就不引人注目 并且用户可以做他们正在做的任何事情 它是日历 准确地说是提醒 同样重要的是要注意我正在使用AlarmManager 我应该使用什么方法
  • ng-repeat动画完成回调

    所以我有一个简单的 ng repeat 和在 javascript 中定义的输入动画 沙盒 http codepen io anri82 pen KwgGeY http codepen io anri82 pen KwgGeY Code d
  • 从 CompletableFuture.allof() 获取单独的结果

    我有一个类 它使用 CompletableFutures 向两个依赖服务发出并发请求 我的代码如下所示 Builder Slf4j public class TestClass NonNull private final ExecutorS
  • R 中分层样本的单向方差分析

    我有一个包含三组 a b c 的分层样本 这些样本是从较大的总体 N 中抽取的 所有组都有 30 个观察值 但它们在 N 中的比例不相等 因此它们的采样权重不同 我用surveyR 中的包来计算汇总统计数据和线性回归模型 并且想知道如何计算