根据预期值计算汇总变化(不是标准偏差)

时间:2015-06-03 07:52:36

标签: r variance

我正在尝试使用它来模拟网络中一组卖家的定价准确性。

我的数据集(定价)如下所示:

  transactionID sellerID expectedprice actualprice pricediff
1          1001      251           200         210        10
2          1002      101           200         300       100
3          1003      251           400         190      -210
4          1004      251           300         300         0
5          1005      101           250         250         0
6          1006      350           200         210        10
7          1007      401           400         400         0

注意:我不是在尝试进行标准偏差计算,因为我不是要计算均值的方差,而是根据预期值列的变化,这取决于交易。

我很乐意使用以下方法插入新列以从表中获得预期值的绝对差异:

pricing$diffabs <- abs(pricing$pricediff)

导致以下结果:

transactionID   sellerID    expectedprice   actualprice pricediff   diffabs
1001            251         200             210         10          10
1002            101         200             300         100         100
1003            251         400             190         -210            210
1004            251         300             300         0           0
1005            101         250             250         0           0
1006            350         200             210         10          10
1007            401         400             400         0           0

然后如何计算每个卖家的差异分数:

在“卖家ID”中分组的abs(pricing$diff)之和除以数据中“sellerID”的观察次数(次数)。

我期望的输出如下:

SellerID    Count   Sumofdiffabs    Variation
251         3       220             73.33333333
101         2       100             50
350         1       10              10
401         1       0               0

处理聚合级别R的差异的其他帮助主题似乎只处理标准偏差或均值的差异,例如:

Calculating grouped variance from a frequency table in R

当使用标准偏差之类的简单函数时,聚合函数对我来说效果很好,但在我必须弄清楚如何将计数插入函数的地方。什么让我失望,是因为我的方差是偏离平均值的偏差,而是来自我表中的列结果。

1 个答案:

答案 0 :(得分:0)

m =  matrix(c(1001,251,200,210,10,1002,101,200,300,100,1003,251,400,190,-210,1004,251,300,300,0,1005,101,250,250,0,1006,350,200,210,10,1007,401,400,400,0),ncol = 5,nrow=7,byrow=TRUE)
colnames(m) = c("transactionID","sellerID","expectedprice","actualprice","pricediff")
pricing = as.data.frame(m)
pricing$diffabs <- abs(pricing$pricediff)
pricing

  transactionID sellerID expectedprice actualprice pricediff diffabs
           1001      251           200         210        10      10
           1002      101           200         300       100     100
           1003      251           400         190      -210     210
           1004      251           300         300         0       0
           1005      101           250         250         0       0
           1006      350           200         210        10      10
           1007      401           400         400         0       0

所以结果如下:

library(data.table)
pricing = as.data.table(pricing)
f <- function(x) {list( Count=length(x))}
result <- pricing[ , c(f(diffabs),     Sumofdiffabs=sum(diffabs),Variation=mean(diffabs)),by=sellerID]
result
   sellerID Count Sumofdiffabs Variation
1:      251     3          220  73.33333
2:      101     2          100  50.00000
3:      350     1           10  10.00000
4:      401     1            0   0.00000