2012-03-02 55 views
1

请原谅我的初学者问题 - 我是R新手,在统计数据上相当不合理。通过响应频率降低交叉表大小

我有一个简单的应变表,它表示每个用户在一段时间内收集的一组网页的查询数量。总共有大约15,000个观测值。这适用于大约100个用户查看50组页面的表格。

由于50x100矩阵难以直观显示,我想提出一个按最大聚合排序的表的子集 - 无论是列(页组)还是行(用户),或者甚至是最大的行 - 列数。例如,我可能会选择前20位用户和前10位组,或者前99%的行数。

理想情况下,我最终得到的表格仍然代表了最具代表性的用户与页面组之间的主要交互。

这是一个合理的方法吗?我会失去一些大量的统计意义;而且,有没有办法比较前后的意义。

我必须承认,我仍然不知道如何根据两个因素对表格进行排序和子集,而不是逐行操纵。

+0

查看[stats.se](http://stats.stackexchange.com/faq)网站 - 您的问题可能更适合。如果你这么认为,请举出你的问题,并请主持人为你转移它。 – sarnold 2012-03-02 02:24:49

+0

(哦,等等,标记需要比目前更多的积分 - 只需在评论中回复'@ sarnold',如果你愿意的话,我会很高兴地为你效力。) – sarnold 2012-03-02 02:27:58

+0

看起来像一个完美的R - 可计算的问题。缺少的是产生示例问题的代码。 – 2012-03-02 03:02:51

回答

0
S <- trunc(10*runif(1000)) 
R <- trunc(10*runif(1000)) 
RStab <- table(R, S) 
str(RStab) 
# 'table' int [1:10, 1:10] 6 12 10 13 10 7 8 6 9 10 ... 
# - attr(*, "dimnames")=List of 2 
# ..$ R: chr [1:10] "0" "1" "2" "3" ... 
# ..$ S: chr [1:10] "0" "1" "2" "3" ... 
rowSums(RStab[ order(rowSums(RStab)) , order(colSums(RStab)) ]) 
# 8 0 1 3 2 5 9 4 6 7 
# 90 94 96 99 100 101 101 103 107 109 
colSums(RStab[ order(rowSums(RStab)) , order(colSums(RStab)) ]) 
    6 0 3 5 7 2 4 8 9 1 
80 91 94 96 98 100 106 109 112 114 

的行和列的5个最高边缘人:

RStab[ order(rowSums(RStab)) , order(colSums(RStab)) ][ 6:10, 6:10] 
#------------- 
    S 
R 2 4 8 9 1 
    5 14 10 12 10 12 
    9 6 8 9 10 13 
    4 10 10 8 8 18 
    6 9 12 12 17 8 
    7 14 10 14 12 9 

。听起来好像你可能是对统计问题有点沙基。你能否更全面地解释“失去大量意义”的含义?你在想什么样的统计测试?

+0

@sarnold - 感谢指向[link](stats.se)网站的指针 - 我能立即找到我想要做的一个很好的例子。无需交叉发帖,但感谢您的提议。 – ripwit 2012-03-03 00:30:09

+0

是的,我是shakey。我的大部分知识都来自大约40年前的社会心理学研究 - 而这恰恰是一名CS学生。非常感谢您的出色例子 - 它直接适用于我所需要的。 – ripwit 2012-03-03 00:33:20