두 제품을 구별하기위한 통계 테스트 개발


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

이 두 제품간에 차이가 있는지 확인하려면 어떤 방법을 사용해야합니까?


@Glen_b의 답변은 수락 한 답변과 비교하여 탁월한 조언을 제공합니다. 아마도 나는 당신이 언제든지 받아 들일 수있는 대답을 바꿀 수 있다고 말해야합니다 (모두가 그것을 알고있는 것은 아닙니다).
amoeba

답변:


3

다른 심사 위원의 순위를 매기기 위해 Friedman 테스트를 사용할 수 있습니다. 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

두 제품의 차이 순위는 중요하지 않습니다.

편집하다:

다음은 회귀 결과입니다.

> 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
Friedman의 테스트를 사용하는 것은 과잉입니다. 두 그룹 만있는 경우 분산 분석을 사용하는 것이 좋습니다. 그런 다음 단순히 t- 검정으로 줄어 듭니다.
amoeba

이 회귀 분석이 잘못되었습니다. 고객을 요인 대신 연속 변수 로 취급했습니다 . 이 문제를 해결하면 계수로 변경하여 p- 값 0.1316을 얻습니다. 즉, 대응 t- 검정 과 동일 합니다.
Karl Ove Hufthammer

나는 그것이 요인이되어야한다는 것을 깨달았지만, Friedman 테스트에 중점을 둔 이후로 변경하지 않았습니다. 그러나 표본 크기가 작기 때문에 여기서는 t- 테스트가 아닌 비모수 적 테스트가 더 적합하다고 생각합니다. 내 대답에서 회귀 부분을 수정했습니다.
rnso

9
  1. 한 가지 가능성은 부호 테스트를 사용할 수 있다는 것입니다.

    이는 고객 내 비교를 통해 product1에서 product2까지의 등급이 상승, 하락 또는 동일하게 유지되었는지 여부를 확인합니다 (이항 부호 테스트에서 "상승"또는 "하강"결과 만 가정한다는 가정하에 고객 9 good와 비교 하여 페어 내 관계에 접근하는 몇 가지 일반적인 방법 good.

    일반적인 접근법 중 하나는 customer 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의 "매우 좋음"에서 "좋아"와 같은 방식으로 해당 순위에 대해 서명 된 순위 테스트를 적용하거나 할당 된 점수에 대해 쌍을 이루는 순열 테스트를 수행 할 수 있습니다. 이것은 당신이 실제로 가지고있는 순위 나 점수를 바꾸어 쉽게 할 수 있습니다).

당신이 고려할 수있는 다른 선택들이 있지만, 분석의 선택이 결과를 바꿀 것이라고 생각하지 않습니다. 나는 그들이이 데이터에 대해 전형적인 의미 수준에서 모두 거부하지 않을 것이라고 생각합니다.


1
@alesc는 특정 조건에서만 "열등"하며 다른 조건에서는 우월합니다. 이러한 조건이 무엇인지 알고 있습니까? 그것은 당신이 언급 한 순서는 원래 범주 의 순서 이지만 부호있는 순위 테스트에 중요한 것은 차이점 의 순서입니다 . 원래 범주에 1에서 5까지 숫자를 할당하면 실제로는 존재하지 않는 구간 스케일을 가정했습니다. 동점 순위를 제외 해도 데이터 가 변경 되지는 않으며 실제로 등급이 증가 또는 감소하는 경향이 있는지 여부에 대한 질문과 관련된 정보를 조정합니다.
Glen_b-복지국 Monica

4
우리는 5 점 리 커트 척도 항목을 다루고 있습니다. (실제 리 커트 척도 는 그러한 품목에 대한 합계입니다.)이 척도 품목은 서수입니다. 그러나 범주 사이의 간격은 당신이 동일한 점수를 사용하여 하는 간격 규모를 부과 - 당신이 부과하는 동일한 간격을 말 그대로 간격 스케일은 무엇인가 이다 . 그래서 당신은 그것이 서수라고 말한 다음 즉시 그것을 간격으로 취급했습니다. 당신이 한 일을 언급하지 않았다는 사실은 당신의 대답이 수정되어야하는 이유입니다. 서수 데이터 쌍에 부호있는 순위 테스트를 적용하자마자 원본을 간격으로 취급합니다.
Glen_b-복지국 Monica

1
@rnso 일반적으로 순서가 지정된 범주를 등가 숫자로 처음 변환하면 서 수가있는 곳에 간격 스케일을 부과했을 것입니다 ... 이 경우-중요한 것은 각 그룹 내에서 상대적 순위이며 두 그룹 만 있기 때문에 아무 것도 해치지 않습니다. 두 그룹의 Friedman은 (양측) 부호 테스트와 같습니다. 다시 말해, 당신의 대답은 나의 것과 같습니다.
Glen_b-복지 주 모니카

