The function constructs a matrix that indicates which two groups have been contrasted against each other in each row of the dataset.

contrmat(data, grp1, grp2, last, shorten=FALSE, minlen=2, append=TRUE)

Arguments

data

a data frame in wide format.

grp1

either the name (given as a character string) or the position (given as a single number) of the first group variable in the data frame.

grp2

either the name (given as a character string) or the position (given as a single number) of the second group variable in the data frame.

last

optional character string to specify which group will be placed in the last column of the matrix (must be one of the groups in the group variables). If not given, the most frequently occurring second group is placed last.

shorten

logical indicating whether the variable names corresponding to the group names should be shortened (default is FALSE).

minlen

integer indicating the minimum length of the shortened variable names (2 by default).

append

logical indicating whether the contrast matrix should be appended to the data frame specified via the data argument (default is TRUE). If append=FALSE, only the contrast matrix is returned.

Details

The function can be used to construct a matrix that indicates which two groups have been contrasted against each other in each row of the data frame (with 1 for the first group, -1 for the second group, and 0 otherwise).

The grp1 and grp2 arguments are used to specify the group variables in the dataset (either as character strings or as numbers indicating the column positions of these variables in the dataset). Optional argument last is used to specify which group will be placed in the last column of the matrix.

If shorten=TRUE, the variable names corresponding to the group names are shortened (to at least minlen; the actual length might be longer to ensure uniqueness of the variable names).

The examples below illustrate the use of this function.

Value

A matrix with as many variables as there are groups.

References

Viechtbauer, W. (2010). Conducting meta-analyses in R with the metafor package. Journal of Statistical Software, 36(3), 1--48. https://www.jstatsoft.org/v036/i03.

See also

Examples

