如果我有一个星级评分系统,用户可以在其中表达对某产品或某项商品的偏爱,那么我该如何统计选票是否被“高分”。意思是,即使对于给定的产品,平均值是5分之3,我如何仅使用数据(没有图形方法)如何检测到1-5拆分与共识3
如果我有一个星级评分系统,用户可以在其中表达对某产品或某项商品的偏爱,那么我该如何统计选票是否被“高分”。意思是,即使对于给定的产品,平均值是5分之3,我如何仅使用数据(没有图形方法)如何检测到1-5拆分与共识3
Answers:
一个人可以构造一个极化指数。一个人到底是如何定义的取决于更多极化的构成(即,在某些特殊情况下,到底是什么意思或多或少地极化了?):
例如,如果均值是“ 4”,则“ 3”和“ 5”之间的50-50拆分比25%“ 1”和75%“ 5”极化的多还是少?
无论如何,在缺乏对您的意思的那种特定定义的情况下,我将建议基于差异的度量:
给定特定的均值,将极化程度最高的拆分定义为最大化方差*的拆分。
*(NB,将说25%“1”和75%的“5”基本上更比50-50分裂的“3”和'5倍的偏振光;如果不匹配你的直觉,不使用方差)
因此,该极化指数是所观察到的方差中最大可能方差(具有所观察到的均值)的比例。
称平均等级()。米= ˉ X
当方差为且为,发生最大方差。这具有的方差 。 51-p1(米-1)(5-米)⋅Ñ
因此,只需将样本方差除以;这给出了(完全一致)和(完全极化)之间的数字。 01
对于许多平均评分为4的情况,将得出以下结果:
您可能宁愿不相对于具有相同均值的最大可能方差来计算它们,而是相对于任何均值评级最大可能方差的百分比来计算。这将涉及除以,然后再次产生0(完全一致)和(以50-50的比率极化)的值。这将产生与上图相同的相对论,但所有值将为3/4的大(即从左到右,从上到下分别为0、16.5%,25%,25%,50 %和75%)。 1
两者中的任何一个都是完全有效的选择-构造该索引的其他任何替代方式也是如此。
m = 1
你得到1 - 1 = 0
和 0 / 0
。您如何纠正呢?
“没有图形方法”是一个很大的障碍,但是...这里有一些奇怪的想法。两者都将评级视为连续的,这在概念上是有缺陷的,而且可能不是唯一的。
使用这样的数据帧:拟合模型使用负二项式回归。所述系数应该是接近零,如果收视率均匀分布,正如果有比例多个中间范围的值(参见二项式分布),或负像与所述一个以上,极化分布的量,系数是-11.8。
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')
所述术语确定回归线的(在这种情况下凹面)的曲率。由于我已经通过使用图形作弊,因此我将其与Poisson回归(而不是负二项式)进行拟合,因为比起正确的方法编写代码更容易。
编辑:刚刚在侧边栏上看到了这个问题的公告: 当我单击时,我在“热网络问题”链接中看到了它本身,有时会出现这种情况,
因此我认为应该以更普遍有用的方式重新审视这一点。我决定尝试在“ 亚马逊山地三只狼月亮”短袖T恤的亚马逊客户评论中尝试我的方法:
顺便说一句,@ Duncan的 ...
并且,@Glen_b的极化指数= .33 ...只是说。x=rep(5:1,c(2273,198,89,54,208))
var(x)/(4*length(x)/(length(x)-1))
我怀疑我能否在已经给出的聪明答案中添加一些有价值的东西。特别是,@ 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
如您所见,这三种统计数据在“极化”方面的度量可能非常不同(如果我要度量“分歧”而不是双极性对抗,则我可能会选择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
}
在我的头顶上,我想不出任何不可行的情况。使用上面的示例:亚马逊客户对“山间三只狼月亮”短袖T恤的评价:
在这种情况下:
这将通过测试,并被视为分歧意见。
我不知道这是什么编程语言,但是这是一个可以为您提供标准差的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;
}