vcd package --- change layout of plot

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

vcd package --- change layout of plot

Prew, Paul
Hello,

I'm trying to use the vcd package to analyze survey data.  Expert judges
ranked possible features for product packaging.  Seven features were
listed, and 19 judges split between 2 cities ranked them.

The following code (1) works, but the side-by-side plots for Cities PX,
SF are shrunk too much.  Stacking PX on top of SF would make for a
better plot.  (I could switch the order of Feature and Rank dimensions,
and go with the default side-by-side, but would prefer not to).

(1)
cotabplot(~ Rank + Feature| Cities, data = Pack.dat, gp = shading_max,
rot_labels = c(90, 0, 0, 0),just_labels = c("left", "left",
"left", "right"),set_varnames = c(Feature = ""))

Reading the vcd help, I got lost trying to understand the
panel-generating parameters I should use.  My best guess was below (2),
but gave an error message.  Clearly, I don't know what the paneling is
asking for.  This is where I would like some advice, if anyone is
familiar with vcd.

(2)
####  Tried to change the layout of trellis plot from horizontal to
vertical
Pack.mos<-mosaic(~Feature + Rank, data = Pack.tab, gp = shading_max,
rot_labels = c(0, 0, 0, 0),just_labels = c("left", "left", "left",
"right"),set_varnames = c(Feature = ""))  
## attempt to create an object for panel argument in cotabplot function

pushViewport(viewport(layout = grid.layout(ncol = 1)))
pushViewport(viewport(layout.pos.row = 1))
## tell vcd to change the default layout, and what to put in the top
plot

cotabplot(~ Feature + Rank | Cities, data = Pack.dat, panel = Pack.mos,
Pack.dat[["PX"]], gp = shading_max, rot_labels = c(0, 0, 0, 0))
## create mosaic plot that's conditional on Cities;  first plot Cities =
PX
## panel argument is an attempt to modify an example in the vcd help
file

popViewport()
## create the graphic

Error:  Cannot pop the top-level viewport (grid and graphics output
mixed?)

# no point in gong on to code the plot for layout.pos.row = 2

> str(Pack.tab)
Error in `[.structable`(x, i, args[[2]]) : subscript out of bounds
> class(Pack.tab)
[1] "structable" "ftable"    
> dim(Pack.tab)
[1] 7 2 7

                      Cities PX SF
Rank Feature                      
1    Flexible                 2  0
     Integrate.Probes         1  2
     Large/heavy              1  0
     Lockout                  0  1
     Recyclable               3  5
     Rigid                    0  0
     Small/light              2  1
2    Flexible                 1  6
     Integrate.Probes         2  0
     Large/heavy              1  1
     Lockout                  1  0
     Recyclable               2  0
     Rigid                    1  0
     Small/light              2  2
3    Flexible                 1  1
     Integrate.Probes         3  0
     Large/heavy              1  1
     Lockout                  2  1
     Recyclable               1  3
     Rigid                    0  0
     Small/light              0  3
4    Flexible                 3  0
     Integrate.Probes         0  2
     Large/heavy              0  0
     Lockout                  2  2
     Recyclable               0  1
     Rigid                    1  2
     Small/light              3  2
5    Flexible                 1  1
     Integrate.Probes         1  1
     Large/heavy              0  3
     Lockout                  0  2
     Recyclable               2  0
     Rigid                    3  1
     Small/light              2  1
6    Flexible                 0  1
     Integrate.Probes         1  3
     Large/heavy              3  2
     Lockout                  3  1
     Recyclable               0  0
     Rigid                    2  2
     Small/light              0  0
7    Flexible                 1  0
     Integrate.Probes         1  1
     Large/heavy              3  2
     Lockout                  1  2
     Recyclable               1  0
     Rigid                    2  4
     Small/light              0  0



> sessionInfo()
R version 2.9.0 RC (2009-04-10 r48318)
i386-pc-mingw32
locale:
LC_COLLATE=English_United States.1252;LC_CTYPE=English_United
States.1252;LC_MONETARY=English_United
States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252

attached base packages:
[1] grid      tcltk     stats     graphics  grDevices utils     datasets

[8] methods   base    

other attached packages:
 [1] relimp_1.0-1       vcd_1.2-4          colorspace_1.0-0
MASS_7.2-46      
 [5] RSiteSearch_0.1-5  brew_1.0-3         lme4_0.999375-30
