开发统计测试以区分两种产品

机器算法验证 统计学意义 分类数据 重复测量 序数数据
2022-03-20 10:13:31

我有一个客户调查的数据集,我想部署一个统计测试来查看产品 1 和产品 2 之间是否存在显着性差异。

这是客户评论的数据集。

比率从非常差、差、好的、好到非常好。

customer    product1    product2
1           very good   very bad
2           good        bad
3           okay        bad
4           very good   okay
5           bad         very good
6           okay        good
7           bad         okay
8           very good   very bad
9           good        good
10          good        very good
11          okay        okay
12          very good   good
13          good        good
14          very good   okay
15          very good   okay

我应该使用什么方法来查看这两种产品之间是否有任何区别?

4个回答
  1. 一种可能性是您可以使用符号测试。

    这依赖于客户内部的比较,以查看他们从 product1 到 product2 的评分是上升、下降还是保持不变(在二项式符号测试下,假设您只会得到“上升”或“下降”结果,但有处理配对内联系的几种常见方法,例如客户 9 的goodvs good)。

    一种常见的方法是排除诸如客户 9 之类的捆绑评级(因此结论是关于总体中上下差异的相对比例,假设客户是随机抽样的)。

    在这种情况下,您有 4 位客户对第二种产品的评分较高,8 位评分较低,3 位评分相同。

    在这种情况下,使用您的数据,一个符号中的 4 个,另一个符号中的 8 个,双尾符号检验在任何典型的显着性水平上都不会接近拒绝。这是R中的分析:

    > binom.test(4,12)
    
            Exact binomial test
    
    data:  4 and 12
    number of successes = 4, number of trials = 12, p-value = 0.3877
    alternative hypothesis: true probability of success is not equal to 0.5
    95 percent confidence interval:
     0.09924609 0.65112449
    sample estimates:
    probability of success 
                 0.3333333 
    

    p值相当高。

  2. 现在,如果您准备为每对中评级变化的相对大小分配分数(甚至只是排名)——也就是说,客户 2 的“好”到“坏”的变化是更大还是更小或与客户 4 的“非常好”到“好的”相同,等等,那么您可以对这些排名应用签名排名测试,或者对分配的分数进行配对排列测试(尽管您还必须处理重关系,这可以很容易地通过排列你实际拥有的排名或分数来完成)。

您可能会考虑其他一些选择——但我认为分析的选择不会改变结果;我认为他们都不会拒绝这些数据的典型显着性水平。

对于不同评委的排名,可以使用弗里德曼测试。 http://en.wikipedia.org/wiki/Friedman_test

您可以将评级从非常差到非常好转换为 -2、-1、0、1 和 2 的数字。然后将数据放入长格式并应用friedman.test,并将客户作为阻塞因子:

> mm
   customer variable value
1         1 product1     2
2         2 product1     1
3         3 product1     0
4         4 product1     2
5         5 product1    -1
6         6 product1     0
7         7 product1    -1
8         8 product1     2
9         9 product1     1
10       10 product1     1
11       11 product1     0
12       12 product1     2
13       13 product1     1
14       14 product1     2
15       15 product1     2
16        1 product2    -2
17        2 product2    -1
18        3 product2    -1
19        4 product2     0
20        5 product2     2
21        6 product2     1
22        7 product2     0
23        8 product2    -2
24        9 product2     1
25       10 product2     2
26       11 product2     0
27       12 product2     1
28       13 product2     1
29       14 product2     0
30       15 product2     0
> 
> friedman.test(value~variable|customer, data=mm)

        Friedman rank sum test

data:  value and variable and customer
Friedman chi-squared = 1.3333, df = 1, p-value = 0.2482

2个产品之间的差异排名不显着。

编辑:

以下是回归的输出:

> summary(lm(value~variable+factor(customer), data=mm))

Call:
lm(formula = value ~ variable + factor(customer), data = mm)

Residuals:
   Min     1Q Median     3Q    Max 
  -1.9   -0.6    0.0    0.6    1.9 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)
(Intercept)         4.000e-01  9.990e-01   0.400    0.695
variableproduct2   -8.000e-01  4.995e-01  -1.602    0.132
factor(customer)2   6.248e-16  1.368e+00   0.000    1.000
factor(customer)3  -5.000e-01  1.368e+00  -0.365    0.720
factor(customer)4   1.000e+00  1.368e+00   0.731    0.477
factor(customer)5   5.000e-01  1.368e+00   0.365    0.720
factor(customer)6   5.000e-01  1.368e+00   0.365    0.720
factor(customer)7  -5.000e-01  1.368e+00  -0.365    0.720
factor(customer)8   9.645e-16  1.368e+00   0.000    1.000
factor(customer)9   1.000e+00  1.368e+00   0.731    0.477
factor(customer)10  1.500e+00  1.368e+00   1.096    0.291
factor(customer)11  7.581e-16  1.368e+00   0.000    1.000
factor(customer)12  1.500e+00  1.368e+00   1.096    0.291
factor(customer)13  1.000e+00  1.368e+00   0.731    0.477
factor(customer)14  1.000e+00  1.368e+00   0.731    0.477
factor(customer)15  1.000e+00  1.368e+00   0.731    0.477