1
@rnso '설정'의 관점에서 R에서 서수 범주 형 변수를 인수 (서수 요소)로 만들 수 있지만 일부 함수의 경우 숫자를 처리해야 할 수도 있습니다. 그렇게 할 때마다 (내가 의미하는 숫자 사용) 그 숫자에는 interval 속성이 없다는 점을 명심해야합니다. 사용한 숫자의 차이 (또는 합계) 만 취할 수는 없습니다. 경우없는 것 - a는 사전 -에서 변화 주장 very bad에가 good에서 변화 완전히 동일 badvery good, 당신이 후 번호와 같은 코드를 그것을 주장 할 수 없습니다 ... (CTD)
Glen_b -Reinstate 모니카

1
(ctd) ... (즉, 시작점이 다른 3 개 카테고리의 이동을 "d = 3"으로 취급 할 수는 없습니다. 따라서 '매우 나쁘다' 코드를 1부터 최대 5까지 '매우 좋다' , 당신은 단지 차이를 취할 수 없습니다. 당신은 먼저 당신이 간격 스케일을 가지고 있다고 가정 한 다음에 차이가 의미가 있다고 생각 해야합니다 .
Glen_b -Reinstate Monica

3

종속 서수 데이터가 있습니다. Wilcoxon 부호있는 순위 테스트 를 사용하여 모든 고객의 두 제품간에 큰 차이가 있는지 테스트 해야합니다 .

그러나 위의 데이터를 감안할 때 Wilcoxon 부호 순위 테스트는 중요한 결과를 얻지 못했습니다.


3
추가 가정없이 서명 순위 테스트를 사용할 수 있다고 생각하지 않습니다. 예를 들어, 서명 된 순위 테스트는 절대 쌍 차이의 순위를 결정합니다. 즉, 고객 2의 "좋은"변경에서 "나쁜"변경이 고객 4의 "매우 좋음"과 같이 더 크거나 작거나 같은지 여부를 결정해야합니다. "에서"괜찮아 ". 어느 시점에서 간격 스케일을 부과했을 가능성이 높습니다 (실제로 설명하지 않았기 때문에 수행 한 내용을 정확히 말하기가 어렵습니다). OP가 동의 할 수있는 선택이지만 먼저 문의해야합니다.
Glen_b-복지 주 모니카

4
명확히하기 위해 : 이것은 잠재적으로 합리적인 대답이라고 생각하지만 특정 가정은보다 명확해야합니다. ( good, bad) 또는 ( very good, okay) 와 같은 쌍 에서 부호있는 순위 집합으로 진행하는 방법을 설명하면이 대답이 향상 될 수 있다고 생각합니다 .
Glen_b-복지국 Monica

답의 순서가 주어 지므로 숫자 순위를 지정하십시오. 15사소합니다. 자세한 내용은 답변에 대한 다른 의견을 참조하십시오.
alesc

4
Alesc, @Glen_b가 옳습니다 (그렇지 않습니다). 부호있는 순위 테스트에서 개별 값에 순위를 할당하지 않고 값 쌍 사이의 차이에 순위를 할당 합니다 . 따라서 차이를 먼저 계산할 수 있어야합니다. 서수 데이터로는 불가능합니다.
amoeba

1

쌍 사용 t -test

등급이 충분하고 (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 -test는 우리에게 다음을 제공합니다.

> 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의 명백한 차이에도 불구하고 제품의 등급이 다르게 제시 될 것을 강력하게 제안 하지는 않습니다 (그러나 신뢰 구간은 유의해야합니다. 더 많은 데이터가 필요합니다).

가짜 데이터?

흥미롭고 예기치 않게 짝이없는 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)

그리고 'long'형태로 변환하십시오.

> 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- 값에 더 가깝습니다 . 고객 효과에 대한 분산 (임의 차단)은 거의 0입니다. 실제 데이터에서는 거의 발생하지 않습니다.

요약

요약하면, 쌍으로 된 t -test를 사용하십시오 . 그런 다음 해석하기 쉬운 추정치 (간단한 숫자 평균)를 얻습니다.

모든 고객이 두 제품을 모두 평가하지 않은 경우 혼합 효과 모델을 대신 사용하십시오. ( 모두 두 제품 모두 평가 했을 때 쌍으로 된 t- 검정 과 거의 같은 결과를 제공 하므로 항상 사용할 수도 있습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.