Matrix_0.999375-26
 [9] lattice_0.17-22    Rcmdr_1.4-9        car_1.2-13        

loaded via a namespace (and not attached):
[1] tools_2.9.0


If someone can give advice on stacking the two cities' plots, I would be
grateful.

Thanks, Paul
CONFIDENTIALITY NOTICE: =\ \ This e-mail communication a...{{dropped:12}}

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: vcd package --- change layout of plot

Achim Zeileis
On Thu, 21 May 2009, Prew, Paul wrote:

> Hello,
>
> I'm trying to use the vcd package to analyze survey data.  Expert judges
> ranked possible features for product packaging.  Seven features were
> listed, and 19 judges split between 2 cities ranked them.
>
> The following code (1) works, but the side-by-side plots for Cities PX,
> SF are shrunk too much.  Stacking PX on top of SF would make for a
> better plot.  (I could switch the order of Feature and Rank dimensions,
> and go with the default side-by-side, but would prefer not to).

Several comments:

   - Adding keep_aspect_ratio = TRUE does probably change what you call
     "shrunk too much". By default is aspect ratio is kept fixed for
     2-way displays.

   - I would switch the splitting order of Feature/Rank because you
     probably want the distribution of ranks for a given feature and
     not the other way round. In that case, you might find etting
     split_vertical = TRUE aesthetically more pleasing. But it's probably
     a matter of taste.

   - Setting gp = shading_max is not really the best choice: If you would
     want a conditional independence test based on the maximum of residuals
     you should use panel = cotab_coindep. See the JCGS paper in the
     references and the accompanying vignette("residual-shadings", package
     = "vcd") for more details. But note that the double maximum test
     is not the most powerful test against ordinal alternatives (as one
     might expect due to the ordered Rank variable).

hth,
Z

> (1)
> cotabplot(~ Rank + Feature| Cities, data = Pack.dat, gp = shading_max,
> rot_labels = c(90, 0, 0, 0),just_labels = c("left", "left",
> "left", "right"),set_varnames = c(Feature = ""))
>
> Reading the vcd help, I got lost trying to understand the
> panel-generating parameters I should use.  My best guess was below (2),
> but gave an error message.  Clearly, I don't know what the paneling is
> asking for.  This is where I would like some advice, if anyone is
> familiar with vcd.
>
> (2)
> ####  Tried to change the layout of trellis plot from horizontal to
> vertical
> Pack.mos<-mosaic(~Feature + Rank, data = Pack.tab, gp = shading_max,
> rot_labels = c(0, 0, 0, 0),just_labels = c("left", "left", "left",
> "right"),set_varnames = c(Feature = ""))
> ## attempt to create an object for panel argument in cotabplot function
>
> pushViewport(viewport(layout = grid.layout(ncol = 1)))
> pushViewport(viewport(layout.pos.row = 1))
> ## tell vcd to change the default layout, and what to put in the top
> plot
>
> cotabplot(~ Feature + Rank | Cities, data = Pack.dat, panel = Pack.mos,
> Pack.dat[["PX"]], gp = shading_max, rot_labels = c(0, 0, 0, 0))
> ## create mosaic plot that's conditional on Cities;  first plot Cities =
> PX
> ## panel argument is an attempt to modify an example in the vcd help
> file
>
> popViewport()
> ## create the graphic
>
> Error:  Cannot pop the top-level viewport (grid and graphics output
> mixed?)
>
> # no point in gong on to code the plot for layout.pos.row = 2
>
>> str(Pack.tab)
> Error in `[.structable`(x, i, args[[2]]) : subscript out of bounds
>> class(Pack.tab)
> [1] "structable" "ftable"
>> dim(Pack.tab)
> [1] 7 2 7
>
>                      Cities PX SF
> Rank Feature
> 1    Flexible                 2  0
>     Integrate.Probes         1  2
>     Large/heavy              1  0
>     Lockout                  0  1
>     Recyclable               3  5
>     Rigid                    0  0
>     Small/light              2  1
> 2    Flexible                 1  6
>     Integrate.Probes         2  0
>     Large/heavy              1  1
>     Lockout                  1  0
>     Recyclable               2  0
>     Rigid                    1  0
>     Small/light              2  2
> 3    Flexible                 1  1
>     Integrate.Probes         3  0
>     Large/heavy              1  1
>     Lockout                  2  1
>     Recyclable               1  3
>     Rigid                    0  0
>     Small/light              0  3
> 4    Flexible                 3  0
>     Integrate.Probes         0  2
>     Large/heavy              0  0
>     Lockout                  2  2
>     Recyclable               0  1
>     Rigid                    1  2
>     Small/light              3  2
> 5    Flexible                 1  1
>     Integrate.Probes         1  1
>     Large/heavy              0  3
>     Lockout                  0  2
>     Recyclable               2  0
>     Rigid                    3  1
>     Small/light              2  1
> 6    Flexible                 0  1
>     Integrate.Probes         1  3
>     Large/heavy              3  2
>     Lockout                  3  1
>     Recyclable               0  0
>     Rigid                    2  2
>     Small/light              0  0
> 7    Flexible                 1  0
>     Integrate.Probes         1  1
>     Large/heavy              3  2
>     Lockout                  1  2
>     Recyclable               1  0
>     Rigid                    2  4
>     Small/light              0  0
>
>
>
>> sessionInfo()
> R version 2.9.0 RC (2009-04-10 r48318)
> i386-pc-mingw32
> locale:
> LC_COLLATE=English_United States.1252;LC_CTYPE=English_United
> States.1252;LC_MONETARY=English_United
> States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252
>
> attached base packages:
> [1] grid      tcltk     stats     graphics  grDevices utils     datasets
>
> [8] methods   base
>
> other attached packages:
> [1] relimp_1.0-1       vcd_1.2-4          colorspace_1.0-0
> MASS_7.2-46
> [5] RSiteSearch_0.1-5  brew_1.0-3         lme4_0.999375-30
> Matrix_0.999375-26
> [9] lattice_0.17-22    Rcmdr_1.4-9        car_1.2-13
>
> loaded via a namespace (and not attached):
> [1] tools_2.9.0
>
>
> If someone can give advice on stacking the two cities' plots, I would be
> grateful.
>
> Thanks, Paul
> CONFIDENTIALITY NOTICE: =\ \ This e-mail communication a...{{dropped:12}}
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
>

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: vcd package --- change layout of plot

