ユーザーが製品またはアイテムに対する好みを表現できる星評価システムがある場合、投票が非常に「分割」されているかどうかを統計的に検出するにはどうすればよいですか。つまり、特定の製品の平均が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スプリットよりも偏;それはあなたの直感と一致しない場合、分散を使用しないでください)
したがって、この偏光指数は、観測された分散における可能な最大の分散(観測された平均との)の割合です。
平均評価コール()。
最大分散は、比率p = m − 1のときに発生しますは、はです。これは、の分散有する 。
そう単ににより標本分散及び分割を取る ; これにより、0(完全に一致)から1(完全に極性化)までの数値が得られます。
平均評価が4である多くの場合、これは次のようになります。
代わりに好むかもしれない同じ平均の最大の可能性の分散に比べ、代わりに最大の可能な分散の割合としてそれらを計算するために、任意の平均評価について。つまりによって代わり分割含むであろうであり、再び0(完全一致)から(50-50の比率で極値で分極)の間の値を生成します。これにより、上の図と同じ相対性が得られますが、すべての値は3/4になります(つまり、左から右、上から下に0、16.5%、25%、25%、50になります) %および75%)。
この2つはどちらも完全に有効な選択です-そのようなインデックスを構築する他の多くの代替方法と同様です。
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のAmazonカスタマーレビューで私の方法を試すことにしました:
x=rep(5:1,c(2273,198,89,54,208))
var(x)/(4*length(x)/(length(x)-1))
I doubt that I can add something valuable to the clever answers already given. In particular, to @Glen_b's fine idea to assess how the variance observed is relatively close to the maximal variance possible under the observed mean. My own blunt and straight from the shoulder proposal is, instead, about some robust measure of dispersion based not on deviations from some centre but directly on distances between data points.
Compute pairwise distances (absolute differences) between all the data points. Drop out ゼロ距離。距離の分布の中心傾向を計算します(選択はあなた次第です;たとえば、平均、中央値、またはホッジスレーマン中心)。
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を選択します)。選択はあなた次第です。1つの概念:平方距離を計算すると、その平均はデータの通常の分散に直接関連します(したがって、分散を計算する@Duncanの提案に到達します)。距離の計算は、大きくても難しくありません here because the rating scale is descrete and with relatively few grades, so frequency-weighting algorithm to compute distances offers itself naturally.
How about, if the 3 star rating is smaller than the average of the 5 and 4, and also smaller than the average of the 1 and 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
}
Off the top of my head I can't think of any situation in which that wouldn't work. Using the example above: Amazon customer reviews for The Mountain Three Wolf Moon Short Sleeve Tee:
In this case:
This would pass the test and be considered divided opinion.
I think what you are looking for is standard deviation:
I don't know what programming language this is, but here's a java method that will give you standard deviation:
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;
}