我有一个大的sparseMatrix (垫子):
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统计量?
发布于 2015-11-02 01:46:45
我能提供的最好的答案是,由于矩阵中的极端稀疏性,这是不可能的。问题:对于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分钟后它也无法产生答案,因此我终止了该过程。
结论:你并没有真正问对这个数据的问题。这不是有多少用户同意的问题,而是这些数据在观看集群和偏好集群方面存在什么样的维度。您可能希望使用关联规则或一些降维方法,这些方法不会因为数据集中的稀疏性而犹豫不决。
https://stackoverflow.com/questions/33462739
复制相似问题