7
votes

Total de marge dans Xtabs

Si vous avez 2 variables de classification croisées, vous pouvez utiliser rowsums et colsums pour produire des totaux de marge sur une sortie xtabs . Mais comment peut-il être fait si vous avez 3 variables de classement (c.-à-d. Totaux de marge dans chaque sous-table)?

r

0 commentaires

5 Réponses :


2
votes

(si je comprends correctement), vous pouvez utiliser DDPLY:

ff <- data.frame(f1=c("a", "b", "b", "b", "b", "b", "b"), f2=c("p", "p", "p", "q", "q", "q", "q"), f3=c("x","x","x","x","y", "y", "y"), val=c(1:7)) 

ddply(ff, .(f1), numcolwise(sum))
ddply(ff, .(f2), numcolwise(sum))
ddply(ff, .(f3), numcolwise(sum))


0 commentaires

4
votes

L'approche générale consiste à utiliser la fonction appliquer code>, mais spécifiquement pour les totaux, la fonction margin.table code> peut être plus pratique:

#create 3 factors
a <- gl(2,4, length=20)
b <- gl(3,2, length=20)
d <- gl(4,2, length=20)
# table
tt <- xtabs(~a+b+d)

# marginal sums
margin.table(tt, 1)
apply(tt, 1, sum)  #same answer

#multi-way margins
margin.table(tt, 1:2)
apply(tt, 1:2, sum)  #same answer


0 commentaires

0
votes

Les commentaires ne fonctionnent pas ci-dessus. Merci pour les réponses, mais ils n'ont pas fait ce que j'attendais - des totaux individuels dans chaque sous-groupe.

Après un peu de creusage, j'ai constaté que la sortie XTABS dans ce cas est une matrice 3 dimensions et a écrit ce qui suit fonction pour obtenir le résultat souhaité (notez son incomplète, mais fonctionne pour les totaux de colonne jusqu'à présent): xxx


1 commentaires

Je n'ai clairement pas compris ce que vous vouliez, et je ne regarde toujours pas votre fonction. Peut-être que vous recherchez addmargins ?



4
votes

Si vous n'êtes pas lié à XTABS, le paquet de déducteur a de bonnes fonctions pour les tables de contingence:

> a <- gl(2,4, length=20)
> b <- gl(3,2, length=20)
> d <- rnorm(20)>0
> dat <- data.frame(a,b,d)
> tables<-contingency.tables(
+ row.vars=a,
+ col.vars=b,
+ stratum.var=d,data=dat)
> tables
================================================================================

               ==================================================               
                      ========== Table: a by b ==========                      

                       | -- Stratum = FALSE --
                       | b 
                     a |        1  |        2  |        3  | Row Total | 
-----------------------|-----------|-----------|-----------|-----------|
           1  Count    |        2  |        2  |        1  |        5  | 
              Row %    |   40.000% |   40.000% |   20.000% |   55.556% | 
              Column % |   40.000% |  100.000% |   50.000% |           | 
              Total %  |   22.222% |   22.222% |   11.111% |           | 
-----------------------|-----------|-----------|-----------|-----------|
           2  Count    |        3  |        0  |        1  |        4  | 
              Row %    |   75.000% |    0.000% |   25.000% |   44.444% | 
              Column % |   60.000% |    0.000% |   50.000% |           | 
              Total %  |   33.333% |    0.000% |   11.111% |           | 
-----------------------|-----------|-----------|-----------|-----------|
          Column Total |        5  |        2  |        2  |        9  | 
              Column % |   55.556% |   22.222% |   22.222% |           | 

                       | -- Stratum = TRUE --
                       | b 
                     a |        1  |        2  |        3  | Row Total | 
-----------------------|-----------|-----------|-----------|-----------|
           1  Count    |        2  |        2  |        3  |        7  | 
              Row %    |   28.571% |   28.571% |   42.857% |   63.636% | 
              Column % |   66.667% |   50.000% |   75.000% |           | 
              Total %  |   18.182% |   18.182% |   27.273% |           | 
-----------------------|-----------|-----------|-----------|-----------|
           2  Count    |        1  |        2  |        1  |        4  | 
              Row %    |   25.000% |   50.000% |   25.000% |   36.364% | 
              Column % |   33.333% |   50.000% |   25.000% |           | 
              Total %  |    9.091% |   18.182% |    9.091% |           | 
-----------------------|-----------|-----------|-----------|-----------|
          Column Total |        3  |        4  |        4  |       11  | 
              Column % |   27.273% |   36.364% |   36.364% |           | 


================================================================================


0 commentaires

11
votes

Aniko a mentionné cela dans un commentaire, mais il n'a jamais été fourni comme une réponse.

J'ai trouvé cela indépendamment puis remarqué qu'il était ici dans un commentaire, alors crédit à Aniko pour l'obtenir en premier.

addmargins est la réponse:

pour une table donnée, on peut spécifier lequel des facteurs de classification à développer par un ou plusieurs niveaux pour contenir des marges à calculer. Un peut Par exemple, forment des sommes et des moyens sur la première dimension et médiane sur la seconde. La table résultante aura alors deux niveaux supplémentaires pour la première dimension et un niveau supplémentaire pour la seconde. le La valeur par défaut est de somme sur toutes les marges de la table. Autres possibilités peut donner des résultats qui dépendent de l'ordre dans lequel les marges sont calculé. Ceci est marqué dans la sortie imprimée de la fonction.


0 commentaires