### restructure to wide format dat <- dat.senn2013 dat <- dat[c(1,4,3,2,5,6)] dat <- to.wide(dat, study="study", grp="treatment", ref="placebo", grpvars=4:6) dat
#> study comment treatment.1 ni.1 mi.1 sdi.1 treatment.2 #> 1 Alex (1998) change metformin 291 0.13 1.428 sulfonylurea #> 2 Baksi (2004) change rosiglitazone 218 -1.20 1.112 placebo #> 3 Costa (1997) change acarbose 36 -1.10 0.360 placebo #> 4 Davidson (2007) change rosiglitazone 117 -1.20 1.097 placebo #> 5 De Fronzo (1995) change metformin 213 -1.70 1.459 placebo #> 6 Derosa (2004) raw pioglitazone 45 6.80 0.800 rosiglitazone #> 7 Garber (2008) change vildagliptin 132 -0.63 1.034 placebo #> 8 Gonzalez-Ortiz (2004) change metformin 34 -1.30 1.861 placebo #> 9 Hanefeld (2004) raw metformin 320 7.45 1.073 pioglitazone #> 10 Hermansen (2007) change sitagliptin 106 -0.30 0.940 placebo #> 11 Johnston (1994) change miglitol 68 -0.41 1.072 placebo #> 12 Johnston (1998a) change miglitol 91 -0.43 0.954 placebo #> 13 Johnston (1998b) change miglitol 49 -0.12 1.400 placebo #> 14 Kerenyi (2004) change rosiglitazone 160 -0.91 0.990 placebo #> 15 Kim (2007) change metformin 56 -1.10 1.139 rosiglitazone #> 16 Kipnes (2001) change pioglitazone 182 -1.20 1.369 placebo #> 17 Lewin (2007) change metformin 431 -0.74 1.106 placebo #> 18 Moulin (2006) change benfluorex 161 -0.82 1.028 placebo #> 19 Oyama (2008) change acarbose 41 -0.70 0.800 sulfonylurea #> 20 Rosenstock (2008) change rosiglitazone 59 -1.17 1.229 placebo #> 21 Stucci (1996) raw benfluorex 28 8.03 1.290 placebo #> 22 Vongthavaravat (2002) change rosiglitazone 164 -1.10 1.559 sulfonylurea #> 23 Willms (1999) change acarbose 31 -2.30 1.782 placebo #> 24 Willms (1999) change metformin 29 -2.50 0.862 placebo #> 25 Wolffenbuttel (1999) change rosiglitazone 183 -0.90 1.100 placebo #> 26 Yang (2003) change metformin 96 -0.95 1.500 rosiglitazone #> 27 Zhu (2003) change rosiglitazone 210 -1.90 1.470 placebo #> ni.2 mi.2 sdi.2 id comp design #> 1 300 0.50 1.450 1 me-su me-su #> 2 233 0.10 1.036 2 ro-pl ro-pl #> 3 29 -0.30 0.700 3 ac-pl ac-pl #> 4 116 0.14 1.093 4 ro-pl ro-pl #> 5 209 0.20 1.446 5 me-pl me-pl #> 6 42 6.70 0.900 6 pi-ro pi-ro #> 7 144 0.07 1.080 7 vi-pl vi-pl #> 8 37 -0.90 1.803 8 me-pl me-pl #> 9 319 7.61 1.072 9 me-pi me-pi #> 10 106 0.27 0.940 10 si-pl si-pl #> 11 63 0.33 1.032 11 mi-pl mi-pl #> 12 43 0.98 1.311 12 mi-pl mi-pl #> 13 34 0.56 1.166 13 mi-pl mi-pl #> 14 154 -0.14 0.920 14 ro-pl ro-pl #> 15 57 -1.10 1.341 15 me-ro me-ro #> 16 181 0.10 1.024 16 pi-pl pi-pl #> 17 144 0.08 1.004 17 me-pl me-pl #> 18 156 0.19 1.374 18 be-pl be-pl #> 19 43 -0.30 0.600 19 ac-su ac-su #> 20 57 -0.08 1.208 20 ro-pl ro-pl #> 21 30 8.26 1.350 21 be-pl be-pl #> 22 170 0.10 0.992 22 ro-su ro-su #> 23 29 -1.30 1.831 23 ac-pl ac-me-pl #> 24 29 -1.30 1.831 24 me-pl ac-me-pl #> 25 192 0.20 1.110 25 ro-pl ro-pl #> 26 102 -1.09 1.650 26 me-ro me-ro #> 27 105 -0.40 1.300 27 ro-pl ro-pl
### add contrast matrix dat <- contrmat(dat, grp1="treatment.1", grp2="treatment.2") dat
#> study comment treatment.1 ni.1 mi.1 sdi.1 treatment.2 #> 1 Alex (1998) change metformin 291 0.13 1.428 sulfonylurea #> 2 Baksi (2004) change rosiglitazone 218 -1.20 1.112 placebo #> 3 Costa (1997) change acarbose 36 -1.10 0.360 placebo #> 4 Davidson (2007) change rosiglitazone 117 -1.20 1.097 placebo #> 5 De Fronzo (1995) change metformin 213 -1.70 1.459 placebo #> 6 Derosa (2004) raw pioglitazone 45 6.80 0.800 rosiglitazone #> 7 Garber (2008) change vildagliptin 132 -0.63 1.034 placebo #> 8 Gonzalez-Ortiz (2004) change metformin 34 -1.30 1.861 placebo #> 9 Hanefeld (2004) raw metformin 320 7.45 1.073 pioglitazone #> 10 Hermansen (2007) change sitagliptin 106 -0.30 0.940 placebo #> 11 Johnston (1994) change miglitol 68 -0.41 1.072 placebo #> 12 Johnston (1998a) change miglitol 91 -0.43 0.954 placebo #> 13 Johnston (1998b) change miglitol 49 -0.12 1.400 placebo #> 14 Kerenyi (2004) change rosiglitazone 160 -0.91 0.990 placebo #> 15 Kim (2007) change metformin 56 -1.10 1.139 rosiglitazone #> 16 Kipnes (2001) change pioglitazone 182 -1.20 1.369 placebo #> 17 Lewin (2007) change metformin 431 -0.74 1.106 placebo #> 18 Moulin (2006) change benfluorex 161 -0.82 1.028 placebo #> 19 Oyama (2008) change acarbose 41 -0.70 0.800 sulfonylurea #> 20 Rosenstock (2008) change rosiglitazone 59 -1.17 1.229 placebo #> 21 Stucci (1996) raw benfluorex 28 8.03 1.290 placebo #> 22 Vongthavaravat (2002) change rosiglitazone 164 -1.10 1.559 sulfonylurea #> 23 Willms (1999) change acarbose 31 -2.30 1.782 placebo #> 24 Willms (1999) change metformin 29 -2.50 0.862 placebo #> 25 Wolffenbuttel (1999) change rosiglitazone 183 -0.90 1.100 placebo #> 26 Yang (2003) change metformin 96 -0.95 1.500 rosiglitazone #> 27 Zhu (2003) change rosiglitazone 210 -1.90 1.470 placebo #> ni.2 mi.2 sdi.2 id comp design acarbose benfluorex metformin miglitol #> 1 300 0.50 1.450 1 me-su me-su 0 0 1 0 #> 2 233 0.10 1.036 2 ro-pl ro-pl 0 0 0 0 #> 3 29 -0.30 0.700 3 ac-pl ac-pl 1 0 0 0 #> 4 116 0.14 1.093 4 ro-pl ro-pl 0 0 0 0 #> 5 209 0.20 1.446 5 me-pl me-pl 0 0 1 0 #> 6 42 6.70 0.900 6 pi-ro pi-ro 0 0 0 0 #> 7 144 0.07 1.080 7 vi-pl vi-pl 0 0 0 0 #> 8 37 -0.90 1.803 8 me-pl me-pl 0 0 1 0 #> 9 319 7.61 1.072 9 me-pi me-pi 0 0 1 0 #> 10 106 0.27 0.940 10 si-pl si-pl 0 0 0 0 #> 11 63 0.33 1.032 11 mi-pl mi-pl 0 0 0 1 #> 12 43 0.98 1.311 12 mi-pl mi-pl 0 0 0 1 #> 13 34 0.56 1.166 13 mi-pl mi-pl 0 0 0 1 #> 14 154 -0.14 0.920 14 ro-pl ro-pl 0 0 0 0 #> 15 57 -1.10 1.341 15 me-ro me-ro 0 0 1 0 #> 16 181 0.10 1.024 16 pi-pl pi-pl 0 0 0 0 #> 17 144 0.08 1.004 17 me-pl me-pl 0 0 1 0 #> 18 156 0.19 1.374 18 be-pl be-pl 0 1 0 0 #> 19 43 -0.30 0.600 19 ac-su ac-su 1 0 0 0 #> 20 57 -0.08 1.208 20 ro-pl ro-pl 0 0 0 0 #> 21 30 8.26 1.350 21 be-pl be-pl 0 1 0 0 #> 22 170 0.10 0.992 22 ro-su ro-su 0 0 0 0 #> 23 29 -1.30 1.831 23 ac-pl ac-me-pl 1 0 0 0 #> 24 29 -1.30 1.831 24 me-pl ac-me-pl 0 0 1 0 #> 25 192 0.20 1.110 25 ro-pl ro-pl 0 0 0 0 #> 26 102 -1.09 1.650 26 me-ro me-ro 0 0 1 0 #> 27 105 -0.40 1.300 27 ro-pl ro-pl 0 0 0 0 #> pioglitazone rosiglitazone sitagliptin sulfonylurea vildagliptin placebo #> 1 0 0 0 -1 0 0 #> 2 0 1 0 0 0 -1 #> 3 0 0 0 0 0 -1 #> 4 0 1 0 0 0 -1 #> 5 0 0 0 0 0 -1 #> 6 1 -1 0 0 0 0 #> 7 0 0 0 0 1 -1 #> 8 0 0 0 0 0 -1 #> 9 -1 0 0 0 0 0 #> 10 0 0 1 0 0 -1 #> 11 0 0 0 0 0 -1 #> 12 0 0 0 0 0 -1 #> 13 0 0 0 0 0 -1 #> 14 0 1 0 0 0 -1 #> 15 0 -1 0 0 0 0 #> 16 1 0 0 0 0 -1 #> 17 0 0 0 0 0 -1 #> 18 0 0 0 0 0 -1 #> 19 0 0 0 -1 0 0 #> 20 0 1 0 0 0 -1 #> 21 0 0 0 0 0 -1 #> 22 0 1 0 -1 0 0 #> 23 0 0 0 0 0 -1 #> 24 0 0 0 0 0 -1 #> 25 0 1 0 0 0 -1 #> 26 0 -1 0 0 0 0 #> 27 0 1 0 0 0 -1
### data in long format dat <- dat.hasselblad1998 dat
#> id study authors year trt xi ni #> 1 1 1 Reid et al. 1974 no_contact 75 731 #> 2 2 1 Reid et al. 1974 ind_counseling 363 714 #> 3 3 2 Cottraux et al. 1983 no_contact 9 140 #> 4 4 2 Cottraux et al. 1983 ind_counseling 23 140 #> 5 5 2 Cottraux et al. 1983 grp_counseling 10 138 #> 6 6 3 Slama et al. 1990 no_contact 2 106 #> 7 7 3 Slama et al. 1990 ind_counseling 9 205 #> 8 8 4 Jamrozik et al. 1984 no_contact 58 549 #> 9 9 4 Jamrozik et al. 1984 ind_counseling 237 1561 #> 10 10 5 Rabkin et al. 1984 no_contact 0 33 #> 11 11 5 Rabkin et al. 1984 ind_counseling 9 48 #> 12 12 6 Decker and Evans 1989 self_help 20 49 #> 13 13 6 Decker and Evans 1989 ind_counseling 16 43 #> 14 14 7 Richmond et al. 1986 no_contact 3 100 #> 15 15 7 Richmond et al. 1986 ind_counseling 31 98 #> 16 16 8 Leung 1991 no_contact 1 31 #> 17 17 8 Leung 1991 ind_counseling 26 95 #> 18 18 9 Mothersill et al. 1988 self_help 11 78 #> 19 19 9 Mothersill et al. 1988 ind_counseling 12 85 #> 20 20 9 Mothersill et al. 1988 grp_counseling 29 170 #> 21 21 10 Langford et al. 1983 no_contact 6 39 #> 22 22 10 Langford et al. 1983 ind_counseling 17 77 #> 23 23 11 Gritz et al. 1992 no_contact 79 702 #> 24 24 11 Gritz et al. 1992 self_help 77 694 #> 25 25 12 Campbell et al. 1986 no_contact 18 671 #> 26 26 12 Campbell et al. 1986 self_help 21 535 #> 27 27 13 Sanders et al. 1989 no_contact 64 642 #> 28 28 13 Sanders et al. 1989 ind_counseling 107 761 #> 29 29 14 Hilleman et al. 1993 ind_counseling 12 76 #> 30 30 14 Hilleman et al. 1993 grp_counseling 20 74 #> 31 31 15 Gillams et al. 1984 ind_counseling 9 55 #> 32 32 15 Gillams et al. 1984 grp_counseling 3 26 #> 33 33 16 Mogielnicki et al. 1986 self_help 7 66 #> 34 34 16 Mogielnicki et al. 1986 grp_counseling 32 127 #> 35 35 17 Page et al. 1986 no_contact 5 62 #> 36 36 17 Page et al. 1986 ind_counseling 8 90 #> 37 37 18 Vetter and Ford 1990 no_contact 20 234 #> 38 38 18 Vetter and Ford 1990 ind_counseling 34 237 #> 39 39 19 Williams and Hall 1988 no_contact 0 20 #> 40 40 19 Williams and Hall 1988 grp_counseling 9 20 #> 41 41 20 Pallonen et al. 1994 no_contact 8 116 #> 42 42 20 Pallonen et al. 1994 self_help 19 149 #> 43 43 21 Russell et al. 1983 no_contact 95 1107 #> 44 44 21 Russell et al. 1983 ind_counseling 143 1031 #> 45 45 22 Stewart and Rosser 1982 no_contact 15 187 #> 46 46 22 Stewart and Rosser 1982 ind_counseling 36 504 #> 47 47 23 Russell et al. 1979 no_contact 78 584 #> 48 48 23 Russell et al. 1979 ind_counseling 73 675 #> 49 49 24 Kendrick et al. 1995 no_contact 69 1177 #> 50 50 24 Kendrick et al. 1995 ind_counseling 54 888
### restructure to wide format dat <- to.wide(dat, study="study", grp="trt", ref="no_contact", grpvars=6:7) dat
#> id study authors year trt.1 xi.1 ni.1 trt.2 #> 1 1 1 Reid et al. 1974 ind_counseling 363 714 no_contact #> 2 2 2 Cottraux et al. 1983 grp_counseling 10 138 no_contact #> 3 3 2 Cottraux et al. 1983 ind_counseling 23 140 no_contact #> 4 4 3 Slama et al. 1990 ind_counseling 9 205 no_contact #> 5 5 4 Jamrozik et al. 1984 ind_counseling 237 1561 no_contact #> 6 6 5 Rabkin et al. 1984 ind_counseling 9 48 no_contact #> 7 7 6 Decker and Evans 1989 ind_counseling 16 43 self_help #> 8 8 7 Richmond et al. 1986 ind_counseling 31 98 no_contact #> 9 9 8 Leung 1991 ind_counseling 26 95 no_contact #> 10 10 9 Mothersill et al. 1988 grp_counseling 29 170 self_help #> 11 11 9 Mothersill et al. 1988 ind_counseling 12 85 self_help #> 12 12 10 Langford et al. 1983 ind_counseling 17 77 no_contact #> 13 13 11 Gritz et al. 1992 self_help 77 694 no_contact #> 14 14 12 Campbell et al. 1986 self_help 21 535 no_contact #> 15 15 13 Sanders et al. 1989 ind_counseling 107 761 no_contact #> 16 16 14 Hilleman et al. 1993 grp_counseling 20 74 ind_counseling #> 17 17 15 Gillams et al. 1984 grp_counseling 3 26 ind_counseling #> 18 18 16 Mogielnicki et al. 1986 grp_counseling 32 127 self_help #> 19 19 17 Page et al. 1986 ind_counseling 8 90 no_contact #> 20 20 18 Vetter and Ford 1990 ind_counseling 34 237 no_contact #> 21 21 19 Williams and Hall 1988 grp_counseling 9 20 no_contact #> 22 22 20 Pallonen et al. 1994 self_help 19 149 no_contact #> 23 23 21 Russell et al. 1983 ind_counseling 143 1031 no_contact #> 24 24 22 Stewart and Rosser 1982 ind_counseling 36 504 no_contact #> 25 25 23 Russell et al. 1979 ind_counseling 73 675 no_contact #> 26 26 24 Kendrick et al. 1995 ind_counseling 54 888 no_contact #> xi.2 ni.2 comp design #> 1 75 731 in-no in-no #> 2 9 140 gr-no gr-in-no #> 3 9 140 in-no gr-in-no #> 4 2 106 in-no in-no #> 5 58 549 in-no in-no #> 6 0 33 in-no in-no #> 7 20 49 in-se in-se #> 8 3 100 in-no in-no #> 9 1 31 in-no in-no #> 10 11 78 gr-se gr-in-se #> 11 11 78 in-se gr-in-se #> 12 6 39 in-no in-no #> 13 79 702 se-no se-no #> 14 18 671 se-no se-no #> 15 64 642 in-no in-no #> 16 12 76 gr-in gr-in #> 17 9 55 gr-in gr-in #> 18 7 66 gr-se gr-se #> 19 5 62 in-no in-no #> 20 20 234 in-no in-no #> 21 0 20 gr-no gr-no #> 22 8 116 se-no se-no #> 23 95 1107 in-no in-no #> 24 15 187 in-no in-no #> 25 78 584 in-no in-no #> 26 69 1177 in-no in-no
### add contrast matrix dat <- contrmat(dat, grp1="trt.1", grp2="trt.2", shorten=TRUE) dat
#> id study authors year trt.1 xi.1 ni.1 trt.2 #> 1 1 1 Reid et al. 1974 ind_counseling 363 714 no_contact #> 2 2 2 Cottraux et al. 1983 grp_counseling 10 138 no_contact #> 3 3 2 Cottraux et al. 1983 ind_counseling 23 140 no_contact #> 4 4 3 Slama et al. 1990 ind_counseling 9 205 no_contact #> 5 5 4 Jamrozik et al. 1984 ind_counseling 237 1561 no_contact #> 6 6 5 Rabkin et al. 1984 ind_counseling 9 48 no_contact #> 7 7 6 Decker and Evans 1989 ind_counseling 16 43 self_help #> 8 8 7 Richmond et al. 1986 ind_counseling 31 98 no_contact #> 9 9 8 Leung 1991 ind_counseling 26 95 no_contact #> 10 10 9 Mothersill et al. 1988 grp_counseling 29 170 self_help #> 11 11 9 Mothersill et al. 1988 ind_counseling 12 85 self_help #> 12 12 10 Langford et al. 1983 ind_counseling 17 77 no_contact #> 13 13 11 Gritz et al. 1992 self_help 77 694 no_contact #> 14 14 12 Campbell et al. 1986 self_help 21 535 no_contact #> 15 15 13 Sanders et al. 1989 ind_counseling 107 761 no_contact #> 16 16 14 Hilleman et al. 1993 grp_counseling 20 74 ind_counseling #> 17 17 15 Gillams et al. 1984 grp_counseling 3 26 ind_counseling #> 18 18 16 Mogielnicki et al. 1986 grp_counseling 32 127 self_help #> 19 19 17 Page et al. 1986 ind_counseling 8 90 no_contact #> 20 20 18 Vetter and Ford 1990 ind_counseling 34 237 no_contact #> 21 21 19 Williams and Hall 1988 grp_counseling 9 20 no_contact #> 22 22 20 Pallonen et al. 1994 self_help 19 149 no_contact #> 23 23 21 Russell et al. 1983 ind_counseling 143 1031 no_contact #> 24 24 22 Stewart and Rosser 1982 ind_counseling 36 504 no_contact #> 25 25 23 Russell et al. 1979 ind_counseling 73 675 no_contact #> 26 26 24 Kendrick et al. 1995 ind_counseling 54 888 no_contact #> xi.2 ni.2 comp design gr in se no #> 1 75 731 in-no in-no 0 1 0 -1 #> 2 9 140 gr-no gr-in-no 1 0 0 -1 #> 3 9 140 in-no gr-in-no 0 1 0 -1 #> 4 2 106 in-no in-no 0 1 0 -1 #> 5 58 549 in-no in-no 0 1 0 -1 #> 6 0 33 in-no in-no 0 1 0 -1 #> 7 20 49 in-se in-se 0 1 -1 0 #> 8 3 100 in-no in-no 0 1 0 -1 #> 9 1 31 in-no in-no 0 1 0 -1 #> 10 11 78 gr-se gr-in-se 1 0 -1 0 #> 11 11 78 in-se gr-in-se 0 1 -1 0 #> 12 6 39 in-no in-no 0 1 0 -1 #> 13 79 702 se-no se-no 0 0 1 -1 #> 14 18 671 se-no se-no 0 0 1 -1 #> 15 64 642 in-no in-no 0 1 0 -1 #> 16 12 76 gr-in gr-in 1 -1 0 0 #> 17 9 55 gr-in gr-in 1 -1 0 0 #> 18 7 66 gr-se gr-se 1 0 -1 0 #> 19 5 62 in-no in-no 0 1 0 -1 #> 20 20 234 in-no in-no 0 1 0 -1 #> 21 0 20 gr-no gr-no 1 0 0 -1 #> 22 8 116 se-no se-no 0 0 1 -1 #> 23 95 1107 in-no in-no 0 1 0 -1 #> 24 15 187 in-no in-no 0 1 0 -1 #> 25 78 584 in-no in-no 0 1 0 -1 #> 26 69 1177 in-no in-no 0 1 0 -1