Kappa Statistic极大/稀疏矩阵

时间:2015-11-01 13:39:21

标签: r

我有一个大的稀疏矩阵(垫子):

138493 x 17694 sparse Matrix of class "dgCMatrix", with 10000132 entries 

我想调查使用kappa统计数据的评级间协议,但是当我运行Fleiss时:

kappam.fleiss(mat)

我出现以下错误

Error in asMethod(object) : 
  Cholmod error 'problem too large' at file ../Core/cholmod_dense.c, line 105

这是因为我的矩阵太大了吗?

我可以使用其他任何方法来计算这么大的矩阵上IRR的kappa统计量吗?

1 个答案:

答案 0 :(得分:2)

我能提供的最佳答案是,由于矩阵中的极度稀疏性,实际上不可能。问题:对于138,493 * 17694 = 2,450,495,142单元矩阵,有10,000,132个条目,大多数(99.59%)缺失值。 irr包允许这些,但在这里你要求系统提出一些极端的要求,要求它比较电影不重叠的用户的评级。

irr包中的方法a)需要密集矩阵作为输入,而b)(至少在kripp.alpha()循环列中使得它们非常慢,这一问题更加复杂。

这是一个构建一个类似于你自己的矩阵的插图(但没有模式 - 实际上你的情况会更好,因为观众倾向于评价类似的电影集。)

请注意,我在这里使用了 Krippendorff的alpha ,因为它允许按顺序或间隔评级(如您的数据所示),并且通常可以正常处理丢失的数据。

require(Matrix)
require(irr)
seed <- 100
(sparseness <- 1 - 10000132 / (138493 * 17694))
## [1] 0.9959191
138493 / 17694 # multiple of movies to users
## [1] 7.827117
# nraters <- 17694
# nusers <- 138493
nmovies <- 100
nusers <- 783
raterMatrix <- 
    Matrix(sample(c(NA, seq(0, 5, by = .5)), nmovies * nusers, replace = TRUE,
                  prob = c(sparseness, rep((1-sparseness)/11, 11))),
           nrow = nmovies, ncol = nusers)
kripp.alpha(t(as.matrix(raterMatrix)), method = "interval")
## Krippendorff's alpha
##
## Subjects = 100 
##   Raters = 783 
##    alpha = -0.0237 

这适用于该大小矩阵,但是如果我将其增加100倍(每个维度上10倍),保持与报告的数据集中相同的比例,则失败,那么即使在30分钟后它也无法产生答案,所以我杀了过程

得出什么结论:您并不是在问这个数据的正确问题。它不是有多少用户同意的问题,但可能在查看集群和偏好集群方面存在于此数据中的哪种维度。您可能希望使用关联规则或某些降维方法,这些方法不会对数据集中的稀疏性产生影响。