사용자가 제품 또는 항목에 대한 선호도를 표현할 수있는 별표 등급 시스템을 사용하는 경우 투표가 "분할"된 경우 통계를 어떻게 감지 할 수 있습니까? 의미는, 주어진 제품에 대해 평균이 5/3 인 경우에도 데이터 만 사용하여 1-5 분할 대 합의 3인지 여부를 어떻게 알 수 있습니까 (그래픽 방법 없음)
사용자가 제품 또는 항목에 대한 선호도를 표현할 수있는 별표 등급 시스템을 사용하는 경우 투표가 "분할"된 경우 통계를 어떻게 감지 할 수 있습니까? 의미는, 주어진 제품에 대해 평균이 5/3 인 경우에도 데이터 만 사용하여 1-5 분할 대 합의 3인지 여부를 어떻게 알 수 있습니까 (그래픽 방법 없음)
답변:
하나는 편광 지수를 구성 할 수있다; 정확히 어떻게 정의 하는가가 더 분극화되는 요소에 따라 달라집니다 (즉, 특히 가장자리의 경우 더 많거나 적은 분극에 의해 무엇을 의미합니까?).
예를 들어, 평균이 '4'인 경우 '3'과 '5'사이의 50-50 스플릿이 25 % '1'과 75 % '5'보다 분극이됩니까?
어쨌든, 당신이 의미하는 바에 대한 구체적인 정의가 없다면, 분산에 기초한 척도를 제안 할 것입니다.
특정 평균이 주어지면 가장 극화 된 가능한 스 플리트를 분산을 최대화하는 스플릿으로 정의하십시오 *.
* (25 % '1'과 75 % '5'는 실질적으로 더 많음을 말하는 NB '3'과 '5'의 50-50 스 플리트보다 극성이 크다고 말하십시오. 직관과 일치하지 않으면 분산을 사용하지 마십시오)
따라서이 분극 지수는 관측 된 분산에서 가장 큰 분산의 비율 ( 관측 평균 )입니다.
평균 등급 ( m = ˉ x )이라고 부릅니다 .
최대 분산은 비율 p = m - 1 일 때 발생합니다. 는5이고1-p는1이고; 이것은(m−1)(5−m)⋅n의 분산을 갖습니다. .
따라서 단순히 표본 분산을 취하고 ( m − 1 ) ( 5 − m ) ⋅ n으로 나눕니다. ; 이것은0(완전한 일치)과1(완전히 편광)사이의 숫자를 제공합니다.
평균 등급이 4 인 여러 경우에 대해 다음을 제공합니다.
대신 평균이 같은 가장 큰 분산을 기준으로 계산 하지 않고 평균 등급에 대해 가능한 가장 큰 분산의 백분율로 계산하는 것이 좋습니다 . 대신 4 ⋅ n으로 나누는 것이 포함됩니다. 이고 다시 0 (완전 일치)과1(극단에서 50-50 비율로 분극) 사이의 값을 생성합니다. 이렇게하면 위의 다이어그램과 동일한 상대성이 얻어 지지만 모든 값은 3/4만큼 커집니다 (즉, 왼쪽에서 오른쪽으로, 위에서 아래로 0, 16.5 %, 25 %, 25 %, 50입니다). % 및 75 %).
이러한 인덱스를 구성하는 다른 여러 가지 방법과 마찬가지로 두 가지 중 하나가 완벽하게 유효한 선택입니다.
m = 1
당신은 얻을 1 - 1 = 0
하고 0 / 0
. 그걸 어떻게 교정하니?
"그래픽 방법 없음"은 큰 장애가 될 수 있지만, 여기 몇 가지 이상한 생각이 있습니다. 둘 다 등급을 연속으로 취급하는데 이는 개념적 약점 일 수 있으며 아마도 유일한 것은 아닙니다.
다음과 같은 데이터 프레임이있는 경우 : 모델 적합 F r e q u e n c y ∼ R a t i n g + √
FWIW, 여기 내가 놀고 있는 r 코드가 있습니다.
x=rbinom(99,4,c(.1,.9))+1;y=sample(0:4,99,replace=T)+1 #Some polarized & uniform rating data
table(x);table(y) #Frequencies
require(moments);kurtosis(x);kurtosis(y) #Kurtosis
Y=data.frame(n=as.numeric(table(y)),rating=as.numeric(levels(factor(y)))) #Data frame setup
X=data.frame(n=as.numeric(table(x)),rating=as.numeric(levels(factor(x)))) #Data frame setup
require(MASS);summary(glm.nb(n~rating+sqrt(rating),X)) #Negative binomial of polarized data
summary(glm.nb(n~rating+sqrt(rating),Y)) #Negative binomial of uniform data
줄거리에 던지는 것을 저항 할 수 없다 ...
require(ggplot2);ggplot(X,aes(x=rating,y=n))+geom_point()+stat_smooth(formula=y~x+I(sqrt(x)),method='glm',family='poisson')
항은 회귀선의 곡률 (이 경우 오목)을 결정합니다. 이미 그래픽을 사용하여 부정 행위를하고 있기 때문에 올바른 방법을 사용 하는 것보다 코딩하기가 쉽기 때문에 음 이항 대신 포아송 회귀 분석에 적합합니다 .
편집 : 이 질문은 사이드 바에 광고되어 있음을 보았습니다. 클릭했을 때 때때로 발생 하는 핫 네트워크 질문에서 다시 연결됩니다 .
그래서 이것이 더 일반적으로 유용한 방식으로 다시 방문 할 가치가 있다고 생각했습니다. The Mountain Three Wolf Moon Short Sleeve Tee 에 대한 아마존 고객 리뷰 에서 내 방법을 시도하기로 결정했습니다 .
x=rep(5:1,c(2273,198,89,54,208))
var(x)/(4*length(x)/(length(x)-1))
= .33 ... 단지 말하세요.
나는 이미 주어진 영리한 답변에 가치있는 것을 추가 할 수 있는지 의심합니다. 특히, 관측 된 분산이 관측 된 평균에서 가능한 최대 분산에 상대적으로 얼마나 가까운 지 평가하는 @Glen_b의 훌륭한 아이디어입니다. 저의 어깨 직설 제안에 대한 저의 직설적 인 견해는 대신 일부 중심에서의 편차가 아니라 데이터 포인트 사이의 거리를 기반으로 한 강력한 분산 측정에 관한 것입니다.
모든 데이터 포인트 사이의 쌍 거리 (절대 차이)를 계산합니다. 탈락제로 거리. 거리 분포의 중심 경향을 계산하십시오 (선택은 사용자의 선택입니다 (예 : 평균, 중앙값 또는 Hodges-Lehmann 중심 일 수 있음 )).
Rating scale Distances Mean Median Hodges-Lehmann
1 2 3 4 5
Frequency distributions:
1 2 1 0 2 2 2 2 4 2 2 2
2 2 0 0 4 4 4 4 2.7 4 2
1 2 1 0 1 1 3 3 4 2 2 2
1 1 1 1 1 1 2 2 3 4 2.2 2 2
1 1 1 1 1 1 2 3 3 4 2.3 2.5 2.5
1 3 0 0 0 4 4 4 2 2 2
보시다시피, 3 가지 통계는 "편광"의 측정치와 매우 다를 수 있습니다 (양극성 대립보다는 "차이점"을 측정하려면 HL을 선택합니다). 선택은 당신입니다. 한 가지 개념 : 제곱 거리 를 계산하면 평균이 데이터의 일반적인 분산과 직접 관련이 있으므로 @Duncan의 제안에 도달하여 분산을 계산합니다. 큰 거리에서도 거리 계산이 어렵지 않습니다. 여기에서 등급 척도는 설명이 적고 등급이 상대적으로 적기 때문에 거리를 계산하는 주파수 가중치 알고리즘이 자연스럽게 제공됩니다.
3 별 등급이 5와 4의 평균보다 작고 1과 2의 평균보다 작 으면 어떻습니까?
if (number_of_ratings > 6) // kind of meaningless unless there's enough ratings
{
if ( ((rating(5)+rating(4))*0.5 > rating(3)) &&
((rating(1)+rating(2))*0.5 > rating(3))
)
{
// Opinion divided
}
else
{
// Opinion not divided
}
}
else
{
// Hard to tell yet if opinion is divided
}
내 머리 꼭대기에서 나는 그것이 작동하지 않을 상황을 생각할 수 없다. 위 예제 사용 : The Mountain Three Wolf Moon Short Sleeve Tee에 대한 Amazon 고객 리뷰 :
이 경우 :
이것은 시험을 통과하고 의견이 분리 된 것으로 간주됩니다.
나는 당신이 찾고있는 것이 표준 편차라고 생각합니다.
이것이 어떤 프로그래밍 언어인지는 모르겠지만 표준 편차를 제공하는 Java 메소드는 다음과 같습니다.
public static double standardDeviation(double[] data) {
//find the mean
double sum = 0;
for(double x:data) {
sum+=x;
}
double mean = sum/data.length;
//find standard deviation
Double sd;
sd=0.0;
for(double x:data) {
sd+=Math.pow((x-mean),2);
}
sd=sd/data.length;
sd=Math.sqrt(sd);
return sd;
}