Residual standard error: 1.368 on 14 degrees of freedom
Multiple R-squared:  0.3972,    Adjusted R-squared:  -0.2486 
F-statistic: 0.6151 on 15 and 14 DF,  p-value: 0.8194

在此处输入图像描述

您有相关的序数数据。您应该使用Wilcoxon 符号秩检验来检验两种产品在所有客户之间的显着差异。

但鉴于上述数据,Wilcoxon 符号秩检验不会产生显着结果。

使用配对t检验

只要您有足够的评分(15 就足够了,即使更少我也会很高兴)并且评分差异有一些变化,使用配对t检验完全没有问题。然后你会得到很容易解释的估计值——1-5 数字范围内的平均评分 + 其差异(产品之间)。

R代码

在 R 中很容易做到:

> ratings = c("very bad", "bad", "okay", "good", "very good")
> d = data.frame(
      customer = 1:15,
      product1 = factor(c(5, 4, 3, 5, 2, 3, 2, 5, 4, 4, 3, 5, 4, 5, 5),
                        levels=1:5, labels=ratings),
      product2 = factor(c(1, 2, 2, 3, 5, 4, 3, 1, 4, 5, 3, 4, 4, 3, 3),
                        levels=1:5, labels=ratings))
> head(d)
  customer  product1  product2
1        1 very good  very bad
2        2      good       bad
3        3      okay       bad
4        4 very good      okay
5        5       bad very good
6        6      okay      good

首先让我们检查平均收视率:

> mean(as.numeric(d$product1))
    [1] 3.9333
    > mean(as.numeric(d$product2))
[1] 3.1333

t检验给了我们:

> t.test(as.numeric(d$product1),
as.numeric(d$product2), paired=TRUE)
    Paired t-test

data:  as.numeric(d$product1) and as.numeric(d$product2)
t = 1.6, df = 14, p-value = 0.13
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.27137  1.87137
sample estimates:
mean of the differences 
                    0.8 

值为 0.13,这并不强烈表明产品的评级不同,尽管有 0.8 的明显差异(但请注意相当置信区间——我们确实需要更多数据)。p

假数据?

奇怪的是,出乎意料的是,未配对的t检验给出了较低的 p值。

> t.test(as.numeric(d$product1),
             as.numeric(d$product2), paired=FALSE)
    Welch Two Sample t-test

data:  as.numeric(d$product1) and as.numeric(d$product2)
t = 1.86, df = 27.6, p-value = 0.073
[…]

这确实表明示例数据是假的。对于真实数据,人们会期望来自同一客户的评级之间存在(相当高的)正相关性。这里的相关性是负的(尽管在统计上并不显着):

> cor.test(as.numeric(d$product1), as.numeric(d$product2))

    Pearson's product-moment correlation

data:  as.numeric(d$product1) and as.numeric(d$product2)
t = -1.38, df = 13, p-value = 0.19
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.73537  0.18897
sample estimates:
     cor 
-0.35794

缺失数据

如果并非所有客户都对这两种产品进行了评级(即不平衡数据),更好的方法是使用混合效应模型:

让我们首先将数据转换为数字形式:

> d2 = d
> d2[,-1] = lapply(d2[,-1], as.numeric)

并将其转换为“长”形式:

> library(tidyr)
> d3 = gather(d2, product, value, -customer)

最后用客户作为随机效应拟合一个混合效应模型:

> l = lme(value~product, random=~1|customer, data=d3)
> summary(l)
Linear mixed-effects model fit by REML
 Data: d3 
     AIC    BIC  logLik
  101.91 107.24 -46.957

Random effects:
 Formula: ~1 | customer
        (Intercept) Residual
StdDev:  3.7259e-05   1.1751

Fixed effects: value ~ product 
                  Value Std.Error DF t-value p-value
(Intercept)      3.9333   0.30342 14 12.9633  0.0000
productproduct2 -0.8000   0.42910 14 -1.8644  0.0834
[…]

p-值为 0.0834。通常对于平衡数据,它几乎与配对t检验的p值相同。由于负相关,这里它更接近未配对t检验的p值。请注意,客户效应(随机截距)的方差几乎为零。真实数据很少会发生这种情况。

概括

总之,使用配对t检验。然后你会得到易于解释的估计值(简单的数值平均值)。

如果并非所有客户都对这两种产品进行了评级,请改用混合效果模型。(当他们都对这两种产品进行评级时,这将给出与配对t检验大致相同的结果,因此您不妨始终使用它。)