2013-03-04 2 views
-5

Я пытаюсь найти более быстрый способ суммировать появление отдельных лиц в сеансах, чтобы рассчитать их уровень отношений. В принципе, я хотел бы подсчитать для каждых двух людей, сколько раз наблюдалось хотя бы одно из них. Я изучил ответы здесь, включая расплав и acast, но не нашел хорошего способа их использования. Это мой неэффективный код:R создать матрицу возникновения

presence=array(0,c(8,10)) # session by individual 
counter=array(0,c(10,10)) 
# put some data into the array: 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 0 1 0 0 0 0 0 0 0  0 
[2,] 0 0 1 1 1 1 0 0 0  0 
[3,] 0 0 0 0 0 0 1 0 0  0 
[4,] 0 0 0 0 0 0 0 1 0  0 
[5,] 0 0 0 0 0 0 0 1 0  0 
[6,] 0 0 0 0 0 0 0 0 1  0 
[7,] 0 0 0 0 0 0 0 0 1  0 
[8,] 0 0 1 0 1 1 0 0 0  1 


    for (a in 1:10){ 
    for (b in 1:10){ 
     for (c in 1:8) { 
     if ((presence[c,a]>0)|(presence[c,b]>0)) counter[a,b]=counter[a,b]+1 
     # calculate something using this counter for each two individuals a and b 
     } 
    } 
    } 

Благодарим за помощь. Amiyaal

+1

Я думаю, что вы должны объяснить ваш проблема немного больше, я понятия не имею, что здесь происходит. Как выглядят ваши исходные данные? И где он представлен в этом коде? Если вы хотите рассчитать совместное появление людей в событиях из необработанных данных, это, безусловно, возможно, я бы предложил посмотреть на некоторые из библиотек анализа социальных сетей igraph. – slammaster

+0

Ваш вопрос не имеет смысла, как указано. Вы используете заявление, «суммируйте количество людей в сессиях в течение многих лет», не определяя никаких условий, а код, который вы предоставили, - это мусор. – N8TRO

+0

в массиве присутствия хранятся отдельные лица, присутствующие в сеансе c в году i. Внутренняя петля подсчитывает количество раз, когда по крайней мере один из них (a или b) присутствовал в течение года (т. Е. Суммируя все сеансы). Надеюсь, теперь станет ясно. – user2133354

ответ

0

Хорошо, все еще не совсем понятно, но я ДУМАЮ, что присутствие теперь представляет собой матрицу смежности, где столбцы представляют пользователей, а строки представляют события, поэтому presence[i,j] указывает, что пользователь i посетил событие j.

Если я правильно интерпретирую его, то считается, что матрица совпадения, правильно? count[i,j] должно записывать количество событий, в которых пользователи i и j участвовали вместе?

Если вы смотрите в литературе по 2-режиме анализа социальной сети, а именно в аффилированности сети, есть прямой расчет для этого:

count = t(presence)%*%presence 

Теперь я хотел бы проверить, что с вашими собственными данными, чтобы сделать уверен, что это точно: просто проверите пару ячеек случайным образом и сравните их с присутствием.

Кроме того, как и в стороне, с этими типами строк матрицы традиционно используются пользователи, а события - столбцы.

EDIT: если вместо этого вы хотите, чтобы количество было числом событий. Поэтому было бы число пользователей событий я присутствовал + числа событий пользователя J участие - пересечение

x = t(presence)%*%presence 
numEvents = diag(x) 
counts = matrix(rep(numEvents,dim(x)[1]),nrow=dim(x)[1],byrow=TRUE)+matrix(rep(numEvents,dim(x)[1]),nrow=dim(x)[1],byrow=FALSE)-x 

Это не самое элегантное решение, но он должен работать

+0

Спасибо, но это не совсем то, что я ищу, поскольку он вычисляет CO-OCCURRENCE, в то время как я хочу рассчитать все случаи, когда AT LEAST один из них присутствовал. – user2133354

Смежные вопросы