2つの製品を区別する統計テストを開発する


9

顧客調査からのデータセットがあります。製品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

これら2つの製品に違いがあるかどうかを確認するには、どの方法を使用すればよいですか?


@Glen_bの回答は、受け入れた回答よりも優れたアドバイスを提供することに注意してください。多分私はあなたがいつでも受け入れられた答えを変えることができると言うべきです(誰もがそれに気づいているわけではありません)。
amoeba 2015年

回答:


3

さまざまな裁判官による順位付けには、フリードマン検定を使用できます。 http://en.wikipedia.org/wiki/Friedman_test

非常に悪い評価から非常に良い評価を-2、-1、0、1、2の数値に変換できます。次に、データを長い形式で入力し、ブロック因子としてcustomerを使用して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

ここに画像の説明を入力してください


1
フリードマン検定を使用するのはやりすぎです。2つのグループしかない場合にANOVAを使用することをお勧めします。その後、単純にt検定に減少します。
amoeba 2015年

この回帰分析は正しくありません。顧客を因子ではなく連続変数として扱いました。これを修正する場合は、係数に変更することにより、0.1316のp値を取得します。つまり、対応のあるt検定と同じです。
Karl Ove Hufthammer 2015年

私はそれが要因であるべきだと気づきましたが、私はフリードマン検定に重点を置いていたので、それを変更しませんでした。しかし、サンプルサイズが小さいため、ここでは(t検定ではなく)ノンパラメトリック検定の方が適切だと思います。回答の回帰部分を修正しました。
rnso

