[R] Problem creation tensor
Peppe Ricci
peppepegasus at gmail.com
Tue Jul 17 12:31:38 CEST 2012
Hi guys,
I need some help to analyzing my data.
I start to describe my data: I have 21 matrices, every matrix on the
rows has users and on columns has items, in my case films.
Element of index (i, j) represent the rating expressed by user i about item j.
I have a matrix for each of professions.
An example of a this type of matrix is:
item 1 item 2 item 3 item4
id user 1 1 ? ? 5
id user 2 ? 3 3 ?
id user 3 2 ? 3 2
id user 4 ? ? ? 4
...
So user 1 don't like item 1 but he likes so much item 4, for item 2
and 3 he hasn't expressed a rating, etc.
I need to construct a tensor with n users, m items and 21 occupations.
After I have construct the tensor I want apply Parafac.
I read data from a CSV file and build each matrix for each occupation.
Didier Leibovici (author of PTAk package) suggested to me:
ok that's bit clearer you have 21 matrices ( 1 for each occupations)
of users rating their preferences (from 1 to 5 but without rating all
of them: missing values) of m items.
but I suppose the users are not the same across the 21 occupations
(one has only one occupation .... if you're talking about
working/living occupation)
so you can't create a tensor n users x m items x 21 occupations
but you can build the contingencies of preferences m items x 21
occupations x 5 ratings
One way to build your tensor m x 21 x 5 is:
M1 is the first occupation (users x m) ...
UserItem <-rbind(M1,M2, ...M21)
m=1682
for (j in 1:m){
UserItem[,j] =factor(UserItem[,j],levels=1:5)
}
occ=factor(c(rep(1,dim(M1)[1]),rep(2,dim(M2)[1]),
...,rep(21,dim(M21)[1])),levels=1:21)
Z <- array(rep(0,m*21*5),c(m,21,5),
list(paste("item",1:m,sep=""),paste("Occ",1:21,sep=""),c("pr1","pr2","pr3","pr4","pr5")))
for ( i in 1:m){
as.matrix(table(occ, UserItem[,2]))
Z[i,,]=table(occ, UserItem[,i])
}
Z.CAND <- CANPARA(Z,dim=7)
I have implemented this code but I have one error in correspondance of:
for ( i in 1:m){
Z[i,,]=table(occ,UserItem[,i])
}
and error is:
Error in
Z[i,,]=table(occ,UserItem[,i])
the number of elements to be replaced is not a multiple of the length
of substitution
Can anyone help me to understand this code and how I can resolve the error?
Thanks.
Best regards.
Giuseppe
More information about the R-help
mailing list