Prew, Paul
Dear Achim,  thank you very much for the suggestions, they work well.  Agreed that an ordinal logistic regression seems a more powerful choice of analysis method, and I'm using that also.

Thanks for providing the vcd package, it's proving quite helpful.
Regards, Paul

Paul Prew  |  Statistician
651-795-5942   |   fax 651-204-7504
Ecolab Research Center  | Mail Stop ESC-F4412-A
655 Lone Oak Drive  |  Eagan, MN 55121-1560


-----Original Message-----
From: Achim Zeileis [mailto:[hidden email]]
Sent: Friday, May 22, 2009 3:06 PM
To: Prew, Paul
Cc: [hidden email]
Subject: Re: [R] vcd package --- change layout of plot

On Thu, 21 May 2009, Prew, Paul wrote:

> Hello,
>
> I'm trying to use the vcd package to analyze survey data.  Expert judges
> ranked possible features for product packaging.  Seven features were
> listed, and 19 judges split between 2 cities ranked them.
>
> The following code (1) works, but the side-by-side plots for Cities PX,
> SF are shrunk too much.  Stacking PX on top of SF would make for a
> better plot.  (I could switch the order of Feature and Rank dimensions,
> and go with the default side-by-side, but would prefer not to).

Several comments:

   - Adding keep_aspect_ratio = TRUE does probably change what you call
     "shrunk too much". By default is aspect ratio is kept fixed for
     2-way displays.

   - I would switch the splitting order of Feature/Rank because you
     probably want the distribution of ranks for a given feature and
     not the other way round. In that case, you might find etting
     split_vertical = TRUE aesthetically more pleasing. But it's probably
     a matter of taste.

   - Setting gp = shading_max is not really the best choice: If you would
     want a conditional independence test based on the maximum of residuals
     you should use panel = cotab_coindep. See the JCGS paper in the
     references and the accompanying vignette("residual-shadings", package
     = "vcd") for more details. But note that the double maximum test
     is not the most powerful test against ordinal alternatives (as one
     might expect due to the ordered Rank variable).

hth,
Z

