2012-03-02 58 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