2

我有一个记录在 5 个不同高度的粒子浓度数据集。我想知道这些差异是否显着。对于每个高度,N=15。

什么测试适合使用?

我使用了pairwise.t.test,但不确定这是否是正确的解决方案,因为样本量很小。我还尝试了 pairwise.wilcox.test ,它返回不同的 p 值和错误“无法计算带有关系的精确 p 值”。这是因为样本量小,我可以使用它吗?

我的数据:

structure(list(height = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 
5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 
1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 
4L, 5L), values = c(1.67, 3.33, 6.67, 10, 15, 25, 20, 11.67, 
16.67, 18.33, 1.67, 0, 1.67, 5, 3.33, 5, 73.33, 8.33, 5, 5, 10, 
5, 6.67, 6.67, 3.33, 18.33, 18.33, 6.67, 38.33, 0, 23.33, 10, 
15, 11.67, 5, 11.67, 8.33, 1.67, 15, 3.33, 13.33, 10, 10, 3.33, 
10, 8.33, 21.67, 10, 41.67, 8.33, 3.33, 36.67, 15, 11.67, 8.33, 
8.33, 8.33, 5, 5, 0, 1.67, 8.33, 16.67, 3.33, 10, 16.67, 8.33, 
8.33, 25, 1.67, 6.67, 26.67, 3.33, 11.67, 1.67)), row.names = c(NA, 
-75L), class = "data.frame")
4

3 回答 3

1

如果您只想知道任何组均值是否存在显着差异,您可能需要使用方差分析 (ANOVA)。

library(afex)
df$id = 1:nrow(df)
aov_ez(data=df, id="id", between="height", dv="values")

结果是

Anova Table (Type 3 tests)

Response: values
  Effect    df    MSE      F  ges p.value
1 height 4, 70 118.38 2.45 + .123    .054
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘+’ 0.1 ‘ ’ 1

因此,在 5% 的 alpha 水平上,结果略微不显着。然而,在广义 eta-squared ( ges) 为 0.123 时,效应量很大。

成对测试(例如您提到的 t 检验)的问题是 alpha 错误会累积。为了解决 alpha 误差膨胀,您需要降低各个测试的 alpha 水平,从而导致功效大大降低。

如果数据来自相关测量(也称为数据内),即您在这些高度多次测量同一受试者,则可以使用受试者内分析。

补充:为了快速可视化,您可能想尝试

boxplot(df$values~df$height)
于 2021-01-12T09:16:45.567 回答
1

您可以对能够处理关系wilcox.exact的包的功能进行矢量化。exactRankTests有了它,您可以使用outer.

wilcox.testv <- Vectorize(function(x, y) 
  exactRankTests::wilcox.exact(m[,x], m[,y])$p.value)

首先,我们要将数据重塑为宽格式以获取列。

m <- as.matrix(reshape(transform(d, id=cumsum(height == 1)), timevar="height", 
                       direction="wide")[-1])
m
#    values.1 values.2 values.3 values.4 values.5
# 1      1.67     3.33     6.67    10.00    15.00
# 6     25.00    20.00    11.67    16.67    18.33
# 11     1.67     0.00     1.67     5.00     3.33
# 16     5.00    73.33     8.33     5.00     5.00
# 21    10.00     5.00     6.67     6.67     3.33
# 26    18.33    18.33     6.67    38.33     0.00
# 31    23.33    10.00    15.00    11.67     5.00
# 36    11.67     8.33     1.67    15.00     3.33
# 41    13.33    10.00    10.00     3.33    10.00
# 46     8.33    21.67    10.00    41.67     8.33
# 51     3.33    36.67    15.00    11.67     8.33
# 56     8.33     8.33     5.00     5.00     0.00
# 61     1.67     8.33    16.67     3.33    10.00
# 66    16.67     8.33     8.33    25.00     1.67
# 71     6.67    26.67     3.33    11.67     1.67

现在在矩阵上应用该函数以获得另一个矩阵,该矩阵给出差异的 p 值。

cols <- 1:ncol(m)
res <- outer(cols, cols, wilcox.testv)
res
#           [,1]       [,2]      [,3]       [,4]       [,5]
# [1,] 1.0000000 0.32724202 0.6582911 0.47820691 0.14360144
# [2,] 0.3272420 1.00000000 0.1431578 0.81358101 0.01930055
# [3,] 0.6582911 0.14315777 1.0000000 0.29689457 0.18766290
# [4,] 0.4782069 0.81358101 0.2968946 1.00000000 0.02072233
# [5,] 0.1436014 0.01930055 0.1876629 0.02072233 1.00000000

一眼就能看出意义

alpha <- .05
res < alpha
#       [,1]  [,2]  [,3]  [,4]  [,5]
# [1,] FALSE FALSE FALSE FALSE FALSE
# [2,] FALSE FALSE FALSE FALSE  TRUE
# [3,] FALSE FALSE FALSE FALSE FALSE
# [4,] FALSE FALSE FALSE FALSE  TRUE
# [5,] FALSE  TRUE FALSE  TRUE FALSE
于 2021-01-12T09:48:40.200 回答
1

我完全同意@marvinschmitt 的回答,但是我将展示我对此类数据的处理方法。

1.数据如何?

boxplot(df$values~df$height)

2.不要忘记因素!否则结果将是错误的。

str(df)
df$height <- as.factor(df$height)

3.让我们建立一个模型:

model.lm = lm(values ~ height, data=df)

并检查:

a)常态:

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

b)差异:

plot(model.lm, 1)

您可以在此处阅读有关这些诊断图的信息

4、方差分析:

a1 <- aov(model.lm)
summary(a1)

5.事后测试:

(TukeyHSD(a1, 'height', conf.level=0.95))
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = model.lm)

$height
          diff        lwr        upr     p adj
2-1   6.888000  -4.236727 18.0127273 0.4204011
3-1  -1.888000 -13.012727  9.2367273 0.9893557
4-1   3.667333  -7.457394 14.7920606 0.8870422
5-1  -4.112000 -15.236727  7.0127273 0.8382557
3-2  -8.776000 -19.900727  2.3487273 0.1885170
4-2  -3.220667 -14.345394  7.9040606 0.9265135
5-2 -11.000000 -22.124727  0.1247273 0.0540926
4-3   5.555333  -5.569394 16.6800606 0.6307915
5-3  -2.224000 -13.348727  8.9007273 0.9803501
5-4  -7.779333 -18.904061  3.3453940 0.2972209

您还可以查看非参数多重测试:

kruskal.test(values ~ height, data=df)
于 2021-01-12T10:05:26.137 回答