> (1)
> cotabplot(~ Rank + Feature| Cities, data = Pack.dat, gp = shading_max,
> rot_labels = c(90, 0, 0, 0),just_labels = c("left", "left",
> "left", "right"),set_varnames = c(Feature = ""))
>
> Reading the vcd help, I got lost trying to understand the
> panel-generating parameters I should use.  My best guess was below (2),
> but gave an error message.  Clearly, I don't know what the paneling is
> asking for.  This is where I would like some advice, if anyone is
> familiar with vcd.
>
> (2)
> ####  Tried to change the layout of trellis plot from horizontal to
> vertical
> Pack.mos<-mosaic(~Feature + Rank, data = Pack.tab, gp = shading_max,
> rot_labels = c(0, 0, 0, 0),just_labels = c("left", "left", "left",
> "right"),set_varnames = c(Feature = ""))
> ## attempt to create an object for panel argument in cotabplot function
>
> pushViewport(viewport(layout = grid.layout(ncol = 1)))
> pushViewport(viewport(layout.pos.row = 1))
> ## tell vcd to change the default layout, and what to put in the top
> plot
>
> cotabplot(~ Feature + Rank | Cities, data = Pack.dat, panel = Pack.mos,
> Pack.dat[["PX"]], gp = shading_max, rot_labels = c(0, 0, 0, 0))
> ## create mosaic plot that's conditional on Cities;  first plot Cities =
> PX
> ## panel argument is an attempt to modify an example in the vcd help
> file
>
> popViewport()
> ## create the graphic
>
> Error:  Cannot pop the top-level viewport (grid and graphics output
> mixed?)
>
> # no point in gong on to code the plot for layout.pos.row = 2
>
>> str(Pack.tab)
> Error in `[.structable`(x, i, args[[2]]) : subscript out of bounds
>> class(Pack.tab)
> [1] "structable" "ftable"
>> dim(Pack.tab)
> [1] 7 2 7
>
>                      Cities PX SF
> Rank Feature
> 1    Flexible                 2  0
>     Integrate.Probes         1  2
>     Large/heavy              1  0
>     Lockout                  0  1
>     Recyclable               3  5
>     Rigid                    0  0
>     Small/light              2  1
> 2    Flexible                 1  6
>     Integrate.Probes         2  0
>     Large/heavy              1  1
>     Lockout                  1  0
>     Recyclable               2  0
>     Rigid                    1  0
>     Small/light              2  2
> 3    Flexible                 1  1
>     Integrate.Probes         3  0
>     Large/heavy              1  1
>     Lockout                  2  1
>     Recyclable               1  3
>     Rigid                    0  0
>     Small/light              0  3
> 4    Flexible                 3  0
>     Integrate.Probes         0  2
>     Large/heavy              0  0
>     Lockout                  2  2
>     Recyclable               0  1
>     Rigid                    1  2
>     Small/light              3  2
> 5    Flexible                 1  1
>     Integrate.Probes         1  1
>     Large/heavy              0  3
>     Lockout                  0  2
>     Recyclable               2  0
>     Rigid                    3  1
>     Small/light              2  1
> 6    Flexible                 0  1
>     Integrate.Probes         1  3
>     Large/heavy              3  2
>     Lockout                  3  1
>     Recyclable               0  0
>     Rigid                    2  2
>     Small/light              0  0
> 7    Flexible                 1  0
>     Integrate.Probes         1  1
>     Large/heavy              3  2
>     Lockout                  1  2
>     Recyclable               1  0
>     Rigid                    2  4
>     Small/light              0  0
>
>
>
>> sessionInfo()
> R version 2.9.0 RC (2009-04-10 r48318)
> i386-pc-mingw32
> locale:
> LC_COLLATE=English_United States.1252;LC_CTYPE=English_United
> States.1252;LC_MONETARY=English_United
> States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252
>
> attached base packages:
> [1] grid      tcltk     stats     graphics  grDevices utils     datasets
>
> [8] methods   base
>
> other attached packages:
> [1] relimp_1.0-1       vcd_1.2-4          colorspace_1.0-0
> MASS_7.2-46
> [5] RSiteSearch_0.1-5  brew_1.0-3         lme4_0.999375-30
> Matrix_0.999375-26
> [9] lattice_0.17-22    Rcmdr_1.4-9        car_1.2-13
>
> loaded via a namespace (and not attached):
> [1] tools_2.9.0
>
>
> If someone can give advice on stacking the two cities' plots, I would be
> grateful.
>
> Thanks, Paul
> CONFIDENTIALITY NOTICE: =\ \ This e-mail communication a...{{dropped:12}}
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
>
CONFIDENTIALITY NOTICE: =\ \ This e-mail communication a...{{dropped:12}}

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.