9
  1. 1つの可能性は、符号テストを使用することです。

    これは、顧客内の比較に基づいて、product1からproduct2への評価が上昇したか、低下したか、または変わらなかったかを確認します(二項符号テストでは、「上昇」または「下降」の結果しか得られないという仮定ですが、顧客9 good対などのペア内の関係にアプローチするいくつかの一般的な方法good

    一般的なアプローチの1つは、顧客9のような同格の評価を除外することです(結論は、顧客のランダムサンプリングを想定して、母集団の上下の差の相対的比率についてです)。

    この場合、2番目の製品に高い評価を与えた4人の顧客、より低い評価を与えた8人、および同じ評価を与えた3人の顧客がいました。

    その場合、データが1つで4つ、もう1つで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の「非常に良い」から「大丈夫」などと同じように、それらのランクに符号付きランク検定を適用するか、割り当てられたスコアに対してペア順列検定を実行することもできます(ただし、強い絆にも対処する必要がありますが、これは、実際に持っているランクまたはスコアのセットを並べ替えることで簡単に行えます。

他にも検討すべき選択肢がいくつかありますが、分析の選択によって結果が変わるとは思いません。このデータの一般的な有意水準では、すべて拒否されないと思います。


1
@alescは特定の条件下でのみ「劣る」、他の状況では優れています。あなたはそれらの状態が何であるかを知っていますか?あなたが言及しているのは元のカテゴリの順序ですが、符号付き順位検定で重要なのは違いの順序です。これらの元のカテゴリーに1から5までの番号を割り当てることにより、実際には何も存在しない間隔スケールを想定しています。関連付けられたランクを除外することはデータを改ざんするのではなく、実際には、格付けが増加または減少する傾向があるかどうかの質問に関連する情報を条件としています。
Glen_b-2015

4
5ポイントのリッカートスケールアイテムを扱っています。(実際のリッカートスケールは、そのようなアイテムの合計です。)このスケールアイテムは序数であり、あなた自身がそう言っていました。しかし、カテゴリ間の間隔が等しいスコアを使用することで、間隔スケールを課します。課したこれらの等しい間隔は、文字通り間隔スケール同じです。それで、あなたはそれが序数だと言って、それからすぐにそれを間隔として扱いました。あなたが何をしたかについてあなたが言及しなかったという事実が、あなたの答えを修正する必要がある理由です。順序付きのデータのペアに符号付きランクテストを適用するとすぐに、元のデータを間隔として扱います。
Glen_b-2015

1
@rnso一般に、順序付けられたカテゴリを最初に等間隔の数値に変換することにより、序数があった場合に間隔スケールを課すことになります...この場合、重要なのは各グループ内の相対的なランキングのみであり、2つのグループしかないため、何も害を及ぼしません。2つのグループのフリードマンは、(両側)符号検定に相当します。つまり、あなたの答えは私のものと同じです。
Glen_b-2015

1
@rnso「セットアップ」に関しては、Rでは、序数カテゴリカル変数を因数(序数因数でさえ)にすることができますが、一部の関数では数値を処理する必要がある場合があります。それを行うときはいつでも(つまり、数値を使用)、それらの数値にはintervalプロパティがないことに注意してください。使用した数値の差(または合計)を取得することはできません。-あなたがいないならば、先験的からのシフトという主張- very badには、goodからのシフトと完全に同一であるbadvery good、あなたが数字としてそれらをコーディングした後、それを主張することはできません...(CTD)を
Glen_b -Reinstateモニカ

1
あなたがいる場合(CTD)...(あなただけの「D = 3」のように、両方の異なる開始ポイントと3つのカテゴリのシフトを扱うことはできませんつまり。だから、やるコードを5として、「非常に良い」への1までのように「非常に悪いです」 。、あなただけあなたが最初に明示しなければならない相違点を取ることができないと仮定。あなたは間隔尺度を持っているし、その後違いは意味がある
Glen_b -Reinstateモニカ

3

依存順序データがあります。Wilcoxon符号順位検定を使用して、すべての顧客間で両方の製品間の有意差を検定する必要があります。

しかし、上記のデータを考えると、ウィルコクソンの符号順位検定では有意な結果は得られません。


3
追加の仮定を行わずに、署名されたランクテストを使用することはできないと思います。たとえば、符号付きランクテストは絶対的なペアの差のランク付けに依存しています。つまり、顧客2の「良い」から「悪い」への変化が大きいか、小さいか、または顧客4の「非常に良い」と同じであるかを判断する必要があります。 「大丈夫」へ。これは、ある時点でインターバルスケールを課した可能性があることを示しています(ただし、実際に説明しなかったため、何をしたかを正確に伝えるのは困難です)。これはOPが同意する可能性のある選択ですが、最初に確認する必要があります。
Glen_b-2015

4
明確にするために、私はこれは潜在的に合理的な答えだと思いますが、その特定の仮定はより明確でなければなりません。(goodbad)または(very goodokay)のようなペアから一連の符号付きランクにどのように進んだかを説明すると、この答えが改善されると思います。これにより、途中で行われた仮定がより明確になるためです。
Glen_b -Reinstateモニカ

回答の順序が指定されているため、からまでの数値ランクを割り当てるのは簡単です。詳細については、回答にある他のコメントを参照してください。515
alesc 2015年

4
Alesc、@ Glen_bは正しい(そうではありません):符号付きランクテストでは、個々の値にランクを割り当てず、値のペア間の差にランクを割り当てます。したがって、最初に差異を計算できる必要があります。これは序数データでは不可能です。
amoeba 2015年

1

対応のある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
[…]

-値は0.0834です。通常、バランスの取れたデータの場合、対応のあるt検定のp値とほぼ同じになります。ここでは、負の相関関係があるため、対応のないt検定のp値に近くなっています。顧客効果(ランダムインターセプト)の分散はほぼゼロであることに注意してください。これは、実際のデータではめったに起こりません。p

概要

要約すると、対応のあるt検定を使用します。次に、解釈が容易な見積もりを取得します(単純な数値平均)。

すべてのお客様が両方の製品を評価したわけではない場合は、代わりに混合効果モデルを使用してください。(これは、ほぼ同じ結果が得られますペアT検定彼らは時にしているすべての両方の製品を評価するので、あなたにも、常にそれを使用することがあります。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.